keepalived 主備使用

AskaJohnny發表於2022-12-12

keepalived 主備使用

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

2022-12-08 06.52.42

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 {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   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

再次啟動

image-20221208062859996

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

image-20221208063349638

6. 模擬 當機MASTER

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

image-20221208063612288

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

image-20221208063648780

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

image-20221208063901897

總結

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

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

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

歡迎關注個人公眾號

相關文章