linux-lvs-2
功能:將同屬於同一組應用的多個不同端口的服務定義成一個集群服務,統一調度;例如http和https結合netfilter來實現一種集群服務定義機制;
lvs-dr模型是不支持端口映射,很多時候我們存在著http和https同時啟用,訪問某一網站可能剛開始訪問采用的是http協議,當進行一些風險操作比如登錄,付款等,這時候就需要跳轉到https協議的443端口進行訪問,但是我們進行跳轉時面臨一個問題,我們之前訪問80端口時lvs會給我們指定一臺RS主機,我們的一些操作得信息保存在這臺主機上,跳轉時lvs會給我們重新指定一臺RS主機,這是我們會丟失之前的操作信息,這顯然時很不合理得,我們需要把80和443 端口當作同一集群服務,這個時候我們就需要防火墻標記了,用iptables 給80和443端口打上同一標記,然後根據標記進行集群
在mangle表的PREROUTING鏈定義規則,實現指定防火墻標記;
iptables -t mangle -A PREROUTING -d VIP -p {tcp|udp} --dport PORT -j MARK --set-mark $num
這裏vip時要訪問得IP地址,port是要訪問的端口,$num是我們標記得一個數值,如
iptables -t mangle -A PREROUTING -d 192.168.2.29 -p tcp --dport 80 -j MARM --set-mark 20
iptables -t mangle -A PREROUTING -d 192.168.2.29 -p tcp --dport 443 -j MARM --set-mark 20
這時我們已經將80和443端口打上同一標記
基於此前的標記定義集群服務;
ipvsadm -A -f # [-s METHOD]
ipvsadm -a -f # -r RS [options]
ipvsadm -A -f 20 -s wrr
ipvsadm -a -f 20 -r 192.168.2.30 -g -w 2
ipvsadm -a -f 20 -r 192.168.2.106 -g -w 5
我們在這利用防火墻標記定義了一個集群服務,凡是標記為20的都加權輪詢轉發個兩臺RS主機
lvs持久連接功能
無論使用什麽調度方法,持久連接功能都能保證在指定的一段時間內,來自同一個客戶端的請求始終被定向至同一個RS。當使用LVS持久連接時,調度器使用連接跟蹤(持久連接模板
lvs的持久連接就是通過ipvsadm的一個選項來實現,其主要目的就是可以通過持久化的機制,來保證用戶的每次訪問都跳轉到同一個服務器上面,而忽略調度算法的影響。這樣就可以讓用戶後續的操作都負載均衡到同一臺服務器上,這樣就可以避免服務器之間共享session造成的影響。
-p, --persistent [timeout]:使用持久連接,默認時長為300秒
持久連接類型:
①PCC(persistent client connections):持久客戶端連接,又稱零端口連接
在基於tcp或udp定義集群服務時,將來自於同一個客戶端對所有端口的請求,始終定向至此前選定的RS;以0作為端口號(表示所有端口)
例:ipvsadm -A -t 192.168.2.29:0 -s rr -p
②PPC(persistent port connections):持久端口連接,將對同一端口的請求,始終定向至此前選定的RS;單服務調度;各集群服務分開調度
例:ipvsadm -A -t 192.168.2.30 -s rr -p
③PFMC(persistent firewall mark connections):持久防火墻標記連接
iptables -t mangle -A PREROUTING -d 192.168.2.29 -p tcp --dports 80,443 -j MARK --set-mark 2
ipvsadm -A -f 2 -s wlc -p 600
-M, --netmask [NETMASK] 選項:
配合persistence_timeout使用,表示持久連接的粒度,默認是255.255.255.255,即單獨的客戶端IP。如果改成255.255.255.0,則表示只要是一個網段的client都會被分配到同一臺後端服務器上
Session持久機制
①session綁定:始終將來自同一個源IP的請求定向至同一個RS;沒有容錯能力;有損均衡效果;
②session復制:在RS之間同步session,每個RS擁有集群中的所有的session;對大規模集群不適用;
③session服務器:利用單獨部署的服務器來統一管理集群中的session;
real server的健康狀態檢測
lvs自身不具備後端RS健康狀態檢測功能,需要借助keepalived,keepalived不僅能為lvs提供高可用,還可以給lvs生成規則。
1、如何檢測RS的健康狀態:
應用層:利用集群服務依賴的協議進行檢測
傳輸層:利用端口掃描或探測類工具對指定協議的端口進行探測
網絡層:如ping
2、處理措施:
①自動上下線各RS;
online --> fail,探測三次及以上;
offline --> ok,一次即可;
②所有RS均故障時,應該提供一個back server;
ipvsadm -a -t 192.168.30.13:80 -r 127.0.0.1 -m -w 0
linux-lvs-2