keepalived
一、keepalived入門介紹
1.keepalived簡介
2.keepalived服務的三個重要功能
2.1.管理LVS負載均衡軟件
2.2.實現對LVS集群節點健康檢查功能
2.3.作為系統網絡服務的高可用功能
3.keepalived高可用故障切換轉移原理
4.keepalived安裝及主配置文件介紹
二、使用keepalived實現雙機熱備
1.案例描述
2.Master服務器配置
3.Backup服務器配置
4.驗證測試
5.Keepalived “裂腦”問題
5.1.什么是裂腦?
5.2.導致裂腦發生的原因
5.3.解決裂腦的常見方案
5.4.生產場景下檢測裂腦故障的思路:
三、LVS+keepalived實現高可用負載均衡集群實戰
1.案例描述
2.案例實施
Keepalived起初是專門針對LVS設計的一款強大的輔助工具,主要用來提供故障切換和健康狀態檢查功能---判斷LVS負載調度器、節點服務器的可用性、及時隔離并替換為新的服務器,當故障主機恢復后重新將其加入集群。可以實現高可用的VRRP/HSRP功能。因此,keepalived除了能夠管理LVS軟件外,還可以作為其他服務(Nginx、Haproxy、MySQL等)的高可用解決方案軟件。
早期的LVS軟件需要通過命令行或腳本實現管理,并且沒有針對LVS節點的健康檢查功能。為了解決LVS的這些使用不便的問題,keepalived就誕生了,可以說keepalived軟件起初是專門解決LVS的缺陷而誕生的。因此,keepalived和LVS的通常情況下是同時出現在集群系統中的。
Keepalived可以通過在自身的keepalived.conf配置文件里配置LVS的節點IP和相關參數實現對LVS的直接管理;除此之外,當LVS集群中的某一個甚至是幾個節點服務器同時發生故障無法提供服務時,keepalived服務會自動將失效的節點服務器從當前的工作列隊中移除,并將請求轉交到正常節點服務器中,從而保證用戶的訪問不受影響。當故障節點服務器被修復后,再自動加入工作列隊,繼續為用戶提供服務。
Keepalived可以實現任意兩臺主機之間,例如Master和Backup主機之間的故障轉移和自動切換,這個主機可以是普通的不能停機的業務服務器,也可以是LVS負載均衡、反向代理服務器。
Keepalived高可用功能實現的簡單原理為,兩臺主機同時安裝配置keepalived軟件并啟動服務,開始正常工作時,由角色為Master的主機獲得所有資源并對用戶提供服務,而Backup主機為備份主機,暫時不為用戶提供服務,但是處于監聽狀態;當Master主機出現故障時,Backup通過keepalived高可用機制也發現了Master服務器無法正常工作,因此自動接管Master主機的所有工作,此時必然有一段時間處于用戶無法正常訪問服務,由于此機制響應速度較快,因此在進行故障切換時,用戶幾乎無法感知服務器有異常。當Master主機故障修復后,又會通過“搶占”機制獲取對用戶的服務權,繼續為用戶提供服務,而此時的Backup依舊為備服務器。也就是說,如果Master主機正常運行,那么Backup主機將一直處于待命狀態。
Keepalived高可用服務對Master、Backup之間的故障切換轉移是通過VRRP來實現的,在keepalived服務正常工作時,主Master節點會不斷地向備服務器發送(以組播方式)心跳消息,用于告訴Backup主機我當前的狀態是正常的,當Master主機出現故障時,就無法給Backup主機發送心跳消息,此時Backup主機也遲遲未接收到Master的心跳消息,因此Backup判斷Master主機無法正常為用戶提供服務,因此Backup主機接管了Master主機的所有服務。也就是說Backup主機從之前的待命狀態變成了工作狀態。當Master主機經過修復恢復正常后,通過對比雙方的優先級,此時的Master主機將會從Backup主機中奪回服務權,而Bakcup主機此時繼續待命。
Keepalived采用虛擬路由冗余協議(Virtual Router Redundancy Protocol,簡稱VRRP)熱備份協議,以軟件的方式實現Linux服務器的多機熱備功能,VRRP是針對路由器的一種備份解決方案---由多臺路由器組成一個熱備份組,通過共用虛擬IP地址(簡稱VIP)對外提供服務,每個熱備組內同一時刻只能有一臺路由器提供服務,其他路由器處于冗余狀態,若當前在線的路由器失效,則其他路由器會自動接替(優先級決定接替順序)虛擬IP地址為客戶繼續提供服務。熱備組內的每臺路由器都有可能成為主路由器,虛擬路由器的IP地址可以在熱備組內的路由器之間進行轉移,所以也稱為漂移IP地址,漂移地址的實現不需要配置網卡子接口,而是通過keepalived配置文件實現。
VRRP協議實現拓撲圖如下圖所示:
Keepalived安裝方式一般通過編譯安裝、rpm包/yum安裝兩種方式實現,這兩種方式安裝都非常簡單,因為keepalived安裝時所需要依賴的包極少,可以忽略不計。在特殊環境下,可能有附加的包需要安裝,具體根據實際情況實施安裝,在此通過yum方式安裝keepalived軟件,不管哪種安裝方式,使用時的配置都是一樣的。
# yum install -y keepalived ipvsadm
# systemctl enable keepalived
# rpm -qa keepalived
keepalived-1.2.13-8.el7.x86_64
keepalived配置文件
在keepalived高可用功能模塊中,keepalived配置文件主要包含三部分:
全局配置區域:主要用來定義keepalived故障通知機制和Route?ID標識
VRRP實例定義區域:此區域主要定義具體服務的實例配置,包括keepalived主備狀態、接口、優先級、認證方式和IP信息等。
LVS負載的服務器池區域:定義VIP地址、健康狀態檢查時間、LVS負載均衡調度算法、負載均衡模式、節點服務器IP、權重、重連時間等信息。
全局配置區域:
# vim /etc/keepalived/keepalived.conf
!?Configuration File for keepalived //等同于#,表示這是一個關于keepalived的配置文件
global_defs { //全局配置區域起始
???notification_email { //定義一個郵件通知項目
?????acassen@firewall.loc //此三行定義收件人,一般為管理員郵箱地址
?????failover@firewall.loc
?????sysadmin@firewall.loc
???}
???notification_email_from Alexandre.Cassen@firewall.loc //定義發件人地址,可以專門為此服務器申請一個郵箱地址用于發送keepalived信息郵件
???smtp_server 192.168.200.1 //定義郵件服務器IP地址
???smtp_connect_timeout 30 //定義連接郵件服務器的超時時間
???router_id LVS_DEVEL //定義當前服務器主機名,具有唯一性
}
注意:在以上的郵件配置方面,生產環境中可以不用配置,此類報警通告可通過更加專業的監控工具來時間,如zabbix、nagios等。而花括號{}表示一個項目的開始和截止,因此一個項目開始若有花括號{,那么結尾也應該有個花括號}。
VRRP實例定義區域:
vrrp_instance VI_1 { //定義第一個vrrp實例,實例名稱為VI_1,主和備可以不一樣,在主中的多個實例中,此名稱不應該一樣
????state MASTER //聲明當前服務器角色為Master主服務器,BACKUP為備
????interface ens32 //當前用于和集群中其他主機通信的網卡編號,而不是隨意的一個編號
????virtual_router_id 51 //虛擬路由器的ID號,一般為數字,主備應該一致
????priority 100 //優先級,主服務器的要比備服務器優先級更高
????advert_int 1 //心跳檢查時間。用于主與備之間通信檢查,該值為一秒,默認即可。該值越大,說明客戶端感受到的故障時間越長
????authentication { //主和備服務器通信的權限驗證項目,確定主和備屬于同一熱備組
????????auth_type PASS //類型有PASS(密碼驗證)和AH(IPSEC驗證),官方建議PASS
????????auth_pass 1111 //PASS的值,一般為數字,不超過8位
????}
????virtual_ipaddress { //指定VIP地址,可以有多個,此地址應該為客戶端所訪問的地址
????????192.168.200.16
????????192.168.200.17
????????192.168.200.18
61.139.2.69/30 dev?ens32 label?ens32:0
//以上一行的配置為,指定客戶訪問的公網地址,使用的物理網卡為ens32,別名為ens32:0
????}
}
LVS負載的服務器池區域:
virtual_server 192.168.200.100 443 { //定義虛擬服務器,VIP地址、端口
????delay_loop 6 //健康檢查時間間隔,單位為秒
????lb_algo rr //lvs調度算法rr/wrr/lc/wlc...
????lb_kind NAT //負載均衡轉發模式NAT/TUN/DR
????persistence_timeout 50 //用戶請求服務器會話超時時間,秒數。實驗環境中一般禁用此項,目的是刷新一次瀏覽器頁面,即可訪問不同節點服務器,該值存在時,在值規定的時間內,客戶端不斷訪問VIP地址將會由同一臺服務器處理。
????protocol TCP //使用的協議
????real_server 192.168.201.100 443 { //第一個節點服務器ip、端口
????????weight 1 //權重,若節點服務器配置一致,此值都為1,不一致時,配置較高處理能力較強的服務器此值可以適當調高,調度器會給次值高的轉發更多的請求。
inhibit_on_failure //當健康檢查發現該節點故障后將其權重設置為0,而不是從服務列隊剔除,0表示停用該節點
TCP_CHECK { //當前的健康狀態檢查模式,可以選擇的有:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
???????????? connect_timeout 3 //連接超時時間
????????? ???nb_get_retry 3 //重連次數
??????????? ?delay_before_retry 3 //重連間隔時間
?????????? ??connect_port 80?? //健康檢查的端口的端口
??????????}
}
}
到目前為止,常用的keepalived配置文件參數介紹完畢,如需了解更加詳細的配置文件說明,可以在linux終端下輸入# “man keepalived.conf”以查看官方的文檔解說。
基于VRRP的熱備方式,keepalived可以用作服務器的故障切換,每個熱備組可以有多臺服務器,最常用的就是雙機熱備,在這種方案中,故障切換主要針對虛擬IP地址的漂移來實現,因此能夠適用于各種應用服務器(web、ftp、mail等)
本小結主要是和通過一個簡單的實驗案例來實現keepalived雙機熱備。Master、Backup服務器的IP地址分別為192.168.1.10、192.168.1.20,而VIP地址設置為192.168.1.100,如下圖所示:
案例環境:
主機 | 操作系統 | IP地址 | 主要軟件 |
Keepalived_Master | CentOS 7.5_64 | 192.168.1.10/24 | keepalived-1.2.13-8.el7.x86_64 |
Keepalived_Backup | CentOS 7.5_64 | 192.168.1.20/24 | keepalived-1.2.13-8.el7.x86_64 |
?Client_test | CentOS 7.5_64 | 192.168.1.30/24 | elinks-0.12-0.36.pre6.el7.x86_64 |
# yum install -y keepalived
# rpm -qa keepalived
keepalived-1.2.13-8.el7.x86_64
# mv?/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
# vim /etc/keepalived/keepalived.conf
global_defs {
???notification_email {
?????123456@qq.com
???}
???notification_email_from 654321@qq.com
???smtp_server 192.168.200.1
???smtp_connect_timeout 30
???router_id chengdu
}
vrrp_instance VI_1 {
????state MASTER
????interface ens32
????virtual_router_id 51
????priority 100
????advert_int 1
????authentication {
????????auth_type PASS
????????auth_pass 1111
????}
????virtual_ipaddress {
????????192.168.1.100/24 dev ens32 label ens32:0
????}
}
# systemctl start keepalived
# yum install -y httpd
# systemctl enable httpd
# systemctl start httpd
# mkdir -p /var/www/html/
# echo "keepalived高可用集群Web Server_1" > /var/www/html/index.html
# yum install -y keepalived
# rpm -qa keepalived
keepalived-1.2.13-8.el7.x86_64
# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
# rm -rf /etc/keepalived/keepalived.conf
# vim /etc/keepalived/keepalived.conf
global_defs {
???notification_email {
?????123456@qq.com
???}
???notification_email_from 654321@qq.com
???smtp_server 192.168.200.1
???smtp_connect_timeout 30
???router_id shanghai
}
vrrp_instance VI_1 {
????state BACKUP
????interface ens32
????virtual_router_id 51
????priority 80
????advert_int 1
????authentication {
????????auth_type PASS
????????auth_pass 1111
????}
????virtual_ipaddress {
????????192.168.1.100/24 dev ens32 label ens32:0
????}
}
# systemctl start keepalived
# yum install -y httpd
# systemctl enable httpd
# systemctl start httpd
# mkdir -p /var/www/html/
# echo "keepalived高可用集群Web Server_2" > /var/www/html/index.html
當以上keepalived配置完成后,默認情況下Master服務器通過ifconfig命令能夠查看到ens32:0網卡的VIP地址192.168.1.100,而Backup服務器卻查看不到,當將Master服務器的優先級設置比Backup服務器低時,Master服務器將無法查看到VIP地址,而Backup服務器卻可以。
總結:通過ifconfig命令查看VIP地址時,只有當前為客戶提供服務的服務器才能查看到VIP地址,而處于待命的服務器上無法查看到VIP地址。
客戶端訪問驗證:
# yum install -y elinks //客戶機安裝文本瀏覽器
# elinks 192.168.1.100 //客戶機訪問VIP地址,由于此時Master服務器為192.168.1.10,因此獲取到的頁面為192.168.1.10的網頁頁面
Master服務器執行:
# systemctl stop keepalived //在Master服務器中關閉keepalived程序,此時Master服務器無法正常提供服務,因此Backup服務器應該會接替并為用戶提供服務
客戶端執行:
# elinks 192.168.1.100 //客戶機訪問VIP地址,由于此時為客戶提供服務的為Backup服務器,因此獲取到的頁面應該為Backup服務器的頁面。
當客戶機連接時,可以通過以下命令在調度器上查看客戶機訪問服務器的路徑流程
# ipvsadm -L -n -c
IPVS connection entries
pro expire state ??????source ????????????virtual ???????????destination
TCP 01:49 ?FIN_WAIT ???192.168.1.222:49375 192.168.1.100:80 ??192.168.1.30:80
TCP 00:55 ?FIN_WAIT ???192.168.1.222:49374 192.168.1.100:80 ??192.168.1.30:80
# ipvsadm --list --timeout
Timeout (tcp tcpfin udp): 1 1 1 //超時時間
# ipvsadm --set 1 1 1 //修改超時時間,分別對應 tcp tcpfin udp
由于某些原因,導致兩臺高可用服務器對在指定時間內無法檢測到對方的心跳消息,各自取得資源及服務的所有權,而此時的兩臺高可用服務器都還活著并在正常運行,這樣就會導致同一個IP或服務在兩端同時存在而發生沖突,最嚴重的是兩臺主機占用同一個VIP地址,當用戶寫入數據時可能會分別寫入到兩端,這可能會導致服務器兩端的數據不一致或造成數據丟失,這種情況就被稱為裂腦。
(1)高可用服務器之間心跳線鏈路故障,導致無法正常通信。
(2)高可用服務器上開啟了防火墻阻擋了心跳消息傳輸。
(3)高可用服務器上心跳網卡地址等信息配置不正確,導致發送心跳失敗。
(4)其他服務配置不當等原因,如router_id不一致、心跳方式不同、心跳廣播沖突、軟件BUG等。
1)同時使用串行電纜和以太網電纜連接,同時用兩條心跳線路,這樣一條線路壞了另一個還是好的,依然能傳送心跳消息。
2)當檢測到裂腦時強行關閉一個心跳節點(這個功能需特殊設備支持,如Stonith、fence)。相當于備節點接收不到心跳消息,發送關機命令通過單獨的線路關閉主節點的電源。
3)做好對裂腦的監控報警(如郵件及手機短信等或值班),在問題發生時人為第一時間介入仲裁,降低損失。例如,百度的監控報警短信就有上行和下行的區別。報警信息報到管理員手機上,管理員可以通過手機回復對應數字或簡單的字符串操作返回給服務器,讓服務器根據指令自動處理相應故障,這樣解決故障的時間更短。
(1)簡單判斷的思想:只要備節點出現VIP就報警,這個報警有兩種情況,一是主機宕機了備機接管了;二是主機沒宕,裂腦了。不管屬于哪個情況都進行報警,然后由人工查看判斷及解決。
(2)比較嚴謹的判斷:備節點出現對應VIP,并且主節點及對應服務(如果能遠程連接主節點查看是否有VIP就更好了)還活著,就說明發生裂腦了。
Keepalived的設計目標是構建高可用的LVS負載均衡集群,可以調用ipvsadm工具來創建虛擬服務器,管理服務器池,而不僅僅用作雙機熱備。使用keepalived構建LVS集群更加簡便易用,主要優勢體現在對LVS負載調度器實現熱備切換、提高可用性、對服務器池中的節點服務器進行健康狀態檢查、自動移除失效節點、加入有效節點等功能。
在基于LVS+keepalived實現的LVS集群結構中,至少包括兩臺熱備的負載調度器,至少兩臺節點服務器。本內容將以DR模式的LVS集群為基礎,增加一臺負載調度器,使用keepalived來實現主、從調度器的熱備,從而構建兼有負載均衡、高可用兩種能力的LVS網站集群系統。
案例架構圖如下:
案例環境:
主機 | 操作系統 | IP地址 | VIP地址 | 主要軟件 |
Master Server | CentOS 7.5_64 | 61.139.2.2/29 | 61.139.2.1/29 | ipvsadm-1.27-7.el7.x86_64 keepalived-1.2.13-8.el7.x86_64 |
Backup?Server | CentOS 7.5_64 | 61.139.2.3/29 | 61.139.2.1/29 | |
Web Server_1 | CentOS 7.5_64 | 61.139.2.4/29 | 61.139.2.1/32 | httpd-2.4.6-45.el7.centos.x86_64 |
Web?Server_2 | CentOS 7.5_64 | 61.139.2.5/29 | 61.139.2.1/32 | |
Client_test | CentOS 7.5_64 | 61.139.2.6/29 | elinks-0.12-0.36.pre6.el7.x86_64 |
對于以上拓撲結構以及網絡設計的說明:服務器池中的節點服務器原設計第一網卡與調度器通信,第二網卡與內網的存儲服務通信,由于此時實驗環境使用存儲服務的話無法體現更有效果的負載均衡集群效果,且NFS共享存儲設置較為簡單,因此在此處并未安裝如圖所示配置服務器池的第二網卡及后端存儲服務。
Master Server操作
調整/proc響應參數
對于DR集群來說,由于LVS負載調度器和各節點需要共用VIP地址,應該關閉Linux內核的重定向參數響應。
# vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens32.send_redirects = 0 //此接口地址為lvs服務器正在使用的物理接口
# sysctl -p
安裝并配置keepalived
# yum install -y keepalived ipvsadm
# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
# rm -rf /etc/keepalived/keepalived.conf
# vim /etc/keepalived/keepalived.conf
global_defs {
???notification_email {
?????123456@chengdu.vip
???}
???notification_email_from 654321@chengdu.vip
???smtp_server 192.168.200.1
???smtp_connect_timeout 30
???router_id chengdu
}
vrrp_instance VI_1 {
????state?MASTER
????interface ens32
????virtual_router_id 51
????priority 100
????advert_int 1
????authentication {
????????auth_type PASS
????????auth_pass 5525
????}
????virtual_ipaddress {
????????61.139.2.1/29 dev ens32 label ens32:0
????}
}
virtual_server 61.139.2.1 80 {
????delay_loop 6
????lb_algo wrr
????lb_kind DR
# ???persistence_timeout 50
????protocol TCP
????real_server 61.139.2.4 80 { //第一個節點服務器
????????weight 1
????????inhibit_on_failure
????????TCP_CHECK {
????????????????connect_timeout 3
???????????????????nb_get_retry 3
?????????????????delay_before_retry 3
??????????????????connect_port 80
??????????}
????????}
????real_server 61.139.2.5 80 { //第二個節點服務器
????????weight 1
????????inhibit_on_failure
????????TCP_CHECK {
????????????????connect_timeout 3
???????????????????nb_get_retry 3
?????????????????delay_before_retry 3
??????????????????connect_port 80
??????????}
????????}
}
# systemctl restart keepalived //重啟服務
# ipvsadm –ln //通過ipvsadm管理工具查看通過配置文件配置的虛擬服務器和節點服務器是否有效
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
??-> RemoteAddress:Port ??????????Forward Weight ActiveConn InActConn
TCP ?61.139.2.1:80 wrr
??-> 61.139.2.4:80 ???????????????Route ??0 ?????0 ?????????0 ????????
??-> 61.139.2.5:80 ???????????????Route ??0 ?????0 ?????????0
此時由于節點服務器還未配置httpd服務,開放80端口,因此兩臺節點服務器中的權重都被設置了為0,后續過程中當把節點服務器http服務配置完成并監聽80端口后,再次查看此權重應該為keepalived.conf配置文件做所設置的1
在此時如果將keepalived.conf配置文件中節點服務器的“inhibit_on_failure”選項刪除后,再次通過“ipvsadm?-ln”命令將無法查看到節點服務器信息,因為節點服務器被移除了服務列隊。即便是這樣,在后續配置中將所有節點服務器都配置完成后,再次觀察Master服務器的節點服務器狀態,可以發現是能夠查看到的。
Backup Server操作
調整/proc響應參數
對于DR集群來說,由于LVS負載調度器和各節點需要共用VIP地址,應該關閉Linux內核的重定向參數響應。
# vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens32.send_redirects = 0 //此接口地址為lvs服務器正在使用的物理接口
# sysctl -p
安裝并配置keepalived
# yum install -y keepalived ipvsadm
# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
# rm -rf /etc/keepalived/keepalived.conf
# vim /etc/keepalived/keepalived.conf
global_defs {
???notification_email {
?????123456@chengdu.vip
???}
???notification_email_from 654321@chengdu.vip
???smtp_server 192.168.200.1
???smtp_connect_timeout 30
???router_id shanghai
}
vrrp_instance VI_1 {
????state?BACKUP
????interface ens32
????virtual_router_id 51
????priority 90
????advert_int 1
????authentication {
????????auth_type PASS
????????auth_pass 5525
????}
????virtual_ipaddress {
????????61.139.2.1/29 dev ens32 label ens32:0
????}
}
virtual_server 61.139.2.1 80 {
????delay_loop 6
????lb_algo wrr
????lb_kind DR
# ???persistence_timeout 50
????protocol TCP
????real_server 61.139.2.4 80 { //第一個節點服務器
????????weight 1
????????inhibit_on_failure
????????TCP_CHECK {
????????????????connect_timeout 3
???????????????????nb_get_retry 3
?????????????????delay_before_retry 3
??????????????????connect_port 80
??????????}
????????}
????real_server 61.139.2.5 80 { //第二個節點服務器
????????weight 1
????????inhibit_on_failure
????????TCP_CHECK {
????????????????connect_timeout 3
???????????????????nb_get_retry 3
?????????????????delay_before_retry 3
??????????????????connect_port 80
??????????}
????????}
}
# systemctl restart keepalived //重啟服務
# ipvsadm –ln //通過ipvsadm管理工具查看通過配置文件配置的虛擬服務器和節點服務器是否有效
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
??-> RemoteAddress:Port ??????????Forward Weight ActiveConn InActConn
TCP ?61.139.2.1:80 wrr
??-> 61.139.2.4:80 ???????????????Route ??1 ?????0 ?????????0 ????????
??-> 61.139.2.5:80 ???????????????Route ??0 ?????0 ?????????0
兩臺Web?Server配置
使用DR模式時,節點服務器也需要配置VIP地址,并調整內核的ARP響應參數以阻止更新VIP的MAC地址,避免發生沖突,除此之外,WEB服務器的配置與NAT類似。
節點服務器配置VIP地址僅用作發送Web響應數據包的源地址,并不需要監聽客戶機的訪問請求(改由調度器監聽并分發),因此使用虛接口lo:0來承受VIP地址,并為本機添加一條路由記錄,將訪問VIP地的數據限制在本地,避免通信紊亂。
Web?Server_1配置:
設置VIP地址:
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-lo?ifcfg-lo:0
# vim ifcfg-lo:0 //只修改以下三部分內容即可
DEVICE=lo:0
IPADDR=61.139.2.1
NETMASK=255.255.255.255
# ifup lo:0
# ifconfig lo:0
添加路由
# /sbin/route add -host 61.139.2.1?dev lo:0
# vim /etc/profile
/sbin/route add -host 61.139.2.1 dev lo:0
調整/proc相應參數
# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce =2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
# sysctl -p
安裝配置提供給客戶端的應用服務程序
# yum install -y httpd
# systemctl enable httpd
# systemctl start httpd
# mkdir -p /var/www/html/
# echo "LVS+keepalived高可用負載均衡集群之Web Server_1" > /var/www/html/index.html
Web?Server_2配置:
設置VIP地址:
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-lo?ifcfg-lo:0
# vim ifcfg-lo:0 //只修改以下三部分內容即可
DEVICE=lo:0
IPADDR=61.139.2.1
NETMASK=255.255.255.255
# ifup lo:0
# ifconfig lo:0
添加路由
# /sbin/route add -host 61.139.2.1 dev lo:0
# vim /etc/profile
/sbin/route add -host 61.139.2.1 dev lo:0
調整/proc相應參數
# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce =2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
# sysctl -p
安裝配置提供給客戶端的應用服務程序
# yum install -y httpd
# systemctl enable httpd
# systemctl start httpd
# mkdir -p /var/www/html/
# echo "LVS+keepalived高可用負載均衡集群之Web Server_2" > /var/www/html/index.html
3、驗證測試
keepalived負載調度器高可用功能驗證:
在配置完成后,兩臺調度器都開啟了keepalived,而且61.139.2.2的優先級更高,因此它應該為Master。通過# tail -50 /var/log/messages 查看系統日志,或ifconfig命令查看VIP地址,能夠驗證。
此時客戶端通過瀏覽器訪問VIP地址61.139.2.1也能夠通過LVS負載均衡集群訪問到節點服務器的網頁內容且能夠實現多個節點服務器之間跳轉。
# systemctl stop keepalived //在第一臺調度器中執行此命令,停用keepalived,此時keepalived服務應由第二臺服務器接管,通過在第二臺服務器61.139.2.3中執行以下命令可以驗證:
# ?tail -20 /var/log/messages //在最后幾行應該會顯示以下字樣,表示當前服務器已經角色為Master
VRRP_Instance(VI_1) Transition to MASTER STATE
VRRP_Instance(VI_1) Entering MASTER STATE
此時客戶機再次訪問VIP地址61.139.2.1,依然能夠像之前那樣訪問到多臺節點服務器的網頁內容,也就是說,一臺調度器出現了故障,并未影響客戶正常訪問。
接著繼續將第二臺服務器的keepalived服務也停止,此時集群中的兩臺服務器都無法實現為客戶提供服務,因此客戶端無法獲取到任何節點服務器數據,也就是說客戶端訪問VIP地址時,無法獲取到正常的網頁內容。
# systemctl stop keepalived
兩臺調度器keepalived服務都關閉后,客戶機訪問情況如下:
# systemctl start keepalived //第一臺調度器再次開啟keepalived服務
# tail -20 /var/log/messages //查看日志,發現當前服務器成為了Master
VRRP_Instance(VI_1) Transition to MASTER STATE
VRRP_Instance(VI_1) Entering MASTER STATE
客戶機再次訪問:
此時LVS+keepalived高可用負載均衡集群驗證到此結束。