nginx一般直接在配置文件里配置upstream即可實(shí)現(xiàn)負(fù)載均衡,但有些特定的環(huán)境下此種方式就顯得有些局限性。比如后臺動態(tài)調(diào)整節(jié)點(diǎn)的時候;調(diào)整節(jié)點(diǎn)后不想修改配置文件重啟nginx。
可以將配置文件從nginx本地遷移到其他第三方服務(wù)上如etcd、consul上,然后通過nginx-upsync-module模塊實(shí)時同步到配置文件中,實(shí)現(xiàn)上下線節(jié)點(diǎn)動態(tài)同步到upstream配置中,再結(jié)合ngx_healthcheck_module實(shí)現(xiàn)后端健康檢測。
可以將配置文件從nginx本地遷移到其他第三方服務(wù)上如etcd、consul上,然后時候拉取配置到本地。本文采用nginx-upsync-module,主要支持consul、etcd,本文以etcd為例。
etcd介紹
etcd是使用Go語言開發(fā)的一個開源的、高可用的分布式key-value存儲系統(tǒng),可以用于配置共享和服務(wù)的注冊和發(fā)現(xiàn)。在這些用于存放nginx中關(guān)于upstream的配置信息。
etcd使用的2個默認(rèn)端口號:2379和2380 2379:用于客戶端通信 2380:用于與集群中的Peer通信
1.安裝etcd(單機(jī)版)
2.啟動
3.生成腳本
4.nginx安裝
安裝nginx,同時安裝七層后端檢測模塊為例
5.配置說明
語法參數(shù)
server 127.0.0.1:11111;本機(jī)upsync工作虛擬端口
127.0.0.1:2379/v2/keys/upstreams/test, etcd服務(wù)器同步路徑
upsync_interval=6m;每隔一段時間從consul/etcd中拉出服務(wù)器
upsync_timeout=500ms,從consul/etcd請求中提取服務(wù)器超時。
upsync_type=etcd,從拉取服務(wù)器類型:consul,etcd。
strong_dependency=off,每次在nginx啟動或重新加載時,nginx是否從consul/etcd中拉出配置,on,拉取
off,不拉取配置
upsync_dump_path /usr/local/nginx/conf/upstream.conf, 同步存儲配置文件路徑
include /usr/local/nginx/conf/upstream.conf, 加載配置文件路徑
最終實(shí)際配置
6.啟動服務(wù)
7.后端服務(wù)添加配置
后端web服務(wù)上線后,需要向etcd中添加注冊信息,添加成功以后,nginx反代自動從etcd中拉取配置,實(shí)現(xiàn)后端服務(wù)上線自動添加至配置中。
后端web服務(wù)新上線
增加服務(wù)器節(jié)點(diǎn)語法
后端web服務(wù)新下線
刪除服務(wù)節(jié)點(diǎn)
調(diào)整服務(wù)參數(shù)
檢測
查看nginx中的配置文件