1. 程式人生 > >keepalived 配置檔案引數詳解

keepalived 配置檔案引數詳解

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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
全域性定義模組
! Configuration File for keepalived

global_defs {
notification_email {
[email protected]
[email protected]
[email protected] #郵件報警
}
notification_email_from [email protected] 指定發件人
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中的指令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
VRRPD配置
VRRPD的配置包括如下子塊:
1. vrrp_script
2. vrrp_sync_group
3. garp_group
4. vrrp_instance
1
2
3
4
5
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不變。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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許可權,同時指令最好寫絕對路徑。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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所定義的值時,執行該指令碼。
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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>:到這臺伺服器的最小連線數。
}
1
2
3
4
5
6
7
8
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,則關閉該功能。
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
例項
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
}
}
}
---------------------
作者:誠寜
來源:CSDN
原文:https://blog.csdn.net/mofiu/article/details/76644012
版權宣告:本文為博主原創文章,轉載請附上博文連結!