keepalived高可用
LVS集群的實現,是由多臺設備如httpd,nginx主機,php-fpm動態資源主機,MySQL主機,以及Session Server等主機交織構成的,隨著訪問資源量的日益增加而呈向外擴展的模式,而在這樣的LVS模式下,主要的設備就是調度器與後端RS,這兩者的能否正常運行決定了我們所架設的服務能否正常提供服務;所以針對於調度器Directory與真實機RS的高可用是勢在必行的,但是LVS本身並沒有提供高可用的;
keepalived,實現LVS的高可用,針對於Directory的高可用與後端的RS健康檢測,由我們自己設定檢測間隙時間;而keepalived這種高可用機制其實是基於vrrp協議來運行的,vrrp協議,又為虛擬冗余路由協議;其主要運行原理如兩臺路由器,對外表示為一臺路由器,即使用一個虛擬的IP地址VIP作為該路由器對外的IP地址,外部其他主機的網關,將兩臺路由器一個設置為MASTER,一個設置為BACKUP;MASTER作為對外的路由器,將虛擬IP地址給予該路由器,而BACKUP路由器則作為備份路由器存在,在MASTER工作時並不占用任何資源,而當MASTER路由器出現問題down掉的時候,BACKUP路由器就會出來充當MASTER路由器,將虛擬IP地址重新分配給他,並向網絡中發布一條免費的arp報文,這個免費報文主要是發送其新生成的MASTER的MAC地址,新的MAC地址格式大概為00-00-5E-00-01-{VRID},通告其路由變換,告訴網絡中的主機現在這個路由器是我;如果有多個BACKUP時,則需要進行BACKUP之間的選舉操作,即根據BACKUP之間的優先級進行選擇;在一同一組的路由器上都會存在一個虛擬ID,VRID,用於標識這個路由是這個組中的一員,這樣才能在組中進行選舉;
優先級:選舉成為MASTER的主要參考標準,取值範圍是0-255
0:表示該路由器不參與選舉,除非所有路由器都down掉了;
255:該優先級一設置便為MASTER;
其余1-254按越大,優先級越大來設置;
搶占式:如果MASTER路由down了,這個時候由下方的BACKUP路由進行選舉,如果這個時候MASTER路由又恢復了,就會立即奪過其MASTER的身份;若BACKUP優先級高於MASTER的路由器,就會將其MASTER身份奪過來;
非搶占式:如果MASTER路由down了,這個時候由下方的BACKUP路由進行選舉,如果這個時候MASTER路由又恢復了,並不會奪過其MASTER進程,而是作為BACKUP重新選舉;
為了提高VRRP協議的安全性,其還提供了認證功能:
1.字符串認證在一個有可能受到安全威脅的網絡中,可以將認證方式設置為簡單字符認證。發送VRRP 報文的路由器將認證字填入到VRRP報文中,而收到VRRP報文的路由器會將收到的VRRP報文中的認證字和本地配置的認證字進行比較。如果認證字相同,則認為接收到的報文是合法的VRRP報文;否則認為接收到的報文是一個非法報文。
2.MD5認證:在一個非常不安全的網絡中,可以將認證方式設置為MD5認證。發送VRRP報文的路由器利用認證字和MD5算法對VRRP報文進行加密,加密後的報文保存在Authentication Header(認證頭)中。收到VRRP報文的路由器會利用認證字解密報文,檢查該報文的合法性。
keepalived為LVS提供的高可用機制,並不需要我們使用ipvsadm設置集群服務,只需要在keepalived主配置文件/etc/keepalived/keepalived.conf中設置相關屬性,上下文,便可以自動生成調度器對外的虛擬IP地址與集群服務規則;還可以基於腳本調用接口通過執行腳本完成腳本中所定義的規則,對後端的RS或者Directory的狀態進行郵件備份等相關操作;
HA Cluster配置的前提:
1.保證各個主機之間的時間差距不超過1秒,需要使用時間服務器,讓其余所有的主機都遵照其時間進行同步;如ntpd,chrony;
時間服務器:
①安裝ntp軟件包
yum -y install ntp
②修改配置文件:/etc/ntp.conf
③在時間服務器開啟ntpd服務
其余主機:
①安裝ntp包
②#ntpdate IP地址
2.各個節點之間可以通過主機名互相通信;(對於ka並非必須)
3.一定要確保iptables和selinux不會阻礙各個節點間的數據通信;
4.為了安全考慮,各個節點之間的root用戶可以基於密鑰認證的ssh互相通信(非必須)
安裝keepalived:
yum install -y keepalived(在本地光盤中存在)
keepalived的配置文件:
主配置文件:/etc/keepalived/keepalived.conf
主程序文件:/usr/sbin/keepalived
我們對於keepalived的配置主要在/etc/keepalived/keepalived.conf中的三部分
①GLOBAL CONFIGURATION:用於全局配置,主要是相關郵件信息的發件人與收件人,郵件服務器的地址一般為本機即127.0.0.1;最重要的是,需要設置組播IP地址,不能與其他地址相重;
②VRRPD CONFIGURATION:用於配置調度器的相關信息,調度器的狀態MASTER,BACKUP,調度器優先級,VRID以及向外的虛擬VIP地址,並留下了關於顯示調度器狀態變化的腳本接口,如notify_master,notify_backup,notify_fault;
③LVS CONFIGURATION:用於設置調度器下的真實服務器,設置真實服務器的RIP,PORT,權重等,最重要的是對後端RS的健康狀態檢測,HTTP,SSL,TCP三種檢測方式,其中HTTP檢測較為全面,可以針對回應時間,url內容變化判斷RS的健康狀態,而TCP則較為粗糙;
項目實例:
利用keepalived高可用lvs調度器,並分別使用NAT和DR模型的lvs服務負載均衡一個PHP應用,如phpMyAdmin;
DR模型下:
DR模型的配置在上一節配置過,在這裏就只講述針對於上一節的DR模型做出了哪些改變!
①keepalived的高可用首先的第一點就是要保證各個設備的時間同步,為此我們需要設置一個時間同步服務器,讓其余設備對其同步;
安裝時間同步軟件:
yum install -y ntp
在時間服務器修改配置文件/etc/ntpd.conf(第一臺調度器172.16.72.10主機)
設置那些客戶端主機可以以此主機作為時間服務器:
允許172.16網段的主機
設置本機為時間服務器,上面的server全部註釋掉,那些是其他網絡中的時間服務器;
設置好之後啟動ntpd服務
systemctl start ntpd.service
客戶端主機針對該服務器校準時間:
#ntpdate 172.16.72.10(時間服務器IP)
②添加一臺虛擬機作為第二臺調度器,IP地址為172.16.72.4
將設置在第一臺調度器上eno16777736:0的VIPdown掉,我們將在keepalived中生成虛擬的VIP;
安裝keepalived在兩臺調度器上;
yum -y install keepalived
針對其配置文件進行配置
GLOBAL:
notification_email:郵件接收方的地址,為本機root用戶;
notification_email_from:郵件發送方的地址;
smtp_server:郵件服務器IP地址;
router_id drct1:設置路由器ID,僅為了區別不同設備而已;如不修改不影響服務;
vrrp_mcast_group4 224.220.220.200: 發送vrrp通告的目的IPv4組播地址;
VRRP:
設置調度器:
state MASTER:該調度器的狀態為MASTER;
interface:針對於哪個網卡接口;
priority:優先級,MASTER的優先級需要高於BACKUP的,在搶占模式下;
authentication:設置認證;
virtual_ipaddress:虛擬VIP地址;
註意:設置雙實例時,只需要更改其vrrp_instance的名稱,優先級與state即可;
LVS:
delay_loop:服務輪詢的時間;
lb_algo:使用的調度算法;
lb_kind:使用的模型;DR or NAT;
persistence_timeout:長連接時間;
sorry_server:當後端RS全都不能工作時,在本調度器的http服務中設置sorry界面;
設置RS:
real_server後為RIP;
設置權重,在此設置的HTTP檢測,對指定url進行監測,狀態碼為200則正常;
nb_get_retry 3:健康檢測重試的次數;
delay_before_retry 1:重試之前的延遲時長;
connect_timeout 3:連接超時時長;多長時間沒有回應就有問題;
將調度器1的keepalived配置好後,將相同文件傳送到第二臺調度器的
/etc/keepalived/keepalived.conf,進行修改;
如:172.16.72.4調度器的配置:
修改狀態為BACKUP,優先級即可;
重啟keepalived
#systemctl start keepalived.service
啟動後keepalived設備會自動加載ipvsadm系統服務
MASTER設備會自動生成一個虛擬VIP地址:
而BACKUP設備則不會生成,但其會自動生成ipvs集群服務;
這個時候down掉MASTER設備,BACKUP設備就會自動轉為MASTER設備了;
down調度器1:
#killall keepalived
#systemctl stop keepalived.service
簡單測試一下基於keepalived高可用的DR集群是否生效;
編輯兩個index.html文件分別在兩個RS的DocumentRoot下;
因為是wrr基於權重的算法:
設置MySQL共享存儲,基於NAS的NFS:
將172.16.72.7的數據庫信息復制到一個目錄中,並將該目錄設為共享目錄;由RS1 172.16.72.6掛載,並修改數據庫相關配置文件/etc/my.cnf;
大概步驟:
/etc/exports:
#exportfs -ar
RS1配置:
修改/etc/my.cnf:
訪問phpMyAdmin:
連續兩次訪問(相隔一段持久連接的訪問)
由上圖可知,兩次訪問的RS各不相同,因為之前實驗很多次,所以其順序有些奇怪;
NAT模型下:
NAT模型下的keepalived高可用,同樣基於上一篇博客的nat模型,IP配置如下:
DIR1:
eno16777736:172.16.72.4
eno33554976:192.168.72.4
DIR2:
eno16777736:172.16.72.5
eno33554976:192.168.72.5
RS1:
eno16777736:192.168.72.6
RS2:
eno16777736:192.168.72.7
由keepalived高可用設備虛擬出來的IP:
VIP:
eno16777736:0 172.16.72.1/16 面向外網
DIP:
eno33554976:0 192.168.72.4/24 面向內網
①校準時間
②安裝keepalived
yum install -y keepalived
③配置DIR1的keepalived
outside設置的是面對外網的VIP
inside設置的是面對內網的DIP
兩者需在不同的組中,所以其virtual_router_id需要不一樣以區分;
接下來的配置基本上與nat模式一般無二;
DIR2的keepalived配置:
DIR1,DIR2啟動keepalived服務;在MASTER主機DIR1與BACKUP主機DIR2上自動生成相關集群服務;
至於後端RS的httpd,php-fpm,Mariadb服務,基本就與之前講述的一樣,不需要變化;
以下是我利用客戶端進行的測試:無持久連接下
物理機訪問phpMyAdmin:
由DIR1上:可知訪問的是192.168.72.7
隔一段時間再次訪問,因為設置了持久連接:
訪問的是192.168.72.6了
斷開DIR1的keepalived後,DIR2就自動成為MASTER:
重新啟動DIR1後,DIR2就自動變為BACKUP,因為默認啟動搶占模式
keepalived高可用