uWSGI叢集平臺

nginx_web發表於2012-06-07

 

 

    叢集是uWSGI伺服器的關鍵功能之一,該功能從0.9.7-dev開始提供。

 

首先我們看一個通過TCP套接字實現的簡單應用:

 

./uwsgi -w werkzeug.testapp:test_app -s 192.168.173.100:3032 -M -p 4

   

    現在我們想將應用程式移動到第二個伺服器上,一個首要的問題就是第二個伺服器需要第二個ip地址,這樣由於兩臺機器的ip不同,因此就不可能通過NFS來共享一個xml檔案來實現。

 

幸運的是,我們能夠使用依賴於叢集的魔術選項,例如:

 

./uwsgi -w werkzeug.testapp:test_app -s 192.168.173.*:3032 -M -p 4

   

    這如你看到的,在ip地址中包含了一個*號,這意味著uWSGI伺服器將會在本地機器中自動的搜尋第一個可以的ip地址。

 

    因此,我們同樣可以在第二臺機器上執行這條命令來啟動第二個uWSGI伺服器。這樣啟動問題就解決了。

 

    現在我們的伺服器已經啟動執行了,但是其它的問題又可能有來了,例如,我們想對uWSGI伺服器進行調整,那麼每一次的調整,即進行修改,都必須在第二臺uWSGI伺服器上做同樣的操作,並且都需要重新載入。看一下怎麼解決這個問題。

 

下面是一個uWSGI叢集結構:

 

在這個結構中我們假如有4個節點:

 

node1 192.168.173.100

node2 192.168.173.101

node3 192.168.173.102

node4 192.168.173.103

   

node1上啟動uWSGI,但是這次要選擇一個"叢集名稱",叢集的名稱是一個簡單的多播地址,這個地址將會被這個叢集內的所有叢集所共享。在這裡我們將選擇225.1.1.1:3333地址,這個地址可以隨便選擇,但前提條件必須是在我們環境中所沒有使用的一個多播地址,例如(這裡我們假設在node1上執行)

 

./uwsgi -w werkzeug.testapp:test_app -s 192.168.173.*:3032 -M -p 4 --cluster 225.1.1.1:3333

 

    好了,我們的叢集啟動了,但是這意味著什麼呢?

 

    從現在開始,叢集中所有的節點都將會共享這些選項,因此,在node2 node3 node4上只需簡單的執行以下命令:

 

./uwsgi --cluster 225.1.1.1:3333

   

    叢集中的各個節點將會從已經啟動的任何一個節點上獲取配置(在這裡具體的就是node1)。那麼在叢集中所有的節點都正常啟動並且執行後,如果node1死掉會出現什麼問題?沒關係,即使node1當機,而其它的伺服器,比如 node3要重啟,它還可以從node2或者node4上獲取配置。

 

    下面我們看兩個選項--cluster-reload--cluster-log

 

    如果我們刪除一些不需要的配置檔案,或者是編輯一些配置檔案,那麼每一次類似這樣的事情都得對叢集中的每一個uWSGI例項進行重新啟動?不用那麼麻煩,只需在其中的一個例項上簡單的執行以下命令就可以了:

 

./uwsgi --cluster-reload 225.1.1.1:3333

   

    這條命令執行後,所有叢集中的節點都將會被重新載入。這就是--cluster-reload的功能。

 

    另一個有用的選項是 --cluster-log,通過該選項可以向叢集中的所有例項傳送訊息,並且所有節點都會將其記錄到它們的日誌。

   

    例如:

 

echo "i love uWSGI" | ./uwsgi --cluster-log 225.1.1.1:3333

   

    在這個例子中,我們通過在標準的輸入裝置用echo命令將字串在通過管道傳遞給uWSGI,然後會組播到各個例項。

 

uWSGI代理

 

    uWSGI伺服器包含了一個高效能的路由/代理/負載均衡器。對於uWSGI代理伺服器而言,叢集對它完全支援。只要在啟動時新增一個--cluster選項那麼將會自動的新增或者是移除一個節點。例如:

 

./uwsgi --proxy 127.0.0.1:3031 --cluster 225.1.1.1:3333

 

   這樣啟動之後,簡單的將127.0.0.1:3031指向了文字伺服器 uwsgi處理程式,並且也會自動新增節點,而且會實現負載均衡和健康檢查。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27043155/viewspace-732188/,如需轉載,請註明出處,否則將追究法律責任。

相關文章