keepalived 雙機熱備配置文件詳解

  • 2019 年 10 月 5 日
  • 筆記

配置示例:https://blog.51cto.com/14227204/2438902 一、keepalived工作原理及作用:

keepalived最初是專門針對LVS設計的一款強大的輔助工具,主要用來提供故障切換和健康檢查功能——判斷LVS負載調度器、節點伺服器的可用性,及時隔離並替換為新的伺服器,當故障主機回復後將其重新加入群集。單獨部署LVS環境的話,調度器發生宕機的話,整個群集就失效了,某一個web節點宕機後,客戶端在訪問時,總會碰上訪問不到網頁的情況,所以,將keepalived和LVS結合起來,才可形成一個真正的高可用群集,當然,後端的共享存儲也必須搭建一個高可用的存儲伺服器,三者其中有一個滿足不了,都不能稱之為一個高可用的群集環境。

keepalived官方網站: http://www.linuxvirtualserver.org/ ,在非LVS環境中,keepalived也可以作為熱備軟體

使用。

keepalived採用VRRP(虛擬路由冗餘協議)熱備份協議,以軟體的方式實現Linux伺服器的

多機熱備。VRRP是針對路由器的一種備份解決方案——由多台路由器組成一個熱備組,通

過共用的虛擬IP(VIP)地址對外提供服務;每個熱備份組內同一時刻只有一台主路由器提

供服務,其他路由器處於冗餘狀態,若當前在線的路由器失效,則其他路由器會自動接替

(優先順序決定接替順序)虛擬IP地址,以繼續提供服務。

熱備組內的每台路由器都可能成為主路由器,虛擬路由器的IP地址(VIP)可以在熱備組內

路由器進行轉移,所以也稱為漂移IP地址。使用keepalived時,漂移地址的實現不需要手動

建立虛介面配置文件(如ens33:0),而是由keepalived根據配置文件自動管理。

基於VRRP的熱備方式,keepalived可以用作伺服器的故障切換,每個熱備組可以有多台服

務器——最常用的是多機熱備了。在這種多機熱備方案中,故障切換主要針對虛擬IP地址的

漂移來實現。因此能適用於各種應用伺服器(不管是Web、FTP、Mail、還是SSH、DNS….)。 二、keepalived雙機熱備配置詳解: . 通過下面簡易的環境圖,可以去全面的了解雙機熱備的配置及功能:

1、配置主伺服器:

[root@lVS1 ~]# systemctl stop firewalld            #關閉防火牆  [root@lVS1 ~]# yum -y install keepalived ipvsadm      安裝所需工具  [root@lVS1 ~]# systemctl enable keepalived        #設置開機自啟動  [root@lVS1 ~]# cd /etc/keepalived/  [root@lVS1 keepalived]# cp keepalived.conf keepalived.conf.bak         #備份配置文件  [root@lVS1 keepalived]# vim keepalived.conf               #編輯配置文件    global_defs {     notification_email {       [email protected]     #啟用郵件通知功能,這裡設置收件人地址,可以配置多個       [email protected]       [email protected]     }     notification_email_from [email protected]            #發件人姓名、地址     smtp_server 192.168.200.1     smtp_connect_timeout 30     router_id LVS_DEVEL1           #本伺服器的名稱(在群集中必須唯一)。              ..............    #省略部分內容  }  vrrp_instance VI_1 {                     #定義VRRP熱備實例      state MASTER              #熱備狀態,MASTER表示主伺服器(注意大小寫)      interface ens33             #承載VIP地址的物理介面      virtual_router_id 51                 #虛擬路由器的ID號,每個熱備組保持一致。      priority 100                           #優先順序0-100,數值越大越優先。      advert_int 1                   #通告間隔秒數(心跳頻率)。      authentication {                     #認證資訊,每個熱備組保持一致          auth_type PASS                #認證類型          auth_pass 1111                 #密碼字串      }      virtual_ipaddress {             #指定漂移地址,可以有多個      192.168.1.100      }  }            .........................            #省略部分內容

確認上面配置無誤後,然後啟動keepalived服務,實際狀態為MASTER的主伺服器將為ens33介面自動添加VIP地址,通過ip命令可以查看(注意:ifconfig命令看不到)。

[root@lVS1 keepalived]# systemctl start keepalived          #啟動該服務  [root@lVS1 keepalived]# ip a show dev ens33           #查看ens33介面  2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UPUt qlen 1000      link/ether 00:0c:29:77:2c:03 brd ff:ff:ff:ff:ff:ff      inet 192.168.1.1/24 brd 192.168.1.255 scope global noprefixroute ens33         valid_lft forever preferred_lft forever      inet 192.168.1.100/32 scope global ens33       #可以看到VIP已經配置在ens33上。         valid_lft forever preferred_lft forever      inet6 fe80::95f8:eeb7:2ed2:d13c/64 scope link noprefixroute         valid_lft forever preferred_lft forever

2、配置備份伺服器(LVS2): 在同一keepalived熱備組內,所有伺服器的keepalived配置文件基本相同,某些配置項也必

須相同,包括虛擬路由器的ID號、認證資訊、漂移地址、心跳頻率等,不同之處主要在於路

