一:相關術語解釋:
2.節點(node)
運行HA進程的一個獨立主機,稱爲節點,節點是HA的核心組成部分,每一個節點上運行着操做系統和高可用軟件服務,在高可用集羣中,節點有主次之分,分別稱之爲主節點/備份節點,每一個節點擁有惟一的主機名,而且擁有屬於本身的一組資源,例如,磁盤,文件系統,網絡地址和應用服務等,主節點上通常運行着一個或多個應用服務,而備節點通常處於監控狀態
3.資源(resource)
資源是一個節點能夠控制的實體,而且當節點發生故障時,這些資源可以被其餘節點接管,HA集羣軟件中,能夠當作資源的實體有:
(1)磁盤分區、文件系統
(2)IP地址VIP
(3)應用程序服務
(4)NFS文件系統
4.事件(event)
也就是集羣中可能發生的事情,例如節點系統故障,網絡連通故障,網卡故障,應用程序故障等,這些事情都會發生節點資源發生轉移,HA的測試也是基於這些事情來進行的
5.動做(action)
事件發生時HA的響應方式,動做是由shell腳本控制的,例如當某個節點發生故障後,備份節點將經過事先設定好的執行腳本進行服務的關閉或啓動,進而接管故障節點的資源
2、keepalived簡介
keepalived 是linux下一個輕量級的高可用解決方案,它與HACMP實現功能相似,均可以實現服務或者網絡的高可用,可是又有差異:hacmp是一個專業的、功能完善的高可用軟件,它提供了HA軟件所需的基本功能,好比心跳檢測和資源接管,檢測集羣中的系統服務,在集羣節點間轉移共享ip地址全部者等,hacmp功能強大,可是部署和使用相對麻煩,同時也是商業化軟件,與hacmp相比,keepalived主要是經過虛擬路由冗餘來實現高可用功能,雖然他沒有hacmp功能強大,可是keepalived部署使用相對簡單,全部配置只須要一個配置文件便可完成.
3、keepalived的用途
keepalived起初是爲lvs設計的,專門用來監控集羣系統中各個服務節點的狀態,若是某個服務節點出現異常,或工做出現故障,keepaived將檢測到,並將出現故障的服務節點從集羣系統中剔除,而在故障節點恢復正常後,keepalived又能夠自動將此服務節點從新加入到集羣中,這些工做所有自動完成,不須要人工干預,須要人工完成的只是修復故障節點。
keepalived後來又加入了VRRP 的功能,VRRP是Virtual Router Redundancy Protocol(虛擬路由器冗餘協議)的縮寫,它出現的目的是爲了解決靜態路由出現的單點故障問題,經過VRRP能夠實現網絡不間斷的、穩定的運行,所以,keepalived一方面具備服務器狀態監測和故障隔離功能,另外一方面也具備HA Cluster(高可靠性服務器集羣)功能,下面詳細介紹下VRRP協議的實現過程
4、VRRP協議與工做原理
在現實的網絡環境中,主機之間的通訊都是經過配置靜態路由完成的,而主機之間的路由器一旦出現故障,通訊就會失敗,所以在這種通訊模式中,路由器就成了一個單點瓶頸,爲了解決這個問題就引入了VRRP協議.VRRP協議是一種主備模式的協議,經過VRRP能夠在網絡發生故障時透明地進行設備切換不影響主機間的數據通訊,這其中涉及兩個概念:物理路由器和虛擬路由器
VRRP能夠將兩臺或者多臺物理路由器設備虛擬成一個虛擬路由器,這個虛擬路由器經過虛擬IP(一個或多個)對外提供服務,二在虛擬路由器內部,是多個物理路由器協同工做,同一時間只有一臺物理路由器對外提供服務,這臺物理路由器被稱之爲主路由器(處於master狀態角色)。它擁有對外提供的虛擬ip,提供各類網絡功能,好比arp請求、icmp、數據轉發等,二其餘物理路由器不擁有對外提供的虛擬ip,也不提供對外網絡功能,僅僅接收master的vrrp狀態通告信息,這些路由器被統稱爲備份路由器(處於backup角色)。當主路由器失效時,處於backup角色的備份路由器將從新進行選舉,產生一個新的主路由器進入master角色繼續對外服務,整個切換過程對於用戶來講徹底透明
在一個虛擬路由器中,只有處於master角色的路由器會一直髮送vrrp數據包,處於backup角色的路由器只接受master發過來的報文信息,用來監控master運行狀態,所以,不會發生master搶佔的現象,除非它的優先級更高,而當master不可用時,backup也就沒法收到master發過來的報文信息,因而就認定master出現故障,接着多臺backup就會進行選舉,優先級最高的backup將成爲新的master,這種選舉並進行角色的過程很是快,所以也就保證了服務的持續可用性
5、keepalived的體系結構
keepaived是一個高度模塊化的軟件,結構簡單,但擴展性很強,下圖是官方給出的keepalived的體系結構
能夠看出來,keepalived的體系結構從總體上分爲兩層,分別是用戶空間層和內核空間層。下面介紹一個keepalived兩層結構的詳細組成及實現的功能。
內核空間層處於最底層,它包括ipvs和netlink兩個模塊。ipvs模塊是keepalived引入的一個第三方模塊,經過ipvs能夠實現基於ip的負載均衡集羣。ipvs默認包含在lvs集羣軟件中。
這裏有一個誤區,因爲keepalived能夠和ipvs一塊兒很好的工做,因此不少初學者都認爲keepalived是一個負載均衡的軟件,這種理解是錯誤的
步驟:
實驗思惟圖:
做用:若是沒有keepalived,只是LVS的話,那麼若是其中一個RS down機,則還會繼續訪問,而後報錯,說明服務器仍是會按照負載均衡的原則給RS分配,可是搭建keepalived,若是RS2 down機,那麼就會只訪問另外一個RS機,不會訪問這臺。
1.DS1(master)配置:
# yum - install keepalived
# ifconfig ens33:0 192.168.29.250 broadcast 192.168.29.250 netmask 255.255.255.255 up
# route add -host 192.168.29.250 dev ens33:0
修改配置文件:/etc/keepalived/keepalived.conf
! Configuration File for keepalived
#全局配置
global_defs {
notification_email {
#收件人地址
}
#郵件服務器
}
VRRP配置
vrrp_instance VI_1 {
state MASTER #角色類型MASTER|BACKUP
interface ens33 #網卡名稱
virtual_router_id 49 #虛擬路由id(須要與BACKUP一致)
priority 100 #優先級
advert_int 1 #每1秒檢查一次
#nopreempt #非搶佔模式
authentication { #主備之間必須同樣
auth_type PASS #認證類型
auth_pass 1111 #認證密碼
}
virtual_ipaddress {
192.168.254.250 #虛擬ip(vip)
}
}
#LVS配置
virtual_server 192.168.254.250 80 {
delay_loop 3 #健康檢查時間間隔
lb_algo rr #負載均衡調度算法
lb_kind DR #負載均衡轉發規則
protocol TCP #協議
real_server 192.168.254.18 80 { #要監控的real_server的ip和端口號
weight 1 #權重
TCP_CHECK { #基於tcp協議的檢查
connect_timeout 3 #鏈接時間超時
retry 3 #重連次數
delay_before_retry 3 #重連間隔時間
}
}
real_server 192.168.254.19 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
啓動keepalived服務
# systemctl restart keepalived.service
DS2端配置:
和DS1端如出一轍,只有配置文件中有三點不同
VRRP配置
vrrp_instance VI_1 {
state BACKUP #角色類型BACKUP
interface ens33 #網卡名稱
virtual_router_id 49 #虛擬路由id(須要與BACKUP一致)
priority 50 #優先級(必須比master小)
advert_int 1 #DS1和DS2每1秒檢查一次
#nopreempt #非搶佔模式
RS端配置:
# ifconfig lo:0 192.168.29.250 broadcast 192.168.29.250 netmask 255.255.255.255 up
#route add -host 192.168.29.250 dev lo:0
# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
安裝httpd服務
在RS1,RS2端/var/www/html目錄下建立index.html文件
編輯:<h1>this is 138 host</h1>
<h1>this is 139 host</h1>
啓動httpd服務
測試:
1.在客戶端測試
在主DS查看
2.讓RS1down機,在客戶端測試,顯示不會輪巡down機,只輪巡運行的RS
在主DS查看:顯示只有運行的一臺RS
3.讓主DS down機,顯示備DS接管
首先,查看兩臺的日誌文件,tail -f /var/log/message,觀察變化
而後關閉主DS的keepalived服務,主日誌顯示中止keepalived服務。備DS立馬顯示日誌:接管250ip
備DS:
備日誌:
主DS:
主日誌:
4.如今讓主DS再次恢復服務,同時監控日誌文件,觀察變化
備DS日誌:顯示有優先級更高的DS佔用,如今進入備份狀態,刪除VIP協議。
備DS:
主DS日誌:
主DS:
5.爲了防止每一次的宕機恢復頻繁的接管,如今要實現一個功能
不須要來回的接管,若是備DS接管,一旦主DS恢復,也不會讓主搶佔,依舊是備DS繼續提供服務。
將主DS服務器中的非搶佔模式打開,把MASTER也改成BACKUP。那麼主DS宕機在恢復也不會從搶佔備DS,那麼將一直是備DS支持服務。
步驟:將DS1的keepalived服務關閉
如今DS2接管服務,不會變成DS1
注意,搶佔優先MASTER,再看優先級。
優先級只是對於BACKUP搶佔來講管用,若是是MASTER的話,永遠是首先搶佔,即便優先級沒有BACKUP高。