keepalived雙機熱備超詳細入門介紹

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入門介紹

1.keepalived簡介

Keepalived起初是專門針對LVS設計的一款強大的輔助工具,主要用來提供故障切換和健康狀態檢查功能---判斷LVS負載調度器、節點服務器的可用性、及時隔離并替換為新的服務器,當故障主機恢復后重新將其加入集群。可以實現高可用的VRRP/HSRP功能。因此,keepalived除了能夠管理LVS軟件外,還可以作為其他服務(Nginx、Haproxy、MySQL等)的高可用解決方案軟件。

2.keepalived服務的三個重要功能

2.1.管理LVS負載均衡軟件

早期的LVS軟件需要通過命令行或腳本實現管理,并且沒有針對LVS節點的健康檢查功能。為了解決LVS的這些使用不便的問題,keepalived就誕生了,可以說keepalived軟件起初是專門解決LVS的缺陷而誕生的。因此,keepalived和LVS的通常情況下是同時出現在集群系統中的。

2.2.實現對LVS集群節點健康檢查功能

Keepalived可以通過在自身的keepalived.conf配置文件里配置LVS的節點IP和相關參數實現對LVS的直接管理;除此之外,當LVS集群中的某一個甚至是幾個節點服務器同時發生故障無法提供服務時,keepalived服務會自動將失效的節點服務器從當前的工作列隊中移除,并將請求轉交到正常節點服務器中,從而保證用戶的訪問不受影響。當故障節點服務器被修復后,再自動加入工作列隊,繼續為用戶提供服務。

2.3.作為系統網絡服務的高可用功能

Keepalived可以實現任意兩臺主機之間,例如Master和Backup主機之間的故障轉移和自動切換,這個主機可以是普通的不能停機的業務服務器,也可以是LVS負載均衡、反向代理服務器。

Keepalived高可用功能實現的簡單原理為,兩臺主機同時安裝配置keepalived軟件并啟動服務,開始正常工作時,由角色為Master的主機獲得所有資源并對用戶提供服務,而Backup主機為備份主機,暫時不為用戶提供服務,但是處于監聽狀態;當Master主機出現故障時,Backup通過keepalived高可用機制也發現了Master服務器無法正常工作,因此自動接管Master主機的所有工作,此時必然有一段時間處于用戶無法正常訪問服務,由于此機制響應速度較快,因此在進行故障切換時,用戶幾乎無法感知服務器有異常。當Master主機故障修復后,又會通過“搶占”機制獲取對用戶的服務權,繼續為用戶提供服務,而此時的Backup依舊為備服務器。也就是說,如果Master主機正常運行,那么Backup主機將一直處于待命狀態。

3.keepalived高可用故障切換轉移原理

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協議實現拓撲圖如下圖所示:

4.keepalived安裝及主配置文件介紹

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”以查看官方的文檔解說。

二、使用keepalived實現雙機熱備

1.案例描述

基于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

2.Master服務器配置

# 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

3.Backup服務器配置

# 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

4.驗證測試

當以上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

5.Keepalived “裂腦”問題

5.1.什么是裂腦?

由于某些原因,導致兩臺高可用服務器對在指定時間內無法檢測到對方的心跳消息,各自取得資源及服務的所有權,而此時的兩臺高可用服務器都還活著并在正常運行,這樣就會導致同一個IP或服務在兩端同時存在而發生沖突,最嚴重的是兩臺主機占用同一個VIP地址,當用戶寫入數據時可能會分別寫入到兩端,這可能會導致服務器兩端的數據不一致或造成數據丟失,這種情況就被稱為裂腦。

5.2.導致裂腦發生的原因

(1)高可用服務器之間心跳線鏈路故障,導致無法正常通信。

(2)高可用服務器上開啟了防火墻阻擋了心跳消息傳輸。

(3)高可用服務器上心跳網卡地址等信息配置不正確,導致發送心跳失敗。

(4)其他服務配置不當等原因,如router_id不一致、心跳方式不同、心跳廣播沖突、軟件BUG等。

5.3.解決裂腦的常見方案

1)同時使用串行電纜和以太網電纜連接,同時用兩條心跳線路,這樣一條線路壞了另一個還是好的,依然能傳送心跳消息。

2)當檢測到裂腦時強行關閉一個心跳節點(這個功能需特殊設備支持,如Stonith、fence)。相當于備節點接收不到心跳消息,發送關機命令通過單獨的線路關閉主節點的電源。

