Mycat部署文档之Keepalived

keepalived 安装

直接通过apt-get方式安装最简单

1
2
3
4
[root@bogon /]# apt-get install libssl-dev openssl libpopt-dev
[root@bogon /]# apt-get install -y keepalived
[root@bogon /]# keepalived -v
[root@bogon /]# Keepalived v1.2.13 (08/03,2017)

编写 Haproxy 状态监测

1
2
3
4
5
6
7
8
9
10
[root@bogon /]# vim /etc/keepalived/check_haproxy.sh
#!/bin/sh
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
/home/dxy/haproxy/sbin/haproxy -f /home/dxy/haproxy/conf/haproxy.cfg
fi

sleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
killall keepalived
fi

设置keepalived master的最简配置

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
! Configuration File for keepalived
# global setting , notify email setting
global_defs {
#存在于同一个网段中,一组keepalived的各个节点都有不同的名字
#在全局设置中,我们还可以设置管理员的email信息等。
router_id LVS_V1
}

#这个是我们在上一小结讲到的haproxy检查脚本,我们保存在这个文件中(注意文件权限)
vrrp_script chkhaproxy {
script "/etc/keepalived/check_haproxy.sh"
#每10秒钟,检查一次
interval 10
}

#keepalived实例设置,是最重要的设置信息
vrrp_instance VI_1 {
#state状态MASTER表示是主要工作节点。
#一个keepalived组中,最多只有一个MASTER节点,当然也可以没有
state MASTER
#实例所绑定的网卡设备,我的网卡设备是ens33。您按照您自己的来
interface ens33
#同一个keepalived组,节点的设置必须一样,这样才会被识别
virtual_router_id 52
#节点优先级,BACKUP的优先级一定要比MASTER的优先级低
priority 100
#组播信息发送间隔,两个节点设置必须一样
advert_int 1
#实际的ens33上的固定ip地址
mcast_src_ip 192.168.1.11
#验证信息,只有验证信息相同,才能被加入到一个组中。
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟地址和绑定的端口,如果有多个,就绑定多个
#dev 是指定浮动IP要绑定的网卡设备号
virtual_ipaddress {
192.168.1.10 dev ens33
}

#设置的检查脚本
#关联上方的“vrrp_script chkhaproxy”
track_script {
chkhaproxy
}
}

设置keepalived slave的最简配置

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
! Configuration File for keepalived
# global setting , notify email setting
global_defs {
#这里和master节点不同
router_id LVS_V2
}

#check haproxy
vrrp_script chkhaproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 10
}

# instance setting
vrrp_instance VI_1 {
# 这里和Master节点不一样
state BACKUP
interface ens33
# 这里一定是一样的
virtual_router_id 52
# 这里的优先级比Master节点低
priority 99
advert_int 1
# 这里和Master节点不一样
mcast_src_ip=192.168.1.12
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.10 dev ens33
}

track_script {
chkhaproxy
}
}

以上配置中请注意几个关键点:

  • 注意 haproxy 状态检查的脚本的位置,根据自己创建文件的位置不一样,脚本检查的指定位置也不一样;
  • 注意优先级,MASTER节点的优先级一定要高于所有的BACKUP节点;
  • 注意局域网的组播地址,一定要可用。局域网内所有keepalived节点都是利用组播方式寻找对方;
  • 谁说BACKUP节点只能有一个!?
  • 最后,keepalived一定要注册成服务形式,您可以想象上面所有脚本、配置、命令如果重启后再来一次,会是什么情况。

接下来,我们要开始启动 Master 节点和 Backup 节点了,为了准确的查看日志状态,您需要观察系统日志。系统日志所在的位置:

1
tail -f /var/log/messages

启动keepalived

1
[root@localhost ~]# service keepalived start

如果设置和启动都是成功的,您不会在日志信息中收到任何的keepalived报错信息。接下来您就可以使用192.168.1.10这个IP访问 haproxy了.

验证Keepalived是否正常启动

在主备机环境中输入以下命令,查看当前系统网络配置信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:07:f5:db brd ff:ff:ff:ff:ff:ff
inet 192.168.1.11/24 brd 192.168.16.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.1.10/24 scope global secondary eth0
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe07:f5db/64 scope link
valid_lft forever preferred_lft forever

可以发现eth0下多了inet 192.168.1.10/24,表明keepalived已正常工作。

参考地址
  1. http://valleylord.github.io/post/201603-mycat-haproxy/
  2. http://www.itpux.com/thread-4668-1-1.html
  3. https://blog.csdn.net/u012758088/article/details/78651964
  4. http://kingleema.com/2015/11/14/setup-keepalived-on-ubuntu-server/