Nginx+Consul+upsync 實現動態負載均衡
1.原理圖
2.原理
2.1 consulServer專門存放負載均衡註冊配置信息。
2.2 Ngninx間隔讀取ConsulServer的配置信息,獲取最新配置。(通過upsync)
3. 步驟
3.1 搭建Consul
(1)下載
wget https://releases.hashicorp.com/consul/0.7.1/consul_0.7.1_linux_amd64.zip
(2)解壓
unzip consul_0.7.1_linux_amd64.zip
(3) 安裝
./consul
(4) 啓動
./consul agent -dev -ui -node=consul-dev -client=192.168.50.128
注:192.168.50.128 虛擬機IP
(5) 點擊查看是否正常啓動
http://192.168.50.128:8500
(6)使用postman註冊http服務
http://192.168.50.128:8500/v1/catalog/register
注:10.2.100.23 運行服務的IP(本機windowsIP)
{
"Datacenter": "dc1",
"Node":"tomcat",
"Address":"10.2.100.23",
"Service":
{
"Id" :"10.2.100.23:8081",
"Service": "itmayiedu",
"tags": ["dev"],
"Port": 8081
}
}
Datacenter指定數據中心,
Address指定服務IP,
Service.Id指定服務唯一標識,
Service.Service指定服務分組,
Service.tags指定服務標籤(如測試環境、預發環境等),
Service.Port指定服務端口。
返回true,就是成功。
(7) 驗證添加結果
3.2 安裝Nginx
注意:Nginx版本必須1.9以上
3.2.1 下載Nginx
wget http://nginx.org/download/nginx-1.9.10.tar.gz
3.2.2 解壓
tar -zxvf nginx-1.9.10.tar.gz
3.2.3 預先創建目錄
groupadd nginx
useradd -g nginx -s /sbin/nologin nginx
mkdir -p /var/tmp/nginx/client/
mkdir -p /usr/local/nginx
mkdir -p /usr/local/nginx
3.2.4 編譯
#cd nginx-1.9.0
# ./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
#make && make install
報錯:
解決:
yum -y install openssl openssl-devel
3.3 Upstream 動態配置
upstream backServer{
server 127.0.0.1:11111;
upsync 192.168.50.128:8500/v1/kv/upstreams/itmayiedu upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;
upsync_dump_path /usr/local/nginx/conf/servers/servers_test.conf;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://backServer;
index index.html index.htm;
}
}
upsync指令指定從consul哪個路徑拉取上游服務器配置;
upsync_timeout配置從consul拉取上游服務器配置的超時時間;
upsync_interval配置從consul拉取上游服務器配置的間隔時間;
upsync_type指定使用consul配置服務器;
strong_dependency配置nginx在啓動時是否強制依賴配置服務器,
如果配置爲on,則拉取配置失敗時nginx啓動同樣失敗。
upsync_dump_path指定從consul拉取的上游服務器後持久化到的位置,
這樣即使consul服務器出問題了,本地還有一個備份。
注意:替換 consul 註冊中心地址
3.3 整合Nginx與consul
*(1) 創建upsync_dump_path
mkdir /usr/local/nginx/conf/servers/
upsync_dump_path指定從consul拉取的上游服務器後持久化到的位置,
這樣即使consul服務器出問題了,本地還有一個備份。
(2)啓動Nginx
/usr/local/nginx/sbin/nginx
(3) 啓動consul
./consul agent -dev -ui -node=consul-dev -client=192.168.50.128
(4) 添加Nginx upstream服務
使用postman方式發送put請求
http://192.168.50.128:8500/v1/kv/upstreams/itmayiedu/10.2.100.23:8082
http://192.168.50.128:8500/v1/kv/upstreams/itmayiedu/10.2.100.23:8081
http://192.168.50.128:8500/v1/kv/upstreams/itmayiedu/10.2.100.23:8080
負載均衡信息參數
{"weight":1, "max_fails":2, "fail_timeout":10, "down":0}
在Consulweb上展示頁面
Nginx讀取key value 值 ,實例化本地
Nginx讀取key value 值 ,實例化本地文件, 就是通過這個key-value值去映射的service服務,(實際上是一個服務對應一個key-value)
效果: