1. 程式人生 > >LVS均衡負載(四) LVS持久連線

LVS均衡負載(四) LVS持久連線

LVS負載均衡(四) LVS持久連線

上一篇我們分析及實現了LVS後端服務健康狀態檢查,下面我們還將利用前面配置好的DR工作方式叢集來實現LVS持久連線。

1、什麼是LVS持久連線

在LVS中,持久連線是為了用來保證當來自同一個client的請求時,director能夠將這些請求排程定位到同一臺Real Server。

2、為什麼會用到LVS持久連線

       例1: 一般來說,Real Server需要靠session來標記使用者的會話,如果叢集內沒有共享儲存session資訊,而使用者前後兩次操作分別被排程到兩臺Real Server,就會導致後一次請求的無法繼續前一次的操作狀態;比如,前一次請求登入排程到

Real Server1,Real Server1儲存了該使用者的已登入狀態,而再一次請求獲取個人資料的時候排程到Real Server2,Real Server2在自己的儲存中沒有找到使用者已登入的狀態資訊,從而拒絕了該請求;當然這也可以通過使用Redis、Mencache實現各Real Server間的共享儲存來實現;

      例2: 對於電子商務網站來說,使用者在挑選商品的時候使用的是http:80埠來瀏覽的,當付款的時候則是通過https:443埠加密的方式;我們不希望http:80挑選商品的資訊在Real Server1,而https:443商品付款的時候跳轉到另外一臺Real Server2;並且https:443需要交換SSL金鑰,當啟用永續性連線時,只需要做一次驗證即可。

 ...等等。

3、LVS持久連線型別

3-1、PPC(persistent port connections)

      持久的埠連線,將來自於同一個客戶端對同一個服務(埠)的請求,始終定向至此前選定的RS。

      例如:來自同一個IP的使用者第一次訪問叢集的80埠分配到Real Server1,433號埠分配到Real Server2。當之後這個使用者繼續訪問80埠仍然分配到Real Server1,433號埠仍然分配到Real Server2。

3-2、PCC(persistent client connections)

      將來自於同一個客戶端的所有請求統統定向至此前選定的RS;也就是隻要IP相同,分配的伺服器始終相同。

      例如,來自同一個IP的使用者訪問叢集的80埠分配到Real Server1,然後使用者訪問433號埠仍然分配到Real Server1。但如需要SSH:22連線管理Director時,也被分配到Real Server就不好了,下面的PNMPP可以解決這個問題。

3-3、PNMPP(Persistent Netfilter Marked Packet Persistence)

      基於防火牆標記的永續性連線,這種防火牆標記僅在資料包在分發器上時有影響,資料包一旦離開Director,就不再被標記。

      需要用到iptables的mangle表為資料包設定Mark標記,mangle表主要用於修改資料包的TOS(Type Of Service,服務型別)、TTL(Time To Live,生存週期)指以及為資料包設定Mark標記。

           iptables -t mangle -A PREROUTING -d 192.168.1.100 -eth0 -p tcp --dport 80 -j MARK --set-mark 10

      它可以將兩個毫不相干的埠定義為一個叢集服務,例如:合併http的80埠和https的443埠定義為同一個叢集服務,而不會出現上面PCC據說的問題。

4、其他關注點

