keepalived概述
keepalived軟件就是通過vrrp協議來實現高可用功能。 ?
VRRP通信原理
VRRP就是虛擬路由冗余協議,它的出現就是為了解決靜態路由的單點故障。
VRRP是通過一種競選一種協議機制來將路由交個某臺VRRP路由器。
VRRP 用IP多播的方式(多播地址224.0.0.18)實現高可用之間的通信工作時主節點發包,備節點接包,當備節點接收不到主節點發的數據包的時候,就啟動接管主節點的資源,備節點可以有多個,通過優先級來進行競選,但一般keepalived系統運維工作時對VRRP使用加密協議加密數據,但keepalived官方目前還是推薦用明文的方式認證類型和密碼。
keepalived的體系,模塊及作用
故障自動切換(failover)
實現LVS集群中節點健康檢查
節點服務器高可用性(HA)、
keepalived體系架構中主要有三個模塊,分別是core、check和vrrp。
core模塊:為keepalived的核心,負責主進程的啟動、維護及全局配置文件的加載和解析。
vrrp模塊:是來實現VRRP協議的。
check模塊:負責健康檢查,常見的方式有端口檢查及URL檢查。
keepalived的工作原理
keepalived高可用之間是通過VRRP進行通信,VRRP是通過競選的來確定主備,主優先級高于備,因此,工作時主優先獲得所有資源,備節點處于等待狀態,當主掛了的時候,備節點就會接管主節點資源,然后頂替主節點對外提供服務。
keepalived服務之間,只有作為主的服務器一直發送VRRP廣播包,告訴備我還活著,此時備不會去搶占主,當主不可用的時候,即備要監聽不到主發送的廣播包時,它就會啟動相關服務來去接管資源,保證業務的連續性,接管速度最快小于1秒。
腦裂
在高可用( HA )系統中,當聯系 2 個節點的 “ 心跳線 ” 斷開時,本來為一整體、動作協調的 HA 系統, 就分裂成為 2 個獨立的個體。 由于相互失去了聯系,都以為是對方出了故障。兩個節點上的 HA 軟件會爭搶 “ 共享資源 ” 、爭起 “ 應用服務 ” ,就會發生嚴重后果。共享資源被瓜分、兩邊 “ 服務 ” 都起不來了;或者兩邊“ 服務 ” 都起來了,但同時讀寫 “ 共享存儲 ” ,導致數據損壞。
實例
1.配置負載調度器(主、備相同)
systemctl stop firewalld.service
setenforce 0yum -y install ipvsadm keepalived
modprobe ip_vs#配置keeplived
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
?
?
配置vip(虛擬IP)
vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yesifcon
IPADDR=192.168.10.188
NETMASK=255.255.255.255systemctl restart network
ifup ens33:0
#啟動 ipvsadm 服務
systemctl start ipvsadm
ipvsadm -C
ipvsadm -A -t 192.168.11.180:80 -s rr
ipvsadm -a -t 192.168.11.180:80 -r 192.168.11.33:80 -g
ipvsadm -a -t 192.168.11.180:80 -r 192.168.11.11:80 -g
ipvsadm -ln
ipvsadm-save > /etc/sysconfig/ipvsadm
調整 proc 響應參數,關閉Linux 內核的重定向參數響應
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
2、配置節點服務器
#配置vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.188
NETMASK=255.255.255.255
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p
3.測試驗證
在客戶端訪問 http://192.168.11.180/
?
?