註: Nginx版本必須大於等於1.9,linux我使用的是7.0版本,記得關閉防火牆 開始正文: 這裡只提一下兩個比較會出錯的配置,consul,upsync,PCRE庫,SSL庫,ZLIB庫的配置網上很多不一一詳解(我是在/usr/local中配置的) Nginx的配置: cd /usr/loc ...
註:
linux我使用的是7.0版本,Nginx版本是1.9.9,記得關閉防火牆
開始正文(我是在/usr/local中配置的):
安裝PCRE庫:
1.cd /usr/local/
2.wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.gz
3.tar -zxvf pcre-8.33.tar.gz
4cd pcre-8.33
5. ./configure
6.make && make install
如果報錯:
在 linux 中執行 wget 命令提示 -bash: wget: command not found
解決辦法 yum -y install wget
安裝SSL庫:
1.cd /usr/local/
2.wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz
3.tar -zxvf openssl-1.0.1j.tar.gz
4cd openssl-1.0.1j
5. ./config
6.make && make install
安裝zlib庫:
1.cd /usr/local/
2.wget http://zlib.net/zlib-1.2.11.tar.gz
3.tar -zxvf zlib-1.2.11.tar.gz
4.cd zlib-1.2.11
5. ./configure
6.make && make install
安裝Nginx:
1.cd /usr/local/
2.wget http://nginx.org/download/nginx-1.9.9.tar.gz
3.tar -zxvf nginx-1.9.9.tar.gz
4.groupadd nginx
5.useradd -g nginx -s /sbin/nologin nginx
6.mkdir -p /var/tmp/nginx/client/
7.mkdir -p /usr/local/nginx
8.cd nginx-1.9.9
9. ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre --add-module=../nginx-upsync-module-master
此時如果報錯SSL modules require the OpenSSL library
解決辦法
yum -y install openssl openssl-devel,然後重新執行以上代碼
10.make && make install
如下圖已經啟動完成
安裝Consul:
1.cd /usr/local/
2.wget https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip
3.unzip consul_0.7.5_linux_amd64.zip
如果解壓出現該錯誤
-bash: unzip: 未找到命令
解決辦法
yum -y install unzip
執行./consul出現如下內容說明已安裝成功
安裝nginx-upsync-module:
1.cd /usr/local/
2.wget https://github.com/weibocom/nginx-upsync-module/archive/master.zip
unzip master.zip
如果解壓出現該錯誤
-bash: unzip: 未找到命令
解決辦法
yum -y install unzip
安裝Keepalived:
1.下載keepalived
wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz
2.解壓安裝:
tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/
3.下載插件openssl
yum install -y openssl openssl-devel(需要安裝一個軟體包)
4.開始編譯keepalived
cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived
5. make && make install
執行./configure --prefix=/usr/local/keepalived時報錯:configure: error: Popt libraries is required
出現此錯誤的原因:
未安裝popt的開發包
解決方法:
yum install popt-devel
安裝好popt的開發包。重新執行以上步驟即可。
keepalived安裝成Linux系統服務:
將keepalived安裝成Linux系統服務,因為沒有使用keepalived的預設安裝路徑,安裝完成之後,需要做一些修改工作:
首先創建文件夾,將keepalived配置文件進行複製:
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
然後複製keepalived腳本文件:
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
安裝到這一步可能會報錯文件已經存在,所以執行下麵代碼:
cd /usr/sbin/
rm -f keepalived
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
可以設置開機啟動:chkconfig keepalived on,最後再創建一個存放備份的文件夾,mkdir /usr/local/nginx/conf/servers/,到此安裝完畢。
執行命令:
service keepalived start
service keepalived stop
如下圖,說明安裝成功
local目錄下的內容:
Nginx.config配置文件:
截取關鍵兩部分:
upstream test {
#這個不用管,固定的
server 127.0.0.1:11111;
#連接ConculServer,動態獲取upstream配置負載均衡信息
upsync 192.168.44.128:8500/v1/kv/upstreams/test upsync_timeout=6m
upsync_interval=500ms upsync_type=consul strong_dependency=off;
#動態獲取ConculServer相關負載均衡信息持久化到硬碟
upsync_dump_path /usr/local/nginx/conf/servers/servers_test.conf;
}
server {
listen 80;
server_name localhost;
location = / {
proxy_pass http://test;
index index.html index.htm;
proxy_connect_timeout 1;
proxy_send_timeout 1;
proxy_read_timeout 1;
}
}
Keepalived.config配置文件:
! Configuration File for keepalived
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" #運行腳本
interval 2 #檢測時間間隔
weight -20 #如果條件成立的話,則權重 -20
}
# 定義虛擬路由,AA_1 為虛擬路由的標示符,自己定義名稱
vrrp_instance AA_1 {
###MASTER 主的意思 BACKUP 從
state MASTER #來決定主從
interface ens33 # 綁定虛擬 IP 的網路介面,根據自己的機器填寫
virtual_router_id 111 # 虛擬路由的 ID 號, 有主備連個nginx時,兩個節點設置必須一樣(自己定義的)
mcast_src_ip 192.168.44.128 #填寫虛擬機ip
priority 100 # 節點優先順序,主要比從節點優先順序高
nopreempt # 優先順序高的設置 nopreempt 解決異常恢復後再次搶占的問題
advert_int 1 # 組播信息發送間隔,兩個節點設置必須一樣,預設 1s
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx #執行 Nginx 監控的服務
}
### 虛擬IP地址配置規範 前三個一致,最後一個不一樣
virtual_ipaddress {
192.168.44.110 # 虛擬ip
}
}
配置完畢後在虛擬機中查看ip地址,有如下兩個說明配置成功
最後部署腳本:
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
授權腳本:
chmod 777 nginx_check.sh
配置完畢,開始測試
啟動keepalived:service keepalived start
啟動consul(local目錄下啟動):./consul agent -dev -ui -node=consul-dev -client=(虛擬機ip地址)
ConculWeb的ip地址(要和虛擬機的ip地址相同):http://192.168.44.128:8500
Postman中的URL(必須用put,Postman的使用不寫了,發送下麵鏈接便可以在consulweb中的key/value中查看到):
我開了兩個tomcat,一個埠號為8081,另一個為8082
http://192.168.44.128:8500/v1/kv/upstreams/test/......:8081
http://192.168.44.128:8500/v1/kv/upstreams/test/......:8082
安裝好keepalived後我只要啟動Lvs的vip虛擬ip地址便可以啟動nginx
註:URL中的“test”是和配置文件中的一致的,192.168.44.110是我設置的虛擬ip地址,192.168.44.128是我的虛擬機的ip地址,打碼的是我的ip地址,但後面必須跟兩個tomcat的埠號。
通過開啟keepalived也可以開啟nginx,所以不需要手動開啟nginx了