LVS原理詳解 && 配置文件參數詳解

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內核模型

 
lvs-kernel.jpg
 
 

 

1.當客戶端的請求到達負載均衡器的內核空間時,首先會到達PREROUTING鏈。

2.當內核發現請求數據包的目的地址是本機時,將數據包送往INPUT鏈。

3.LVS由用戶空間的ipvsadm和內核空間的IPVS組成,ipvsadm用來定義規則,IPVS利用ipvsadm定義的規則工做,IPVS工做在INPUT鏈上,當數據包到達INPUT鏈時,首先會被IPVS檢查,若是數據包裏面的目的地址及端口沒有在規則裏面,那麼這條數據包將被放行至用戶空間。

4.若是數據包裏面的目的地址及端口在規則裏面,那麼這條數據報文將被修改目的地址爲事先定義好的後端服務器,並送往POSTROUTING鏈。

5.最後經由POSTROUTING鏈發日後端服務器。

 

三.LVS的包轉發模型

1.NAT模型:

lvs-nat.jpg
 
 

 

①.客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP(客戶端IP),後面統稱爲CIP),目標地址爲VIP(負載均衡器前端地址,後面統稱爲VIP)。

②.負載均衡器收到報文後,發現請求的是在規則裏面存在的地址,那麼它將客戶端請求報文的目標地址改成了後端服務器的RIP地址並將報文根據算法發送出去。

③.報文送到Real Server後,因爲報文的目標地址是本身,因此會響應該請求,並將響應報文返還給LVS。

④.而後lvs將此報文的源地址修改成本機併發送給客戶端。注意:在NAT模式中,Real Server的網關必須指向LVS,不然報文沒法送達客戶端

 

2.DR模型:

 
lvs-dr.jpg
 
 

 

①.客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址爲VIP。

②.負載均衡器收到報文後,發現請求的是在規則裏面存在的地址,那麼它將客戶端請求報文的源MAC地址改成本身DIP的MAC地址,目標MAC改成了RIP的MAC地址,並將此包發送給RS。

③.RS發現請求報文中的目的MAC是本身,就會將次報文接收下來,處理完請求報文後,將響應報文經過lo接口送給eth0網卡直接發送給客戶端。注意:須要設置lo接口的VIP不能響應本地網絡內的arp請求

 

3.TUN模型:

 

Alt text
 
lvs-tun.jpg
 
 

 

①.客戶端將請求發往前端的負載均衡器,請求報文源地址是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
        }
    }
}
相關文章
相關標籤/搜索