器名稱、熱備狀態、優先順序。具體配置時需要注意以下幾點:

  • 伺服器名稱(route_id):建議為每個參與熱備的伺服器指定不同的名稱。
  • 熱備狀態(state):至少應有一台主伺服器,將狀態設置為MASTER;可以有多台備用的伺服器,將狀態設置為BACKUP。
  • 優先順序(priority):數值越大則取得VIP控制權的優先順序就越高,因此主服務的優先順序應設置為最高;其他備用伺服器可依次遞減,但不能相同,以免在爭奪VIP控制權時發生衝突。 . 配置備用伺服器時(可以有多台),可以直接將主伺服器的keepa.conf文件複製過來,修改伺服器名稱、熱備狀態、優先順序,這三項就可以了,哪怕是其中包含了一些web節點的配置,也不用修改,也不能修改。
[root@LVS2 ~]# systemctl stop firewalld            #關閉防火牆  [root@LVS2 ~]# yum -y install keepalived ipvsadm          #安裝相關工具  [root@LVS2 ~]# scp [email protected]:/etc/keepalived/keepalived.conf /etc/keepalived/  #使用主伺服器root用戶將主伺服器的keepalived配置文件複製過來。  [email protected] s password:                    #輸入主伺服器root用戶的密碼  keepalived.conf                             100% 3549     3.5MB/s   00:00  [root@LVS2 ~]# vim /etc/keepalived/keepalived.conf  global_defs {     ...............     router_id LVS_DEVEL2                    #修改這裡的伺服器名稱    .....................    }                  ..............  vrrp_instance VI_1 {      state BACKUP             #修改這裡的狀態,改為BACKUP      interface ens33         #若該伺服器承載VIP的物理介面有變,則這裡也要修改      virtual_router_id 51      priority 90               #修改優先順序,要比主伺服器低。      advert_int 1      authentication {          auth_type PASS          auth_pass 1111      }      virtual_ipaddress {      192.168.1.100      }  }                .................  #改動上述幾行後,保存退出即可。  [root@LVS2 ~]# systemctl start keepalived         #啟動服務  [root@LVS2 ~]# systemctl enable keepalived         #設置開機自啟動

此時主伺服器仍然在線,VIP地址實際上仍然由主伺服器控制,其他伺服器處於備份狀態,因此在備用伺服器中將不會為ens33介面添加VIP地址:

[root@LVS2 ~]# ip a show dev ens33                  #查看ens33介面,不會看到VIP  2: ens33: <BROADCAST,MULTICAST,Udel state UP group default qlen 1000      link/ether 00:0c:29:9a:09:98 brd ff:ff:ff:ff:ff:ff      inet 192.168.1.2/24 brd 192.168.1.255 scope global noprefixroute ens33         valid_lft forever preferred_lft forever      inet6 fe80::3050:1a9b:5956:5297/64 scope link noprefixroute         valid_lft forever preferred_lft forever

3、測試雙機熱備功能:

將主伺服器關機,或停止keepalived服務,等待約15秒後,查看備份伺服器的ens33網卡,會發現漂移地址已經轉移過來了,說明雙機熱備功能生效。待主伺服器開機後,漂移地址會自動轉移回到主伺服器上。

[root@localhost ~]# ip a show dev ens33   #主伺服器關機後查看備份伺服器的網卡資訊  2: ens33: <BROADCAST,MULTICAST,UP state UP group default qlen 1000      link/ether 00:0c:29:9a:09:98 brd ff:ff:ff:ff:ff:ff      inet 192.168.1.2/24 brd 192.168.1.255 scope global noprefixroute ens33         valid_lft forever preferred_lft forever      inet 192.168.1.100/32 scope global ens33                   #漂移地址已經轉移過來了         valid_lft forever preferred_lft forever      inet6 fe80::3050:1a9b:5956:5297/64 scope link noprefixroute         valid_lft forever preferred_lft forever

再將主伺服器開機,會發現VIP已經轉移回了主伺服器,而備份伺服器又查不到了VIP:

[root@LVS1 ~]# ip a show dev ens33              #在主伺服器上進行查看  2: ens33: <BROADCAST,MULTICAST,UP,Lefault qlen 1000      link/ether 00:0c:29:77:2c:03 brd ff:ff:ff:ff:ff:ff      inet 192.168.1.1/24 brd 192.168.1.255 scope global noprefixroute ens33         valid_lft forever preferred_lft forever      inet 192.168.1.100/32 scope global ens33             #VIP地址在這裡了         valid_lft forever preferred_lft forever      inet6 fe80::95f8:eeb7:2ed2:d13c/64 scope link noprefixroute         valid_lft forever preferred_lft forever  [root@LVS2 ~]# ip a show dev ens33               #在備份伺服器上進行查看  2: ens33: <BROADCAST,MULTICAST,UP,P grou00      link/ether 00:0c:29:9a:09:98 brd ff:ff:ff:ff:ff:ff      inet 192.168.1.2/24 brd 192.168.1.255 scope goute ens33         valid_lft forever preferred_lft forever      inet6 fe80::3050:1a9b:5956:5297/64 scope link noprefixroute         valid_lft forever preferred_lft forever