keepalived配置文件详解
keepalived配置文件詳解????
????keepalived配置文件分為三個(gè)部分:全局配置(Globals configurations)、vrrp配置(VRRP configuration)、 LVS配置(LVS configuration),針對(duì)這三部分對(duì)keepalived配置文件進(jìn)行解析。
1、全局配置
全局配置分為2個(gè)子塊:Global definitions與Static routes。
(1)、Global definitions
主要要是配置故障發(fā)生時(shí)的通知對(duì)象以及機(jī)器標(biāo)識(shí)
global_defs{??????????????????????
??? notification_email {???????????
?????? <EMAIL ADDRESS>?????????????
?????? <EMAIL ADDRESS>
?????? ...
??? }
??? notification_email_from <EMAILADDRESS>
??? smtp_server <IP ADDRESS>??????????????
??? smtp_connect_timeout <INTEGER>????????????????????????????????????????????????
??? router_id <STRING>?????????????????????
}
notification_email:接收告警通知的郵箱,可以設(shè)置多個(gè)。
notification_email_fromemail:告警郵件從那個(gè)郵箱發(fā)出。
smtp_server:發(fā)送告警郵件的SMTP服務(wù)器地址。
smtp_connect_timeout:連接SMTP服務(wù)器超時(shí)時(shí)間。
router_id: #運(yùn)行keepalived的機(jī)器的路由標(biāo)識(shí),主備機(jī)一致。
(2)、Static addresses
static_ipaddress和static_routes用來給服務(wù)器配置靜態(tài)的IP地址/路由。如果你的機(jī)器上已經(jīng)配置了IP和路由,那么這兩個(gè)區(qū)域可以不用配置。
一般情況下你的機(jī)器都會(huì)有IP地址和路由信息的,因此沒必要再在這兩個(gè)區(qū)域配置。
語法如下:
static_ipaddress{?????????
??? <IP ADDRESS>/<MASK> brd <IPADDRESS> dev <STRING> scope <SCOPE>
??? <IP ADDRESS>/<MASK> brd <IPADDRESS> dev <STRING> scope <SCOPE>
}
static_routes{????????????????????????
??? src <IP ADDRESS> [to] <IPADDRESS>/<MASK> via|gw <IP ADDRESS> dev <STRING> scope<SCOPE> table <TABLE-ID> # to is optional
??? src <IP ADDRESS> [to] <IPADDRESS>/<MASK> via|gw <IP ADDRESS> dev <STRING> scope<SCOPE> table <TABLE-ID> # to is optional
??? src <IP ADDRESS> [to] <IPADDRESS>/<MASK> via|gw <IP ADDRESS> or <IP ADDRESS> dev<STRING> scope <SCOPE> table <TABLE-ID> # will use multipathroute
??? blackhole <IP ADDRESS>[/<MASK>]
}
備注:以上兩部份中的SCOPE可以指定的值為:site、link、host、nowhere、global。
如下為靜態(tài)地址與靜態(tài)路由配置示例:
示例1:
static_ipaddress{
??? 192.168.200.16 dev eth0 scope link
??? 192.168.200.17 dev eth1 scope link
??? 192.168.200.18 dev eth2
}
示例2:
static_routes{
??? src 192.168.100.1 192.168.209.0/24 via192.168.200.254 dev eth0
??? 192.168.210.0/24 via 192.168.200.254 deveth0
??? 192.168.211.0/24 via 192.168.200.254 deveth0
??? 192.168.212.0/24 dev eth3 scope site
??? 192.168.213.0/24 dev eth1 scope link
}
2、VRRP配置
VRRP configuration配置是keepalive實(shí)現(xiàn)HA部分重要內(nèi)容,同樣也分為VRRP scripts、VRRP synchronization group、VRRP instance三個(gè)子塊實(shí)現(xiàn)。
(1)、VRRP scripts
vrrp_script <STRING> {????????? # vrrp_script與track_script結(jié)合使用,<STRING>與track_script中<STRING>值設(shè)置為相同。
script <QUOTED_STRING>?????#監(jiān)控腳本或者監(jiān)控命令。
interval<INTEGER>????????? #腳本運(yùn)行時(shí)間間隔。
weight <INTEGER:-254..254>?#設(shè)置weight值,取值范圍-254-254。keepalived會(huì)定時(shí)執(zhí)行腳本并對(duì)腳本執(zhí)行的結(jié)果進(jìn)行分析,動(dòng)態(tài)調(diào)整vrrp_instance的優(yōu)先級(jí)。
??? fall <INTEGER>????????????? #運(yùn)行失敗指定次數(shù)后發(fā)生切換。
??? rise <INTEGER>??????????? ??#運(yùn)行成功指定次數(shù)后不發(fā)生切換。
}
(2)、VRRP synchronization group
vrrp_rsync_group用來定義vrrp_intance組,使得這個(gè)組內(nèi)成員動(dòng)作一致。舉個(gè)例子來說明其功能:兩個(gè)vrrp_instance同屬于一個(gè)vrrp_rsync_group,那么其中一個(gè)vrrp_instance發(fā)生故障切換時(shí),另一個(gè)vrrp_instance也會(huì)跟著切換(即使這個(gè)instance沒有發(fā)生故障)。
vrrp_sync_group <STRING>{ #vrrp_sync_group組名。
group {???????? ??????????????
????? <STRING>????? #指定加入vrrp_sync_group組的VRRP_Instance。
????? <STRING> ? ??? ? ? ? ? ?
}
notify_master <STRING>|<QUOTED-STRING> #表示切換為master時(shí)所執(zhí)行的腳本。
notify_backup <STRING>|<QUOTED-STRING> #表示切換為backup時(shí)所執(zhí)行的腳本。
notify_fault <STRING>|<QUOTED-STRING>? #表示切換為fault時(shí)所執(zhí)行的腳本。
notify <STRING>|<QUOTED-STRING>??????? #表示任何一狀態(tài)切換時(shí)都會(huì)調(diào)用該腳本,并且該腳本在以上三個(gè)腳本執(zhí)行完成之后進(jìn)行調(diào)用,keepalived會(huì)自動(dòng)傳遞4個(gè)參數(shù)。
??? $1 = A stringindicating whether it's a "GROUP" or an "INSTANCE"
??? $2 = The name of said groupor instance
??? $3 = The state it'stransitioning to ("MASTER", "BACKUP" or "FAULT")
??? $4 = The priorityvalue
??? $1 and $3 are ALWAYSsent in uppercase, and the possible strings sent are the
??? same ones listed above("GROUP"/"INSTANCE", "MASTER"/"BACKUP"/"FAULT").
smtp_alert? #使用global_defs里面定義的郵件地址和smtp服務(wù)器在切換后發(fā)送郵件通知。
}
(3)、VRRP instance
??? vrrp_instance用來定義對(duì)外提供服務(wù)的VIP區(qū)域及其相關(guān)屬性。
常用參數(shù)說明:
use_vmac:使用VRRP的虛擬MAC地址。
state MASTER|BACKUP:設(shè)置節(jié)點(diǎn)狀態(tài)。keepalived啟動(dòng)時(shí)會(huì)將priority比較大的節(jié)點(diǎn)選舉為MASTER。
interface <STRING>:用于HA檢測(cè)與對(duì)外提供服務(wù)的網(wǎng)絡(luò)的接口。
track_interface :監(jiān)控指定的網(wǎng)卡,如果任何一個(gè)不通就會(huì)切換到FALT狀態(tài)。
track_script:與vrrp_script參數(shù)一同使用,設(shè)定監(jiān)控服務(wù)的腳本,<STRING>與vrrp_script參數(shù)中的名稱相同。
mcast_src_ip :發(fā)送多播包的地址,如果不設(shè)置,默認(rèn)使用綁定的網(wǎng)卡的primary IP。
dont_track_primary:忽略vrrp的interface錯(cuò)誤,默認(rèn)不設(shè)置。
lvs_sync_daemon_interface <STRING>:負(fù)載均衡器之間的監(jiān)控接口,類似于HA HeartBeat的心跳線。但它的機(jī)制優(yōu)于Heartbeat,因?yàn)樗鼪]有“裂腦”這個(gè)問題,它是以優(yōu)先級(jí)這個(gè)機(jī)制來規(guī)避這個(gè)麻煩的。.
garp_master_delay <INTEGER>:當(dāng)切為主狀態(tài)后多久更新ARP緩存,默認(rèn)為5秒。
virtual_router_id <INTEGER-0..255>:虛擬路由標(biāo)識(shí),主機(jī)與備機(jī)保持一致。
priority <INTEGER-0..255>:優(yōu)先級(jí),主機(jī)與備機(jī)必須不同。
advert_int <INTEGER>:同步通知間隔,MASTER與BACKUP負(fù)載均衡器之間同步檢查的時(shí)間間隔,單位為秒。
authentication {??????????? ?????????????????
??????? auth_type PASS|AH:認(rèn)證類型為PASS或AH,推薦使用PASS,主備必須使用相同認(rèn)證方式及密碼才可以通信。
??????? auth_pass<STRING>:設(shè)置認(rèn)證密碼。密碼最多8位。
??? }
virtual_ipaddress:漂移地址設(shè)置,可以設(shè)置多個(gè)。
virtual_routes : 虛擬路由,當(dāng)IP漂過來之后需要添加的路由信息。
nopreempt:功能類似于heartbeat的auto_failback,設(shè)置不自動(dòng)切回,該參數(shù)只能設(shè)置在state為backup的服務(wù)器上,且優(yōu)先權(quán)必須高于其他節(jié)點(diǎn)的服務(wù)器上。
preempt_delay: 搶占延時(shí),默認(rèn)為0。
notify_master <STRING>|<QUOTED-STRING>:與vrrp_sync_group中相同。
notify_backup <STRING>|<QUOTED-STRING>:與vrrp_sync_group中相同。
notify_fault <STRING>|<QUOTED-STRING>: 與vrrp_sync_group中相同。
notify_stop <STRING>|<QUOTED-STRING>: ?停止vrrp時(shí),執(zhí)行指定的腳本。
notify <STRING>|<QUOTED-STRING>: ? ? ? 與vrrp_sync_group中相同。
smtp_alert:與vrrp_sync_group中相同。
3、LVS配置
LVS的配置包括2部分:虛擬主機(jī)組(virtual server group)和虛擬主機(jī)(virtual server)。虛擬主機(jī)組一般用不到,這里不介紹。以下為虛擬主機(jī)常用參數(shù)介紹。
virtual_server<IP ADDRESS> <PORT> { ? ? # 虛擬服務(wù)器設(shè)置標(biāo)識(shí),指定虛擬ip與端口,ip地址與端口號(hào)之間用空格隔開。
??? delay_loop <INTEGER> ? ? ? ? ? ? ? ?# 延遲輪詢時(shí)間
??? lvs_sched rr|wrr|lc|wlc|lblc|sh|dh? # LVS調(diào)度算法
??? ops???????????????? #Apply One-Packet-Scheduling (only for UDP),不常用。
??? lvs_method NAT|DR|TUN ? ? ? ? ? ? ? # LVS調(diào)度類型
??? persistence_timeout <INTEGER>?? ??? # 會(huì)話保持時(shí)間,單位為秒。
??? persistence_granularity <NETMASK>?? # 此選項(xiàng)是配合persistence_timeout,后面跟的值是子網(wǎng)掩碼,表示持久連接的粒度。
??? protocol TCP ? ? ? ? ? ? ? ? ? ? ? ?# 指定協(xié)議
??? ha_suspend ? ? ? ? ? ? ? ? ? ? ? ? ?#節(jié)點(diǎn)狀態(tài)從MASTER到BACKUP狀態(tài)切換時(shí),暫不啟用real_server健康檢查。
??? virtualhost <STRING> ? ? ? ? ? ? ? ?# HTTP_GET做健康檢查時(shí),檢查的Web服務(wù)器的虛擬主機(jī)。
??? sorry_server <IP ADDRESS><PORT> ? ? # 備用機(jī),所有的real server失效后啟用。??
????real_server健康檢查方法有HTTP_GET|SSL_GET、TCP_CHECK、SMTP_CHECK、MISC_CHECK多種,以下分別做以介紹如何使用。
?real_server <IP ADDRESS> <PORT> {? # 定義realserver
???? weight <INTEGER> ? ?# 用來配置real server節(jié)點(diǎn)的權(quán)值,數(shù)字越大權(quán)值越高。默認(rèn)為1,0為失效。?
???? inhibit_on_failure ?# 服務(wù)器健康檢查失敗時(shí),將其weight設(shè)置為0,而不是直接從IPVS里面刪除。
??? ?notify_up <STRING>|<QUOTED-STRING>?? # 在檢測(cè)到real server節(jié)點(diǎn)服務(wù)up狀態(tài)后執(zhí)行腳本。
???? notify_down<STRING>|<QUOTED-STRING> ?# 在檢測(cè)到real server節(jié)點(diǎn)服務(wù)down狀態(tài)后執(zhí)行腳本。
?????? HTTP_GET|SSL_GET {??
??????????? url {?????? ??????? # HTTP/SSL檢查的URL,這里可以指定多個(gè)URL。
????????????? path <STRING>???? # 詳細(xì)的URL路徑。
????????????? digest <STRING>?????? # SSL檢查后的摘要信息。
????????????? status_code <INTEGER> # HTTP檢查的返回狀態(tài)碼,一般為200.
??????????? }??????????????????????
??????????? url {
????????????? path <STRING>
????????????? digest <STRING>
????????????? status_code <INTEGER>
??????????? }
? ? ?connect_ip <IP ADDRESS> # 健康檢查連接的ip地址,如果不指定默認(rèn)為realserver指定的IP。
???? connect_port <PORT>???? # 健康檢查的端口,如果不指定默認(rèn)為real server指定的端口。
??? ?bindto <IP ADDRESS>???? # 如果本機(jī)有多個(gè)網(wǎng)卡配置多個(gè)地址,那么通過此地址來發(fā)送請(qǐng)求對(duì)服務(wù)進(jìn)行健康檢查。
???? bind_port <PORT>??????? # 通過本機(jī)此端口來發(fā)送請(qǐng)求對(duì)服務(wù)進(jìn)行健康檢查。
???? connect_timeout <INTEGER>?? # 連接超時(shí)時(shí)間
???? fwmark <INTEGER>??????? # fwmark to set on socket (SO_MARK)
???? nb_get_retry <INTEGER>? # 重試次數(shù)。
???? delay_before_retry <INTEGER> # 重試間隔時(shí)間(秒)。
???? warmup <INTEGER>??????? # 如果后端有眾多realserver時(shí),如果按精確時(shí)間發(fā)送檢測(cè)報(bào)文,可能會(huì)造成本機(jī)的網(wǎng)絡(luò)堵塞,因此可以使用warmup?指定一個(gè)時(shí)間,表示將發(fā)送檢測(cè)報(bào)文的精確時(shí)間差開一點(diǎn)的時(shí)間,以免造成本機(jī)堵塞。
??????? }
??? }
??? real_server <IP ADDRESS> <PORT>{?? # 同上
??????? weight <INTEGER>??????? # 同上
??????? inhibit_on_failure????? # 同上
??????? notify_up<STRING>|<QUOTED-STRING> # 同上
??????? notify_down<STRING>|<QUOTED-STRING> # 同上
?
??????? TCP_CHECK {
??????????? connect_ip <IP ADDRESS> # IPaddress to connect
??????????? connect_port <PORT>???? # TCP port to connect
??????????? bindto <IP ADDRESS>???? # IP address to bind to
??????????? bind_port <PORT>??????? # TCP port to bind to
??????????? connect_timeout<INTEGER>?? # Timeout connection
??????????? fwmark <INTEGER>??????? # fwmark to set on socket (SO_MARK)
??????????? warmup <INTEGER>??????? # random delay for maximum N seconds
??????? }
??? }
??? real_server <IP ADDRESS> <PORT>{?? # 同上
??? ????weight <INTEGER>??????? ???????# 同上
??????? inhibit_on_failure????? ???????# 同上
??????? notify_up<STRING>|<QUOTED-STRING> ??# 同上
??????? notify_down<STRING>|<QUOTED-STRING> # 同上
?
??????? SMTP_CHECK {?????????????????? ?
??????????? connect_ip <IP ADDRESS>?? ??#Optional IP address to connect to
??????????? connect_port <PORT>???????? # Optional port to connect to
??????????? bindto <IP ADDRESS>???????? # Optional interface to use tooriginate the connection
??????????? bind_port <PORT>??????????? # Optional source port to originatethe connection from
??????????? connect_timeout<INTEGER>?? # Optional per-hostconnection timeout.
??????? ????fwmark <INTEGER>????????? # Optional fwmark to mark alloutgoing checker pakets with
??????????? host {???????????????? ?????# Optional additional host/port to check
??????????????? connect_ip <IP ADDRESS> #IP address to connect
??????????????? connect_port <PORT>???? # TCP port to connect
??????????????? bindto <IP ADDRESS>???? # IP address to bind to
??????????????? bind_port <PORT>??????? # TCP port to bind to
??????????????? connect_timeout<INTEGER>?? # Timeout connection
??????????????? fwmark <INTEGER>??????? # fwmark to set on socket (SO_MARK)
??????????? }
??????????? host {
??????????????? connect_ip <IP ADDRESS> #IP address to connect
??????????????? connect_port <PORT>???? # TCP port to connect
??????????????? bindto <IP ADDRESS>???? # IP address to bind to
??????????????? bind_port <PORT>??????? # TCP port to bind to
??????????????? connect_timeout<INTEGER>?? # Timeout connection
??????????????? fwmark <INTEGER>??????? # fwmark to set on socket (SO_MARK)
??????????? }
??????????? connect_timeout<INTEGER>? # Connection andread/write timeout
??????????? warmup <INTEGER>??????? # random delay for maximum N seconds
??????????? retry <INTEGER>???????????? # Number of times to retry afailed check
??????????? delay_before_retry <INTEGER># Delay in seconds before retrying
??????????? helo_name<STRING>|<QUOTED-STRING> # Host to use for the HELO request
??????? }
??? }
??? real_server <IP ADDRESS> <PORT>{?? # 同上
??????? weight <INTEGER>??????? ???????# 同上
??????? inhibit_on_failure????? ???????# 同上
??????? notify_up<STRING>|<QUOTED-STRING> ??# 同上
??????? notify_down <STRING>|<QUOTED-STRING># 同上
?
??????? MISC_CHECK {???????????????
??????????? misc_path<STRING>|<QUOTED-STRING>? # 外部執(zhí)行腳本。
??????????? misc_timeout <INTEGER>????? # 腳本執(zhí)行超時(shí)時(shí)間。
??????????? warmup <INTEGER>??????? # random delay for maximum N seconds
?
??????????? # If set, exit code from healthcheckeris used
??????????? # to dynamically adjust the weightas follows:
??????????? #??exit status 0: svc check success, weight
??????????? #???? unchanged.
??????????? #??exit status 1: svc check failed.
??????????? #??exit status 2-255: svc check success, weight
??????????? #???? changed to 2 less than exit status.
??????????? #??(for example: exit status of 255 would set
??????????? #???? weight to 253)
??????????? misc_dynamic
??????? }
??? }
}
轉(zhuǎn)載于:https://blog.51cto.com/369day/1729528
總結(jié)
以上是生活随笔為你收集整理的keepalived配置文件详解 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于H3C MSR路由器L2TP隧道协议
- 下一篇: SparkSql官方文档中文翻译(jav