3)做好對裂腦的監控報警(如郵件及手機短信等或值班),在問題發生時人為第一時間介入仲裁,降低損失。例如,百度的監控報警短信就有上行和下行的區別。報警信息報到管理員手機上,管理員可以通過手機回復對應數字或簡單的字符串操作返回給服務器,讓服務器根據指令自動處理相應故障,這樣解決故障的時間更短。

5.4.生產場景下檢測裂腦故障的思路:

(1)簡單判斷的思想:只要備節點出現VIP就報警,這個報警有兩種情況,一是主機宕機了備機接管了;二是主機沒宕,裂腦了。不管屬于哪個情況都進行報警,然后由人工查看判斷及解決。

(2)比較嚴謹的判斷:備節點出現對應VIP,并且主節點及對應服務(如果能遠程連接主節點查看是否有VIP就更好了)還活著,就說明發生裂腦了。

三、LVS+keepalived實現高可用負載均衡集群實戰

1.案例描述

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共享存儲設置較為簡單,因此在此處并未安裝如圖所示配置服務器池的第二網卡及后端存儲服務。

2.案例實施

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高可用負載均衡集群驗證到此結束。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12274.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12274.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12274.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何用Rust獲取本機CPU、內存在Web網頁中顯示?

目錄 一、需求描述 二、具體操作步驟 三、知識點 1、systemstat 2、Actix 一、需求描述 需求: 1、需要使用Rust進行后端開發獲取本機CPU和內存信息; 2、使用WEB框架發布API; 3、然后使用HTML/CSS/JavaScript進行前端開發&#xff0…

MySQL表的增刪查改【基礎部分】

數據表的操作 新增 普通插入 insert into 表名 values(值,值...)注意: 此處的值要和表中的列相匹配 使用’‘單引號或者”“雙引號來表示字符串 mysql> insert into student values(123,zhangsan); Query OK, 1 row affected (0.02 sec)指定列插入 insert …

2024年3月 電子學會 青少年等級考試機器人理論真題五級

202403 青少年等級考試機器人理論真題五級 第 1 題 下圖程序運行后,串口監視器顯示的結果是?( ) A:0 B:1 C:3 D:4 第 2 題 下列選項中,關于74HC595移位寄存器芯片的…

微信小程序開發【Coffee Shopping】(1)

1.環境準備 微信開發者工具:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 前端常用網站集合:http://www.wwp666.cn/ 微信小程序開發文檔:https://developers.weixin.qq.com/miniprogram/dev/framework/quicksta…

數據結構之二叉樹詳解[1]

在前面我們介紹了堆和二叉樹的基本概念后,本篇文章將帶領大家深入學習鏈式二叉樹。 1.預備知識 2.二叉樹結點的創建 3.二叉樹的遍歷 3.1前序遍歷 3.2中序遍歷 3.3 后序遍歷 4.統計二叉樹的結點個數 5.二叉樹葉子結點的個數 6.二叉樹第k層的結點個數 7.總結 …

鴻蒙ArkUI開發:常用布局【相對布局】

相對布局(RelativeContainer) 相對布局可以讓子元素指定兄弟元素或父容器作為錨點,基于錨點做位置布局必須為RelativeContainer及其子元素設置ID,用于指定錨點信息。未設置ID的子元素不會顯示RelativeContainer ID為“__containe…

增程SUV價格即將崩盤?買車一定要再等等!

文 | AUTO芯球 作者 | 雷歌? 真是“離譜”啊,車圈真是逗比歡樂多, 我這兩天看一個博主連續40多小時開車直播,充電口、油箱蓋全部封死,全程視頻直播沒斷過, 就為了測試這兩天剛上市的星際元ET續航有多遠。 另一個…

Docker 創建網絡

問題: 1.需要將多個容器添加到同一個網絡. 2.docker-compose.yaml 如果不指定,默認會重新創建一個網卡. 創建網卡 docker network create -d bridge mynet ##-d 指定模式(默認橋接)查看自定義網絡信息 docker inspect mynet…

NSSCTF Web方向的例題和相關知識點(二)

[SWPUCTF 2021 新生賽]Do_you_know_http 解題: 點擊打開環境,是 提示說請使用wLLm瀏覽器訪問 我們可以更改瀏覽器信息,在burp重放器中發包后發現是302重定向,但是提示說success成功,說明 我們修改是成功的&#xff…

HTML特殊字符

特殊字符 有特殊含義的字符成為字符實體 對于有特殊含義的字符,需要通過轉移字符來表示 <span> <br><a href"http://www.atguigu.com">我 愛 前端</a> <br>&amp;amp; 效果

