東莞免費(fèi)企業(yè)網(wǎng)站模板推廣搜狗網(wǎng)站收錄入口
keepalived
Keepalived及其工作原理
Keepalived 是一個(gè)基于VRRP協(xié)議來(lái)實(shí)現(xiàn)的LVS服務(wù)高可用方案,可以解決靜態(tài)路由出現(xiàn)的單點(diǎn)故障問(wèn)題
在一個(gè)LVS服務(wù)集群中通常有主服務(wù)器(MASTER)和備份服務(wù)器(BACKUP)兩種角色的服務(wù)器,但是對(duì)外表現(xiàn)為一個(gè)虛擬IP,主服務(wù)器會(huì)發(fā)送
VRRP通告信息給備份服務(wù)器,當(dāng)備份服務(wù)器收不到VRRP消息的時(shí)候,即主服務(wù)器異常的時(shí)候,備份服務(wù)器就會(huì)接管虛擬IP,繼續(xù)提供服務(wù),從而
保證了高可用性,底層就是基于VRRP協(xié)議,通過(guò)優(yōu)先級(jí)判斷主備服務(wù)器,主服務(wù)器間隔時(shí)間發(fā)送VRRP報(bào)文發(fā)送到備服務(wù)器證明自己還存活,當(dāng)主
掛掉,備在一定時(shí)間里未接收到VRRP報(bào)文,備服務(wù)器就會(huì)搶占主服務(wù)接管數(shù)據(jù),繼續(xù)進(jìn)行主的工作。
Keepalived體系主要模塊及其作用
keepalived三個(gè)模塊,分別是core、check和vrrp
core模塊:核心模塊,負(fù)責(zé)主進(jìn)程的啟動(dòng)、維護(hù)及全局配置文件的加載和解析
vrrp模塊:實(shí)現(xiàn)VRRP協(xié)議的
check模塊:負(fù)責(zé)健康檢查,常見(jiàn)的方式有端口檢查及URL檢查
keepalived的配置相關(guān)解釋
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
......
global_defs {?? ??? ??? ??? ??? ??? ?#定義全局參數(shù)
--10行--修改,郵件服務(wù)指向本地
?? ?smtp_server 127.0.0.1
--12行--修改,指定服務(wù)器(路由器)的名稱,主備服務(wù)器名稱須不同,主為L(zhǎng)VS_01,備為L(zhǎng)VS_02
?? ?router_id LVS_01
--14行--注釋掉,取消嚴(yán)格遵守VRRP協(xié)議功能,否則VIP無(wú)法被連接
?? ?#vrrp_strict
}
?
vrrp_instance VI_1 {?? ??? ??? ??? ?#定義VRRP熱備實(shí)例參數(shù)
--20行--修改,指定熱備狀態(tài),主為MASTER,備為BACKUP
? ? state MASTER
--21行--修改,指定承載vip地址的物理接口
? ? interface ens33
--22行--修改,指定虛擬路由器的ID號(hào),每個(gè)熱備組保持一致?? ?
? ? virtual_router_id 10
?? ?#nopreempt?? ??? ?#如果設(shè)置非搶占模式,兩個(gè)節(jié)點(diǎn)state必須為bakcup,并加上配置 nopreempt
--23行--修改,指定優(yōu)先級(jí),數(shù)值越大優(yōu)先級(jí)越高,這里設(shè)置主為100,備為90
? ? priority 100
? ? advert_int 1?? ??? ??? ??? ??? ?#通告間隔秒數(shù)(心跳頻率)
? ? authentication {?? ??? ??? ??? ?#定義認(rèn)證信息,每個(gè)熱備組保持一致
?? ??? ?auth_type PASS?? ??? ??? ??? ?#認(rèn)證類型
--27行--修改,指定驗(yàn)證密碼,主備服務(wù)器保持一致
? ? ? ? auth_pass abc123
? ? }
? ? virtual_ipaddress {?? ??? ??? ??? ?#指定群集vip地址
? ? ? ? 192.168.80.188
? ? }
}
--36行--修改,指定虛擬服務(wù)器地址(VIP)、端口,定義虛擬服務(wù)器和Web服務(wù)器池參數(shù)
virtual_server 192.168.80.188 80 {
? ? delay_loop 6?? ??? ??? ??? ??? ?#健康檢查的間隔時(shí)間(秒)
? ? lb_algo rr?? ??? ??? ??? ??? ??? ?#指定調(diào)度算法,輪詢(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
? ? lb_kind DR
? ? persistence_timeout 0?? ??? ??? ?#連接保持時(shí)間(秒)
? ? protocol TCP?? ??? ??? ??? ??? ?#應(yīng)用服務(wù)采用的是 TCP協(xié)議
--43行--修改,指定第一個(gè)Web節(jié)點(diǎn)的地址、端口
? ? real_server 192.168.80.12 80 {
? ? ? ? weight 1?? ??? ??? ??? ??? ?#節(jié)點(diǎn)的權(quán)重
--45行--刪除,添加以下健康檢查方式?? ??? ?
? ? ? ? TCP_CHECK {
?? ??? ??? ?connect_port 80?? ??? ??? ?#添加檢查的目標(biāo)端口
?? ??? ??? ?connect_timeout 3?? ??? ?#添加連接超時(shí)(秒)
?? ??? ??? ?nb_get_retry 3?? ??? ??? ?#添加重試次數(shù)
?? ??? ??? ?delay_before_retry 3?? ?#添加重試間隔
?? ??? ?}
?? ?}
?
?? ?real_server 192.168.80.13 80 {?? ??? ?#添加第二個(gè) Web節(jié)點(diǎn)的地址、端口
? ? ? ? weight 1
? ? ? ? TCP_CHECK {
?? ??? ??? ?connect_port 80
?? ??? ??? ?connect_timeout 3
?? ??? ??? ?nb_get_retry 3
?? ??? ??? ?delay_before_retry 3
?? ??? ?}
?? ?}
##刪除后面多余的配置##
}
?
?
systemctl start keepalived
ip addr?? ??? ??? ??? ??? ??? ?#查看虛擬網(wǎng)卡vip
?keepalived腦裂
腦裂現(xiàn)象產(chǎn)生的原因
Master一直發(fā)送心跳消息給backup主機(jī),如果中間的鏈路突然斷掉,backup主機(jī)將無(wú)法收到master主機(jī)發(fā)送過(guò)來(lái)的心跳消息(也就是vrrp報(bào)文),
backup這時(shí)候會(huì)立即搶占master的工作,但其實(shí)這時(shí)候的master是正常工作的,此時(shí)就會(huì)出現(xiàn)腦裂的現(xiàn)象
怎么預(yù)防腦裂現(xiàn)象
1.使用shell腳本對(duì)這兩個(gè)主機(jī)之間的連通性進(jìn)行監(jiān)測(cè),如果發(fā)現(xiàn)有問(wèn)題,就會(huì)立即關(guān)閉keepalived服務(wù)來(lái)防止腦裂的產(chǎn)生
2.增加一條鏈路作為備用鏈路,即使主鏈路掛掉了,備用鏈路也會(huì)頂上來(lái),master主機(jī)可以繼續(xù)給backup主機(jī)發(fā)送心跳消息
3.監(jiān)控軟件的方法,這邊主要是采用的zabbix來(lái)監(jiān)控的,主要就是創(chuàng)建監(jiān)控項(xiàng),創(chuàng)建觸發(fā)器來(lái)測(cè)試關(guān)閉keepalived服務(wù)
部署LVS+Keepalived集群
主服務(wù)器:ens33(20.0.0.50) ipvsadm 、keepalived(熱備) 虛擬IP:20.0.0.126? 網(wǎng)卡 ens33:0
備服務(wù)器:ens33(20.0.0.80) ipvsadm 、keepalived? ? ? ? ? ?虛擬IP:20.0.0.126? 網(wǎng)卡 ens33:0
Web 服務(wù)器1:ens33? 20.0.0.60????????????????lo:0(VIP)20.0.0.126
Web 服務(wù)器2:ens33? 20.0.0.70????????????????lo:0(VIP)20.0.0.126
?
部署主備服務(wù)器
1.配置負(fù)載調(diào)度器(主備都需要進(jìn)行配置)
systemctl stop firewalld.service
setenforce 0
yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs(1)配置keeplived(主、備DR 服務(wù)器上都要設(shè)置)
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
......
global_defs { #定義全局參數(shù)
--10行--修改,郵件服務(wù)指向本地smtp_server 127.0.0.1
--12行--修改,指定服務(wù)器(路由器)的名稱,主備服務(wù)器名稱須不同,主為L(zhǎng)VS_01,備為L(zhǎng)VS_02router_id LVS_01
--14行--注釋掉,取消嚴(yán)格遵守VRRP協(xié)議功能,否則VIP無(wú)法被連接#vrrp_strict
}vrrp_instance VI_1 { #定義VRRP熱備實(shí)例參數(shù)
--20行--修改,指定熱備狀態(tài),主為MASTER,備為BACKUPstate MASTER--21行--修改,指定承載vip地址的物理接口interface ens33--22行--修改,指定虛擬路由器的ID號(hào),每個(gè)熱備組保持一致 virtual_router_id 10#nopreempt #如果設(shè)置非搶占模式,兩個(gè)節(jié)點(diǎn)state必須為bakcup,并加上配置 nopreempt--23行--修改,指定優(yōu)先級(jí),數(shù)值越大優(yōu)先級(jí)越高,這里設(shè)置主為100,備為90priority 100advert_int 1 #通告間隔秒數(shù)(心跳頻率)authentication { #定義認(rèn)證信息,每個(gè)熱備組保持一致auth_type PASS #認(rèn)證類型--27行--修改,指定驗(yàn)證密碼,主備服務(wù)器保持一致auth_pass 1111}virtual_ipaddress { #指定群集vip地址20.0.0.126}
}--36行--修改,指定虛擬服務(wù)器地址(VIP)、端口,定義虛擬服務(wù)器和Web服務(wù)器池參數(shù)
virtual_server 20.0.0.126 80 {delay_loop 6 #健康檢查的間隔時(shí)間(秒)lb_algo rr #指定調(diào)度算法,輪詢(rr)--39行--修改,指定群集工作模式,直接路由(DR)lb_kind DRpersistence_timeout 50 #連接保持時(shí)間(秒)protocol TCP #應(yīng)用服務(wù)采用的是 TCP協(xié)議--43行--修改,指定第一個(gè)Web節(jié)點(diǎn)的地址、端口real_server 20.0.0.60 80 {weight 1 #節(jié)點(diǎn)的權(quán)重
--45行--刪除原本的,添加以下健康檢查方式 TCP_CHECK {connect_port 80 #添加檢查的目標(biāo)端口connect_timeout 3 #添加連接超時(shí)(秒)nb_get_retry 3 #添加重試次數(shù)delay_before_retry 3 #添加重試間隔}}real_server 20.0.0.70 80 { #添加第二個(gè) Web節(jié)點(diǎn)的地址、端口weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}
##刪除后面多余的配置##
}
20.0.0.50和80都需要配置vip(虛擬IP)
(1)vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=20.0.0.126
NETMASK=255.255.255.255systemctl restart network
ifup ens33:0 systemctl start keepalived
ip addr #查看虛擬網(wǎng)卡vip(2)啟動(dòng) ipvsadm 服務(wù)
--20.0.0.50---ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadmipvsadm -C
ipvsadm -A -t 20.0.0.126:80 -s rr
ipvsadm -a -t 20.0.0.126:80 -r 20.0.0.60:80 -g
ipvsadm -a -t 20.0.0.126:80 -r 20.0.0.70:80 -gipvsadm -ln #如沒(méi)有VIP 的分發(fā)策略,則重啟 systemctl restart keepalived--20.0.0.80---
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadmipvsadm -C
ipvsadm -A -t 20.0.0.126:80 -s rr
ipvsadm -a -t 20.0.0.126:80 -r 20.0.0.60:80 -g
ipvsadm -a -t 20.0.0.126:80 -r 20.0.0.70:80 -gipvsadm -ln(3)主備調(diào)整 proc 響應(yīng)參數(shù),關(guān)閉Linux 內(nèi)核的重定向參數(shù)響應(yīng)
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0sysctl -p
配置節(jié)點(diǎn)服務(wù)器
systemctl stop firewalld.service
setenforce 0
yum -y install httpd
systemctl start httpd --20.0.0.60---
echo 'this is kgc web!' > /var/www/html/index.html--20.0.0.70---
echo 'this is benet web!' > /var/www/html/index.html(1)配置虛擬 IP 地址(20.0.0.60 20.0.0.70)(VIP:20.0.0.126)
#此地址僅用作發(fā)送 Web響應(yīng)數(shù)據(jù)包的源地址,并不需要監(jiān)聽(tīng)客戶機(jī)的訪問(wèn)請(qǐng)求(改由調(diào)度器監(jiān)聽(tīng)并分發(fā))。因此使用虛接口 lo∶0 來(lái)承載 VIP 地址,并為本機(jī)添加一條路由記錄,將訪問(wèn) VIP 的數(shù)據(jù)限制在本地,以避免通信紊亂。
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=20.0.0.126
NETMASK=255.255.255.255 #注意:子網(wǎng)掩碼必須全為 1service network restart 或 systemctl restart networkifup lo:0
ifconfig lo:0
route add -host 20.0.0.126 dev lo:0#永久寫入方法
vim /etc/rc.local:
/sbin/route add -host 20.0.0.126 dev lo:0
chmod +x /etc/rc.d/rc.local(2)調(diào)整內(nèi)核的 ARP 響應(yīng)參數(shù)以阻止更新 VIP 的 MAC 地址,避免發(fā)生沖突
vim /etc/sysctl.conf
......
net.ipv4.conf.lo.arp_ignore = 1 #系統(tǒng)只響應(yīng)目的IP為本地IP的ARP請(qǐng)求
net.ipv4.conf.lo.arp_announce = 2 #系統(tǒng)不使用IP包的源地址來(lái)設(shè)置ARP請(qǐng)求的源地址,而選擇發(fā)送接口的IP地址
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2sysctl -p
驗(yàn)證20.0.0.126頁(yè)面

?
?