1. 程式人生 > >keepalived高可用

keepalived高可用

構建 keepalived dr

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高可用