Element-UI 快速入門指南

文章目錄 一、安裝 Element-UI1.1 使用 npm 安裝1.2 使用 yarn 安裝 二、引入 Element-UI三、使用 Element-UI 組件3.1 按鈕組件3.2 輸入框組件3.3 表單組件3.4 表格組件3.5 彈框組件 四、自定義主題4.1 安裝主題工具4.2 初始化變量文件4.3 編譯主題 五、總結 &#x1f389;歡迎…

刷題之最長連續序列

哈希表 class Solution { public:int longestConsecutive(vector<int>& nums) {//set記錄并且去重nums中的數unordered_set<int>set;for(int i0;i<nums.size();i){set.insert(nums[i]);}int result0;//遍歷所有數for(auto iset.begin();i!set.end();i){//如…

服務的war包已經丟在tomcat中但是還是沒法訪問,如何排查?

問題出現的現象是我已經將 XWiki 的 WAR 包放置在 Tomcat 的 webapps目錄下但仍然無法訪問&#xff0c;反思之后可以從下面以下幾個方面來診斷和解決問題&#xff1a; 1. 確認 Tomcat 正在運行 首先&#xff0c;確保 Tomcat 服務正在正常運行。可以使用以下命令檢查 Tomcat 的…

鑒源論壇·觀通丨軌交軟件測試技術詳述

作者 | 劉艷青 上海控安安全測評部測試經理 版塊 | 鑒源論壇 觀通 社群 | 添加微信號“TICPShanghai”加入“上海控安51fusa安全社區” 01 集成測試技術要求 1.1 總體要求 對軟件集成測試進行靜態測試應先于動態測試&#xff1b; 集成過程是動態進行的&#xff0c;在測…

圖紙加密軟件是如何實現共享服務器圖紙防泄密?Cad圖紙防泄密廣州廠家

現在企業網絡數據安全的問題已經在社會的發展過程中引起了關注&#xff0c;尤其對研發制造類企業而言&#xff0c;企業設計圖紙的防泄密問題是這些企業在日后工作管理中的重中之重。在當今的互聯網發展形勢下&#xff0c;廣州的制造類設計企業為不讓單位圖紙泄露&#xff0c;也…

CVHub | CVPR 2024 | 英偉達發布新一代視覺基礎模型: AM-RADIO = CLIP + DINOv2 + SAM

本文來源公眾號“CVHub”&#xff0c;僅用于學術分享&#xff0c;侵權刪&#xff0c;干貨滿滿。 原文鏈接&#xff1a;CVPR 2024 | 英偉達發布新一代視覺基礎模型: AM-RADIO CLIP DINOv2 SAM 標題&#xff1a;《AM-RADIO: Agglomerative Vision Foundation Model Reduce Al…

vscode 之 output 輸出中文亂碼,終端輸出中文正常

# 1. 背景 因為沒錢買正版的軟件&#xff0c;所以轉戰 vscode 編譯器。 在編譯 python 文件時&#xff0c;發現直接右鍵 runner code&#xff0c;輸出中文亂碼。 但是在 teiminal 終端 執行py test.py 時&#xff0c;輸出正常&#xff0c;中文正常。 output 輸出中文樣式(中文…

java相等忽略音調

來自百度,親測可用 java相等忽略音調 在Java中&#xff0c;如果你想比較兩個字符串而忽略它們的音調符號&#xff0c;你可以使用java.text.Collator類來進行區域敏感的字符串比較。Collator類提供了根據特定區域的規則進行字符串比較的能力&#xff0c;可以設置忽略音調的選項…

Go微服務: Prometheus性能監控與Grafana平臺的搭建

Prometheus 概述 promethues 是一套開源的監控&報警&時間序列數據庫的組合基本原理是通過http協議周期性抓取被監控組件的狀態適合Docker、Kubernetes環境的監控系統 Promethues 整體架構 一、抓取數據的兩種方式 1 &#xff09;Short-lived jobs 短暫的任務 不會提…

RedisTemplate操作Redis詳解之連接Redis及自定義序列化

連接到Redis 使用Redis和Spring時的首要任務之一是通過IoC容器連接到Redis。為此&#xff0c;需要java連接器&#xff08;或綁定&#xff09;。無論選擇哪種庫&#xff0c;你都只需要使用一組Spring Data Redis API&#xff08;在所有連接器中行為一致&#xff09;&#xff1a;…