4-1、為什麼不使用SH演算法

       SH排程演算法和持久連線的作用都是"將來自同一個IP的請求都轉發到同一個Server",從而保證了session會話定位的問題。兩者的不同是:

       (1)sh演算法:使用SH演算法,SH演算法在核心中會自動維護一個雜湊表,此雜湊表中用每一個請求的源IP地址經過雜湊計算得出的值作為鍵,把請求所到達的RS的地址作為值。在後面的請求中,每一個請求會先經過此雜湊表,如果請求在此雜湊表中有鍵值,那麼直接定向至特定Real Server,如沒有,則會新生成一個鍵值,以便後續請求的定向。但是此種方法在時間的記錄上比較模糊(依據TCP的連線時長計算),而且其是演算法本身,所以無法與演算法分離,並不是特別理想的方法。

       (2)持久連線:此種方法實現了無論使用哪一種排程方法,持久連線功能都能保證在指定時間範圍之內,來自於同一個IP的請求將始終被定向至同一個RS,還可以把多種服務繫結後統一進行排程。

       ipvs內有一個LVS持久連線模板,模板中記錄了每一個請求的來源、排程至的Real Server、維護時長等等,在新的請求進入時,首先在此模板中檢查是否有記錄(有內建的時間限制,比如限制是300秒,當在到達300秒時依然有使用者訪問,那麼持久連線模板就會將時間增加兩分鐘,再計數,依次類推,每次只延長2分鐘),如果該記錄未超時,則使用該記錄所指向的Real Server,如果是超時記錄或者是新請求,則會根據排程演算法先排程至特定RS,再將排程的記錄新增至此表中。這並不與SH演算法衝突,LVS持久連線會在新請求達到時,檢查後端Real Server的負載狀況,這就是比較精細的排程和會話保持方法。

4-2、2個LVS的持續時間

    4-2-1.把同一個client發來請求到同一臺Real Server的持久超時時間

      這個也就是上面所提到的LVS持久連線模板的超時時間,ipvsadm -A|E ... -p timeout;timeout: 持久連線時長,預設300秒;單位是秒。

    4-2-2.一個連結建立後空閒時的超時時間,這個超時時間分為3種

 ipvsadm --set tcp tcpfin udp設定,大的TCP會話超時值將會增加保留在director上的連線模板的時間。

 1)tcp的空閒超時時間;

 2)lvs收到客戶端tcp fin的超時時間;

 3)udp的超時時間。

5、配置

這裡還是使用前面配置好的DR方式群集。    

5-1、配置PPC(persistent port connections)

配置Director時加上-p timeout選項即可:

            ipvsadm -A -t 192.168.1.100:80 -s wrr–p 300

5-2、配置PCC(persistent client connections)

配置Director時使用0號埠,加上-p timeout選項,這樣把所有埠統統定義為叢集服務,全部向Real Server轉發:

            ipvsadm -A -t 192.168.1.100:0 -s wrr–p 300

            ipvsadm -a -t 192.168.1.100:0 -r 192.168.1.102 -g -w 1

            ipvsadm -a -t 192.168.1.100:0 -r 192.168.1.103 -g -w 3

5-3、配置PNMPP(Persistent Netfilter Marked Packet Persistence)

       配置Director時先配置iptables的mangle表為資料包設定Mark標記,下面設定80和22(SSH)埠的資料包都加上標記10,然後ipvs配置就可用-f mask選項,將兩個毫不相干的埠定義為一個叢集服務:

iptables -t mangle -A PREROUTING -d 192.168.1.100 -i eth0 -p tcp --dport 80 -j MARK --set-mark 10

iptables -t mangle -A PREROUTING -d 192.168.1.100 -i eth0 -p tcp --dport 22 -j MARK --set-mark 10

                ipvsadm -A -f 10 -s wrr -p 600

                ipvsadm -a -f 10 -r 192.168.1.102 -g -w 1

                ipvsadm -a -f 10 -r 192.168.1.103 -g -w 3

6、測試PNMPP

我們只測試PNMPP,就如上面配置的PNMPP來測試,配置如下:

配置好後,在另一測試機上執行:

           可以看到雖然我們配置的排程演算法為WRR,但測試機的請求連線都只調度到了192.168.1.103的Real Server2,情況如下:

     然後再在xshell中SSH連線Director,可以看到連線同樣排程到了192.168.1.103的Real Server2,說明實現了將80和22的兩個埠定義為一個叢集服務,情況如下:

       經過寫這幾篇LVS的文章,較為全面的認識了LINUX叢集的LVS均衡負載方式,但對於LINUX叢集還有許多需要關注的問題,比如高可用、共享儲存、資料同步…等等。後面還將繼續關注…….

【參考資料】

    1、SH演算法與持久連線:http://minux.blog.51cto.com/8994862/1744761