LVS原理詳解
LVS簡介
Internet的快速增長使多媒體網絡服務器面對的訪問數量快速增加,服務器需要具備提供大量並發訪問服務的能力,因此對於大負載的服務器來講, CPU、I/O處理能力很快會成為瓶頸。由於單台服務器的性能總是有限的,簡單的提高硬件性能並不能真正解決這個問題。為此,必須采用多服務器和負載均衡技術才能滿足大量並發訪問的需要。Linux 虛擬服務器(Linux Virtual Servers,LVS) 使用負載均衡技術將多台服務器組成一個虛擬服務器。它為適應快速增長的網絡訪問需求提供了一個負載能力易於擴展,而價格低廉的解決方案。
LVS結構與工作原理
一.LVS的結構
LVS由前端的負載均衡器(Load Balancer,LB)和后端的真實服務器(Real Server,RS)群組成。RS間可通過局域網或廣域網連接。LVS的這種結構對用戶是透明的,用戶只能看見一台作為LB的虛擬服務器(Virtual Server),而看不到提供服務的RS群。當用戶的請求發往虛擬服務器,LB根據設定的包轉發策略和負載均衡調度算法將用戶請求轉發給RS。RS再將用戶請求結果返回給用戶。
二.LVS內核模型

1.當客戶端的請求到達負載均衡器的內核空間時,首先會到達PREROUTING鏈。
2.當內核發現請求數據包的目的地址是本機時,將數據包送往INPUT鏈。
3.LVS由用戶空間的ipvsadm和內核空間的IPVS組成,ipvsadm用來定義規則,IPVS利用ipvsadm定義的規則工作,IPVS工作在INPUT鏈上,當數據包到達INPUT鏈時,首先會被IPVS檢查,如果數據包里面的目的地址及端口沒有在規則里面,那么這條數據包將被放行至用戶空間。
4.如果數據包里面的目的地址及端口在規則里面,那么這條數據報文將被修改目的地址為事先定義好的后端服務器,並送往POSTROUTING鏈。
5.最后經由POSTROUTING鏈發往后端服務器。
三.LVS的包轉發模型
1.NAT模型:

①.客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP(客戶端IP),后面統稱為CIP),目標地址為VIP(負載均衡器前端地址,后面統稱為VIP)。
②.負載均衡器收到報文后,發現請求的是在規則里面存在的地址,那么它將客戶端請求報文的目標地址改為了后端服務器的RIP地址並將報文根據算法發送出去。
③.報文送到Real Server后,由於報文的目標地址是自己,所以會響應該請求,並將響應報文返還給LVS。
④.然后lvs將此報文的源地址修改為本機並發送給客戶端。注意:在NAT模式中,Real Server的網關必須指向LVS,否則報文無法送達客戶端
。
2.DR模型:

