1. 程式人生 > >linux-lvs-2

linux-lvs-2

時間 傳輸層 防火 aci one 記錄 如何 方法 cap

基於防火墻標記定義集群服務

功能:將同屬於同一組應用的多個不同端口的服務定義成一個集群服務,統一調度;例如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持久連接時,調度器使用連接跟蹤(持久連接模板

)來記錄每一個客戶端和給其分配的real server的映射關系

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