Keepalive
1 keepalived介紹
官網(wǎng):http://keepalived.org/
功能:
基于vrrp協(xié)議完成地址流動
為vip地址所在的節(jié)點生成ipvs規(guī)則(在配置文件中預(yù)先定義)
為ipvs集群的各RS做健康狀態(tài)檢測
基于腳本調(diào)用接口完成腳本中定義的功能,進而影響集群事務(wù),以此支持nginx、haproxy等服務(wù)
2 Keepalived 架構(gòu)
官方文檔:
https://keepalived.org/doc/ http://keepalived.org/documentation.html

用戶空間核心組件:
vrrp stack:VIP消息通告 虛擬ip
checkers:監(jiān)測real server(簡單來說 就是監(jiān)控后端真實服務(wù)器的服務(wù))是否存活
system call:實現(xiàn) vrrp 協(xié)議狀態(tài)轉(zhuǎn)換時調(diào)用腳本的功能
SMTP:郵件組件(報警郵件)
IPVS wrapper:生成IPVS規(guī)則(直接生成ipvsadm)
Netlink Reflector:網(wǎng)絡(luò)接口(將虛擬地址ip(vip)地址飄動)
WatchDog:監(jiān)控進程(整個架構(gòu)是否有問題)
控制組件:提供keepalived.conf 的解析器,完成Keepalived配置
IO復(fù)用器:針對網(wǎng)絡(luò)目的而優(yōu)化的自己的線程抽象
內(nèi)存管理組件:為某些通用的內(nèi)存管理功能(例如分配,重新分配,發(fā)布等)提供訪問權(quán)限
keeplive可以配合ngnix等軟件,反向代理

