keepalived配置文件详解
keepalived配置文件詳解????
????keepalived配置文件分為三個部分:全局配置(Globals configurations)、vrrp配置(VRRP configuration)、 LVS配置(LVS configuration),針對這三部分對keepalived配置文件進行解析。
1、全局配置
全局配置分為2個子塊:Global definitions與Static routes。
(1)、Global definitions
主要要是配置故障發生時的通知對象以及機器標識
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:接收告警通知的郵箱,可以設置多個。
notification_email_fromemail:告警郵件從那個郵箱發出。
smtp_server:發送告警郵件的SMTP服務器地址。
smtp_connect_timeout:連接SMTP服務器超時時間。
router_id: #運行keepalived的機器的路由標識,主備機一致。
(2)、Static addresses
static_ipaddress和static_routes用來給服務器配置靜態的IP地址/路由。如果你的機器上已經配置了IP和路由,那么這兩個區域可以不用配置。
一般情況下你的機器都會有IP地址和路由信息的,因此沒必要再在這兩個區域配置。
語法如下:
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。
如下為靜態地址與靜態路由配置示例:
示例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實現HA部分重要內容,同樣也分為VRRP scripts、VRRP synchronization group、VRRP instance三個子塊實現。
(1)、VRRP scripts
vrrp_script <STRING> {????????? # vrrp_script與track_script結合使用,<STRING>與track_script中<STRING>值設置為相同。
script <QUOTED_STRING>?????#監控腳本或者監控命令。
interval<INTEGER>????????? #腳本運行時間間隔。
weight <INTEGER:-254..254>?#設置weight值,取值范圍-254-254。keepalived會定時執行腳本并對腳本執行的結果進行分析,動態調整vrrp_instance的優先級。
??? fall <INTEGER>????????????? #運行失敗指定次數后發生切換。
??? rise <INTEGER>??????????? ??#運行成功指定次數后不發生切換。
}
(2)、VRRP synchronization group
vrrp_rsync_group用來定義vrrp_intance組,使得這個組內成員動作一致。舉個例子來說明其功能:兩個vrrp_instance同屬于一個vrrp_rsync_group,那么其中一個vrrp_instance發生故障切換時,另一個vrrp_instance也會跟著切換(即使這個instance沒有發生故障)。
vrrp_sync_group <STRING>{ #vrrp_sync_group組名。
group {???????? ??????????????
????? <STRING>????? #指定加入vrrp_sync_group組的VRRP_Instance。
????? <STRING> ? ??? ? ? ? ? ?
}
notify_master <STRING>|<QUOTED-STRING> #表示切換為master時所執行的腳本。
notify_backup <STRING>|<QUOTED-STRING> #表示切換為backup時所執行的腳本。
notify_fault <STRING>|<QUOTED-STRING>? #表示切換為fault時所執行的腳本。
notify <STRING>|<QUOTED-STRING>??????? #表示任何一狀態切換時都會調用該腳本,并且該腳本在以上三個腳本執行完成之后進行調用,keepalived會自動傳遞4個參數。
??? $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服務器在切換后發送郵件通知。
}
(3)、VRRP instance
??? vrrp_instance用來定義對外提供服務的VIP區域及其相關屬性。
常用參數說明:
use_vmac:使用VRRP的虛擬MAC地址。
state MASTER|BACKUP:設置節點狀態。keepalived啟動時會將priority比較大的節點選舉為MASTER。
interface <STRING>:用于HA檢測與對外提供服務的網絡的接口。
track_interface :監控指定的網卡,如果任何一個不通就會切換到FALT狀態。
track_script:與vrrp_script參數一同使用,設定監控服務的腳本,<STRING>與vrrp_script參數中的名稱相同。
mcast_src_ip :發送多播包的地址,如果不設置,默認使用綁定的網卡的primary IP。
dont_track_primary:忽略vrrp的interface錯誤,默認不設置。
lvs_sync_daemon_interface <STRING>:負載均衡器之間的監控接口,類似于HA HeartBeat的心跳線。但它的機制優于Heartbeat,因為它沒有“裂腦”這個問題,它是以優先級這個機制來規避這個麻煩的。.
garp_master_delay <INTEGER>:當切為主狀態后多久更新ARP緩存,默認為5秒。
virtual_router_id <INTEGER-0..255>:虛擬路由標識,主機與備機保持一致。
priority <INTEGER-0..255>:優先級,主機與備機必須不同。
advert_int <INTEGER>:同步通知間隔,MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位為秒。
authentication {??????????? ?????????????????
??????? auth_type PASS|AH:認證類型為PASS或AH,推薦使用PASS,主備必須使用相同認證方式及密碼才可以通信。
??????? auth_pass<STRING>:設置認證密碼。密碼最多8位。
??? }
virtual_ipaddress:漂移地址設置,可以設置多個。
virtual_routes : 虛擬路由,當IP漂過來之后需要添加的路由信息。
nopreempt:功能類似于heartbeat的auto_failback,設置不自動切回,該參數只能設置在state為backup的服務器上,且優先權必須高于其他節點的服務器上。
preempt_delay: 搶占延時,默認為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時,執行指定的腳本。
notify <STRING>|<QUOTED-STRING>: ? ? ? 與vrrp_sync_group中相同。
smtp_alert:與vrrp_sync_group中相同。
3、LVS配置
LVS的配置包括2部分:虛擬主機組(virtual server group)和虛擬主機(virtual server)。虛擬主機組一般用不到,這里不介紹。以下為虛擬主機常用參數介紹。
virtual_server<IP ADDRESS> <PORT> { ? ? # 虛擬服務器設置標識,指定虛擬ip與端口,ip地址與端口號之間用空格隔開。
??? delay_loop <INTEGER> ? ? ? ? ? ? ? ?# 延遲輪詢時間
??? lvs_sched rr|wrr|lc|wlc|lblc|sh|dh? # LVS調度算法
??? ops???????????????? #Apply One-Packet-Scheduling (only for UDP),不常用。
??? lvs_method NAT|DR|TUN ? ? ? ? ? ? ? # LVS調度類型
??? persistence_timeout <INTEGER>?? ??? # 會話保持時間,單位為秒。
??? persistence_granularity <NETMASK>?? # 此選項是配合persistence_timeout,后面跟的值是子網掩碼,表示持久連接的粒度。
??? protocol TCP ? ? ? ? ? ? ? ? ? ? ? ?# 指定協議
??? ha_suspend ? ? ? ? ? ? ? ? ? ? ? ? ?#節點狀態從MASTER到BACKUP狀態切換時,暫不啟用real_server健康檢查。
??? virtualhost <STRING> ? ? ? ? ? ? ? ?# HTTP_GET做健康檢查時,檢查的Web服務器的虛擬主機。
??? sorry_server <IP ADDRESS><PORT> ? ? # 備用機,所有的real server失效后啟用。??
????real_server健康檢查方法有HTTP_GET|SSL_GET、TCP_CHECK、SMTP_CHECK、MISC_CHECK多種,以下分別做以介紹如何使用。
?real_server <IP ADDRESS> <PORT> {? # 定義realserver
???? weight <INTEGER> ? ?# 用來配置real server節點的權值,數字越大權值越高。默認為1,0為失效。?
???? inhibit_on_failure ?# 服務器健康檢查失敗時,將其weight設置為0,而不是直接從IPVS里面刪除。
??? ?notify_up <STRING>|<QUOTED-STRING>?? # 在檢測到real server節點服務up狀態后執行腳本。
???? notify_down<STRING>|<QUOTED-STRING> ?# 在檢測到real server節點服務down狀態后執行腳本。
?????? HTTP_GET|SSL_GET {??
??????????? url {?????? ??????? # HTTP/SSL檢查的URL,這里可以指定多個URL。
????????????? path <STRING>???? # 詳細的URL路徑。
????????????? digest <STRING>?????? # SSL檢查后的摘要信息。
????????????? status_code <INTEGER> # HTTP檢查的返回狀態碼,一般為200.
??????????? }??????????????????????
??????????? url {
????????????? path <STRING>
????????????? digest <STRING>
????????????? status_code <INTEGER>
??????????? }
? ? ?connect_ip <IP ADDRESS> # 健康檢查連接的ip地址,如果不指定默認為realserver指定的IP。
???? connect_port <PORT>???? # 健康檢查的端口,如果不指定默認為real server指定的端口。
??? ?bindto <IP ADDRESS>???? # 如果本機有多個網卡配置多個地址,那么通過此地址來發送請求對服務進行健康檢查。
???? bind_port <PORT>??????? # 通過本機此端口來發送請求對服務進行健康檢查。
???? connect_timeout <INTEGER>?? # 連接超時時間
???? fwmark <INTEGER>??????? # fwmark to set on socket (SO_MARK)
???? nb_get_retry <INTEGER>? # 重試次數。
???? delay_before_retry <INTEGER> # 重試間隔時間(秒)。
???? warmup <INTEGER>??????? # 如果后端有眾多realserver時,如果按精確時間發送檢測報文,可能會造成本機的網絡堵塞,因此可以使用warmup?指定一個時間,表示將發送檢測報文的精確時間差開一點的時間,以免造成本機堵塞。
??????? }
??? }
??? 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>? # 外部執行腳本。
??????????? misc_timeout <INTEGER>????? # 腳本執行超時時間。
??????????? 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
??????? }
??? }
}
轉載于:https://blog.51cto.com/369day/1729528
總結
以上是生活随笔為你收集整理的keepalived配置文件详解 的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于H3C MSR路由器L2TP隧道协议
- 下一篇: SparkSql官方文档中文翻译(jav