nginx很強大,第三方模塊也很多,淘寶在nginx上很活躍,特別是章亦春,他參與的模塊至少10+, 好了今天主角不是他,是一款動態配置upstream的模塊,這個模塊使用rest接口. 簡單,方便,而且能夠不須要重啓nginx。可是有個問題比較明顯,nginx重啓以後,什麼都沒了. html
1. 安裝
首先安裝nginx動態upstream配置模塊,若是你已經安裝了nginx,那麼輕參考ttlsa上的如何安裝nginx第三方模塊,會安裝的請跳過. nginx
# cd /usr/local/src/ # wget https://github.com/yzprofile/ngx_http_dyups_module/archive/master.zip \ -O ngx_http_dyups_module-master.zip # unzip ngx_http_dyups_module-master.zip # wget http://nginx.org/download/nginx-1.4.2.tar.gz # tar -xzvf nginx-1.4.2.tar.gz # cd nginx-1.4.2 # ./configure --prefix=/usr/local/nginx-1.4.2 --with-http_stub_status_module \--add-module=../ngx_http_dyups_module-master/ # make # make install
2. 指令(Directives)
語法: dyups_interface
默認: none
配置段: location
啓用配置upstream的接口 git
語法: dyups_read_msg_timeout time
默認: 1s
配置段: main
設置從共享內存中讀取commands的超時時間,默認爲1秒 github
語法: dyups_shm_zone_size size
默認: 2MB
配置段: main
設置存儲commands的共享內存
This directive set the size of share memory which used to store the commands. shell
語法: dyups_upstream_conf path
默認: none
配置段: main
這個指令用來指定upstream配置文件的路徑,他會在啓動的時候加載 bash
語法: dyups_trylock on | off
默認: off
配置段: main
是否啓用鎖,若是啓用了它,同一時刻有人在修改,那麼將會返回409. 服務器
3. restful接口
GET
/detail 獲取全部upstream名稱以及upstream裏面的servers信息
/list 獲取upstream列表
/upstream/name 使用upstream名稱獲取upstream信息 restful
POST
/upstream/name 更新upstream
body 配置內容;
body server ip:port; 運維
DELETE
/upstream/name 刪除upstream,name相應修改 curl
3.1 調用接口響應http狀態碼
500: 須要reload nginx
409: 從新調用一次接口,上個請求被鎖了.
204:調用list或者detail時出現,表示沒有響應內容
其餘:你的命令錯誤,請修改
注意:你須要第三方模塊來生成新的配置文件到nginx配置目錄. 做者也沒有說什麼第三方模塊,這個插件很好,不能生成配置文件,讓他顯得尤其不足.
4. nginx配置
備註:如下配置有安裝echo模塊.
http { # 從upstream讀取初始upstream配置 dyups_upstream_conf conf/upstream.conf; include conf/upstream.conf; # 默認主機 server { listen 80; location / { proxy_pass http://$host; } } # 動態配置upstream的接口站點 server { listen 81; location / { dyups_interface; # 這個指令表示這邊是接口站點 } } # upstream後面的realserver,2臺801,,82 server { listen 801; location / { echo 801; } } server { listen 802; location / { echo 802; } } }
upstream.conf配置
upstream ttlsa1 { server 127.0.0.1:801; } upstream ttlsa12 { server 127.0.0.1:802; }
5. 使用方法演示
5.1 添加upstream
# curl -d "server 127.0.0.1:801;server 127.0.0.1:802;" 127.0.0.1:81/upstream/ttlsa3 success
測試
# curl -H "host: ttlsa3" 127.0.0.1 801 # curl -H "host: ttlsa3" 127.0.0.1 802
能夠看到經過host的ttlsa3能夠訪問到upstream配置的兩臺服務器。若是你發現curl幾回都是同樣的,那麼輕多試幾回。
5.2 查看upstream詳細信息
# curl 127.0.0.1:81/detail ttlsa1 server 127.0.0.1:801 ttlsa2 server 127.0.0.1:802 ttlsa3 server 127.0.0.1:801 server 127.0.0.1:802
5.3 刪除upstream
# curl -i -X DELETE 127.0.0.1:81/upstream/ttlsa1 success # curl 127.0.0.1:81/detail ttlsa2 server 127.0.0.1:802 ttlsa3 server 127.0.0.1:801 server 127.0.0.1:802
5.4 增長帶ip_hash的upstream
# curl -d "ip_hash;server 127.0.0.1:801;server 127.0.0.1:802;" 127.0.0.1:81/upstream/ttlsa4 success # curl 127.0.0.1:81/upstream/ttlsa4 server 127.0.0.1:801 server 127.0.0.1:802
爲何沒有帶ip_hash的信息,自己就沒法顯示,那咱們在看看weight會不會顯示出來
5.5 增長帶weight的upstream
# curl -d "server 127.0.0.1:801;server 127.0.0.1:802 weight=2;" 127.0.0.1:81/upstream/ttlsa5 success # curl 127.0.0.1:81/upstream/ttlsa5 server 127.0.0.1:801 server 127.0.0.1:801
仍是不顯示,雖然沒顯示,可是效果仍是有的,你們本身去測試吧.
6. 注意事項
本模塊不能和nginx_upstream_check_module一塊兒使用,接下來的版本會支持。或者可使用tenengine。淘寶真是竭盡全力在推廣他們的tenengine.
7. 結束語
ngx_http_dyups_module帶的功能我很喜歡,可是最大的不足就是不能生成配置文件,全部內容都保存在內存中,但願之後的版本可以支持。有這個模塊,shell腳本也能夠修改upstream,不在須要重啓nginx。
轉載請註明來至運維生存時間:http://www.ttlsa.com/html/3268.html