關於LVS的持久鏈接(Persistence)
關於設置方式:
1、指令: ipvsadm 中的參數 -p N 【N單位爲秒】
2、在keepalived配置文件中通過設置參數:persistence_timeout N 來設置
3、在圖像化配置和管理工具piranha中,如下圖:
注意:
如果我們僅僅配置了 persistence的相關參數設置,那麼默認是針對一臺主機,如果我們設置了類似“Persistence Network Mask”這種參數,那麼該持久鏈接就是針對一個網段,即只要一個網段的第一個客戶端鏈接過來,DR定位到一臺RS之後,那麼在根據此客戶端的ip和我們設置的“Persistence Network Mask”參數得到的整個網段中的客戶端都會被定位到同一臺RS。【關於此參數的其他配置方式,請自行查閱】
相關參數:
1、 Ipvsadm -l --timeout 對應的是 TCP超時 FIN_WAIT UDP超時
Ipvsadm --set N1 N2 N3 進行設置
2、 Persistence 參數
在ipvsadm -l 中 ,我們看到的一個時間是 persistence參數
分析【persistent TCP超時 FIN_WAIT Activeconn InActconn】
當我們配置了persistent之後,一個新客戶端發起鏈接之後,DR會創建一個叫做NONE的記錄來標示一個客戶端
此時 NONE 對應的expire值爲persistent值。
而FIN_WAIT對應的expire值則是我們在ipvsadm -l –timeout 看到的中間的那個值。
ESTABLISHED對應的expire值則是我們在ipvsadm -l –timeout 看到的左邊的那個值。
這三個值創建之後便開始倒計時。
它們的關係和作用是:
1、 只要NONE存在,那麼來自這個客戶端的鏈接都會被定位到一臺特定的RS。
2、 ESTABLISHED 會在某個瞬間變爲FIN_WAIT,並以FIN_WAIT的初始值開始倒計時。
3、 如果NONE倒計時完畢,而仍然存在與此客戶端相關的FIN_WAIT,那麼NONE會被初始化爲60s,並重新開始倒計時,如此循環直到所有的相關FIN_WAIT消失。
4、 Activeconn 的值 體現了表中所有狀態爲 ESTABLISHED的鏈接數量。
5、 NotActiveconn的值 體現了表中所有狀態爲FIN_WAIT的鏈接數量。
Keepalived 和 piranha的區別:
1、 Keepalived的主備有priority設置,主DR會更高,並且會有MASTER和BACKUP來標示角色,其他參數相同。工作時,永遠以主DR爲主即只要主DR存在並可用,則永遠是主DR工作。而piranha則不同,其配置文件在主備DR上完全相同,且沒有等級之分,即當備份DR在工作時,即使主DR上線,備份DR仍會繼續工作。
2、 Keepalived的備份DR上,一旦開啓服務, 則相關的配置會立刻生效,例如VIP的配置、lvs相關VS和RS的添加等,但不會參與工作,只有主DR宕機時纔會接手。
而piranha則不同,只有工作中的DR纔會配置生效。
3、 關於VIP的配置方式不同: keepalived是在一個物理網卡上配置第二個ip【使用ifconfig看不到,只能通過ip address show 才能看到】,而piranha則是通過eth0:1這種網卡別名的形式進行配置的。
======================================================================
注意點:
1、DR模式:RS(Real Server)無需針對VIP另行添加路由【eg: route add -host ${VIP} dev lo:1 】
2、DR模式:分發服務器無需對VIP的掩碼做32位處理,無需添加針對VIP的路由,更無需開啓轉發功能。
3、ipvsadm --set 7200 5 60這個值(7200)如果設置的太小,client將會受到“connetct reset by peer”類似的錯誤。
============================================================================
ipvsadm命令選項解釋:
-A --add-service 在內核的虛擬服務器表中添加一條新的虛擬服務器記錄。也就是增加一臺新的虛擬服務器。
-E --edit-service 編輯內核虛擬服務器表中的一條虛擬服務器記錄。
-D --delete-service 刪除內核虛擬服務器表中的一條虛擬服務器記錄。
-C --clear 清除內核虛擬服務器表中的所有記錄。
-R --restore 恢復虛擬服務器規則
-S --save 保存虛擬服務器規則,輸出爲-R 選項可讀的格式
-a --add-server 在內核虛擬服務器表的一條記錄裏添加一條新的真實服務器記錄。也就是在一個虛擬服務器中增加一臺新的真實服務器
-e --edit-server 編輯一條虛擬服務器記錄中的某條真實服務器記錄
-d --delete-server 刪除一條虛擬服務器記錄中的某條真實服務器記錄
-L|-l --list 顯示內核虛擬服務器表
-Z --zero 虛擬服務表計數器清零(清空當前的連接數量等)
--set tcp tcpfin udp 設置連接超時值
--start-daemon 啓動同步守護進程。他後面可以是master 或backup,用來說明LVS Router 是master 或是backup。在這個功能上也可以採用keepalived的VRRP 功能。
--stop-daemon 停止同步守護進程
-h --help 顯示幫助信息
其他的選項:
-t --tcp-service service-address 說明虛擬服務器提供的是tcp 的服務[vip:port] or [real-server-ip:port]
-u --udp-service service-address 說明虛擬服務器提供的是udp 的服務[vip:port] or [real-server-ip:port]
-f --fwmark-service fwmark 說明是經過iptables 標記過的服務類型。
-s --scheduler scheduler 使用的調度算法,有這樣幾個選 rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默認的調度算法是: wlc.
-p --persistent [timeout] 持久穩固的服務。這個選項的意思是來自同一個客戶的多次請求,將被同一臺真實的服務器處理。timeout 的默認值爲300 秒。
-M --netmask netmask persistent granularity mask
-r --real-server server-address 真實的服務器[Real-Server:port]
-g --gatewaying 指定LVS 的工作模式爲直接路由模式(也是LVS 默認的模式)
-i --ipip 指定LVS 的工作模式爲隧道模式
-m --masquerading 指定LVS 的工作模式爲NAT 模式
-w --weight weight 真實服務器的權值
--mcast-interface interface 指定組播的同步接口
-c --connection 顯示LVS 目前的連接 如:ipvsadm -L -c
--timeout 顯示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout
--daemon 顯示同步守護進程狀態
--stats 顯示統計信息
--rate 顯示速率信息
--sort 對虛擬服務器和真實服務器排序輸出
--numeric -n 輸出IP 地址和端口的數字形式
==================================================
Keepalived 配置文件(/etc/keepalived/keepalived.conf)模板【DR】:僅供參考
global_defs {
router_id LVS_STUN
}
vrrp_sync_group VGM {
group {
VI_1
}
}
vrrp_instance VI_1 {
state MASTER #//負載均衡器的角色
#state BACKUP #//負載均衡器的角色
interface eth0 #//承載VIP地址的物理接口
lvs_sync_daemon_inteface eth0 #//虛擬路由器的ID號,每個熱備組保持相同
virtual_router_id 51
priority 200 #//競選優先級,數字越大優先級越高
#priority 100 #//競選優先級,數字越大優先級越高
advert_int 5 #//通告間隔秒數(心跳頻率)
authentication { #//本VRRP組的認證信息
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.57.220.155 #//熱備所針對的虛擬地址(VIP),可以有多個
}
}
virtual_server 10.57.220.155 81 { #//虛擬服務器的IP地址、端口。 可多個服務
delay_loop 2 #//健康檢查的間隔時間
lb_algo wrr #//負載調度算法(wrr爲根據權重輪詢,其他參見ipvsadm手冊)
lb_kind DR #//負載均衡類型,常用的爲DR、NAT方式
# persistence_timeout 1 #//連接保持時間,適用於動態Web站點、FTP站點等情況
protocol TCP #//協議類型
real_server 10.57.220.20 81 { #//真實服務器的IP地址、端口
weight 1 #//節點權重
TCP_CHECK {
connect_timeout 10 #//連接超時
nb_get_retry 3 #//重試次數
delay_before_retry 3 #//重試間隔
}
}
real_server 10.57.220.26 81 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
}
#可配置多個
#virtual_server 172.19.1.19 3478 {
# delay_loop 2
# lb_algo wrr
# lb_kind DR
# persistence_timeout 10
# protocol UDP#
#real_server 172.19.1.15 3478 {
# weight 1
# TCP_CHECK {
# connect_timeout 10
# nb_get_retry 3
delay_before_retry 3
# }
#}
#real_server 172.19.1.16 3478 {
# weight 1
#TCP_CHECK {
# connect_timeout 10
# nb_get_retry 3
# delay_before_retry 3
# }
#}
#}