1. 程式人生 > >Consul+Nginx+Upsync+Linux+Keepalived+Lvs的動態負載均衡

Consul+Nginx+Upsync+Linux+Keepalived+Lvs的動態負載均衡

node 查看ip 存在 pop tar -c onf www The

註:

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的動態負載均衡