一、HA集群中的相關術語
1.節點(node)
運行HA進程的一個獨立主機,稱為節點,節點是HA的核心組成部分,每個節點上運行着操作系統和高可用軟件服務,在高可用集群中,節點有主次之分,分別稱之為主節點/備份節點,每個節點擁有唯一的主機名,並且擁有屬於自己的一組資源,例如,磁盤,文件系統,網絡地址和應用服務等,主節點上一般運行着一個或多個應用服務,而備節點一般處於監控狀態
2.資源(resource)
資源是一個節點可以控制的實體,並且當節點發生故障時,這些資源能夠被其他節點接管,HA集群軟件中,可以當做資源的實體有:
(1)磁盤分區、文件系統
(2)IP地址VIP
(3)應用程序服務
(4)NFS文件系統
3.事件(event)
也就是集群中可能發生的事情,例如節點系統故障,網絡連通故障,網卡故障,應用程序故障等,這些事情都會發生節點資源發生轉移,HA的測試也是基於這些事情來進行的
4.動作(action)
事件發生時HA的響應方式,動作是由shell腳本控制的,例如當某個節點發生故障后,備份節點將通過事先設定好的執行腳本進行服務的關閉或啟動,進而接管故障節點的資源
二、keepalived簡介
keepalived 是linux下一個輕量級的高可用解決方案,它與HACMP實現功能類似,都可以實現服務或者網絡的高可用,但是又有差別:hacmp是一個專業的、功能完善的高可用軟件,它提供了HA軟件所需的基本功能,比如心跳檢測和資源接管,檢測集群中的系統服務,在集群節點間轉移共享ip地址所有者等,hacmp功能強大,但是部署和使用相對麻煩,同時也是商業化軟件,與hacmp相比,keepalived主要是通過虛擬路由冗余來實現高可用功能,雖然他沒有hacmp功能強大,但是keepalived部署使用相對簡單,所有配置只需要一個配置文件即可完成.
三、keepalived的用途
keepalived起初是為lvs設計的,專門用來監控集群系統中各個服務節點的狀態,它根據layer3,4 & 5交換機制檢測每個服務節點的狀態,如果某個服務節點出現異常,或工作出現故障,keepaived將檢測到,並將出現故障的服務節點從集群系統中剔除,而在故障節點恢復正常后,keepalived又可以自動將此服務節點重新加入到集群中,這些工作全部自動完成,不需要人工干預,需要人工完成的只是修復故障節點。
keepalived后來又加入了VRRP 的功能,VRRP是Virtual Router Redundancy Protocol(虛擬路由器冗余協議)的縮寫,它出現的目的是為了解決靜態路由出現的單點故障問題,通過VRRP可以實現網絡不間斷的、穩定的運行,因此,keepalived一方面具有服務器狀態監測和故障隔離功能,另一方面也具有HA Cluster功能,下面詳細介紹下VRRP協議的實現過程
四、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,這種選舉並進行角色的過程非常快,因此也就保證了服務的持續可用性
五、keepalived的體系結構
keepaived是一個高度模塊化的軟件,結構簡單,但擴展性很強,下圖是官方給出的keepalived的體系結構
可以看出來,keepalived的體系結構從整體上分為兩層,分別是用戶空間層和內核空間層。下面介紹一個keepalived兩層結構的詳細組成及實現的功能。
內核空間層處於最底層,它包括ipvs和netlink兩個模塊。ipvs模塊是keepalived引入的一個第三方模塊,通過ipvs可以實現基於ip的負載均衡集群。ipvs默認包含在lvs集群軟件中。
這里有一個誤區,由於keepalived可以和ipvs一起很好的工作,所以很多初學者都認為keepalived是一個負載均衡的軟件,這種理解是錯誤的
內核模塊:
IPVS:主要用於通過IPVS跟lvs進行整合,是lvs的核心模塊,跟lvs一塊使用的
NETLINK:主要實現一些網絡的功能
用戶模塊:主要用於高可用
checker:檢查服務狀態
vrrp stack:用於DS高可用
六、keepalived的安裝與配置
yum install keepalived
yum安裝keepalived默認配置文件在/etc/keepalived/keepalived.conf
配置文件主要分為三類分別是:
(1)全局配置
(2)VRRP配置
(3)LVS配置
基於mysql或者mariadb數據庫的高可用如下配置
! Configuration File for keepalived global_defs { notification_email { } } vrrp_script chk_mysql { #check_mysql是為執行腳本計划起的名字 script "/root/sh/check_mysql.sh" #指定要執行腳本的路徑 interval 2 ##腳本執行間隔,每2s檢測一次 } vrrp_instance HA_1 { state BACKUP interface ens33 virtual_router_id 151 priority 100 advert_int 1 nopreempt authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.254.250 } track_script { chk_mysql } }
基於web網站的負載均衡高可用如下配置
keepalived: yum install keepalived vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived #全局配置 global_defs { notification_email { #收件人地址 } #郵件服務器 } VRRP配置DS1 vrrp_instance VI_1 { state MASTER #角色類型MASTER|BACKUP interface ens33 #網卡名稱 virtual_router_id 51 #虛擬路由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 retry 3 delay_before_retry 3 } } }
上述配置雖然可以預防RS的單點故障,但是DS的單點故障並沒有消除,所以需要給DS在加一個備份機器
上述配置中拷貝一份到備機上可以用scp keepalived.conf root@192.168.254.20:/etc/keepalived
需要改寫的地方:
state MASTER #角色類型MASTER|BACKUP
priority 55 #優先級(這里需要設置比master機器小的值)