nginx修改upstream不重啓的方法(ngx_http_dyups_module模塊)

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

相關文章
相關標籤/搜索