keepalived 主備使用

2022-12-12 18:00:38

keepalived 主備使用

本篇主要介紹一下 keepalived 的基本的 主備使用

1.概述

什麼是 keepalived呢,它是一個叢集管理中 保證叢集高可用的軟體,防止單點故障,keepalived是以VRRP協定為實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路冗餘協定

虛擬路由冗餘協定,可以認為是實現路由器高可用的協定,即將N臺提供相同功能的路由器組成一個路由器組,這個組裡面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在區域網內其他機器的預設路由為該vip),master會發組播,當backup收不到vrrp包時就認為master宕掉了,這時就需要根據VRRP的優先順序來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。

通俗點說就是: keepalived中master節點會傳送 ARP廣播到 keepalived 的 backup中,如果vrrp沒收到包則認為 master宕機,重新選舉master ,並且把vip給漂移到新的master機器上,實現了高可用

2.準備工作

準備2臺機器 , 把111定義為 keepalived 的 MASTER 節點

ip keepalived
172.16.225.111 MASTER
172.16.225.110 BACKUP

3.安裝keepalived

我這裡簡單點直接使用 yum 安裝, 也可以通過二進位制包安裝

分別在2臺機器上都要安裝 keepalived

yum -y install keepalived

安裝完成後 有 /etc/keepalived/keepalived.conf 預設組態檔如下:

! Configuration File for keepalived

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_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
#VRRP 範例定義塊
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}
#虛擬伺服器定義塊
virtual_server 192.168.200.100 443 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.201.100 443 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
....
  • global_defs 定義全域性設定 ,如 郵件設定
  • VRRP 範例定義塊: 主要設定
  • 虛擬伺服器定義塊: LVS 的設定 本篇不涉及

4.設定 2臺 機器的keepalived

4.1 設定 MASTER 機器

把111機器的 keepalived.conf 檔案修改如下

! Configuration File for keepalived

global_defs {
   router_id LB111
}

vrrp_instance VI_1 {
    # 定義為master
    state MASTER 
    # 網路卡 
    interface ens160
    #這個一定要 和 110 一樣 規定為一組路由器中的機器
    virtual_router_id 51
    # 優先順序 
    priority 100 
    # vrrp組之間的心跳包頻率 預設1s
    advert_int 1
    # 組的認證資訊 可能有多個路由器組,為了不讓把1組的vip漂移到2組的機器上
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虛擬出來的 ip 地址
    virtual_ipaddress {
        172.16.225.200
    }
}

4.2 設定 BACKUP 機器

! Configuration File for keepalived

global_defs {
   router_id LB111
}

vrrp_instance VI_1 {
    # 指定 BACKUP 備用機
    state BACKUP
    interface ens160
    # 虛擬router id 一組的機器要一致
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
       172.16.225.200
    }
}

5.啟動 keepalived

分別在2臺機器上直接啟動

#啟動keepalived
systemctl start keepalived 

#檢視狀態
systemctl status keepalived

可能啟動不成功: IPVS: Can't initialize ipvs: Protocol not available

[root@middle keepalived]# tail -f  /var/log/messages
Dec  8 06:23:39 middle systemd: Started LVS and VRRP High Availability Monitor.
Dec  8 06:23:39 middle Keepalived_vrrp[17171]: VRRP_Instance(VI_1) removing protocol VIPs.
Dec  8 06:23:39 middle Keepalived_vrrp[17171]: Using LinkWatch kernel netlink reflector...
Dec  8 06:23:39 middle Keepalived_vrrp[17171]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]
Dec  8 06:23:39 middle Keepalived_healthcheckers[17170]: `IPVS: Can't initialize ipvs: Protocol not available`
Dec  8 06:23:39 middle Keepalived_healthcheckers[17170]: Stopped
Dec  8 06:23:39 middle Keepalived[17169]: Keepalived_healthcheckers exited with permanent error FATAL. Terminating
Dec  8 06:23:39 middle Keepalived[17169]: Stopping
Dec  8 06:23:40 middle Keepalived_vrrp[17171]: Stopped
Dec  8 06:23:44 middle Keepalived[17169]: Stopped Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2

需要安裝 ipvsadm

yum -y install ipvsadm

再次啟動

檢視VIP 已經在 111 master節點的機器上了 並且在 ens160這個網路卡上

6. 模擬 宕機MASTER

當 master機器如果出現了故障 比如斷點 或者 關機等等.. 那麼 master機器上的 keepalived 肯定不存在了

檢視 BACKUP 機器上的 ip 可以發現 vip 已經漂移到這個機器上了

在ping 的同時 模擬宕機 可以看到中間短暫的超時 後面立即恢復了

總結

本篇主要介紹了keepalived 的基本的主備使用方式, 不過主備方式有缺點 它的備用伺服器一直不工作 有點資源浪費, 可以改成 雙主備模式 有機會再說

keepalived 可以結合 check檢查指令碼 來檢測如 nginx redis mysql 等等 實現這些服務的高可用方式

歡迎大家存取 個人部落格 Johnny小屋
歡迎關注個人公眾號