利用nginx做後臺伺服器的動態載入和負載均衡

dc_show發表於2014-07-05

這裡,我們沒有利用nginx的反向代理和負載策略來實現,而是自定義負載均衡策略,同時動態的響應後臺伺服器的註冊訊息,以實現後臺伺服器的動態增減,和負載的合理均衡。

1、動態註冊

我們在nginx裡面增加一個location /reg{}的模組,然後在其中響應來自後臺伺服器的註冊訊號,註冊資訊可以快取住,也可以寫資料庫,看需要。在收到註冊訊號後對每一個伺服器的註冊訊號設定一個定時器,在收到註冊訊號後對每一個伺服器的註冊資訊增加當前並儲存。這裡我們沒有做定時器,而是在收到每臺伺服器心跳後會更新伺服器列表,新鮮的優先順序高,比較舊的優先順序低,在同等情況下,優先採用新鮮的伺服器。過時到一定程度,將從伺服器列表中刪除該伺服器,並記錄到日誌。

這樣的情況下,我們如果需要增加刪減伺服器將會變得很容易。這裡尤其要說一下刪減伺服器。如果碰到新鮮的伺服器剛剛傳送完心跳包後變崩潰,優先順序又將這臺伺服器排至比較高的位置,這樣豈不是會導致反饋給前臺的伺服器失效?我們是這樣做,在確定完伺服器後,再反饋給前臺時會對伺服器進行一次握手操作,比如http互動,確認當前伺服器做好了應答的準備。


2、負載均衡

nginx本身就有很多種負載均衡策略,比如ip_hash,權重等等。這裡我們要說說自身如何根據業務需要進行定製負載均衡。

我們採用ngx_lua模組,方便我們使用Lua指令碼對nginx.conf進行修改和擴充套件。伺服器資訊我們一般存在一個table中,利用table的自定義sort(our_table,sortfunction)法則,可以輕易的按業務進行排序。


相關文章