前言:
以下阐述在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的状态。