0%

Keepalived集群初搭建

第一次搭建Keepalived集群,实现IP漂移。
笔者所搭建Keepalived集群额外满足下面两个需求点:

  • 监听HAProxy进程,一旦HAProxy进程不存在,可能触发IP漂移
  • 互为主备,充分利用服务器资源

一、安装

Debian下安装命令如下:

1
sudo apt-get install keepalived

二、配置

默认配置文件路径为:“/etc/keepalived/keepalived.conf”。

2.1、主节点配置

由于互为主备,故同时包含备份节点配置。
具体配置如下:

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
global_defs {
notification_email {
# 通知信息邮件接收者邮箱
xxx@domain.email
}
# 通知信息邮件发送者邮箱
notification_email_from keepalived@domain.email
# 表示本地开启了一个SMTP Server进程,端口为默认端口25,通过该SMTP Server发送通知信息邮件
smtp_server 127.0.0.1
smtp_connect_timeout 4
}

vrrp_script chk_haproxy {
# 存在haproxy进程返回0,否则返回非0
script "killall -0 haproxy"
# 每隔2秒运行监听脚本
interval 2
# 上述脚本执行连续3次返回0,则将“VRRP实例”的状态置为“正常态”,结合其他条件,可能触发IP漂移
rise 3
# 上述脚本执行连续3次返回非0,则将“VRRP实例”的状态置为“错误态”,结合其他条件,可能触发IP漂移
fall 3
}

# 配置一个VRRP实例
vrrp_instance VI_101 {
# 配置作为该VRRP实例的主节点
state MASTER
# 同一个VRRP实例下的节点(主节点和备份节点)具有相同值
# 而且同一网段中virtual_router_id的值不能重复
virtual_router_id 101
# 在该VRRP实例中,本节点的优先级
priority 100

interface bond0
track_interface {
bond0
}
advert_int 1
smtp_alert
authentication {
auth_type PASS
auth_pass keep@lived
}

virtual_ipaddress {
# 该VRRP实例的绑定到IP
10.200.164.101/22
}

track_script {
chk_haproxy
}
}

# 配置另外一个VRRP实例
vrrp_instance VI_102 {
# 配置作为该VRRP实例的备份节点
state BACKUP
# 同一个VRRP实例下的节点(主节点和备份节点)具有相同值
# 而且同一网段中virtual_router_id的值不能重复
virtual_router_id 102
# 在该VRRP实例中,本节点的优先级
priority 50

interface bond0
track_interface {
bond0
}
advert_int 1
smtp_alert
authentication {
auth_type PASS
auth_pass keep@lived
}

virtual_ipaddress {
# 该VRRP实例的绑定到IP
10.200.164.102/22
}

track_script {
chk_haproxy
}
}

2.2、备份节点配置

由于互为主备,故同时包含主节点配置。
具体配置如下:

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
global_defs {
notification_email {
# 通知信息邮件接收者邮箱
xxx@domain.email
}
# 通知信息邮件发送者邮箱
notification_email_from keepalived@domain.email
# 表示本地开启了一个SMTP Server进程,端口为默认端口25,通过该SMTP Server发送通知信息邮件
smtp_server 127.0.0.1
smtp_connect_timeout 4
}

vrrp_script chk_haproxy {
# 存在haproxy进程返回0,否则返回非0
script "killall -0 haproxy"
# 每隔2秒运行监听脚本
interval 2
# 上述脚本执行连续3次返回0,则将“VRRP实例”的状态置为“正常态”,结合其他条件,可能触发IP漂移
rise 3
# 上述脚本执行连续3次返回非0,则将“VRRP实例”的状态置为“错误态”,结合其他条件,可能触发IP漂移
fall 3
}

# 配置一个VRRP实例
vrrp_instance VI_101 {
# 配置作为该VRRP实例的备份节点
state BACKUP
# 同一个VRRP实例下的节点(主节点和备份节点)具有相同值
# 而且同一网段中virtual_router_id的值不能重复
virtual_router_id 101
# 在该VRRP实例中,本节点的优先级
priority 50

interface bond0
track_interface {
bond0
}
advert_int 1
smtp_alert
authentication {
auth_type PASS
auth_pass keep@lived
}

virtual_ipaddress {
# 该VRRP实例的绑定到IP
10.200.164.101/22
}

track_script {
chk_haproxy
}
}

# 配置另外一个VRRP实例
vrrp_instance VI_102 {
# 配置作为该VRRP实例的主节点
state MASTER
# 同一个VRRP实例下的节点(主节点和备份节点)具有相同值
# 而且同一网段中virtual_router_id的值不能重复
virtual_router_id 102
# 在该VRRP实例中,本节点的优先级
priority 100

interface bond0
track_interface {
bond0
}
advert_int 1
smtp_alert
authentication {
auth_type PASS
auth_pass keep@lived
}

virtual_ipaddress {
# 该VRRP实例的绑定到IP
10.200.164.102/22
}

track_script {
chk_haproxy
}
}

三、启动,停止与重启

启动:sudo /etc/init.d/keepalived start
停止:sudo /etc/init.d/keepalived stop
重启:sudo /etc/init.d/keepalived restart

四、其他

4.1、同一网段中的virtual_router_id的值不能重复

特别需要注意的是,同一网段中的virtual_router_id(vrid)的值不能重复,否则会干扰其他Keepalived集群的正常运行。
可通过如下命令查看欲使用vrid值是否已经被使用:

1
sudo tcpdump -ani any vrrp | grep vrid

4.2、“VRRP实例的绑定到IP”对于所使用的网卡需要合法

比如使用网卡“bond0”,该网卡的掩码为“255.255.255.0”,那么所使用的“VRRP实例的绑定到IP”的掩码也必须为“255.255.255.0”,即具有“xxx.xxx.xxx.xxx/24”的形式。


参考文献: [1]http://www.keepalived.org/manpage.html [2]http://outofmemory.cn/wiki/keepalived-configuration
您的支持将鼓励我继续分享!