①.客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址為VIP。
②.負載均衡器收到報文后,發現請求的是在規則里面存在的地址,那么它將客戶端請求報文的源MAC地址改為自己DIP的MAC地址,目標MAC改為了RIP的MAC地址,並將此包發送給RS。
③.RS發現請求報文中的目的MAC是自己,就會將次報文接收下來,處理完請求報文后,將響應報文通過lo接口送給eth0網卡直接發送給客戶端。注意:需要設置lo接口的VIP不能響應本地網絡內的arp請求
。
3.TUN模型:
![]()
①.客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址為VIP。
②.負載均衡器收到報文后,發現請求的是在規則里面存在的地址,那么它將在客戶端請求報文的首部再封裝一層IP報文,將源地址改為DIP,目標地址改為RIP,並將此包發送給RS。
③.RS收到請求報文后,會首先拆開第一層封裝,然后發現里面還有一層IP首部的目標地址是自己lo接口上的VIP,所以會處理次請求報文,並將響應報文通過lo接口送給eth0網卡直接發送給客戶端。
注意:需要設置lo接口的VIP不能在共網上出現
。
四.LVS的調度算法
LVS的調度算法分為靜態與動態兩類。
1.靜態算法(4種):只根據算法進行調度 而不考慮后端服務器的實際連接情況和負載情況
①.RR:輪叫調度(Round Robin)
調度器通過”輪叫”調度算法將外部請求按順序輪流分配到集群中的真實服務器上,它均等地對待每一台服務器,而不管服務器上實際的連接數和系統負載。②.WRR:加權輪叫(Weight RR)
調度器通過“加權輪叫”調度算法根據真實服務器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的服務器處理更多的訪問流量。調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。③.DH:目標地址散列調度(Destination Hash )
根據請求的目標IP地址,作為散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。④.SH:源地址 hash(Source Hash)
源地址散列”調度算法根據請求的源IP地址,作為散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。
2.動態算法(6種):前端的調度器會根據后端真實服務器的實際連接情況來分配請求
①.LC:最少鏈接(Least Connections)
調度器通過”最少連接”調度算法動態地將網絡請求調度到已建立的鏈接數最少的服務器上。如果集群系統的真實服務器具有相近的系統性能,采用”最小連接”調度算法可以較好地均衡負載。②.WLC:加權最少連接(默認采用的就是這種)(Weighted Least Connections)
在集群系統中的服務器性能差異較大的情況下,調度器采用“加權最少鏈接”調度算法優化負載均衡性能,具有較高權值的服務器將承受較大比例的活動連接負載。調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。③.SED:最短延遲調度(Shortest Expected Delay )
在WLC基礎上改進,Overhead = (ACTIVE+1)*256/加權,不再考慮非活動狀態,把當前處於活動狀態的數目+1來實現,數目最小的,接受下次請求,+1的目的是為了考慮加權的時候,非活動連接過多缺陷:當權限過大的時候,會倒置空閑服務器一直處於無連接狀態。④.NQ永不排隊/最少隊列調度(Never Queue Scheduling NQ)
無需隊列。如果有台 realserver的連接數=0就直接分配過去,不需要再進行sed運算,保證不會有一個主機很空間。在SED基礎上無論+幾,第二次一定給下一個,保證不會有一個主機不會很空閑着,不考慮非活動連接,才用NQ,SED要考慮活動狀態連接,對於DNS的UDP不需要考慮非活動連接,而httpd的處於保持狀態的服務就需要考慮非活動連接給服務器的壓力。⑤.LBLC:基於局部性的最少鏈接(locality-Based Least Connections)
基於局部性的最少鏈接”調度算法是針對目標IP地址的負載均衡,目前主要用於Cache集群系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工作負載,則用“最少鏈接”的原則選出一個可用的服務器,將請求發送到該服務器。⑥. LBLCR:帶復制的基於局部性最少連接(Locality-Based Least Connections with Replication)
帶復制的基於局部性最少鏈接”調度算法也是針對目標IP地址的負載均衡,目前主要用於Cache集群系統。它與LBLC算法的不同之處是它要維護從一個目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一台服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按”最小連接”原則從服務器組中選出一台服務器,若服務器沒有超載,將請求發送到該服務器;若服務器超載,則按“最小連接”原則從這個集群中選出一台服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低復制的程度。
keepalived 配置文件參數詳解
版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/mofiu/article/details/76644012
global_defs 全局配置 vrrpd 1. vrrp_script添加一個周期性執行的腳本。腳本的退出狀態碼會被調用它的所有的VRRP Instance記錄。 2. vrrp_sync_group將所有相關的VRRP實例定義在一起,作為一個VRRP Group,如果組內的任意一個實例出現問題,都可以實現Failover 3. garp_group 4. vrrp_instance LVS配置 virtual_server real_server real_server中的健康檢查 HTTP_GET or SSL_GET TCP_CHECK TCP_CHECK DNS_CHECK DNS_CHECK
全局定義模塊
! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc #郵件報警 } notification_email_from Alexandre.Cassen@firewall.loc 指定發件人 smtp_server 192.168.200.1 #指定smtp服務器地址 smtp_connect_timeout 30 指定smtp連接超時時間 router_id LVS_DEVEL #負載均衡標識,在局域網內應該是唯一的。 vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } 說明: notification_email:指定當keepalived出現問題時,發送郵件給哪些用戶。 notification_emai_from:發送郵件時,郵件的來源地址。 smtp_server <DOMAIN|IP> [<PORT>]:smtp服務器的地址或域名。默認端口為25.如:smtp_server smtp.felix.com 25 smtp_helo_name <HOST_NAME>:指定在HELO消息中所使用的名稱。默認為本地主機名。 smtp_connect_timeout:指定smtp服務器連接的超時時間。單位是秒。 router_id:指定標識該機器的route_id. 如:route_id LVS_01 vrrp_mcast_group4 224.0.0.18:指定發送VRRP組播消息使用的IPV4組播地址。默認是224.0.0.18 vrrp_mcast_group6 ff02::12 指定發送VRRP組播消息所使用的IPV6組播地址。默認是ff02::12 default_interface eth0:設置靜態地址默認綁定的端口。默認是eth0。 lvs_sync_daemon <INTERFACE> <VRRP_INSTANCE> [id <SYNC_ID>] [maxlen <LEN>] [port <PORT>] [ttl <TTL>] [group <IP ADDR>] 設置LVS同步服務的相關內容。可以同步LVS的狀態信息。 INTERFACE:指定同步服務綁定的接口。 VRRP_INSTANCE:指定同步服務綁定的VRRP實例。 id <SYNC_ID>:指定同步服務所使用的SYNCID,只有相同的SYNCID才會同步。范圍是0-255. maxlen:指定數據包的最大長度。范圍是1-65507 port:指定同步所使用的UDP端口。 group:指定組播IP地址。 lvs_flush:在keepalived啟動時,刷新所有已經存在的LVS配置。 vrrp_garp_master_delay 10:當轉換為MASTER狀態時,延遲多少秒發送第二組的免費ARP。默認為5s,0表示不發送第二組免的免費ARP。 vrrp_garp_master_repeat 1:當轉換為MASTER狀態時,在一組中一次發送的免費ARP數量。默認是5. vrrp_garp_lower_prio_delay 10:當MASTER收到更低優先級的通告時,延遲多少秒發送第二組的免費ARP。 vrrp_garp_lower_prio_repeat 1:當MASTER收到更低優先級的通告時,在一組中一次發送的免費ARP數量。 vrrp_garp_master_refresh 60:當keepalived成為MASTER以后,刷新免費ARP的最小時間間隔(會再次發送免費ARP)。默認是0,表示不會刷新。 vrrp_garp_master_refresh_repeat 2: 當keepalived成為MASTER以后,每次刷新會發送多少個免費ARP。默認是1. vrrp_garp_interval 0.001:在一個接口發送的兩個免費ARP之間的延遲。可以精確到毫秒級。默認是0. vrrp_lower_prio_no_advert true|false:默認是false。如果收到低優先級的通告,不發送任何通告。 vrrp_version 2|3:設置默認的VRRP版本。默認是2. vrrp_check_unicast_src:在單播模式中,開啟對VRRP數據包的源地址做檢查,源地址必須是單播鄰居之一。 vrrp_skip_check_adv_addr:默認是不跳過檢查。檢查收到的VRRP通告中的所有地址可能會比較耗時,設置此命令的意思是,如果通告與接收的上一個通告來自相同的master路由器,則不執行檢查(跳過檢查)。 vrrp_strict:嚴格遵守VRRP協議。下列情況將會阻止啟動Keepalived:1. 沒有VIP地址。2. 單播鄰居。3. 在VRRP版本2中有IPv6地址。 vrrp_iptables:不添加任何iptables規則。默認是添加iptables規則的。 如果vrrp進程或check進程超時,可以用下面的4個選項。可以使處於BACKUP狀態的VRRP實例變成MASTER狀態,即使MASTER實例依然在運行。因為MASTER或BACKUP系統比較慢,不能及時處理VRRP數據包。 vrrp_priority <-20 -- 19>:設置VRRP進程的優先級。 checker_priority <-20 -- 19>:設置checker進程的優先級。 vrrp_no_swap:vrrp進程不能夠被交換。 checker_no_swap:checker進程不能夠被交換。 script_user <username> [groupname]:設置運行腳本默認用戶和組。如果沒有指定,則默認用戶為keepalived_script(需要該用戶存在),否則為root用戶。默認groupname同username。 enable_script_security:如果腳本路徑的任一部分對於非root用戶來說,都具有可寫權限,則不會以root身份運行腳本。 nopreempt 默認是搶占模式 要是用非搶占式的就加上nopreempt 注意:上述為global_defs中的指令
VRRPD配置
VRRPD的配置包括如下子塊: 1. vrrp_script 2. vrrp_sync_group 3. garp_group 4. vrrp_instance
vrrp_script配置
作用:添加一個周期性執行的腳本。腳本的退出狀態碼會被調用它的所有的VRRP Instance記錄。 注意:至少有一個VRRP實例調用它並且優先級不能為0.優先級范圍是1-254. vrrp_script <SCRIPT_NAME> { ... } 選項說明: scrip "/path/to/somewhere":指定要執行的腳本的路徑。 interval <INTEGER>:指定腳本執行的間隔。單位是秒。默認為1s。 timeout <INTEGER>:指定在多少秒后,腳本被認為執行失敗。 weight <-254 --- 254>:調整優先級。默認為2. rise <INTEGER>:執行成功多少次才認為是成功。 fall <INTEGER>:執行失敗多少次才認為失敗。 user <USERNAME> [GROUPNAME]:運行腳本的用戶和組。 init_fail:假設腳本初始狀態是失敗狀態。 解釋: weight: 1. 如果腳本執行成功(退出狀態碼為0),weight大於0,則priority增加。 2. 如果腳本執行失敗(退出狀態碼為非0),weight小於0,則priority減少。 3. 其他情況下,priority不變。
vrrp_sync_group
作用:將所有相關的VRRP實例定義在一起,作為一個VRRP Group,如果組內的任意一個實例出現問題,都可以實現Failover。 vrrp_sync_group VG_1 { group { inside_network # vrrp instance name outside_network # vrrp instance name ... } ... } 說明: 如果username和groupname沒有指定,則以默認的script_user所指定的用戶和組。 1. notify_master /path/to_master.sh [username [groupname]] 作用:當成為MASTER時,以指定的用戶和組執行腳本。 2. notify_backup /path/to_backup.sh [username [groupname]] 作用:當成為BACKUP時,以指定的用戶和組執行腳本。 3. notify_fault "/path/fault.sh VG_1" [username [groupname]] 作用:當該同步組Fault時,以指定的用戶和組執行腳本。 4. notify /path/notify.sh [username [groupname]] 作用:在任何狀態都會以指定的用戶和組執行腳本。 說明:該腳本會在notify_*腳本后執行。 notify可以使用3個參數,如下: $1:可以是GROUP或INTANCE,表明后面是組還是實例。 $2:組名或實例名。 $3:轉換后的目標狀態。有:MASTER、BACKUP、FAULT。 5. smtp_alert:當狀態發生改變時,發送郵件。 6. global_tracking:所有的VRRP實例共享相同的tracking配置。 注意:腳本文件要加上x權限,同時指令最好寫絕對路徑。
vrrp_instance
命令說明: state MASTER|BACKUP:指定該keepalived節點的初始狀態。 interface eth0:vrrp實例綁定的接口,用於發送VRRP包。 use_vmac [<VMAC_INTERFACE>]:在指定的接口產生一個子接口,如vrrp.51,該接口的MAC地址為組播地址,通過該接口向外發送和接收VRRP包。 vmac_xmit_base:通過基本接口向外發送和接收VRRP數據包,而不是通過VMAC接口。 native_ipv6:強制VRRP實例使用IPV6.(當同時配置了IPV4和IPV6的時候) dont_track_primary:忽略VRRP接口的錯誤,默認是沒有配置的。 track_interface { eth0 eth1 weight <-254-254> ... }:如果track的接口有任何一個出現故障,都會進入FAULT狀態。 track_script { <SCRIPT_NAME> <SCRIPT_NAME> weight <-254-254> }:添加一個track腳本(vrrp_script配置的腳本。) mcast_src_ip <IPADDR>:指定發送組播數據包的源IP地址。默認是綁定VRRP實例的接口的主IP地址。 unicast_src_ip <IPADDR>:指定發送單薄數據包的源IP地址。默認是綁定VRRP實例的接口的主IP地址。 version 2|3:指定該實例所使用的VRRP版本。 unicast_peer { <IPADDR> ... }:采用單播的方式發送VRRP通告,指定單播鄰居的IP地址。 virtual_router_id 51:指定VRRP實例ID,范圍是0-255. priority 100:指定優先級,優先級高的將成為MASTER。 advert_int 1:指定發送VRRP通告的間隔。單位是秒。 authentication { auth_type PASS|AH:指定認證方式。PASS簡單密碼認證(推薦),AH:IPSEC認證(不推薦)。 auth_pass 1234:指定認證所使用的密碼。最多8位。 } virtual_ipaddress { <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL> 192.168.200.17/24 dev eth1 192.168.200.18/24 dev eth2 label eth2:1 }:指定VIP地址。 nopreempt:設置為不搶占。默認是搶占的,當高優先級的機器恢復后,會搶占低優先級的機器成為MASTER,而不搶占,則允許低優先級的機器繼續成為MASTER,即使高優先級的機器已經上線。如果要使用這個功能,則初始化狀態必須為BACKUP。 preempt_delay:設置搶占延遲。單位是秒,范圍是0---1000,默認是0.發現低優先級的MASTER后多少秒開始搶占。 通知腳本: notify_master <STRING>|<QUOTED-STRING> [username [groupname]] notify_backup <STRING>|<QUOTED-STRING> [username [groupname]] notify_fault <STRING>|<QUOTED-STRING> [username [groupname]] notify <STRING>|<QUOTED-STRING> [username [groupname]] # 當停止VRRP時執行的腳本。 notify_stop <STRING>|<QUOTED-STRING> [username [groupname]] smtp_alert
LVS配置
virtual_server
virtual_server IP Port | virtual_server fwmark int | virtual_server group string { delay_loop <INT>:健康檢查的時間間隔。 lb_argo rr|wrr|lc|wlc|lblc|sh|dh:LVS調度算法。 lb_kind NAT|DR|TUN:LVS模式。 persistence_timeout 360:持久化超時時間,單位是秒。默認是6分鍾。 persistence_granularity:持久化連接的顆粒度。 protocol TCP|UDP|SCTP:4層協議。 ha_suspend:如果virtual server的IP地址沒有設置,則不進行后端服務器的健康檢查。 virtualhost <STRING>:為HTTP_GET和SSL_GET執行要檢查的虛擬主機。如virtualhost www.felix.com sorry_server <IPADDR> <PORT>:添加一個備用服務器。當所有的RS都故障時。 sorry_server_inhibit:將inhibit_on_failure指令應用於sorry_server指令。 alpha:在keepalived啟動時,假設所有的RS都是down,以及健康檢查是失敗的。有助於防止啟動時的誤報。默認是禁用的。 omega:在keepalived終止時,會執行quorum_down指令所定義的腳本。 quorum <INT>:默認值1. 所有的存活的服務器的總的最小權重。 quorum_up <STRING>:當quorum增長到滿足quorum所定義的值時,執行該腳本。 quorum_down <STRING>:當quorum減少到不滿足quorum所定義的值時,執行該腳本。 }
real_server
real_server IP Port { weight <INT>:給服務器指定權重。默認是1. inhibit_on_failure:當服務器健康檢查失敗時,將其weight設置為0,而不是從Virtual Server中移除。 notify_up <STRING>:當服務器健康檢查成功時,執行的腳本。 notify_down <STRING>:當服務器健康檢查失敗時,執行的腳本。 uthreshold <INT>:到這台服務器的最大連接數。 lthreshold <INT>:到這台服務器的最小連接數。 }
real_server中的健康檢查
HTTP_GET | SSL_GET { url { path <STRING>:指定要檢查的URL的路徑。如path / or path /mrtg2 digest <STRING>:摘要。計算方式:genhash -s 172.17.100.1 -p 80 -u /index.html status_code <INT>:狀態碼。 } nb_get_retry <INT>:get嘗試次數。 delay_before_retry <INT>:在嘗試之前延遲多長時間。 connect_ip <IP ADDRESS>:連接的IP地址。默認是real server的ip地址。 connect_port <PORT>:連接的端口。默認是real server的端口。 bindto <IP ADDRESS>:發起連接的接口的地址。 bind_port <PORT>:發起連接的源端口。 connect_timeout <INT>:連接超時時間。默認是5s。 fwmark <INTEGER>:使用fwmark對所有出去的檢查數據包進行標記。 warmup <INT>:指定一個隨機延遲,最大為N秒。可防止網絡阻塞。如果為0,則關閉該功能。 } TCP_CHECK { connect_ip <IP ADDRESS>:連接的IP地址。默認是real server的ip地址。 connect_port <PORT>:連接的端口。默認是real server的端口。 bindto <IP ADDRESS>:發起連接的接口的地址。 bind_port <PORT>:發起連接的源端口。 connect_timeout <INT>:連接超時時間。默認是5s。 fwmark <INTEGER>:使用fwmark對所有出去的檢查數據包進行標記。 warmup <INT>:指定一個隨機延遲,最大為N秒。可防止網絡阻塞。如果為0,則關閉該功能。 retry <INIT>:重試次數。默認是1次。 delay_before_retry <INT>:默認是1秒。在重試之前延遲多少秒。 } SMTP_CHECK { connect_ip <IP ADDRESS>:連接的IP地址。默認是real server的ip地址。 connect_port <PORT>:連接的端口。默認是real server的端口。 默認是25端口 bindto <IP ADDRESS>:發起連接的接口的地址。 bind_port <PORT>:發起連接的源端口。 connect_timeout <INT>:連接超時時間。默認是5s。 fwmark <INTEGER>:使用fwmark對所有出去的檢查數據包進行標記。 warmup <INT>:指定一個隨機延遲,最大為N秒。可防止網絡阻塞。如果為0,則關閉該功能。 retry <INT>:重試次數。 delay_before_retry <INT>:在重試之前延遲多少秒。 helo_name <STRING>:用於SMTP HELO請求的字符串。 } DNS_CHECK { connect_ip <IP ADDRESS>:連接的IP地址。默認是real server的ip地址。 connect_port <PORT>:連接的端口。默認是real server的端口。 默認是25端口 bindto <IP ADDRESS>:發起連接的接口的地址。 bind_port <PORT>:發起連接的源端口。 connect_timeout <INT>:連接超時時間。默認是5s。 fwmark <INTEGER>:使用fwmark對所有出去的檢查數據包進行標記。 warmup <INT>:指定一個隨機延遲,最大為N秒。可防止網絡阻塞。如果為0,則關閉該功能。 retry <INT>:重試次數。默認是3次。 type <STRING>:DNS query type。A/NS/CNAME/SOA/MX/TXT/AAAA name <STRING>:DNS查詢的域名。默認是(.) } MISC_CHECK { misc_path <STRING>:外部的腳本或程序路徑。 misc_timeout <INT>:腳本執行超時時間。 user USERNAME [GROUPNAME]:指定運行該腳本的用戶和組。如果沒有指定GROUPNAME,則GROUPNAME同USERNAME。 misc_dynamic:根據退出狀態碼動態調整權重。 0,健康檢查成功,權重不變。 1,健康檢查失敗。 2-255,健康檢查成功。權重設置為退出狀態碼減去2.如退出狀態碼是250,則權重調整為248 warmup <INT>:指定一個隨機延遲,最大為N秒。可防止網絡阻塞。如果為0,則關閉該功能。 }
實例
global_defs { router_id LVS_Server 指定標識該機器的route_id } vrrp_instance VI_1 { state MASTER 指定該keepalived節點的初始狀態 interface ens8 vrrp實例綁定的接口,用於發送VRRP包 virtual_router_id 51 指定VRRP實例ID priority 150 指定優先級,優先級高的將成為MASTER nopreempt 設置為不搶占。默認是搶占的 advert_int 1 advert_int 1 authentication { auth_type PASS 指定認證方式 auth_pass password 指定認證所使用的密碼。 } virtual_ipaddress { 192.168.1.217 dev ens8 指定VIP地址 } } virtual_server 192.168.1.217 443 { delay_loop 3 delay_loop lvs_sched rr LVS的調度算法 lvs_method DR LVS 模式 protocol TCP 4層協議 real_server 192.168.1.211 443 { weight 1 TCP_CHECK { connect_port 443 connect_timeout 3 nb_get_retry 3 get嘗試次數 delay_before_retry 10 在嘗試之前延遲多長時間 } } real_server 192.168.1.212 443 { weight 1 TCP_CHECK { connect_port 443 connect_timeout 3 nb_get_retry 3 delay_before_retry 10 } } } virtual_server 192.168.1.217 80 { delay_loop 3 lvs_sched rr lvs_method DR protocol TCP real_server 192.168.1.211 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 10 } } } real_server 192.168.1.212 80 { weight 1 調整優先級。默認為2 TCP_CHECK { connect_port 80 連接的端口 connect_timeout 3 連接超時時間。默認是5s。 nb_get_retry 3 get嘗試次數。 delay_before_retry 10 } } }