Keepalived使用的vrrp協(xié)議方式,虛擬路由冗余協(xié)議 (Virtual Router Redundancy Protocol愿吹,簡稱VRRP);Keepalived的目的是模擬路由器的高可用录择,一般Keepalived是實(shí)現(xiàn)前端高可用商膊,常用的前端高可用的組合有,就是我們常見的LVS+Keepalived仗嗦、Nginx+Keepalived可训、HAproxy+Keepalived昌妹。總結(jié)一下握截,Keepalived中實(shí)現(xiàn)輕量級的高可用飞崖,一般用于前端高可用,且不需要共享存儲谨胞,一般常用于兩個節(jié)點(diǎn)的高可用固歪。
提到高可用我們再來把Heartbeat、Corosync胯努、Keepalived這三個集群組件互相比較一下.
Keepalived 是一個基于VRRP協(xié)議來實(shí)現(xiàn)的LVS服務(wù)高可用方案牢裳,可以利用其來避免單點(diǎn)故障。一個LVS服務(wù)會有2臺服務(wù)器運(yùn)行Keepalived康聂,一臺為主服務(wù)器(MASTER)贰健,一臺為備份服務(wù)器(BACKUP)胞四,但是對外表現(xiàn)為一個虛擬IP恬汁,主服務(wù)器會發(fā)送特定的消息給備份服務(wù)器,當(dāng)備份服務(wù)器收不到這個消息的時候辜伟,即主服務(wù)器宕機(jī)的時候氓侧, 備份服務(wù)器就會接管虛擬IP,繼續(xù)提供服務(wù)导狡,從而保證了高可用性约巷。
在路由器上配上靜態(tài)路由就會產(chǎn)生單點(diǎn)故障,那該怎么辦呢?VRRP就應(yīng)用而生了,VRRP通過一競選(election)協(xié)議來動態(tài)的將路由任務(wù)交給LAN中虛擬路由器中的某臺VRRP路由器.
VRRP工作原理, 在一個VRRP虛擬路由器中,有多臺物理的VRRP路由器旱捧,但是這多臺的物理的機(jī)器并不能同時工作独郎,而是由一臺稱為MASTER的負(fù)責(zé)路由工作,其它的都是BACKUP枚赡,MASTER并非一成不變氓癌,VRRP讓每個VRRP路由器參與競選,最終獲勝的就是MASTER贫橙。MASTER擁有一些特權(quán)贪婉,比如,擁有虛擬路由器的IP地址卢肃,我們的主機(jī)就是用這個IP地址作為靜態(tài)路由的疲迂。擁有特權(quán)的MASTER要負(fù)責(zé)轉(zhuǎn)發(fā)發(fā)送給網(wǎng)關(guān)地址的包和響應(yīng)ARP請求才顿。
VRRP通過競選協(xié)議來實(shí)現(xiàn)虛擬路由器的功能,所有的協(xié)議報文都是通過IP多播(multicast)包(多播地址224.0.0.18)形式發(fā)送的尤蒿。虛擬路由器由VRID(范圍0-255)和一組IP地址組成郑气,對外表現(xiàn)為一個周知的MAC地址。所以腰池,在一個虛擬路由 器中竣贪,不管誰是MASTER,對外都是相同的MAC和IP(稱之為VIP)巩螃⊙菰酰客戶端主機(jī)并不需要因?yàn)镸ASTER的改變而修改自己的路由配置,對客戶端來說避乏,這種主從的切換是透明的爷耀。
在一個虛擬路由器中,只有作為MASTER的VRRP路由器會一直發(fā)送VRRP通告信息(VRRPAdvertisement message)拍皮,BACKUP不會搶占MASTER歹叮,除非它的優(yōu)先級(priority)更高。當(dāng)MASTER不可用時(BACKUP收不到通告信息)铆帽, 多臺BACKUP中優(yōu)先級最高的這臺會被搶占為MASTER咆耿。這種搶占是非常快速的(<1s)爹橱,以保證服務(wù)的連續(xù)性萨螺。由于安全性考慮,VRRP包使用了加密協(xié)議進(jìn)行加密
:為什么要用keepalived+lvs
lvs是一個在四層上實(shí)現(xiàn)后端realserver的負(fù)載均衡的集群愧驱,lvs遺留下兩個問題慰技,一個是lvs的單點(diǎn)故障;第二個是lvs不能檢測后端realserver的健康狀態(tài)檢查组砚。
解決lvs的單點(diǎn)故障就用到了高可用集群:
1.可以是heartbeat+ldirectord這種重量級的吻商;
2.可以是keepalived+lvs這種輕量級的解決方案。
解決lvs不能檢測后端realserver的健康狀態(tài)也后很多種方法:
1.可以在lvs上寫腳本ping后端realserver的ip地址糟红,ping幾次發(fā)現(xiàn)ip地址ping不通則在ipvs規(guī)則里面刪除艾帐,
當(dāng)后端服務(wù)器可以ping了,則把后端realserver添加到ipvs規(guī)則里面盆偿。
2.可以在lvs上寫腳本請求后端realserver的測試幾次網(wǎng)頁文件柒爸,查看狀態(tài)碼是否為200,不是則在ipvs規(guī)則里面清楚陈肛,
當(dāng)測試網(wǎng)頁返回的狀態(tài)嗎是200之后揍鸟,則把后端realserver添加到ipvs規(guī)則里面
以上兩種方法都是依賴于腳本,keepalived的出現(xiàn)解決了不依賴于腳本,也可以對后端realserver的健康狀態(tài)檢查阳藻,keepalived的配置文件里面可以自行
生成ipvs的規(guī)則晰奖,并且自行檢測后端realserver的狀態(tài),當(dāng)后端realserver不能提供服務(wù)了腥泥,keepalived會自行將其在ipvs規(guī)則里面刪除匾南,
當(dāng)后端realserver可以提供服務(wù)了,又自行的在ipvs規(guī)則里面添加蛔外。
實(shí)現(xiàn)主從模式IP地主轉(zhuǎn)換
[root@node1 ~]#sentos7 172.18.70.40 主
[root@node2 ~]#sentos7 172.18.70.50 備
互相名字解析便于控制
[root@node1 ~]#vim /etc/hosts
172.18.70.50 node2
[root@node2 ~]#vim /etc/hosts
172.18.70.40 node1
修改同步時間蛆楞,node1,node2
[root@node1 ~]#ntpdate 172.18.0.1 先同步
[root@node1 ~]#vim /etc/chrony.conf 后修改配置,配置文件是在時間出不多的情況下同步
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 172.18.0.1 iburst 網(wǎng)絡(luò)ip同步時間
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
[root@node1 ~]#systemctl is-enabled chronyd 查詢是否開機(jī)啟動時間
[root@node1 ~]#systemctl enable chronyd 開機(jī)啟動
免密碼登錄 夹厌,安裝包豹爹,備份配置文件,生成隨機(jī)口令
[root@node1 ~/.ssh]#ssh-keygen 免密碼登錄
[root@node1 ~]#cd .ssh
[root@node1 ~/.ssh]#ssh-copy-id -i id_rsa.pub node2: 第一次要輸入口令
[root@node2 ~]#ssh-keygen
[root@node2 ~/.ssh]#ssh-copy-id node1:
[root@node1 ~]#yum install ipvsadm keepalived 安裝包
[root@node2 ~]#yum install ipvsadm keepalived
[root@node1 /etc/keepalived]#cp keepalived.conf{,.bak} 備份
[root@node1 ~]#openssl rand -hex 4 隨機(jī)口令
dd2edd1d
修改node1 keepalived配置(全局配置段和主機(jī)配置段)
[root@node1 /etc/keepalived]#vim keepalived.conf
global_defs {
notification_email {
root@localhost 郵箱
}
notification_email_from node1@localhost 發(fā)件郵箱
smtp_server 172.18.0.1 郵件發(fā)送地址
smtp_connect_timeout 30 超時時長
router_id node1 主機(jī)名
vrrp_mcast_group4 224.100.100.100 多播地址
}
vrrp_instance VI_1 { vrrp實(shí)例 多個實(shí)例需要再復(fù)制
state MASTER 主
interface ens33 網(wǎng)卡
virtual_router_id 88 集群組
priority 100 優(yōu)先級
advert_int 1 發(fā)送間隔
authentication {
auth_type PASS
auth_pass dd2edd1d 隨機(jī)口令
}
virtual_ipaddress {
172.18.70.100/16 dev ens33 vip地址
}
}
修改node2 keepalived配置(全局配置段和備機(jī)配置段)
[root@node2 /etc/keepalived]#vim keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from node1@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node2 主機(jī)2
vrrp_mcast_group4 224.100.100.100
}
vrrp_instance VI_1 {
state BACKUP 備
interface ens33
virtual_router_id 88
priority 90 優(yōu)先級要比主低
advert_int 1
authentication {
auth_type PASS
auth_pass dd2edd1d
}
virtual_ipaddress {
172.18.70.100/16 dev ens33
[root@node1 /etc/keepalived]#systemctl restart keepalived.service 啟動服務(wù) 發(fā)通告100
[root@node1 ~]#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:67:33:0e brd ff:ff:ff:ff:ff:ff
inet 172.18.70.40/16 brd 172.18.255.255 scope global ens33 啟動服務(wù)后vip地址自動綁定在主機(jī)器node1ip上
valid_lft forever preferred_lft forever
inet 172.18.70.100/16 scope global secondary ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe67:330e/64 scope link
valid_lft forever preferred_lft forever
[root@node1 /etc/keepalived]#tcpdump -i ens33 -nn host 224.100.100.100 抓包 可以看到node1在發(fā)廣播矛纹,88di虛擬器的地址臂聋,100優(yōu)先級
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes
21:40:59.250327 IP 172.18.70.40 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 100, authtype simple, intvl 1s, length 20
21:41:00.260083 IP 172.18.70.40 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 100, authtype simple, intvl 1s, length 20
21:41:01.261505 IP 172.18.70.40 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 100, authtype simple, intvl 1s, length 20
21:41:02.263420 IP 172.18.70.40 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 100, authtype simple, intvl 1s, length 20
21:41:03.264706 IP 172.18.70.40 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 100, authtype simple, intvl 1s, length 20
[root@node2 /etc/keepalived]#systemctl restart keepalived.service node2開啟服務(wù) 沒有發(fā)通告90
[root@node1 /etc/keepalived]#systemctl stop keepalived node1關(guān)閉服務(wù) 在查看抓包狀態(tài)
[root@node1 /etc/keepalived]#tcpdump -i ens33 -nn host 224.100.100.100 可以看到node1機(jī)器中斷為0后node2機(jī)器馬上接管服務(wù)
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes
22:06:18.805795 IP 172.18.70.40 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 100, authtype simple, intvl 1s, length 20
22:06:19.806961 IP 172.18.70.40 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 100, authtype simple, intvl 1s, length 20
22:06:20.767973 IP 172.18.70.40 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 0, authtype simple, intvl 1s, length 20
22:06:21.419400 IP 172.18.70.50 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 90, authtype simple, intvl 1s, length 20
22:06:22.421297 IP 172.18.70.50 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 90, authtype simple, intvl 1s, length 20
224.100.100.100: 多播模式
[root@node2 /etc/keepalived]#ip a MULTICAS多播模式
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:50:56:36:e6:7c brd ff:ff:ff:ff:ff:ff
inet 172.18.70.50/16 brd 172.18.255.255 scope global ens33
valid_lft forever preferred_lft forever
inet 172.18.70.100/16 scope global secondary ens33 node1關(guān)閉服務(wù)后VIP地址自動轉(zhuǎn)到了node2機(jī)器上面
valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:fe36:e67c/64 scope link
已經(jīng)實(shí)現(xiàn)IP的準(zhǔn)備模式轉(zhuǎn)換