天天看點

高可用服務——Keepalived高可用叢集

一、高可用叢集

1、概念:

高可用叢集(High Availability Cluster,HA Cluster),指解決單點故障問題的發生,以減少服務中斷時間為目的的伺服器叢集技術。

它通過保護使用者的業務程式對外不間斷地提供服務,把因為軟、硬、人三因素而造成的故障對業務的影響程度降低到最小。

即最終目的為保證業務的7*24小時不間斷。

2、高可用性能衡量标準:

衡量高可用的優劣,通常需要使用MTTF、MTTR、MTBF這三個時間值。

MTTF(Mean Time To Failure):平均無故障時間,指系統無故障運作的平均時間,取所有從系統開始正常運作到發生故障之間的時間段的平均值,衡量系統的可靠性。MTTF=ΣT1/N。

MTTR(Mean Time To Repair):平均維修時間,指系統從發生故障到維修結束之間的時間段的平均值,衡量系統的可維護性。MTTR=Σ(T2+T3)/N。

MTBF(Mean Time Between Failure):平均失效間隔,指系統兩次故障發生之間的時間段的平均值。MTBF=Σ(T2+T3+T1)/N。

MTBF=MTTF+MTTR ;HA=MTTF/(MTTF+MTTR)*100%

高可用服務——Keepalived高可用叢集
基本可用性 2個9 99% 年度當機時間:87.6h
較高可用性 3個9 99.9% 年度當機時間:8.8h
具有故障自動恢複 4個9 99.99% 年度當機時間:53m
極高可用性 5個9 99.999% 年度當機時間:5m

3、高可用實作的原理

單點故障問題是高可用解決的主要問題,在解決單點故障問題上,架構設計的核心準則即“備援”,通過配置主備裝置達到叢集的效果,每台裝置為一個節點(node),實作主節點(master node)故障,備用節點(backup node)接管業務,待主節點故障修複後再切換回來。

然而,隻有備援是不夠的,單單備援需要人工幹預進行手動切換,會增加系統不可服務的時間。是以,需要加入“自動故障轉移”來實作自動切換的功能。

4、高可用叢集軟體

(1)國外:RedHat(RHCS)、Novell(Novell Cluster Service)、Steeleye(Lifekeeper for Linux、Keepalived)

(2)國内:中興(Newstart HA)深度(Deepin HA)

二、keepalived

1、概念:

keepalived是一種伺服器高可用,防止伺服器網絡單點故障導緻業務中斷的解決方案。起初是專為LVS負載均衡軟體設計的,用來管理并監控LVS叢集系統中各個服務節點的狀态,後來又加入了可以實作高可用的VRRP功能,作為其他服務的高可用解決方案軟體。

2、原理:

以VRRP為技術核心,引入虛拟IP(Virtual IP,VIP)概念。将多台伺服器組成的叢集虛拟成一台虛拟伺服器裝置,這台虛拟伺服器裝置通過VIP對外提供服務。而在虛拟伺服器中多台實體伺服器通過指定或選舉的方式來确定master和backup,master實作針對虛拟伺服器IP的各種網絡功能對外提供服務,此時不提供網絡服務的伺服器作為backup,master會通過多點傳播的方式發送心跳封包給backup。當master發生故障,backup周期時間内沒有接收到master的心跳封包,則會通過選舉的方式來接管master角色對外提供服務。

三、VRRP

1、概念:

Virtual Router Redundancy Protocol,虛拟路由器備援協定。其目的就是為了解決靜态路由單點故障問題,它能夠保證當個别節點當機時,整個網絡可以不間斷運作。

2、原理:

将啟用VRRP功能的裝置組成叢集,裝置之間通過競選機制(比較優先級)選出主、備裝置,主裝置會通過多點傳播的方式向備用裝置發送封包。當主裝置故障,備用裝置接收不到主裝置發送的多點傳播封包,則備用裝置會重新進行競選,選出主裝置進行接管業務。當原主裝置恢複後會進行搶占,重新作為主裝置對外提供服務。

四、Keepalived實戰配置

1、系統環境配置

master伺服器(主) 192.168.49.184
backup伺服器(備) 192.168.49.185
虛拟IP 192.168.49.186

2、Keepalived配置

(1)分别在master和backup伺服器上安裝keepalived軟體