3安裝keepalive
yum install keepalived -y
3.1 編譯安裝 keepalived
yum install gcc curl openssl-devel libnl3-devel net-snmp-devel -y # 安裝依賴包環(huán)境 https://keepalived.org/download.html # 官網(wǎng)下載安裝包 wget https://keepalived.org/software/keepalived-2.2.2.tar.gz tar xf keepalived-2.2.2.tar.gz cd keepalived-2.2.2/ ./configure --prefix=/usr/local/keepalived make && make install 自動生成service文件 #生成怕并修改配置文件 mkdir /etc/keepalived cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf 需要修改配置文件的21行 網(wǎng)卡名稱, 否則起不來 sed -i 's/eth0/ens33/'
4 Keepalived 相關(guān)文件
軟件包名:keepalived
主程序文件:/usr/sbin/keepalived
主配置文件:/etc/keepalived/keepalived.conf
配置文件示例:/usr/share/doc/keepalived/
Unit File:/lib/systemd/system/keepalived.service
Unit File的環(huán)境配置文件:
/etc/sysconfig/keepalived CentOS
4.1配置組成
/etc/keepalived/keepalived.conf 配置組成
GLOBAL CONFIGURATION
Global definitions(全局配置):定義郵件配置,route_id ,vrrp配置,組播地址 等
VRRP CONFIGURATION
VRRP instance(s):定義vrrp協(xié)議中的每個vrrp虛擬路由器的規(guī)則,基本信息
LVS CONFIGURATION(lvs調(diào)度服務(wù)器的規(guī)則設(shè)置)
Virtual server group(s)
Virtual server(s):LVS集群的VS和RS
4.2全局配置
#/etc/keepalived/keepalived.conf
global_defs {
notification_email {
root@localhost
#keepalived 發(fā)生故障切換時郵件發(fā)送的目標(biāo)郵箱,可以按行區(qū)分寫多個
root@localhost
360601212@qq.com
}
notification_email_from keepalived@localhost #發(fā)郵件的地址
smtp_server 127.0.0.1 #郵件服務(wù)器地址
smtp_connect_timeout 30 #郵件服務(wù)器連接timeout
router_id LVS01
#每個keepalived主機唯一標(biāo)識,建議使用當(dāng)前主機名,但多節(jié)點重名不影響
vrrp_skip_check_adv_addr
#對所有通告報文都檢查,會比較消耗性能,啟用此配置后,如果收到的通告報文和上一個報文是同一個路由器,則跳過檢查,默認值為全檢查
vrrp_strict
#嚴格遵守VRRP協(xié)議,啟用此項后以下狀況將無法啟動服務(wù):1.無VIP地址 2.配置了單播鄰居 3.在VRRP版本2中有IPv6地址,開啟動此項并且沒有配置vrrp_iptables時會自動開啟iptables防火墻規(guī)則,默認導(dǎo)致VIP無法訪問,建議不加此項配置。
vrrp_garp_interval 0
#gratuitous ARP messages 免費ARP報文發(fā)送延遲,0表示不延遲
vrrp_gna_interval 0
#unsolicited NA messages (不請自來)消息發(fā)送延遲
vrrp_mcast_group4 225.0.0.18
#指定組播IP地址范圍:224.0.0.0到239.255.255.255,默認值:224.0.0.18
vrrp_iptables
#此項和vrrp_strict同時開啟時,則不會添加防火墻規(guī)則,如果無配置vrrp_strict項,則無需啟用此項配置
}
4.3配置虛擬路由器
vrrp_instance{ # 為vrrp的實例名,一般為業(yè)務(wù)名稱 配置參數(shù) ...... } #配置參數(shù): state MASTER|BACKUP #當(dāng)前節(jié)點在此虛擬路由器上的初始狀態(tài),狀態(tài)為MASTER或者BACKUP interface IFACE_NAME #綁定為當(dāng)前虛擬路由器使用的物理接口,如:eth0,bond0,br0,可以和VIP不在一個網(wǎng)卡 virtual_router_id VRID #每個虛擬路由器惟一標(biāo)識,范圍:0-255,每個虛擬路由器此值必須唯一,否則服務(wù)無法啟動,同屬一個虛擬路由器的多個keepalived節(jié)點必須相同,務(wù)必要確認在同一網(wǎng)絡(luò)中此值必須唯一 priority 100 #當(dāng)前物理節(jié)點在此虛擬路由器的優(yōu)先級,范圍:1-254,值越大優(yōu)先級越高,每個keepalived主機節(jié)點此值不同 advert_int 1 #vrrp通告的時間間隔,默認1s authentication { #認證機制 auth_type AH|PASS #AH為IPSEC認證(不推薦),PASS為簡單密碼(建議使用) auth_pass #預(yù)共享密鑰,僅前8位有效,同一個虛擬路由器的多個keepalived節(jié)點必須一樣 } include /etc/keealived/conf.d/*.conf virtual_ipaddress { #虛擬IP,生產(chǎn)環(huán)境可能指定上百個IP地址 / brd dev scope label
范例:
[root@localhost keepalived]#vim keepalived.conf
global_defs {
notification_email {
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1 #郵箱地址寫成自己
smtp_connect_timeout 30
router_id lvs_01 #修改成主機名
vrrp_skip_check_adv_addr
#vrrp_strict 注釋嚴格模式
vrrp_garp_interval 0
vrrp_gna_interval 0
}
include /etc/keepalived/conf.d/*.conf #添加子配置文件
[root@localhost keepalived]#mkdir conf.d
[root@localhost conf.d]# vim conf.d/test.conf
vrrp_instance VI_1 {
state MASTER
interface ens33 #修改網(wǎng)卡
virtual_router_id 51 #路由器id 需要主從保持一致
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.91.188/24 #設(shè)置虛擬ip
}
}
將配置文件復(fù)制到從節(jié)點
scp keepalived.conf 192.168.91.11:/etc/keepalived/
scp keepalived.conf 192.168.91.11:/etc/conf.d/test.conf
修改配置文件
global_defs {
notification_email {
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id lvs_02 #修改成主機名
vrrp_skip_check_adv_addr
#vrrp_strict 注釋嚴格模式
vrrp_garp_interval 0
vrrp_gna_interval 0
}
include /etc/keepalived/conf.d/*.conf #添加子配置文件
vrrp_instance VI_1 {
state BACKUP #修改類型為備節(jié)點
interface ens33
virtual_router_id 51 #路由器id 需要主從保持一致 不用修改
priority 80 #優(yōu)先級調(diào)小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.91.188/24 #設(shè)置虛擬ip
}
}
4.3.1各種模式實驗(依托于大實驗成功后)
搶占模式,非搶占模式,延遲搶占模式
[root@localhost keepalived]#tcpdump -i ens33 -nn host 224.0.0.18 #啟動服務(wù)可以抓包查看 [root@localhost ~]#ping 192.168.91.10 #真實服務(wù)器ping是可以通的 可以做實驗 一直抓包 #非搶占模式 默認模式 使用的 搶占式 主節(jié)點會搶占回來,會造成 兩次網(wǎng)絡(luò)動蕩。 #注意:要關(guān)閉 VIP搶占,必須將各 keepalived 服務(wù)器state配置為BACKUP #非搶占式 #1主機配置 vrrp_instance VI_1 { state BACKUP #都為BACKUP interface ens33 virtual_router_id 66 priority 100 #優(yōu)先級高 advert_int 1 nopreempt #添加此行,都為nopreempt #2主機配置 vrrp_instance VI_1 { state BACKUP #都為BACKUP interface ens33 virtual_router_id 66 priority 80 #優(yōu)先級低 advert_int 1 nopreempt #添加此行,都為nopreempt #延遲搶占 preempt_delay # #指定搶占延遲時間為#s,默認延遲300s #注意:需要各keepalived服務(wù)器state為BACKUP,并且不要啟用 vrrp_strict #1主機配置 vrrp_instance VI_1 { state BACKUP #都為BACKUP interface eth0 virtual_router_id 66 priority 100 #優(yōu)先級高 advert_int 1 preempt_delay 30 #搶占延遲模式,默認延遲300s #2主機配置 vrrp_instance VI_1 { state BACKUP #都為BACKUP interface eth0 virtual_router_id 66: priority 80 #優(yōu)先級低 advert_int 1 priority 80 #優(yōu)先級高 advert_int 1 preempt_delay 30 #搶占延遲模式,默認延遲300s
4.3.2 單播多播地址
修改多播:
#兩邊都要加主從
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_R1
vrrp_mcast_group4 234.6.6.6
#添加此行
0-127
128-191
192-223
224-239
}
[root@localhost ~]# tcpdump -i ens33 -nn host 234.6.6.6
#抓包查看查看
[root@localhost keepalived]#systemctl stop keepalived.service
#模擬故障,可以正常切換
修改單播:
#在所有節(jié)點vrrp_instance語句塊中設(shè)置對方主機的IP,建議設(shè)置為專用于對應(yīng)心跳線網(wǎng)絡(luò)的地址,而非 使用業(yè)務(wù)網(wǎng)絡(luò) unicast_src_ip#指定發(fā)送單播的源IP unicast_peer { #指定接收單播的對方目標(biāo)主機IP ...... } #主服務(wù)器 vrrp_instance VI_1 { state MASRER interface eth0 virtual_router_id 66 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 10.0.0.10/24 dev eth0 label eth0:1 } unicast_src_ip 192.168.91.100 #本機IP master 100 backup101 unicast_peer{ 192.168.91.101 #指向?qū)Ψ街鳈CIP 如果有多個keepalived,再下面加其它節(jié)點的I } } vrrp_instance VI_2 { state BACKUP interface eth0 virtual_router_id 66 priority 80 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 10.0.0.11/24 dev eth0 label eth0:1 } unicast_src_ip 192.168.91.100 #本機IP unicast_peer { 192.168.91.101 #指向?qū)Ψ街鳈CIP 如果有多個keepalived,再下面加其它節(jié)點的IP } } 備服務(wù)器 vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 66 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 10.0.0.10/24 dev eth0 label eth0:1 } } vrrp_instance VI_2 { state MASTER interface eth0 virtual_router_id 66 priority 80 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 10.0.0.11/24 dev eth0 label eth0:1 } } #復(fù)制段 unicast_src_ip 192.168.91.100 unicast_peer { 192.168.91.101 } unicast_src_ip 192.168.91.101 unicast_peer { 192.168.91.100 } [root@localhost ~]#tcpdump -i ens33 host -nn 192.168.91.100 #在從節(jié)點抓包驗證 #復(fù)制有問題試試這段 unicast_src_ip 192.168.91.100 unicast_peer { 192.168.91.101 }
4.3.3 通知腳本
當(dāng)前節(jié)點成為主節(jié)點時觸發(fā)的腳本
notify_master|
當(dāng)前節(jié)點轉(zhuǎn)為備節(jié)點時觸發(fā)的腳本
notify_backup|
當(dāng)前節(jié)點轉(zhuǎn)為“失敗”狀態(tài)時觸發(fā)的腳本
notify_fault|
通用格式的通知觸發(fā)機制,一個腳本可完成以上三種狀態(tài)的轉(zhuǎn)換時的通知
notify|
當(dāng)停止VRRP時觸發(fā)的腳本
notify_stop|
#配置郵箱
[root@localhost opt]#vim /etc/mail.rc
set from=940132245@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=940132245@qq.com
set smtp-auth-password=
[root@localhost opt]#vim keepalive.sh
#!/bin/bash
#
contact='940132245@qq.com'
notify() {
mailsubject="$(hostname) to be $1, vip floating"
mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
echo "$mailbody" | mail -s "$mailsubject" $contact:
}
case $1 in
master)
notify master
;;
backup)
notify backup
;;
fault)
notify fault
;;
*)
echo "Usage: $(basename $0) {master|backup|fault}"
exit 1
;;
esac
[root@localhost opt]#vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 100
preempt_delay 30
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.91.16
}
notify_master "/opt/keepalive.sh master"
notify_backup "/opt/keepalive.sh backup"
notify_fault "/opt/keepalive.sh fault"
}
[root@ka1-centos7 ~]#chmod +x /etc/keepalived/keepalived.conf
#模擬master故障
[root@ka1-centos7 ~]#killall keepalived
4.3.4 日志功能
開啟單獨日志功能
[root@localhost opt]#keepalived --help #查看幫助 [root@localhost opt]#ps aux |grep keep root 25326 0.0 0.0 118616 1372 ? Ss 11月20 0:00 /usr/sbin/keepalived -D root 25327 0.0 0.1 127480 3336 ? S 11月20 0:01 /usr/sbin/keepalived -D root 25328 0.0 0.1 129500 2852 ? S 11月20 0:01 /usr/sbin/keepalived -D root 26877 0.0 0.0 112676 980 pts/0 S+ 00:37 0:00 grep --color=auto keep [root@localhost opt]#vim /lib/systemd/system/keepalived.service EnvironmentFile=-/etc/sysconfig/keepalived ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS [root@localhost opt]#vim /etc/sysconfig/keepalived KEEPALIVED_OPTIONS="-D -S 6" [root@localhost opt]#vim /etc/rsyslog.conf # Save boot messages also to boot.log local7.* /var/log/boot.log local6.* /var/log/keepalived.log [root@localhost opt]#systemctl restart keepalived.service rsyslog.service [root@localhost opt]#cat /var/log/keepalived.log #查看日志文件

實際操作:
LVS + Keepalived 高可用群集
環(huán)境
主keepalived:192.168.91.100 lvs 備keepalived:192.168.91.101 lvs web1:192.168.91.102 web2:192.168.91.103 vip:192.168.91.188 客戶機訪問
systemctl stop firewalld.service setenforce 0 [root@localhost ~]#systemctl stop firewalld.service [root@localhost ~]#setenforce 0 [root@localhost ~]#yum install ipvsadm keepalived -y [root@localhost ~]#modprobe ip_vs [root@localhost ~]#cat /proc/net/ip_vs IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn [root@localhost keepalived]#ipvsadm-save > /etc/sysconfig/ipvsadm [root@localhost keepalived]#systemctl start ipvsadm.service [root@localhost keepalived]#cd /etc/keepalived/ [root@localhost keepalived]#cp keepalived.conf keepalived.conf.bak #復(fù)制一份 [root@localhost keepalived]#vim keepalived.conf global_defs { router_id HA_TEST_R2 ####本路由器的服務(wù)器名稱 HA_TEST_R2 } vrrp_instance VI_1 { ####定義VRRP熱備實列 state BACKUP ####熱備狀態(tài),backup表示輔服務(wù)器 interface ens33 ####表示承載VIP地址的物理接口 virtual_router_id 1 ####虛擬路由器的ID號,每個熱備組保持一致 priority 99 ####優(yōu)先級,優(yōu)先級越大優(yōu)先級越高 advert_int 1 ####通告間隔秒數(shù)(心跳頻率) authentication { ####認證信息,每個熱備組保持一致 auth_type PASS ####認證類型 auth_pass 123456 ####認證密碼 } virtual_ipaddress { ####漂移地址(VIP),可以是多個 192.168.100.10 } } #需要修改項 global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 #修改郵箱指向自己(10行) smtp_connect_timeout 30 router_id LVS_01 #指定服務(wù)器名稱主備需要不一樣(12行) vrrp_skip_check_adv_addr #vrrp_strict #14行需要注釋否則服務(wù)啟動有問題 vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_instance VI_1 { state MASTER #指定服務(wù)器類型MASTER為主 BACKUP為備(20行) interface ens33 #修改網(wǎng)卡名稱為ens33(21) virtual_router_id 10 #指定虛擬路由器的ID號主備需要一致 #nopreempt #非搶占模式兩個節(jié)點都需要配置去掉注釋 priority 100 #設(shè)定優(yōu)先級數(shù)字越大優(yōu)先級越高,準備需要不一樣 advert_int 1 #通告間隔(查看是否存活) authentication { auth_type PASS #認證類型 auth_pass 123456 #修改驗證密碼,主備需要一樣(27行) } virtual_ipaddress { 192.168.91.188 #指定群集vip地址 } } virtual_server 192.168.91.188 80 { delay_loop 6 #健康間隔時間6秒 lb_algo rr #調(diào)度算法輪詢 lb_kind DR #lvs模式為DR persistence_timeout 0 #連接保持時間改為0 否則 無法體現(xiàn)效果 protocol TCP #采用協(xié)議 real_server 192.168.91.103 80 { #43行修改地址為真實主機地址 weight 1 #45行刪除 #節(jié)點權(quán)重 TCP_CHECK { connect_port 80 #檢查目標(biāo)端口 connect_timeout 3 #連接超時 nb_get_retry 3 #重試次數(shù) delay_before_retry 3 #重試間隔時間 } } real_server 192.168.91.105 80 { #第二個 weight 1 TCP_CHECK{ connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } #從服務(wù)器配置 systemctl stop firewalld.service setenforce 0 [root@localhost ~]#systemctl stop firewalld.service [root@localhost ~]#setenforce 0 [root@localhost ~]#yum install ipvsadm keepalived -y [root@localhost keepalived]#scp keepalived.conf root@192.168.91.101:/etc/keepalived/ #將配置文件拷入 從服務(wù)器 [root@localhost keepalived]#systemctl start keepalived.service [root@localhost keepalived]#ip a [root@localhost keepalived]#vim /etc/sysctl.conf [root@localhost keepalived]#sysctl -p net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0 [root@localhost keepalived]#vim keepalived.conf #備份keepalive 12 router_id LVS_02 20 state BACKUP 23 priority 99 [root@localhost keepalived]#systemctl start keepalived.service [root@localhost keepalived]#ipvsadm [root@localhost keepalived]#ipvsadm -ln [root@localhost keepalived]#vim /etc/sysctl.conf [root@localhost keepalived]#sysctl -p net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0
節(jié)點模式
[root@localhost ~]#systemctl stop firewalld [root@localhost ~]#systemctl start httpd [root@localhost ~]#yum install httpd -y [root@localhost html]#ifconfig lo:0 192.168.91.188 netmask 255.255.255.255 [root@localhost html]#vim /etc/sysctl.conf [root@localhost html]#sysctl -p net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 [root@localhost network-scripts]#route add -host 192.168.91.188 dev lo:0 #設(shè)置路由
5 面試重點 keepalived 主上也有188 從188
#模擬腦裂 [root@localhost keepalived]#iptables -A INPUT -s 192.168.91.100 -j REJECT #在備份主機中加入此項 [root@localhost keepalived]#ip a #可以在主備上都發(fā)現(xiàn)vip地址
腦裂解釋
什么是腦裂? 在高可用(HA)系統(tǒng)中,當(dāng)聯(lián)系2個節(jié)點的“心跳線”斷開時,本來為一整體、動作協(xié)調(diào)的HA系統(tǒng),就分裂成為2個獨立的個體。 由于相互失去了聯(lián)系,都以為是對方出了故障。兩個節(jié)點上的HA軟件像“裂腦人”一樣,爭搶“共享 資源”、爭起“應(yīng)用服務(wù)”,就會發(fā)生嚴重后果。共享資源被瓜分、兩邊“服務(wù)”都起不來了;或者兩邊 “服務(wù)”都起來了,但同時讀寫“共享存儲”,導(dǎo)致數(shù)據(jù)損壞 都有哪些原因?qū)е履X裂? 高可用服務(wù)器對之間心跳線鏈路發(fā)生故障,導(dǎo)致無法正常通信。 因心跳線壞了(包括斷了,老化)。 因網(wǎng)卡及相關(guān)驅(qū)動壞了,ip配置及沖突問題(網(wǎng)卡直連) 因心跳線間連接的設(shè)備故障(網(wǎng)卡及交換機) 高可用服務(wù)器上開啟了 iptables防火墻阻擋了心跳消息傳輸。 高可用服務(wù)器上心跳網(wǎng)卡地址等信息配置不正確,導(dǎo)致發(fā)送心跳失敗 其他服務(wù)配置不當(dāng)?shù)仍颍缧奶绞讲煌?,心跳廣插沖突、軟件Bug等。 多組keepalive服務(wù)器造成 組播沖突 1.換組播地址 2.改成單播 默認: 單播: 組播: 廣播: A 1 -127 B 128-191 C 192-223 D 224-239 224.0.0.18 20. 如何解決keepalived腦裂問題? 在實際生產(chǎn)環(huán)境中,我們從以下方面防止腦裂: #同時使用串行電纜和以太網(wǎng)電纜連接、同時使用兩條心跳線路,這樣一條線路斷了,另外一條還是好的,依然能傳送心跳消息 #當(dāng)檢查腦裂時強行關(guān)閉一個心跳節(jié)點(這個功能需要特殊設(shè)備支持,如stonith、fence)相當(dāng)于備節(jié)點接收不到心跳消息,通過單獨的線路發(fā)送關(guān)機命令關(guān)閉主節(jié)點的電源 rsyslog 分割日志 #做好對腦裂的監(jiān)控報警解決常見方案: 如果開啟防火墻,一定要讓心跳消息通過,一般通過允許IP段的形式解決 可以拉一條以太網(wǎng)網(wǎng)線或者串口線作為主被節(jié)點心跳線路的冗余 開發(fā)檢測程序通過監(jiān)控軟件檢測腦裂 keepalived lvs 負載均衡 反向代理 lvs 高可用 后端服務(wù)器的 健康性檢查問題 正向代理作用: 加快訪問速度 可以繞過防火墻 代理的客戶端 我要訪問 google 正向代理服務(wù)器 google 服務(wù)器 反向代理: 負載均衡 優(yōu)化資源 代理的服務(wù)端的 客戶端 不需要知道服務(wù)端到底是什么樣子的,只要能訪問就行 keepalived 腦裂 vrrp 協(xié)議 心跳線收不到
6.實現(xiàn)其它應(yīng)用的高可用性VRRP Script
keepalived利用 VRRP Script 技術(shù),可以調(diào)用外部的輔助腳本進行資源監(jiān)控,并根據(jù)監(jiān)控的結(jié)果實現(xiàn)優(yōu)先動態(tài)調(diào)整,從而實現(xiàn)其它應(yīng)用的高可用性功能
任何軟件組合 形成 高科用的 架構(gòu)
vrrp script
手動編寫腳本 , 來實現(xiàn) 故障的切換
參考配置文件:
/usr/share/doc/keepalived/keepalived.conf.vrrp.localcheck
6.1VRRP Script配置
分兩步實現(xiàn):
定義腳本
vrrp_script:自定義資源監(jiān)控腳本,vrrp實例根據(jù)腳本返回值,公共定義,可被多個實例調(diào)用,定義在vrrp實例之外的獨立配置塊,一般放在global_defs設(shè)置塊之后。通常此腳本用于監(jiān)控指定應(yīng)用的狀態(tài)。一旦發(fā)現(xiàn)應(yīng)用的狀態(tài)異常,則觸發(fā)對MASTER節(jié)點的權(quán)重減至低于SLAVE節(jié)點,從而實現(xiàn) VIP 切換到 SLAVE 節(jié)點
vrrp_script

Keepalive基礎(chǔ)知識