keepalived 主備使用

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 {
     [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

再次啓動

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小屋
歡迎關注個人公衆號

歡迎關注個人公衆號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章