[[email protected] ~]# yum install -y keepalived.x86_64 
已加載插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
正在解決依賴關系
--> 正在檢查事務
---> 軟體包 keepalived.x86_64.0.1.3.5-19.el7 将被 安裝
--> 解決依賴關系完成

依賴關系解決

================================================================================
 Package             架構            版本                   源             大小
================================================================================
正在安裝:
 keepalived          x86_64          1.3.5-19.el7           base          332 k

事務概要
================================================================================
安裝  1 軟體包

總下載下傳量:332 k
安裝大小:1.0 M
Downloading packages:
keepalived-1.3.5-19.el7.x86_64.rpm                         | 332 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安裝    : keepalived-1.3.5-19.el7.x86_64                              1/1 
  驗證中      : keepalived-1.3.5-19.el7.x86_64                              1/1 

已安裝:
  keepalived.x86_64 0:1.3.5-19.el7                                              

完畢!




[[email protected] ~]# yum install -y keepalived.x86_64 
已加載插件:fastestmirror, langpacks
base                                                     | 3.6 kB     00:00     
extras                                                   | 2.9 kB     00:00     
updates                                                  | 2.9 kB     00:00     
(1/2): extras/7/x86_64/primary_db                          | 230 kB   00:01     
(2/2): updates/7/x86_64/primary_db                         | 6.5 MB   00:01     
Determining fastest mirrors
 * base: mirrors.bfsu.edu.cn
 * extras: mirrors.163.com
 * updates: mirrors.bfsu.edu.cn
正在解決依賴關系
--> 正在檢查事務
---> 軟體包 keepalived.x86_64.0.1.3.5-19.el7 将被 安裝
--> 正在處理依賴關系 ipset-libs >= 7.1,它被軟體包 keepalived-1.3.5-19.el7.x86_64 需要
--> 正在處理依賴關系 libnetsnmpmibs.so.31()(64bit),它被軟體包 keepalived-1.3.5-19.el7.x86_64 需要
--> 正在處理依賴關系 libnetsnmpagent.so.31()(64bit),它被軟體包 keepalived-1.3.5-19.el7.x86_64 需要
--> 正在檢查事務
---> 軟體包 ipset-libs.x86_64.0.6.29-1.el7 将被 更新
--> 正在處理依賴關系 ipset-libs(x86-64) = 6.29-1.el7,它被軟體包 ipset-6.29-1.el7.x86_64 需要
--> 正在處理依賴關系 libipset.so.3()(64bit),它被軟體包 ipset-6.29-1.el7.x86_64 需要
--> 正在處理依賴關系 libipset.so.3(LIBIPSET_1.0)(64bit),它被軟體包 ipset-6.29-1.el7.x86_64 需要
--> 正在處理依賴關系 libipset.so.3(LIBIPSET_2.0)(64bit),它被軟體包 ipset-6.29-1.el7.x86_64 需要
--> 正在處理依賴關系 libipset.so.3(LIBIPSET_3.0)(64bit),它被軟體包 ipset-6.29-1.el7.x86_64 需要
---> 軟體包 ipset-libs.x86_64.0.7.1-1.el7 将被 更新
---> 軟體包 net-snmp-agent-libs.x86_64.1.5.7.2-49.el7_9.1 将被 安裝
--> 正在處理依賴關系 net-snmp-libs = 1:5.7.2-49.el7_9.1,它被軟體包 1:net-snmp-agent-libs-5.7.2-49.el7_9.1.x86_64 需要
--> 正在檢查事務
---> 軟體包 ipset.x86_64.0.6.29-1.el7 将被 更新
---> 軟體包 ipset.x86_64.0.7.1-1.el7 将被 更新
---> 軟體包 net-snmp-libs.x86_64.1.5.7.2-28.el7 将被 更新
---> 軟體包 net-snmp-libs.x86_64.1.5.7.2-49.el7_9.1 将被 更新
--> 解決依賴關系完成

依賴關系解決

================================================================================
 Package                 架構       版本                      源           大小
================================================================================
正在安裝:
 keepalived              x86_64     1.3.5-19.el7              base        332 k
為依賴而安裝:
 net-snmp-agent-libs     x86_64     1:5.7.2-49.el7_9.1        updates     707 k
