1. 程式人生 > >LVS排程演算法(上)——靜態排程演算法

LVS排程演算法(上)——靜態排程演算法

        LVS的排程方法有十幾中,每種方法的排程標準和適用場景不同。大體有兩大類,分別為固定排程方法或稱為靜態排程方法,另一類是動態排程方法。

常用的具體演算法有十種。

        1.輪詢排程(rr)

        將所有請求平均的分發到每個叢集節點上,即輪流排程。

        2.加權輪詢排程(wrr)

        由於不同的伺服器效能不同,因此要考慮讓效能高的節點多承擔一些請求,這就需要定義每個節點的權重。排程器根據該節點的權重來判斷分發給它的請求量。

也就是以多個節點它們之間的權重比例來分發。

        3.源地址hash(Sourcehash,sh)

        用於實現會話繫結到某個具體節點。根據請求的來源地址進行請求的分發,用於實現將某個客戶端的所有請求都分發到一個固定的伺服器上,

與Nginx中的ip_hash演算法一樣,也是根據客戶端IP的hash值來計算請求轉發的目標節點。只要客戶端IP沒有改變,以後的所有請求都轉發到一個

固定的伺服器節點。

        這種排程演算法在一定程度上會破壞公平排程的效果,但是請求量越大則排程也就越公平。主要為了實現將某個客戶端的會話一直鎖定在某個節點,

這樣利用保持session,從而避免需要做多個節點的session複製。因為http是無狀態的協議,多個請求之間沒有關係,為了能夠表示出請求與上一次

請求的關係,就通過將sessionID寫入cookie的方式來實現對客戶端多次請求的標識,也就是使用Cookie來實現服務端對客戶端的追蹤。

        在這種機制中,如果某個伺服器節點掛了,那麼使用者的session也就丟失了,此時使用者再請求時Director發現該客戶端對應的節點掛了,就會將該

請求重新轉發到其它節點,但是使用者發現儲存在session中的資料丟失了。為了避免這種情況,可以在多個伺服器節點之間使用session複製,或使用

一個公共的session伺服器。如果是了session複製或session伺服器,就可以不再使用sh這種排程演算法了。

        4.目標地址hash(Destination Hash)

        用於將同一型別的請求轉發到一個固定節點,例如將以 .jgp、.png等結尾的請求轉發到同一個節點。這種演算法其實不是為了真正意義的負載均衡,

而是為了資源的分類管理。這種排程演算法主要應用在使用了快取節點的系統中。例如A使用者訪問 .html時被轉發到後端的某個快取伺服器,當快取中沒有

時就訪問後端的web伺服器,並且響應使用者後將該資源放入html的快取伺服器;B使用者再請求某個html時,依然被轉發到html的快取伺服器,這樣B使用者

就可以直接獲取這個資源而不用再請求後端web伺服器。

        因此,目標地址hash這種演算法將同一類請求都轉發到一個固定節點上,一般應用在快取系統中,為了提高快取命中率。

        以上的四種排程演算法被稱為靜態排程演算法,注意是因為它們進行排程時不考慮後端伺服器是空閒還是繁忙,也就是不考慮後端伺服器當前的負載量,

也就是不考慮當前排程伺服器節點上活動連線和非活動連線的數量。如果某個伺服器節點上有較多的使用者保持線上,而另一個節點只有少量使用者線上,

如果還是才有靜態排程演算法,就會造成伺服器的負載不均衡情況的發生,因此就有了動態排程演算法。