概述

高可用:多台业务系统启动着相同的服务,如果有一台故障,另一台自动接管,我们将将这个称之为高可用。

Keepalived 以 VRRP 协议为实现基础,用 VRRP 协议来实现高可用性(HA)。

VRRP(Virtual RouterRedundancy Protocol)协议是用于实现路由器冗余的协议, VRRP 协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器 IP(一个或多个),而在路由器组内部,如果实际拥有这个对外 IP 的路由器如果工作正常的话就是 MASTER,或者是通过算法选举产生, MASTER 实现针对虚拟路由器 IP 的各种网络功能,如 ARP 请求, ICMP,以及数据的转发等;其他设备不拥有该虚拟 IP,状态是 BACKUP,除了接收 MASTER 的VRRP 状态通告信息外,不执行对外的网络功能。当主机失效时, BACKUP 将接管原先 MASTER 的网络功能。

keepalive结构
keepalive结构

安装keepalived

以centos为例子

yum install -y lvsadm keepalived


keepalived 工作方式

抢占式简介

当master宕机后,backup 接管服务。后续当master恢复后,vip漂移到master上,master重新接管服务,这是抢占式

抢占式配置

master配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb02 #标识信息,一个名字而已;
}
vrrp_instance VI_1 {
state MASTER #角色是master
interface eth0 #vip 绑定端口
virtual_router_id 50 #让master 和backup在同一个虚拟路由里,id 号必须相同;
priority 150 #优先级,谁的优先级高谁就是master ;
advert_int 1 #心跳间隔时间
authentication {
auth_type PASS #认证
auth_pass 1111 #密码
}
virtual_ipaddress {
10.0.0.3 #虚拟ip
}
}

back up配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@lb02 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb02
}

vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}

[root@lb02 ~]#

非抢占式简介

当master宕机后,backup 接管服务。当原先的master恢复后,状态变为backup,不接管服务,这是非抢占模式。

非抢占式配置

非抢占式不再有主从之分,全部都为BACKUP,并且配置文件中添加nopreempt,用来标识为非抢占式;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
global_defs {
notification_email {
root@peter.com
}
notification_email_from root@peter.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id s1.peter.com
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_iptables
vrrp_garp_interval 0
vrrp_gna_interval 0
}

vrrp_instance VI_1 {
state BACKUP #状态都配置为BACKUP
interface eth0
virtual_router_id 66
priority 100
advert_int 2
nopreempt #配置不抢占
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 192.168.99.130 label eth0:0
unicast_peer {
192.168.99.140
}
virtual_ipaddress {
192.168.99.188 dev eth0 label eth0:0
192.168.99.189 dev eth0 label eth0:1
}
}

vrrp_instance VI_2 {
state BACKUP #改为BACKUP
interface eth0
virtual_router_id 77
priority 80
advert_int 2
nopreempt #同样配置
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 192.168.99.130 label eth0:0
unicast_peer {
192.168.99.140
}

virtual_ipaddress {
192.168.99.200 dev eth0 label eth0:2
192.168.99.201 dev eth0 label eth0:3
}
}