為依賴而更新:
 ipset                   x86_64     7.1-1.el7                 base         39 k
 ipset-libs              x86_64     7.1-1.el7                 base         64 k
 net-snmp-libs           x86_64     1:5.7.2-49.el7_9.1        updates     751 k

事務概要
================================================================================
安裝  1 軟體包 (+1 依賴軟體包)
更新           ( 3 依賴軟體包)

總下載下傳量:1.8 M
Downloading packages:
No Presto metadata available for base
No Presto metadata available for updates
(1/5): ipset-7.1-1.el7.x86_64.rpm                          |  39 kB   00:00     
(2/5): ipset-libs-7.1-1.el7.x86_64.rpm                     |  64 kB   00:00     
(3/5): net-snmp-agent-libs-5.7.2-49.el7_9.1.x86_64.rpm     | 707 kB   00:00     
(4/5): keepalived-1.3.5-19.el7.x86_64.rpm                  | 332 kB   00:00     
(5/5): net-snmp-libs-5.7.2-49.el7_9.1.x86_64.rpm           | 751 kB   00:01     
--------------------------------------------------------------------------------
總計                                               1.2 MB/s | 1.8 MB  00:01     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在更新    : ipset-libs-7.1-1.el7.x86_64                                 1/8 
  正在更新    : 1:net-snmp-libs-5.7.2-49.el7_9.1.x86_64                     2/8 
  正在安裝    : 1:net-snmp-agent-libs-5.7.2-49.el7_9.1.x86_64               3/8 
  正在安裝    : keepalived-1.3.5-19.el7.x86_64                              4/8 
  正在更新    : ipset-7.1-1.el7.x86_64                                      5/8 
  清理        : ipset-6.29-1.el7.x86_64                                     6/8 
  清理        : ipset-libs-6.29-1.el7.x86_64                                7/8 
  清理        : 1:net-snmp-libs-5.7.2-28.el7.x86_64                         8/8 
  驗證中      : keepalived-1.3.5-19.el7.x86_64                              1/8 
  驗證中      : ipset-7.1-1.el7.x86_64                                      2/8 
  驗證中      : 1:net-snmp-agent-libs-5.7.2-49.el7_9.1.x86_64               3/8 
  驗證中      : 1:net-snmp-libs-5.7.2-49.el7_9.1.x86_64                     4/8 
  驗證中      : ipset-libs-7.1-1.el7.x86_64                                 5/8 
  驗證中      : ipset-libs-6.29-1.el7.x86_64                                6/8 
  驗證中      : ipset-6.29-1.el7.x86_64                                     7/8 
  驗證中      : 1:net-snmp-libs-5.7.2-28.el7.x86_64                         8/8 

已安裝:
  keepalived.x86_64 0:1.3.5-19.el7                                              

作為依賴被安裝:
  net-snmp-agent-libs.x86_64 1:5.7.2-49.el7_9.1                                 

作為依賴被更新:
  ipset.x86_64 0:7.1-1.el7                    ipset-libs.x86_64 0:7.1-1.el7    
  net-snmp-libs.x86_64 1:5.7.2-49.el7_9.1    

完畢!

           

(2)分别在主裝置、備用裝置上修改/etc/keepalived/keepalived.conf配置檔案

[[email protected] ~]# cd /etc/keepalived/
[[email protected] keepalived]# cp keepalived.conf keepalived.conf.bak
[[email protected] keepalived]# vim 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              ///設定郵箱IP位址或域名
   smtp_connect_timeout 30                ///設定30s内無法連接配接郵箱則不再發送
   router_id master                       ///高可用叢集主機身份辨別(唯一性)
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {                      ///VRRP協定配置部分(執行個體配置,族)
    state MASTER                          ///辨別裝置在執行個體中的身份(MASTER/BACKUP)
    interface ens33                        ///制定VIP出現在什麼網卡上
    virtual_router_id 51                  ///辨別執行個體身份的資訊
    priority 100                          ///設定優先級(越大越優先)
    advert_int 1                          ///
    authentication {                      ///實作通訊需要有認證過程
        auth_type PASS                    
        auth_pass 1111
    }
    virtual_ipaddress {                   ///配置VIP
        192.168.49.186
    }
}

#virtual_server 192.168.200.100 443 {                  ///LVS服務管理配置部分,可删除
#    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
#       }
#    }





