Consul+Nginx+Upsync+Linux+Keepalived+Lvs的動態負載均衡
註:
Nginx版本必須大於等於1.9,linux我使用的是7.0版本,記得關閉防火墻
開始正文:
這裏只提一下兩個比較會出錯的配置,consul,upsync,PCRE庫,SSL庫,ZLIB庫的配置網上很多不一一詳解(我是在/usr/local中配置的)
Nginx的配置:
cd /usr/local/
wget http://nginx.org/download/nginx-1.9.10.tar.gz
tar -zxvf nginx-1.9.10.tar.gz
groupadd nginx
useradd -g nginx -s /sbin/nologin nginx
mkdir -p /var/tmp/nginx/client/
mkdir -p /usr/local/nginx
cd nginx-1.9.10
./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,然後重新執行以上代碼
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的默認安裝路徑(默認路徑:/usr/local),安裝完成之後,需要做一些修改工作:
首先創建文件夾,將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/,到此安裝完畢。
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.128是我的虛擬機的ip地址,打碼的是我的ip地址,但後面必須跟兩個tomcat的端口號。
至此,結束。有錯地方希望各位指正。
Consul+Nginx+Upsync+Linux+Keepalived+Lvs的動態負載均衡