前言:
以下阐述在Keepalived中配置最简单的主备模式,后面我将一直讲述从简单的单网络单主主备模式,到双网络双主双同步的故障漂移模式。
关于Keepalived介绍,这里就不再叙述,可参阅前文:
架构示意图:
多播IP是:224.0.0.111。
NAT网络可根据自己的实际情况配置。
+------+
|Client|
+------+
/\
+--------+
|Internet|
+--------+
/\
+--------+
|NAT 网络|
+--------+
/\
+-----------------------+
| 公网VIP1:172.16.8.100 |
+-----------------------+
/ \
+-----------------------+ +-----------------------+
| KA+Lvs/Nginx/HAProxy | | KA+Lvs/Nginx/HAProxy |
| VIP1:Master (eth1) |多播IP| VIP1:BACKUP (eth1) |
| IP1:172.16.8.10(eth1) | | IP1:172.16.8.11(eth1) |
+-----------------------+ +-----------------------+
\ /
+-----------------------+
| 公网VIP1:172.16.8.100 |
+-----------------------+
\/
+------+
|资源池|
+------+
环境:
MASTER:172.16.8.10
BACKUP:172.16.8.11
VIP:172.16.8.100
OS:CentOS Linux release 7.4.1708 (Core)
先决条件:
- 时间同步。
- 设置
SELinux和防火墙。 - 互相之间
/etc/hosts文件添加对方主机名(可选)。 - 确认接口支持多播(组播)新网卡默认支持。
《keepalived 源代码编译安装及配置文件讲解》文中已完成以上必备条件。
1.单网络主备配置文件
MASTER 配置文件:
global_defs {
notification_email {
root@localhost
}
notification_email_from ka@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id ka67
vrrp_mcast_group4 224.0.0.111
}
vrrp_instance VG_1 {
state MASTER
interface eth0
virtual_router_id 103
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass renwole0
}
virtual_ipaddress {
172.16.8.100
}
notify_master "/usr/local/keepalived/etc/keepalived/notify.sh master"
notify_backup "/usr/local/keepalived/etc/keepalived/notify.sh backup"
notify_fault "/usr/local/keepalived/etc/keepalived/notify.sh fault"
}
BACKUP 配置文件:
global_defs {
notification_email {
root@localhost
}
notification_email_from ka68@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id ka68
vrrp_mcast_group4 224.0.0.111
}
vrrp_instance VG_1 {
state BACKUP
interface eth0
virtual_router_id 103
priority 95
advert_int 1
authentication {
auth_type PASS
auth_pass renwole0
}
virtual_ipaddress {
172.16.8.100
}
notify_master "/usr/local/keepalived/etc/keepalived/notify.sh master"
notify_backup "/usr/local/keepalived/etc/keepalived/notify.sh backup"
notify_fault "/usr/local/keepalived/etc/keepalived/notify.sh fault"
}
2.通用脚本
以下内容是notfiy.sh通用检测脚本:
$ cat /usr/local/keepalived/etc/keepalived/notify.sh
#!/bin/bash
contact='root@localhost'
notify() {
local mailsubject="$(hostname) to be $1, vip floating"
local mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
notify master
;;
backup)
notify backup
;;
fault)
notify fault
;;
*)
echo "Usage: $(basename $0) {master|backup|fault}"
exit 1
;;
esac
3.主备测试
测试MASTER
启动keepalived之前,查看网卡信息:
[root@ka67 keepalived]# ip a
...
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 00:15:5d:ae:02:78 brd ff:ff:ff:ff:ff:ff
inet 172.16.8.10/24 brd 172.16.8.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::436e:b837:43b:797c/64 scope link
valid_lft forever preferred_lft forever
启动keepalived后,再次查看网卡信息:
[root@ka67 keepalived]# ip a
...
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 00:15:5d:ae:02:78 brd ff:ff:ff:ff:ff:ff
inet 172.16.8.10/24 brd 172.16.8.255 scope global eth0
valid_lft forever preferred_lft forever
inet 172.16.8.100/32 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::436e:b837:43b:797c/64 scope link
valid_lft forever preferred_lft forever
已经成功添加VIP 172.16.8.100。
测试MASTER
启动keepalived:
[root@ka68 keepalived]# systemctl start keepalived
现在停止 MASTER,看会不会漂移到BACKUP:
[root@ka67 keepalived]# systemctl stop keepalived
查看BACKUP运行日志:
[root@ka68 keepalived]# cat /cat /var/log/messages
... Keepalived_vrrp[1451]: VRRP_Instance(VG_1) Transition to MASTER STATE Keepalived_vrrp[1451]: VRRP_Instance(VG_1) Entering MASTER STATE Keepalived_vrrp[1451]: VRRP_Instance(VG_1) setting protocol VIPs. Keepalived_vrrp[1451]: Sending gratuitous ARP on eth0 for 172.16.8.100 ...
已经成功漂移到BACKUP 主机。
再次启动MASTER:
[root@ka67 keepalived]# systemctl start keepalived
查看BACKUP Keepalived服务状态:
[root@ka68 keepalived]# systemctl status keepalived
keepalived.service - LVS and VRRP High Availability Monitor
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2018-03-02 22:13:14 EST; 15min ago
Process: 1448 ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 1449 (keepalived)
CGroup: /system.slice/keepalived.service
├─1449 /usr/local/keepalived/sbin/keepalived -D
├─1450 /usr/local/keepalived/sbin/keepalived -D
└─1451 /usr/local/keepalived/sbin/keepalived -D
Keepalived_vrrp[1451]: Sending gratuitous ARP on eth0 for 172.16.8.100
Keepalived_vrrp[1451]: VRRP_Instance(VG_1) Sending/queueing gratuitous ARPs on eth0 for 172.16.8.100
Keepalived_vrrp[1451]: Sending gratuitous ARP on eth0 for 172.16.8.100
Keepalived_vrrp[1451]: Sending gratuitous ARP on eth0 for 172.16.8.100
Keepalived_vrrp[1451]: Sending gratuitous ARP on eth0 for 172.16.8.100
Keepalived_vrrp[1451]: Sending gratuitous ARP on eth0 for 172.16.8.100
Keepalived_vrrp[1451]: VRRP_Instance(VG_1) Entering BACKUP STATE
Keepalived_vrrp[1451]: VRRP_Instance(VG_1) removing protocol VIPs.
Keepalived_vrrp[1451]: Opening script file /usr/local/keepalived/etc/keepalived/notify.sh
以上状态表明,当MASTER恢复服务后,BACKUP的Keepalived会自动漂移到MASTER上。因为MASTER的权重值比BACKUP高。以上是BACKUP的漂移到MASTER的状态。