1. 程式人生 > 其它 >nginx基於nginx-upsync-module實現動態負載均衡

nginx基於nginx-upsync-module實現動態負載均衡

技術標籤:架構之路nginx

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路由情況

在這裡插入圖片描述