nginx基於nginx-upsync-module實現動態負載均衡
nginx基於nginx-upsync-module實現動態負載均衡:
nginx-upsync-module 是微博開源的一個基於 Nginx 實現動態配置的模組,通過拉取 Consul 或 etcd (及其它)的上游資料,實現無需重新載入 Nginx ,動態修改後端伺服器屬性(weight,max_fails,down …)。
修改配置檔案並重新啟動 Nginx 可能並不總是很方便。 例如,當遇到大流量和高負載,重啟 Nginx 並在此時重新載入配置會進一步增加系統負載,並可能暫時降低效能。使用 nginx-upsync-module 模組則可以在不影響效能的情況下,更加平滑的擴充套件和收縮。
下載:
wget https://github.com/weibocom/nginx-upsync-module/archive/v2.1.0.tar.gz
編譯nginx時候增加
–add-module=/root/nginx-upsync-module-2.1.0
nginx配置:
http {
upstream test {
upsync 127.0.0.1:8500/v1/kv/upstreams/test/ upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;
upsync_dump_path / usr/local/nginx/conf/servers/servers_test.conf;
include /usr/local/nginx/conf/servers/servers_test.conf;
}
upstream bar {
server 127.0.0.1:8090 weight=1 fail_timeout=10 max_fails=3;
}
server {
listen 8080;
location = /proxy_test {
proxy_pass http://test;
}
location = /bar {
proxy_pass http://bar;
}
location = /upstream_show {
upstream_show;
}
}
}
upsync模組會去consul拉取最新的upstream資訊並存到本地的檔案中
upsync_timeout 配置從consul拉取上游伺服器的超時時間
upsync_interval 配置從consul拉取上游伺服器的間隔時間
upsync_type 指定使用配置伺服器的型別,當前是consul
strong_dependency 啟動時是否強制依賴配置伺服器,如果配置為on,則拉取失敗,nginx同樣會啟用失敗
upsync_dump_path 指定從consul拉取的上游伺服器後持久化到的位置,這樣即使
Consul伺服器出問題了,本地同樣會有備份
格式:
curl -X PUT -d '{"weight":1, "max_fails":2, "fail_timeout":10}' http://$consul_ip:$port/v1/kv/$dir1/$upstream_name/$backend_ip:$backend_port
新增節點(節點上線):
curl -X PUT -d '{"weight":1,"max_fails":2,"fail_timeout":10}' http://127.0.0.1:8700/v1/kv/upstreams/test/127.0.0.1:9500
dir1和upstream_name要和nginx配置的upsync 一致
最後的backend_ip和backend_port能解析成upstream的ip資訊
刪除節點(節點下線):
curl -X PUT -d '{"weight":1,"max_fails":2,"fail_timeout":10,"down":1}' http://127.0.0.1:8700/v1/kv/upstreams/test/127.0.0.1:9500
或者(刪除方式二)
curl -X DELETE http://127.0.0.1:8700/v1/kv/upstreams/test/127.0.0.1:9500
upstream_show用來顯示目前nginx路由情況