环境说明:
IP地址 | 类型 | 主机名 |
192.168.20.22 | real ip | keepalived1 |
192.168.20.32 | real ip | keepalived2 |
192.168.20.50 | virtual ip |
因为系统yum源自带的软件包版本太低,因此我用的是在官网上下载的源码包
官网下载地址:
https://www.keepalived.org/download.html
安装依赖软件包
# yum -y install libnl libnl-devel
编译安装keepalived
# tar zxf keepalived-2.2.7.tar.gz # cd keepalived-2.2.7 # ./configure --prefix=/usr/local/keepalived # make # make install
编辑keepalived1的配置文件
# cd /usr/local/keepalived/etc/ # cp keepalived.conf.sample keepalived.conf # vim keepalived.conf ! Configuration File for keepalived global_defs { notification_email { root@localhost #收件人邮箱地址 } notification_email_from HA@localhost #发件人邮箱地址 smtp_server 127.0.0.1 #邮件服务器地址 smtp_connect_timeout 30 router_id keepalived1 #虚拟路由器id vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_instance VI_1 { state MASTER #主备状态,keepalived1是主节点,即master interface eth0 virtual_router_id 51 #虚拟路由器唯一标识 priority 100 #优先级 advert_int 1 #发送心跳间隔时间,默认一秒 authentication { auth_type PASS #认证类型 auth_pass 123abc #认证密码 } virtual_ipaddress { 192.168.20.50/24 dev eth0 label eth0:0 #虚拟IP地址的信息 } }
编辑keepalived2的配置文件
# cd /usr/local/keepalived/etc/ # cp keepalived.conf.sample keepalived.conf # vim keepalived.conf ! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from HA@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id keepalived2 vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_instance VI_1 { state BACKUP #keepalived2是备节点,即backup interface eth0 virtual_router_id 51 #虚拟路由器唯一标识,必须一致,确保工作在同一个虚拟路由器 priority 90 #优先级,备节点的优先级要低于主节点 advert_int 1 authentication { auth_type PASS auth_pass 123abc } virtual_ipaddress { 192.168.20.50/24 dev eth0 label eth0:0 } }
查看keepalived启动选项,这里只列出了我用到的部分选项
# /usr/local/keepalived/sbin/keepalived --help Usage: /usr/local/keepalived/sbin/keepalived [OPTION...] -f, --use-file=FILE Use the specified configuration file -D, --log-detail Detailed log messages -S, --log-facility=([0-7]|local[0-7]|user|daemon)
其中,-f是指定启动配置文件,-D是打印日志的detail信息,-S是指定日志的facility,这里我指定了使用3
修改rsyslog的配置文件
# vim /etc/rsyslog.conf
local3.* /var/log/keepalived.log
重启启动rsyslog服务来让配置生效
# systemctl restart rsyslog
启动keepalived服务,主备节点都如此启动
# /usr/local/keepalived/sbin/keepalived -f /usr/local/keepalived/etc/keepalived/keepalived.conf -D -S 3
查看VIP的信息
# ip addr list 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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 qlen 1000 link/ether 00:0c:29:c8:b7:03 brd ff:ff:ff:ff:ff:ff inet 192.168.20.22/24 brd 192.168.20.255 scope global eth0 valid_lft forever preferred_lft forever inet 192.168.20.50/24 scope global secondary eth0:0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fec8:b703/64 scope link valid_lft forever preferred_lft forever
查看keepalived1的日志信息
Apr 18 14:20:07 keepalived1 Keepalived[18136]: Starting Keepalived v2.2.7 (01/16,2022) Apr 18 14:20:07 keepalived1 Keepalived[18136]: Running on Linux 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 (built for Linux 3.10.0) Apr 18 14:20:07 keepalived1 Keepalived[18136]: Command line: '/usr/local/keepalived/sbin/keepalived' '-f' Apr 18 14:20:07 keepalived1 Keepalived[18136]: '/usr/local/keepalived/etc/keepalived/keepalived.conf' '-D' '-S' '3' Apr 18 14:20:07 keepalived1 Keepalived[18136]: Opening file '/usr/local/keepalived/etc/keepalived/keepalived.conf'. Apr 18 14:20:07 keepalived1 Keepalived[18136]: Configuration file /usr/local/keepalived/etc/keepalived/keepalived.conf Apr 18 14:20:07 keepalived1 Keepalived[18136]: (Line 13) WARNING - number '0' outside range [0.000001, 4294.967295] Apr 18 14:20:07 keepalived1 Keepalived[18136]: (Line 13) vrrp_garp_interval '0' is invalid Apr 18 14:20:07 keepalived1 Keepalived[18136]: (Line 14) WARNING - number '0' outside range [0.000001, 4294.967295] Apr 18 14:20:07 keepalived1 Keepalived[18136]: (Line 14) vrrp_gna_interval '0' is invalid Apr 18 14:20:07 keepalived1 Keepalived[18137]: NOTICE: setting config option max_auto_priority should result in better keepalived performance Apr 18 14:20:07 keepalived1 Keepalived[18137]: Starting VRRP child process, pid=18138 Apr 18 14:20:07 keepalived1 Keepalived_vrrp[18138]: Registering Kernel netlink reflector Apr 18 14:20:07 keepalived1 Keepalived_vrrp[18138]: Registering Kernel netlink command channel Apr 18 14:20:07 keepalived1 Keepalived_vrrp[18138]: (VI_1) State MASTER must match being address owner Apr 18 14:20:07 keepalived1 Keepalived_vrrp[18138]: (VI_1) Strict mode does not support authentication. Ignoring. Apr 18 14:20:07 keepalived1 Keepalived_vrrp[18138]: Assigned address 192.168.20.22 for interface eth0 Apr 18 14:20:07 keepalived1 Keepalived_vrrp[18138]: Assigned address fe80::20c:29ff:fec8:b703 for interface eth0 Apr 18 14:20:07 keepalived1 Keepalived_vrrp[18138]: Registering gratuitous ARP shared channel Apr 18 14:20:07 keepalived1 Keepalived_vrrp[18138]: (VI_1) removing VIPs. Apr 18 14:20:07 keepalived1 Keepalived[18137]: Startup complete Apr 18 14:20:07 keepalived1 Keepalived_vrrp[18138]: (VI_1) Entering BACKUP STATE (init) Apr 18 14:20:07 keepalived1 Keepalived_vrrp[18138]: VRRP sockpool: [ifindex( 2), family(IPv4), proto(112), fd(12,13) multicast, address(224.0.0.18)] Apr 18 14:20:10 keepalived1 Keepalived_vrrp[18138]: (VI_1) Receive advertisement timeout Apr 18 14:20:10 keepalived1 Keepalived_vrrp[18138]: (VI_1) Entering MASTER STATE Apr 18 14:20:10 keepalived1 Keepalived_vrrp[18138]: (VI_1) setting VIPs. Apr 18 14:20:10 keepalived1 Keepalived_vrrp[18138]: (VI_1) Sending/queueing gratuitous ARPs on eth0 for 192.168.20.50 Apr 18 14:20:10 keepalived1 Keepalived_vrrp[18138]: Sending gratuitous ARP on eth0 for 192.168.20.50 Apr 18 14:20:10 keepalived1 Keepalived_vrrp[18138]: Sending gratuitous ARP on eth0 for 192.168.20.50
访问虚拟VIP地址查看
可以看到现在虚拟IP地址在keepalived1节点上,访问到的内容也是keepalived1节点的web页面。
现在进行故障演练,将主节点的keepalived服务停掉
主节点上执行:
# pkill keepalived # ip addr list 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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 qlen 1000 link/ether 00:0c:29:c8:b7:03 brd ff:ff:ff:ff:ff:ff inet 192.168.20.22/24 brd 192.168.20.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fec8:b703/64 scope link valid_lft forever preferred_lft forever
可以看到VIP已经不在keepalived1节点上了。
查看keepalived1节点的日志信息
Apr 18 14:25:48 keepalived1 Keepalived[18137]: Stopping Apr 18 14:25:48 keepalived1 Keepalived_vrrp[18138]: (VI_1) sent 0 priority Apr 18 14:25:48 keepalived1 Keepalived_vrrp[18138]: (VI_1) removing VIPs. Apr 18 14:25:49 keepalived1 Keepalived_vrrp[18138]: Stopped - used 0.000000 user time, 0.197637 system time Apr 18 14:25:49 keepalived1 Keepalived[18137]: CPU usage (self/children) user: 0.000000/0.000000 system: 0.001995/0.198324 Apr 18 14:25:49 keepalived1 Keepalived[18137]: Stopped Keepalived v2.2.7 (01/16,2022)
在keepalived2上查看VIP信息
[root@keepalived2 keepalived]# ip addr list 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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 qlen 1000 link/ether 00:0c:29:2e:e6:4d brd ff:ff:ff:ff:ff:ff inet 192.168.20.32/24 brd 192.168.20.255 scope global eth0 valid_lft forever preferred_lft forever inet 192.168.20.50/24 scope global secondary eth0:0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe2e:e64d/64 scope link valid_lft forever preferred_lft forever
访问VIP地址查看页面
查看keepalived2节点的日志信息
Apr 18 14:25:48 keepalived2 Keepalived_vrrp[17961]: (VI_1) Backup received priority 0 advertisement Apr 18 14:25:48 keepalived2 Keepalived_vrrp[17961]: (VI_1) Receive advertisement timeout Apr 18 14:25:48 keepalived2 Keepalived_vrrp[17961]: (VI_1) Entering MASTER STATE Apr 18 14:25:48 keepalived2 Keepalived_vrrp[17961]: (VI_1) setting VIPs. Apr 18 14:25:48 keepalived2 Keepalived_vrrp[17961]: (VI_1) Sending/queueing gratuitous ARPs on eth0 for 192.168.20.50 Apr 18 14:25:48 keepalived2 Keepalived_vrrp[17961]: Sending gratuitous ARP on eth0 for 192.168.20.50 Apr 18 14:25:48 keepalived2 Keepalived_vrrp[17961]: Sending gratuitous ARP on eth0 for 192.168.20.50 Apr 18 14:25:48 keepalived2 Keepalived_vrrp[17961]: Sending gratuitous ARP on eth0 for 192.168.20.50 Apr 18 14:25:48 keepalived2 Keepalived_vrrp[17961]: Sending gratuitous ARP on eth0 for 192.168.20.50 Apr 18 14:25:48 keepalived2 Keepalived_vrrp[17961]: Sending gratuitous ARP on eth0 for 192.168.20.50
可以看到BACKUP节点进入MASTER STATE了
因为keepalived1节点down掉后,优先级变为0,Backup收到心跳信息后,因工作在抢占模式,优先级比0高,所以Backup变成了MASTER。
我们再来将keepalived1节点的keepalived服务启动
查看keepalived1节点的日志信息
Apr 18 14:26:12 keepalived1 Keepalived[18464]: Starting Keepalived v2.2.7 (01/16,2022) Apr 18 14:26:12 keepalived1 Keepalived[18464]: Running on Linux 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 (built for Linux 3.10.0) Apr 18 14:26:12 keepalived1 Keepalived[18464]: Command line: '/usr/local/keepalived/sbin/keepalived' '-f' Apr 18 14:26:12 keepalived1 Keepalived[18464]: '/usr/local/keepalived/etc/keepalived/keepalived.conf' '-D' '-S' '3' Apr 18 14:26:12 keepalived1 Keepalived[18464]: Opening file '/usr/local/keepalived/etc/keepalived/keepalived.conf'. Apr 18 14:26:12 keepalived1 Keepalived[18464]: Configuration file /usr/local/keepalived/etc/keepalived/keepalived.conf Apr 18 14:26:12 keepalived1 Keepalived[18464]: (Line 13) WARNING - number '0' outside range [0.000001, 4294.967295] Apr 18 14:26:12 keepalived1 Keepalived[18464]: (Line 13) vrrp_garp_interval '0' is invalid Apr 18 14:26:12 keepalived1 Keepalived[18464]: (Line 14) WARNING - number '0' outside range [0.000001, 4294.967295] Apr 18 14:26:12 keepalived1 Keepalived[18464]: (Line 14) vrrp_gna_interval '0' is invalid Apr 18 14:26:12 keepalived1 Keepalived[18465]: NOTICE: setting config option max_auto_priority should result in better keepalived performance Apr 18 14:26:12 keepalived1 Keepalived[18465]: Starting VRRP child process, pid=18466 Apr 18 14:26:12 keepalived1 Keepalived_vrrp[18466]: Registering Kernel netlink reflector Apr 18 14:26:12 keepalived1 Keepalived_vrrp[18466]: Registering Kernel netlink command channel Apr 18 14:26:12 keepalived1 Keepalived_vrrp[18466]: (VI_1) State MASTER must match being address owner Apr 18 14:26:12 keepalived1 Keepalived_vrrp[18466]: (VI_1) Strict mode does not support authentication. Ignoring. Apr 18 14:26:12 keepalived1 Keepalived_vrrp[18466]: Assigned address 192.168.20.22 for interface eth0 Apr 18 14:26:12 keepalived1 Keepalived_vrrp[18466]: Assigned address fe80::20c:29ff:fec8:b703 for interface eth0 Apr 18 14:26:12 keepalived1 Keepalived_vrrp[18466]: Registering gratuitous ARP shared channel Apr 18 14:26:12 keepalived1 Keepalived_vrrp[18466]: (VI_1) removing VIPs. Apr 18 14:26:12 keepalived1 Keepalived_vrrp[18466]: (VI_1) Entering BACKUP STATE (init) Apr 18 14:26:12 keepalived1 Keepalived_vrrp[18466]: VRRP sockpool: [ifindex( 2), family(IPv4), proto(112), fd(12,13) multicast, address(224.0.0.18)] Apr 18 14:26:12 keepalived1 Keepalived[18465]: Startup complete Apr 18 14:26:12 keepalived1 Keepalived_vrrp[18466]: (VI_1) received lower priority (90) advert from 192.168.20.32 - discarding Apr 18 14:26:13 keepalived1 Keepalived_vrrp[18466]: (VI_1) received lower priority (90) advert from 192.168.20.32 - discarding Apr 18 14:26:14 keepalived1 Keepalived_vrrp[18466]: (VI_1) received lower priority (90) advert from 192.168.20.32 - discarding Apr 18 14:26:15 keepalived1 Keepalived_vrrp[18466]: (VI_1) Receive advertisement timeout Apr 18 14:26:15 keepalived1 Keepalived_vrrp[18466]: (VI_1) Entering MASTER STATE Apr 18 14:26:15 keepalived1 Keepalived_vrrp[18466]: (VI_1) setting VIPs. Apr 18 14:26:15 keepalived1 Keepalived_vrrp[18466]: (VI_1) Sending/queueing gratuitous ARPs on eth0 for 192.168.20.50 Apr 18 14:26:15 keepalived1 Keepalived_vrrp[18466]: Sending gratuitous ARP on eth0 for 192.168.20.50 Apr 18 14:26:15 keepalived1 Keepalived_vrrp[18466]: Sending gratuitous ARP on eth0 for 192.168.20.50 Apr 18 14:26:15 keepalived1 Keepalived_vrrp[18466]: Sending gratuitous ARP on eth0 for 192.168.20.50
可以看到恢复的keepalived1节点启动后,接收通告信息,因为keepalived1节点的优先级是100,高于keepalived2节点,keepalived1又抢占了MASTER成了主节点
再来访问VIP的地址来查看页面
可以看到又是keepalived1节点上的页面内容了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix