Keepalived實(shí)現(xiàn)IP地址主備模式轉(zhuǎn)換

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)換
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市或南,隨后出現(xiàn)的幾起案子孩等,更是在濱河造成了極大的恐慌,老刑警劉巖采够,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肄方,死亡現(xiàn)場離奇詭異,居然都是意外死亡蹬癌,警方通過查閱死者的電腦和手機(jī)权她,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冀瓦,“玉大人伴奥,你說我怎么就攤上這事写烤∫砻觯” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵洲炊,是天一觀的道長感局。 經(jīng)常有香客問我,道長暂衡,這世上最難降的妖魔是什么询微? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮狂巢,結(jié)果婚禮上撑毛,老公的妹妹穿的比我還像新娘。我一直安慰自己唧领,他們只是感情好藻雌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布雌续。 她就那樣靜靜地躺著,像睡著了一般胯杭。 火紅的嫁衣襯著肌膚如雪驯杜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天做个,我揣著相機(jī)與錄音鸽心,去河邊找鬼。 笑死居暖,一個胖子當(dāng)著我的面吹牛顽频,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播太闺,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼冲九,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了跟束?” 一聲冷哼從身側(cè)響起莺奸,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冀宴,沒想到半個月后灭贷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡略贮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年甚疟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逃延。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡览妖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出揽祥,到底是詐尸還是另有隱情讽膏,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布拄丰,位于F島的核電站府树,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏料按。R本人自食惡果不足惜奄侠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望载矿。 院中可真熱鬧垄潮,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涂召,卻和暖如春坠非,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背果正。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工炎码, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秋泳。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓潦闲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親迫皱。 傳聞我的和親對象是個殘疾皇子歉闰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容