本篇主要介紹一下 keepalived 的基本的 主備使用
什麼是 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臺機器 , 把111定義為 keepalived 的 MASTER 節點
ip | keepalived |
---|---|
172.16.225.111 | MASTER |
172.16.225.110 | BACKUP |
我這裡簡單點直接使用 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
}
}
}
....
LVS 的設定 本篇不涉及
把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
}
}
! 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
}
}
分別在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這個網路卡上
當 master機器如果出現了故障 比如斷點 或者 關機等等.. 那麼 master機器上的 keepalived 肯定不存在了
檢視 BACKUP 機器上的 ip 可以發現 vip 已經漂移到這個機器上了
在ping 的同時 模擬宕機 可以看到中間短暫的超時 後面立即恢復了
本篇主要介紹了keepalived 的基本的主備使用方式, 不過主備方式有缺點 它的備用伺服器一直不工作 有點資源浪費, 可以改成 雙主備模式 有機會再說
keepalived 可以結合 check檢查指令碼 來檢測如 nginx redis mysql 等等 實現這些服務的高可用方式
歡迎大家存取 個人部落格 Johnny小屋
歡迎關注個人公眾號