大綱
1、前言
2、Keepalived 詳解
3、環境準備
4、LVS+Keepalived 實現高可用的前端負載均衡器
1、前言
Keepalived使用的vrrp協議方式,虛擬路由冗餘協議 (Virtual Router Redundancy Protocol,簡稱VRRP);Heartbeat或Corosync是基於主機或網絡服務的高可用方式;簡單的說就是,Keepalived的目的是模擬路由器的高可用,Heartbeat或Corosync的目的是實現Service的高可用。因此通常Keepalived是實現前端高可用,經常使用的前端高可用的組合有,就是咱們常見的LVS+Keepalived、Nginx+Keepalived、HAproxy+Keepalived。而Heartbeat或Corosync是實現服務的高可用,常見的組合有Heartbeat v3(Corosync)+Pacemaker+NFS+Httpd 實現Web服務器的高可用、Heartbeat v3(Corosync)+Pacemaker+NFS+MySQL 實現MySQL服務器的高可用。總結一下,Keepalived中實現輕量級的高可用,通常用於前端高可用,且不須要共享存儲,通常經常使用於兩個節點的高可用。而Heartbeat(或Corosync)通常用於服務的高可用,且須要共享存儲,通常用於多節點的高可用。這個問題咱們說明白了,又有博友會問了,那heartbaet與corosync咱們又應該選擇哪一個好啊,我想說咱們通常用corosync,由於corosync的運行機制更優於heartbeat,就連從heartbeat分離出來的pacemaker都說在之後的開發當中更傾向於corosync,因此如今corosync+pacemaker是最佳組合。但說實話我對於軟件沒有任何傾向性,因此我把全部的集羣軟件都和你們說了一下,我認爲無論什麼軟件,只要它能存活下來都有它的特色和應用領域,只有把特定的軟件放在特定的位置才能發揮最大的做用,那首先咱們得對這個軟件有全部瞭解。學習一種軟件的最好方法,就是去查官方文檔。好了說了那麼多但願你們有所收穫,下面咱們來講一說keepalived。
2、Keepalived 詳解
1.Keepalived 定義
Keepalived 是一個基於VRRP協議來實現的LVS服務高可用方案,能夠利用其來避免單點故障。一個LVS服務會有2臺服務器運行Keepalived,一臺爲主服務器(MASTER),一臺爲備份服務器(BACKUP),可是對外表現爲一個虛擬IP,主服務器會發送特定的消息給備份服務器,當備份服務器收不到這個消息的時候,即主服務器宕機的時候, 備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。Keepalived是VRRP的完美實現,所以在介紹keepalived以前,先介紹一下VRRP的原理。
2.VRRP 協議簡介
在現實的網絡環境中,兩臺須要通訊的主機大多數狀況下並無直接的物理鏈接。對於這樣的狀況,它們之間路由怎樣選擇?主機如何選定到達目的主機的下一跳路由,這個問題一般的解決方法有二種:
- 在主機上使用動態路由協議(RIP、OSPF等)
- 在主機上配置靜態路由
很明顯,在主機上配置動態路由是很是不切實際的,由於管理、維護成本以及是否支持等諸多問題。配置靜態路由就變得十分流行,但路由器(或者說默認網關default gateway)卻常常成爲單點故障。VRRP的目的就是爲了解決靜態路由單點故障問題,VRRP經過一競選(election)協議來動態的將路由任務交給LAN中虛擬路由器中的某臺VRRP路由器。
3.VRRP 工做機制
在一個VRRP虛擬路由器中,有多臺物理的VRRP路由器,可是這多臺的物理的機器並不能同時工做,而是由一臺稱爲MASTER的負責路由工做,其它的都是BACKUP,MASTER並不是一成不變,VRRP讓每一個VRRP路由器參與競選,最終獲勝的就是MASTER。MASTER擁有一些特權,好比,擁有虛擬路由器的IP地址,咱們的主機就是用這個IP地址做爲靜態路由的。擁有特權的MASTER要負責轉發發送給網關地址的包和響應ARP請求。
VRRP經過競選協議來實現虛擬路由器的功能,全部的協議報文都是經過IP多播(multicast)包(多播地址224.0.0.18)形式發送的。虛擬路由器由VRID(範圍0-255)和一組IP地址組成,對外表現爲一個周知的MAC地址。因此,在一個虛擬路由 器中,無論誰是MASTER,對外都是相同的MAC和IP(稱之爲VIP)。客戶端主機並不須要由於MASTER的改變而修改本身的路由配置,對客戶端來講,這種主從的切換是透明的。
在一個虛擬路由器中,只有做爲MASTER的VRRP路由器會一直髮送VRRP通告信息(VRRPAdvertisement message),BACKUP不會搶佔MASTER,除非它的優先級(priority)更高。當MASTER不可用時(BACKUP收不到通告信息), 多臺BACKUP中優先級最高的這臺會被搶佔爲MASTER。這種搶佔是很是快速的(<1s),以保證服務的連續性。因爲安全性考慮,VRRP包使用了加密協議進行加密。
4.VRRP 工做流程
(1).初始化:
路由器啓動時,若是路由器的優先級是255(最高優先級,路由器擁有路由器地址),要發送VRRP通告信息,併發送廣播ARP信息通告路由器IP地址對應的MAC地址爲路由虛擬MAC,設置通告信息定時器準備定時發送VRRP通告信息,轉爲MASTER狀態;不然進入BACKUP狀態,設置定時器檢查定時檢查是否收到MASTER的通告信息。
(2).Master
- 設置定時通告定時器;
- 用VRRP虛擬MAC地址響應路由器IP地址的ARP請求;
- 轉發目的MAC是VRRP虛擬MAC的數據包;
- 若是是虛擬路由器IP的擁有者,將接受目的地址是虛擬路由器IP的數據包,不然丟棄;
- 當收到shutdown的事件時刪除定時通告定時器,發送優先權級爲0的通告包,轉初始化狀態;
- 若是定時通告定時器超時時,發送VRRP通告信息;
- 收到VRRP通告信息時,若是優先權爲0,發送VRRP通告信息;不然判斷數據的優先級是否高於本機,或相等並且實際IP地址大於本地實際IP,設置定時通告定時器,復位主機超時定時器,轉BACKUP狀態;不然的話,丟棄該通告包;
(3).Backup
- 設置主機超時定時器;
- 不能響應針對虛擬路由器IP的ARP請求信息;
- 丟棄全部目的MAC地址是虛擬路由器MAC地址的數據包;
- 不接受目的是虛擬路由器IP的全部數據包;
- 當收到shutdown的事件時刪除主機超時定時器,轉初始化狀態;
- 主機超時定時器超時的時候,發送VRRP通告信息,廣播ARP地址信息,轉MASTER狀態;
- 收到VRRP通告信息時,若是優先權爲0,表示進入MASTER選舉;不然判斷數據的優先級是否高於本機,若是高的話認可MASTER有效,復位主機超時定時器;不然的話,丟棄該通告包;
5.ARP查詢處理
當內部主機經過ARP查詢虛擬路由器IP地址對應的MAC地址時,MASTER路由器回覆的MAC地址爲虛擬的VRRP的MAC地址,而不是實際網卡的 MAC地址,這樣在路由器切換時讓內網機器覺察不到;而在路由器從新啓動時,不能主動發送本機網卡的實際MAC地址。若是虛擬路由器開啓的ARP代理 (proxy_arp)功能,代理的ARP迴應也迴應VRRP虛擬MAC地址;好了VRRP的簡單講解就到這裏,咱們下來說解一下Keepalived的案例。
3、環境準備
1.操做系統
- CentOS Linux release 7.4.1708 (Core)
2.軟件版本
- ipvsadm-1.24
- keepalived.x86_64 0:1.2.7-3.el6
- httpd-2.4.6-67.el7.centos.6.x86_64
3.實驗拓撲
說明:css
1.兩臺lvs間作keepalive高可用前端
2.兩臺web只簡單安裝Apache用於測試linux
實驗清單web
ip |
類型 |
192.168.128.169 |
lvs_S |
192.168.128.171 |
lvs_M |
192.168.128.172 |
web_1 |
192.168.128.173 |
web_2 |
一、更改主機名(每臺機子)
echo "192.168.128.169 lvs_S" >>/etc/hosts
echo "192.168.128.171 lvs_M" >>/etc/hosts
echo "192.168.128.172 web_1" >>/etc/hosts
echo "192.168.128.173 web_2" >>/etc/hosts
二、時間同步
yum install -y ntp
/usr/sbin/ntpdate ntp6.aliyun.com
echo "*/3 * * * * /usr/sbin/ntpdate ntp6.aliyun.com &> /dev/null" > /tmp/crontab
crontab /tmp/crontab
三、master配置(lvs_M,lvs_S)
mkdir -p /usr/local/src/lvs/
cd /usr/local/src/lvs/
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
lsmod|grep ip_vs
uname -rm //查看內核版本
ln -s /usr/src/kernels/2.6.32-431.el6.i686/ /usr/src/linux //可能會顯示多個內核,選上個命令查看的版本
tar xf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
make && make install
ipvsadm //啓動內核
lsmod |grep ip_vs
ifconfig eth0:0 192.168.128.180/24 up //設置vip爲192.168.128.180
route add -host 192.168.128.180 dev eth1
ipvsadm –C //清空默認
ipvsadm --set 30 5 60 //設置超時
ipvsadm -A -t 192.168.128.180:80 -s wrr -p 20 // 添加虛擬服務
ipvsadm -L –n //查看服務
ipvsadm -a -t 192.168.128.180:80 -r 192.168.160.132:80 -g -w 1 //添加real server
ipvsadm -a -t 192.168.128.180:80 -r 192.168.160.135:80 -g -w 1
ipvsadm –d -t 192.168.128.180:80 -r 192.168.160.132:80 // 刪除
腳本:centos
執行腳本結果:安全
五、realserver配置腳本(web_1,web_2)