Keepalived配置文件详解
生活随笔
收集整理的這篇文章主要介紹了
Keepalived配置文件详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
keepalivedkeepalived是集群管理中保證集群高可用的一個服務軟件,其功能類似于heartbeat,用來防止單點故障。keepalived工作原理keepalived是以VRRP(Virtual Router Redundancy Protocol,即虛擬路由冗余協議)協議為實現基礎的。虛擬路由冗余協議,可以認為是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在局域網內其他機器的默認路由為該vip),master會發組播,當backup收不到vrrp包時就認為master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。keepalived主要有三個模塊,分別是core、check和vrrp。core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析。check負責健康檢查,包括常見的各種檢查方式。vrrp模塊是來實現VRRP協議的。keepalived的配置文件keepalived只有一個配置文件keepalived.conf,里面主要包括以下幾個配置區域,分別是global_defs、(static_ipaddress、static_routes)、vrrp_script、vrrp_instance和virtual_server。
配置前提:(1) 各節點時間必須同步;(2) 確保iptables及selinux不會成為阻礙;
配置文件詳解#全局定義塊global_defs { # 郵件通知配置 notification_email { # 故障發生時給誰發郵件通知 email1 email2 } notification_email_from email # 通知郵件從哪個地址發出 smtp_server host ????????# 通知郵件的smtp地址 smtp_connect_timeout num # 連接smtp服務器的超時時間 lvs_id string ????????????????????????# lvs負載均衡器標識,在一個網絡內,它的值應該是唯一的 router_id string ????????????????????????# 標識本節點的字條串,通常為hostname,故障發生時,郵件通知會用到}
#本節點的IP和路由信息,一般不用配置static_ipaddress {? ? 10.210.214.163/24 brd 10.210.214.255 dev eth0? ? ...}static_routes {? ? 10.0.0.0/8 via 10.210.214.1 dev eth0? ? ...}#VRRP健康檢查,當時檢查失敗時會將vrrp_instance的priority減少相應的值?vrrp_script?check_nginx?{???? ????????????????????script?"/root/check_nginx.sh"?? #定義監控nginx的腳本????interval?2???????????????????????????? #監控時間間隔??????weight?2????????????????????????????? #失敗之后減少2點}?#VRRP實例定義塊#用來定義vrrp_intance組,使得這個組內成員動作一致vrrp_sync_group string { group { string string }notify_master /path/xx.sh #指定當切換到master時,執行的腳本netify_backup /path/xx.sh #指定當切換到backup時,執行的腳本notify_fault "path/xx.sh VG_1" #故障時執行的腳本notify /path/xx.sh?smtp_alert #使用global_defs中提供的郵件地址和smtp服務器發送郵件通知}vrrp_instance string { #vrrp實例名,可以配置多個,至少要需要修改id,即vrrp組名 state MASTER|BACKUP #實例狀態,MASTER 和 BACKUP兩種,全部大寫。搶占模式下,其中MASTER為工作狀態,BACKUP為備用狀態。當MASTER所在的服務器失效時,BACKUP所在的服務會自動把它的狀態由BACKUP切換到MASTER狀態。當失效的MASTER所在的服務恢復時,BACKUP從MASTER恢復到BACKUP狀態,如果設置了nopreempt這個值不起作用,主備考priority決定 virtual_router_id num #vrrp組名,每個節點設置必須一樣,可選擇IP最后一段使用? interface string #對外提供服務的網卡接口,實例綁定網卡 ???????dont_track_primary ??????#忽略vrrp的interface錯誤(默認不設置)???????? mcast_src_ip @IP ??????#發送多播包的地址,如果不設置默認使用綁定網卡的primary ip???????? priority num ??????#節點優先級,取值范圍0~254,MASTER比BACKUP高???????? advert_int num ??????#MASTER與BACKUP節點間同步檢查的時間間隔,單位為秒? ??????nopreempt ???? #禁止搶占服務。MASTER從掛掉到恢復,不再將服務搶占過來 smtp_alert ??????#有故障時是否激活郵件通知? ??????preempt_delay ??????#搶占延時,默認5分鐘??? ??? debug ??????#debug級別??????? lvs_sync_daemon_interface string #負載均衡器之間的監控接口,類似于 HA HeartBeat 的心跳線。但它的機制優于 Heartbeat,因為它沒有“裂腦”這個問題,它是以優先級這個機制來規避這個麻煩的。在 DR 模式中,lvs_sync_daemon_inteface與服務接口interface使用同一個網絡接口。一般不調 authentication { ????#驗證類型和驗證密碼,兩節點必須一致。類型有 PASS、AH ,通常使用PASS,據說AH使用時有問題。驗證密碼為明文,同一vrrp 實例使用相同的密碼才能正常通信 auth_type PASS|AH auth_pass string } virtual_ipaddress { ????????????????????????# 虛擬IP地址池,可有多個IP,每個IP占一行,不需要指定子網掩碼。注意:這個IP必須與我們的設定的vip保持一致。 IP IP }}#虛擬服務器定義塊virtual_server (IP PORT)|(fwmark num) { 定義一個虛擬服務器,這個ip是virtual_ipaddress中定義的其中一個,后面一個空格,然后加上虛擬服務的端口號 delay_loop num 健康檢查時間間隔,單位:秒? lb_algo rr|wrr|lc|wlc|sh|dh|lblc 負載均衡調度算法,互聯網應用常用方式為wlc或rr? lb_kind NAT|DR|TUN 負載均衡轉發規則。DR|NAT|TUN 3種,一般使用路由(DR) persistence_timeout num http服務會話保持時間,單位:秒? protocol TCP|UDP 轉發協議,分為TCP和UDP兩種 persistence_granularity <NETMASK> lvs會話保持粒度??? virtualhost <string> 檢查的web服務器的虛擬主機(host:頭)??????? sorry_server<IPADDR> <port> 備用機,所有realserver失效后啟用 real_server @IP PORT { 真實服務器IP和端口,可以定義多個 weight num ????????負載權重,值越大,轉發的優先級越高? notify_down /path/script.sh 服務停止后執行的腳本
TCP_CHECK { ????????TCP服務有效性檢測? connect_port num 服務健康檢查的端口 nb_get_retry 3 重連次數??????????? delay_before_retry 3 重連間隔時間 connect_timeout num 服務連接超時時長,單位:秒? }
HTTP_GET|SSL_GET { ????????HTTP健康檢查 url { 檢查url,可指定多個 path /??? ???? digest <string> 頁面的MD5值,不能亂寫??? ???? status_code 200 檢查的返回狀態碼 } connect_port num 服務健康檢查的端口 connect_timeout num 服務連接超時時長,單位:秒 nb_get_retry num 服務連接失敗重試次數? delay_before_retry num 重試連接間隔,單位:秒 }
MISC_CHECK{ ????????????MISC健康檢查,調用腳本檢查??? misc_path <string> | <quoted-string> 外部腳本路徑??? misc_timeout 腳本執行超時時間?? misc_dynamic 如設置該項,則退出狀態碼會用來動態調整服務器的權重,返回0 正常,不修改;返回1,檢查失敗,權重改為0;返回2-255,正常,權重設置為:返回狀態碼-2????}}
進階:keepalived+LVS安裝keeplived和lvs在keeplived中配置虛擬服務器模塊簡單說一下DR原理: ?假設A為前端負載均衡服務器, B,C為后端真實服務器。 A接收到數據包以后,會把數據包的MAC地址改成B的(根據調度算法,假設發給B服務器),然后把數據包重新發出去,交換機收到數據包根據MAC地址找到B,把數據包交給B。 這時B會收到數據包,同時驗證請求IP地址,由于數據包里的IP地址是給A的,所以正常情況下B會丟棄數據包,為了防止這種情況,需要在B機器的回環網卡上配置A的IP地址。并設置ARP壓制。在真是服務器上運行腳本#!/bin/bash #description : start realserverVIP=192.168.1.110/etc/rc.d/init.d/functionscase "$1" instart)echo " start LVS of REALServer"/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 upecho "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announce;;stop)/sbin/ifconfig lo:0 downecho "close LVS Directorserver"echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "0" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/all/arp_announce;;*)echo "Usage: $0 {start|stop}"exit 1esac 需要修改為你自己的VIP,然后檢查虛擬網卡是否已綁定到回環網卡即可
配置前提:(1) 各節點時間必須同步;(2) 確保iptables及selinux不會成為阻礙;
配置文件詳解#全局定義塊global_defs { # 郵件通知配置 notification_email { # 故障發生時給誰發郵件通知 email1 email2 } notification_email_from email # 通知郵件從哪個地址發出 smtp_server host ????????# 通知郵件的smtp地址 smtp_connect_timeout num # 連接smtp服務器的超時時間 lvs_id string ????????????????????????# lvs負載均衡器標識,在一個網絡內,它的值應該是唯一的 router_id string ????????????????????????# 標識本節點的字條串,通常為hostname,故障發生時,郵件通知會用到}
#本節點的IP和路由信息,一般不用配置static_ipaddress {? ? 10.210.214.163/24 brd 10.210.214.255 dev eth0? ? ...}static_routes {? ? 10.0.0.0/8 via 10.210.214.1 dev eth0? ? ...}#VRRP健康檢查,當時檢查失敗時會將vrrp_instance的priority減少相應的值?vrrp_script?check_nginx?{???? ????????????????????script?"/root/check_nginx.sh"?? #定義監控nginx的腳本????interval?2???????????????????????????? #監控時間間隔??????weight?2????????????????????????????? #失敗之后減少2點}?#VRRP實例定義塊#用來定義vrrp_intance組,使得這個組內成員動作一致vrrp_sync_group string { group { string string }notify_master /path/xx.sh #指定當切換到master時,執行的腳本netify_backup /path/xx.sh #指定當切換到backup時,執行的腳本notify_fault "path/xx.sh VG_1" #故障時執行的腳本notify /path/xx.sh?smtp_alert #使用global_defs中提供的郵件地址和smtp服務器發送郵件通知}vrrp_instance string { #vrrp實例名,可以配置多個,至少要需要修改id,即vrrp組名 state MASTER|BACKUP #實例狀態,MASTER 和 BACKUP兩種,全部大寫。搶占模式下,其中MASTER為工作狀態,BACKUP為備用狀態。當MASTER所在的服務器失效時,BACKUP所在的服務會自動把它的狀態由BACKUP切換到MASTER狀態。當失效的MASTER所在的服務恢復時,BACKUP從MASTER恢復到BACKUP狀態,如果設置了nopreempt這個值不起作用,主備考priority決定 virtual_router_id num #vrrp組名,每個節點設置必須一樣,可選擇IP最后一段使用? interface string #對外提供服務的網卡接口,實例綁定網卡 ???????dont_track_primary ??????#忽略vrrp的interface錯誤(默認不設置)???????? mcast_src_ip @IP ??????#發送多播包的地址,如果不設置默認使用綁定網卡的primary ip???????? priority num ??????#節點優先級,取值范圍0~254,MASTER比BACKUP高???????? advert_int num ??????#MASTER與BACKUP節點間同步檢查的時間間隔,單位為秒? ??????nopreempt ???? #禁止搶占服務。MASTER從掛掉到恢復,不再將服務搶占過來 smtp_alert ??????#有故障時是否激活郵件通知? ??????preempt_delay ??????#搶占延時,默認5分鐘??? ??? debug ??????#debug級別??????? lvs_sync_daemon_interface string #負載均衡器之間的監控接口,類似于 HA HeartBeat 的心跳線。但它的機制優于 Heartbeat,因為它沒有“裂腦”這個問題,它是以優先級這個機制來規避這個麻煩的。在 DR 模式中,lvs_sync_daemon_inteface與服務接口interface使用同一個網絡接口。一般不調 authentication { ????#驗證類型和驗證密碼,兩節點必須一致。類型有 PASS、AH ,通常使用PASS,據說AH使用時有問題。驗證密碼為明文,同一vrrp 實例使用相同的密碼才能正常通信 auth_type PASS|AH auth_pass string } virtual_ipaddress { ????????????????????????# 虛擬IP地址池,可有多個IP,每個IP占一行,不需要指定子網掩碼。注意:這個IP必須與我們的設定的vip保持一致。 IP IP }}#虛擬服務器定義塊virtual_server (IP PORT)|(fwmark num) { 定義一個虛擬服務器,這個ip是virtual_ipaddress中定義的其中一個,后面一個空格,然后加上虛擬服務的端口號 delay_loop num 健康檢查時間間隔,單位:秒? lb_algo rr|wrr|lc|wlc|sh|dh|lblc 負載均衡調度算法,互聯網應用常用方式為wlc或rr? lb_kind NAT|DR|TUN 負載均衡轉發規則。DR|NAT|TUN 3種,一般使用路由(DR) persistence_timeout num http服務會話保持時間,單位:秒? protocol TCP|UDP 轉發協議,分為TCP和UDP兩種 persistence_granularity <NETMASK> lvs會話保持粒度??? virtualhost <string> 檢查的web服務器的虛擬主機(host:頭)??????? sorry_server<IPADDR> <port> 備用機,所有realserver失效后啟用 real_server @IP PORT { 真實服務器IP和端口,可以定義多個 weight num ????????負載權重,值越大,轉發的優先級越高? notify_down /path/script.sh 服務停止后執行的腳本
TCP_CHECK { ????????TCP服務有效性檢測? connect_port num 服務健康檢查的端口 nb_get_retry 3 重連次數??????????? delay_before_retry 3 重連間隔時間 connect_timeout num 服務連接超時時長,單位:秒? }
HTTP_GET|SSL_GET { ????????HTTP健康檢查 url { 檢查url,可指定多個 path /??? ???? digest <string> 頁面的MD5值,不能亂寫??? ???? status_code 200 檢查的返回狀態碼 } connect_port num 服務健康檢查的端口 connect_timeout num 服務連接超時時長,單位:秒 nb_get_retry num 服務連接失敗重試次數? delay_before_retry num 重試連接間隔,單位:秒 }
MISC_CHECK{ ????????????MISC健康檢查,調用腳本檢查??? misc_path <string> | <quoted-string> 外部腳本路徑??? misc_timeout 腳本執行超時時間?? misc_dynamic 如設置該項,則退出狀態碼會用來動態調整服務器的權重,返回0 正常,不修改;返回1,檢查失敗,權重改為0;返回2-255,正常,權重設置為:返回狀態碼-2????}}
進階:keepalived+LVS安裝keeplived和lvs在keeplived中配置虛擬服務器模塊簡單說一下DR原理: ?假設A為前端負載均衡服務器, B,C為后端真實服務器。 A接收到數據包以后,會把數據包的MAC地址改成B的(根據調度算法,假設發給B服務器),然后把數據包重新發出去,交換機收到數據包根據MAC地址找到B,把數據包交給B。 這時B會收到數據包,同時驗證請求IP地址,由于數據包里的IP地址是給A的,所以正常情況下B會丟棄數據包,為了防止這種情況,需要在B機器的回環網卡上配置A的IP地址。并設置ARP壓制。在真是服務器上運行腳本#!/bin/bash #description : start realserverVIP=192.168.1.110/etc/rc.d/init.d/functionscase "$1" instart)echo " start LVS of REALServer"/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 upecho "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announce;;stop)/sbin/ifconfig lo:0 downecho "close LVS Directorserver"echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "0" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/all/arp_announce;;*)echo "Usage: $0 {start|stop}"exit 1esac 需要修改為你自己的VIP,然后檢查虛擬網卡是否已綁定到回環網卡即可
總結
以上是生活随笔為你收集整理的Keepalived配置文件详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 清理autodesk产品注册表_如何清理
- 下一篇: 学习一下 PDF417 条码