關注微信公眾號:CodingTechWork,一起學習進步。
keepalived介紹
keepalived是基於VRRP
(Virtual Router Redundancy Protocol ,虛擬路由器冗余協議)協議實現的LVS
(LinuxVirtual Server ,Linux虛擬服務器)服務高可用方案。主要提供了負載均衡和高可用功能,用來避免單點故障。負載均衡是通過linux的IPVS(ip虛擬服務器)實現,高可用通過VRRP實現多機故障轉移。
keepalived一般是2個節點運行keepalived,一台是主節點(MASTER
),一台是備節點(BACKUP)
,對外
表現都是一個虛擬IP
,主節點會發送特定的消息給備節點,如果備節點收不到這個特定消息時,說明主節點就宕機
了,此時備節點就會接管虛擬IP
進行服務提供,這就實現了高可用。
keepalived使用架構圖
將keepalived和nginx部署在一台服務器。
keepalived高可用故障切換轉移
keepalived是基於VRRP協議來實現高可用的,有兩種模式,一種是搶占模式
(默認使用),另一種是非搶占模式
,需配置nopreempt
,在后面的keepalived配置文件詳解中我們會講到。當使用搶占模式
的時候,這是一種競選機制
進行通信,主節點優先級大於備節點優先級
。當主節點宕機的時候,可以切到備節點進行提供服務。
搶占模式原理
如下:
- keepalived正常工作的時候,MASTER主節點會向BACKUP備節點不斷的發送特定消息(
多播心跳消息
),就是一種健康檢查機制
,告訴備節點“我還活着,虛擬IP我來管就行了!
”。 - 當主節點發生故障出現宕機情況的時候,無法向備節點發送心跳信息,備節點無法收到主節點的健康檢查心跳信息,這個時候,備節點終於轉正了,機會來了,就接管虛擬IP進行服務提供。
- 當主節點故障恢復后,又不斷的發送心跳給備節點,告知“
我現在活着呢,我來管虛擬IP
”,備節點就會釋放
主節點宕機時所接管的IP資源以及服務
,默默的做回一個備胎
。
keepalived安裝部署
yum安裝keepalived
$ yum install -y keepalived
查看keepalived版本
[root@keepalived /etc/keepalived]# keepalived -v
Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2
Copyright(C) 2001-2017 Alexandre Cassen, <acassen@gmail.com>
Build options: PIPE2 LIBNL3 RTA_ENCAP RTA_EXPIRES RTA_PREF FRA_OIFNAME FRA_SUPPRESS_PREFIXLEN FRA_TUN_ID RTAX_CC_ALGO RTAX_QUICKACK LIBIPTC LIBIPSET_DYNAMIC LVS LIBIPVS_NETLINK VRRP VRRP_AUTH VRRP_VMAC SOCK_NONBLOCK SOCK_CLOEXEC FIB_ROUTING INET6_ADDR_GEN_MODE SNMP_V3_FOR_V2 SNMP SNMP_KEEPALIVED SNMP_CHECKER SNMP_RFC SNMP_RFCV2 SNMP_RFCV3 SO_MARK
更改keepalived配置
$ cd /etc/keepalived
$ vim keepalived.conf
主要修改分配的虛擬ip地址等配置。
啟動keepalived
$ systemctl start keepalived.service
或者 $ service keepalived start
其他相關命令
1)重啟:
$ systemctl restart keepalived.service
2)停止:
$ systemctl stop keepalived.service
3)狀態:
$ systemctl status keepalived.service
4)設置開機啟動:
$ chkconfig keepalived on
查看keepalived狀態
$ systemctl status keepalived.service
查看keepalived進程
$ ps -ef | grep keepalived
查看ip列表
$ ip add show
訪問
配置好keepalived啟動后,我們就可以通過10.139.1.1這個VIP進行服務的訪問。
keepalived高可用配置文件詳解
主節點
! Configuration File for keepalived
global_defs {
# notification_email { # 郵件通知,一般不用
# test1@163.com
# test2@163.com
# }
# notification_email_from test@163.com
router_id hostname1 # 標識本節點的字符串,設置為hostname即可
}
vrrp_instance VI_1 {
state MASTER # 標識主節點服務(只有MASTER和BACKUP兩種,大寫)
interface eth0 # VIP板頂的網卡接口
virtual_router_id 51 # 虛擬路由id,和備節點保持一致
priority 100 # 優先級,高於備節點的即可。
# nopreempt # 禁止MASTER宕機恢復后搶占服務
# smtp_alert # 激活故障時發送郵件告警
mcast_src_ip 10.139.1.10 # 本機IP地址
advert_int 1 # MASTER和BACKUP節點之間的同步檢查時間間隔,單位為秒
authentication { # 驗證類型和驗證密碼
auth_type PASS # PAAS(默認),HA
auth_pass 1111 # MASTER和BACKUP使用相同明文才可以互通
}
virtual_ipaddress { # 虛擬IP地址池,可以多個IP
10.139.1.1 # 虛擬IP1(VIP)
10.139.1.2 # 虛擬IP2(VIP)
}
}
備節點
除了注釋#以外,其他都和主節點保持一致。
! Configuration File for keepalived
global_defs {
router_id hostname2 # 標識本節點的字符串,設置為hostname即可
}
vrrp_instance VI_1 {
state BACKUP # 標識主節點服務(只有MASTER和BACKUP兩種,大寫)
interface eth0
virtual_router_id 51
priority 99 # 優先級,高於備節點的即可。
mcast_src_ip 10.139.1.11 # 本機IP地址
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.139.1.1
10.139.1.2
}
}