[[email protected] ~]# cd /etc/keepalived/
[[email protected] keepalived]# cp keepalived.conf keepalived.conf.bak
[[email protected] keepalived]# vim 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 BACKUP
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}  
   
vrrp_instance VI_1 { 
    state backup
    interface ens33
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }   
    virtual_ipaddress {
        192.168.49.186
    }   
}              

           

(3)啟動服務

[[email protected] keepalived]# systemctl start keepalived
[[email protected] keepalived]# systemctl enable keepalived

[[email protected] keepalived]# systemctl start keepalived
[[email protected] keepalived]# systemctl enable keepalived
           
高可用服務——Keepalived高可用叢集
高可用服務——Keepalived高可用叢集

3、驗證

(1)測試VIP是否正常通信、檢視主裝置網卡資訊

[[email protected] keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ec:e1:f6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.49.184/22 brd 192.168.51.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.49.186/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::dac1:9ced:f76b:d918/64 scope link 
       valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 52:54:00:64:52:cc brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
    link/ether 52:54:00:64:52:cc brd ff:ff:ff:ff:ff:ff
[[email protected] keepalived]# ping 192.168.49.186
PING 192.168.49.186 (192.168.49.186) 56(84) bytes of data.
64 bytes from 192.168.49.186: icmp_seq=1 ttl=64 time=0.048 ms
64 bytes from 192.168.49.186: icmp_seq=2 ttl=64 time=0.099 ms
64 bytes from 192.168.49.186: icmp_seq=3 ttl=64 time=0.070 ms
64 bytes from 192.168.49.186: icmp_seq=4 ttl=64 time=0.069 ms
^C
--- 192.168.49.186 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 0.048/0.071/0.099/0.020 ms


[[email protected] keepalived]# ip a 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:68:14:41 brd ff:ff:ff:ff:ff:ff
    inet 192.168.49.185/22 brd 192.168.51.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::8613:4934:eafb:1eb6/64 scope link 
       valid_lft forever preferred_lft forever
    inet6 fe80::dac1:9ced:f76b:d918/64 scope link tentative dadfailed 
       valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 52:54:00:64:52:cc brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
    link/ether 52:54:00:64:52:cc brd ff:ff:ff:ff:ff:ff
[[email protected] keepalived]# ping 192.168.49.186
PING 192.168.49.186 (192.168.49.186) 56(84) bytes of data.
64 bytes from 192.168.49.186: icmp_seq=1 ttl=64 time=0.495 ms
64 bytes from 192.168.49.186: icmp_seq=2 ttl=64 time=0.777 ms
64 bytes from 192.168.49.186: icmp_seq=3 ttl=64 time=0.811 ms
64 bytes from 192.168.49.186: icmp_seq=4 ttl=64 time=0.792 ms
64 bytes from 192.168.49.186: icmp_seq=5 ttl=64 time=0.980 ms
^C
--- 192.168.49.186 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4002ms
rtt min/avg/max/mdev = 0.495/0.771/0.980/0.156 ms

           

(2)模拟主裝置故障,檢視VIP通信狀況及VIP所處位置

[[email protected] keepalived]# systemctl stop network

[[email protected] keepalived]# ip a 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:68:14:41 brd ff:ff:ff:ff:ff:ff
    inet 192.168.49.185/22 brd 192.168.51.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.49.186/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::8613:4934:eafb:1eb6/64 scope link 
       valid_lft forever preferred_lft forever
    inet6 fe80::dac1:9ced:f76b:d918/64 scope link tentative dadfailed 
       valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 52:54:00:64:52:cc brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
    link/ether 52:54:00:64:52:cc brd ff:ff:ff:ff:ff:ff
           

(3)嘗試以WEB服務進行驗證,切斷Master

高可用服務——Keepalived高可用叢集

五、參考文章文獻:

  1. https://zhuanlan.zhihu.com/p/43723276
  2. https://baijiahao.baidu.com/s?id=1670188503614251415&wfr=spider&for=pc
  3. http://www.ruanyifeng.com/blog/2019/11/fault-tolerance.html
  4. https://blog.csdn.net/weixin_47985676/article/details/106790011
  5. https://blog.csdn.net/xiaoyi23000/article/details/80163344
  6. https://blog.csdn.net/l1028386804/article/details/72801492

繼續閱讀