配置Keepalived单实例实现单IP自动漂移接管
实验要求 ==> 实现Keepalived高可用对之间的故障切换过程,配置的vrrp实例的VIP为192.168.10.66,可以将其配置在网卡别名上。
实验环境 ==> CentOS 7.x
实验目的 ==> 实现Keepalived高可用对之间的故障切换功能
实验主机 ==> 192.168.10.6(主机名:node1)、192.168.10.7(主机名:node2)
实验前提 ==> 高可用对之间时间同步(可通过周期性任务来实现)
实验操作如下。
1、编辑keepalived配置文件
注意:使用vim打开/etc/keepalived/keepalived.conf后,先注释掉virtual_server相关的配置,可在末行模式下使用命令":.,$s/^/#/g"注释。
2、启动keepalived服务
(1) 在node1(192.168.10.6)上
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 | [root@node1 ~] # systemctl start keepalived.service # 启动keepalived服务 [root@node1 ~] # systemctl status keepalived.service # 查看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 Sat 2017-07-08 05:51:16 CST; 5s ago # 已经在运行中 Process: 16520 ExecStart= /usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0 /SUCCESS ) Main PID: 16521 (keepalived) CGroup: /system .slice /keepalived .service ├─16521 /usr/sbin/keepalived -D ├─16522 /usr/sbin/keepalived -D └─16523 /usr/sbin/keepalived -D Jul 08 05:51:18 node1 Keepalived_healthcheckers[16522]: Netlink reflector reports IP 192.168.10.6 added Jul 08 05:51:18 node1 Keepalived_healthcheckers[16522]: Registering Kernel netlink reflector Jul 08 05:51:18 node1 Keepalived_healthcheckers[16522]: Registering Kernel netlink command channel Jul 08 05:51:18 node1 Keepalived_healthcheckers[16522]: Opening file '/etc/keepalived/keepalived.conf' . Jul 08 05:51:18 node1 Keepalived_healthcheckers[16522]: Configuration is using : 7429 Bytes Jul 08 05:51:18 node1 Keepalived_healthcheckers[16522]: Using LinkWatch kernel netlink reflector... Jul 08 05:51:18 node1 Keepalived_vrrp[16523]: VRRP_Instance(VI_1) Entering MASTER STATE # node1启动后状态为MASTER路由器 Jul 08 05:51:18 node1 Keepalived_vrrp[16523]: VRRP_Instance(VI_1) setting protocol VIPs. Jul 08 05:51:18 node1 Keepalived_vrrp[16523]: VRRP_Instance(VI_1) Sending gratuitous ARPs on ens33 for 192.168.10.66 # node1发送免费ARP通告虚拟路由所在的MAC地址(ens33) Jul 08 05:51:18 node1 Keepalived_healthcheckers[16522]: Netlink reflector reports IP 192.168.10.66 added # 已经添加虚拟路由IP(192.168.10.66) |
同样的信息可在/var/log/message中获得。
1 2 3 4 5 6 | [root@node1 ~] # tail -5 /var/log/messages Jul 8 05:51:18 localhost Keepalived_vrrp[16523]: VRRP_Instance(VI_1) Entering MASTER STATE Jul 8 05:51:18 localhost Keepalived_vrrp[16523]: VRRP_Instance(VI_1) setting protocol VIPs. Jul 8 05:51:18 localhost Keepalived_vrrp[16523]: VRRP_Instance(VI_1) Sending gratuitous ARPs on ens33 for 192.168.10.66 Jul 8 05:51:18 localhost Keepalived_healthcheckers[16522]: Netlink reflector reports IP 192.168.10.66 added Jul 8 05:51:23 localhost Keepalived_vrrp[16523]: VRRP_Instance(VI_1) Sending gratuitous ARPs on ens33 for 192.168.10.66 |
查看虚拟路由IP。
1 2 3 4 5 6 7 8 | [root@node1 ~] # ip addr l (...省略...) ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1280 qdisc pfifo_fast state UP qlen 1000 link /ether 00:0c:29:13:d1:d8 brd ff:ff:ff:ff:ff:ff inet 192.168.10.6 /24 brd 192.168.10.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.10.66 /32 scope global ens33 # 已经配置了虚拟路由IP valid_lft forever preferred_lft forever |
(2) 在node2(192.168.10.7)上
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | [root@node2 ~] # systemctl start keepalived.service [root@node2 ~] # systemctl status keepalived.service ● keepalived.service - LVS and VRRP High Availability Monitor Loaded: loaded ( /usr/lib/systemd/system/keepalived .service; disabled; vendor preset: disabled) Active: active (running) since Sat 2017-07-08 06:48:36 CST; 30s ago Process: 14507 ExecStart= /usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0 /SUCCESS ) Main PID: 14508 (keepalived) CGroup: /system .slice /keepalived .service ├─14508 /usr/sbin/keepalived -D ├─14509 /usr/sbin/keepalived -D └─14510 /usr/sbin/keepalived -D Jul 08 06:48:36 node2 Keepalived_vrrp[14510]: Configuration is using : 62884 Bytes Jul 08 06:48:36 node2 Keepalived_vrrp[14510]: Using LinkWatch kernel netlink reflector... Jul 08 06:48:36 node2 Keepalived_vrrp[14510]: VRRP_Instance(VI_1) Entering BACKUP STATE # 启动后作为BACKUP路由器 Jul 08 06:48:36 node2 Keepalived_vrrp[14510]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)] Jul 08 06:48:36 node2 Keepalived_healthcheckers[14509]: Netlink reflector reports IP 192.168.10.7 added Jul 08 06:48:36 node2 Keepalived_healthcheckers[14509]: Registering Kernel netlink reflector Jul 08 06:48:36 node2 Keepalived_healthcheckers[14509]: Registering Kernel netlink command channel Jul 08 06:48:36 node2 Keepalived_healthcheckers[14509]: Opening file '/etc/keepalived/keepalived.conf' . Jul 08 06:48:36 node2 Keepalived_healthcheckers[14509]: Configuration is using : 7427 Bytes Jul 08 06:48:36 node2 Keepalived_healthcheckers[14509]: Using LinkWatch kernel netlink reflector... |
此时VIP应该只配置在node1的ens33接口上,而不是配置在本主机(node2)的ens34接口上。
1 2 3 4 5 6 | [root@node2 ~] # ip a ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1280 qdisc pfifo_fast state UP qlen 1000 link /ether 00:0c:29:68:80:eb brd ff:ff:ff:ff:ff:ff inet 192.168.10.7 /24 brd 192.168.10.255 scope global ens34 valid_lft forever preferred_lft forever # BACKUP状态下没有配置VIP |
3、暂停node1上的keepalived服务,测试node2节点是否会自动转变为MASTER状态
(1) 在node1(192.168.10.6)上
1 2 3 4 5 6 7 8 9 10 11 12 | [root@node1 ~] # systemctl stop keepalived.service [root@node1 ~] # tail /var/log/messages Jul 8 06:58:20 localhost Keepalived[16723]: Stopping Keepalived v1.2.13 (11 /05 ,2016) # 关闭keepalived服务 Jul 8 06:58:20 localhost systemd: Stopping LVS and VRRP High Availability Monitor... Jul 8 06:58:20 localhost Keepalived_vrrp[16725]: VRRP_Instance(VI_1) sending 0 priority # 将自身优先级将为0,以让其它节点接任Master Jul 8 06:58:20 localhost Keepalived_vrrp[16725]: VRRP_Instance(VI_1) removing protocol VIPs. # 移除VIP Jul 8 06:58:20 localhost Keepalived_healthcheckers[16724]: Netlink reflector reports IP 192.168.10.66 removed # VIP已经从node1上移除 Jul 8 06:58:20 localhost systemd: Stopped LVS and VRRP High Availability Monitor. |
查看ip地址。
1 2 3 4 5 6 | [root@node1 ~] # ip a ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1280 qdisc pfifo_fast state UP qlen 1000 link /ether 00:0c:29:13:d1:d8 brd ff:ff:ff:ff:ff:ff inet 192.168.10.6 /24 brd 192.168.10.255 scope global ens33 valid_lft forever preferred_lft forever # node1已经移除了VIP |
(2) 在node2(192.168.10.7)上
1 2 3 4 5 6 7 8 9 10 | [root@node2 ~] # tail /var/log/messages Jul 8 06:58:21 localhost Keepalived_vrrp[14510]: VRRP_Instance(VI_1) Transition to MASTER STATE Jul 8 06:58:22 localhost Keepalived_vrrp[14510]: VRRP_Instance(VI_1) Entering MASTER STATE # node2转变为Master状态 Jul 8 06:58:22 localhost Keepalived_vrrp[14510]: VRRP_Instance(VI_1) setting protocol VIPs. # node2设置VIP Jul 8 06:58:22 localhost Keepalived_vrrp[14510]: VRRP_Instance(VI_1) Sending gratuitous ARPs on ens34 for 192.168.10.66 # node2发送免费ARP,通告现在VIP对应的MAC地址 Jul 8 06:58:22 localhost Keepalived_healthcheckers[14509]: Netlink reflector reports IP 192.168.10.66 added Jul 8 06:58:27 localhost Keepalived_vrrp[14510]: VRRP_Instance(VI_1) Sending gratuitous ARPs on ens34 for 192.168.10.66 |
此时在node2的ens34接口上应该配置有VIP。
1 2 3 4 5 6 7 | [root@node2 ~] # ip a ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1280 qdisc pfifo_fast state UP qlen 1000 link /ether 00:0c:29:68:80:eb brd ff:ff:ff:ff:ff:ff inet 192.168.10.7 /24 brd 192.168.10.255 scope global ens34 valid_lft forever preferred_lft forever inet 192.168.10.66 /32 scope global ens34 # VIP valid_lft forever preferred_lft forever |
4、再次启动node1节点的keepalived服务,测试node1是否能够转变为Master状态,并夺回VIP
(1) 在node1(192.168.10.6)上
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [root@node1 ~] # systemctl start keepalived.service [root@node1 ~] # tail /var/log/messages Jul 8 07:14:38 localhost Keepalived_vrrp[16778]: VRRP_Instance(VI_1) Transition to MASTER STATE Jul 8 07:14:38 localhost Keepalived_vrrp[16778]: VRRP_Instance(VI_1) Received lower prio advert, forcing new election Jul 8 07:14:39 localhost Keepalived_vrrp[16778]: VRRP_Instance(VI_1) Entering MASTER STATE Jul 8 07:14:39 localhost Keepalived_vrrp[16778]: VRRP_Instance(VI_1) setting protocol VIPs. Jul 8 07:14:39 localhost Keepalived_vrrp[16778]: VRRP_Instance(VI_1) Sending gratuitous ARPs on ens33 for 192.168.10.66 Jul 8 07:14:39 localhost Keepalived_healthcheckers[16777]: Netlink reflector reports IP 192.168.10.66 added Jul 8 07:14:44 localhost Keepalived_vrrp[16778]: VRRP_Instance(VI_1) Sending gratuitous ARPs on ens33 for 192.168.10.66 # node1再次发送免费ARP [root@node1 ~] # [root@node1 ~] # [root@node1 ~] # ip a ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1280 qdisc pfifo_fast state UP qlen 1000 link /ether 00:0c:29:13:d1:d8 brd ff:ff:ff:ff:ff:ff inet 192.168.10.6 /24 brd 192.168.10.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.10.66 /32 scope global ens33 # VIP已经夺回 valid_lft forever preferred_lft forever |
(2) 在node2(192.168.10.7)上
1 2 3 4 5 6 7 8 | [root@node2 ~] # tail /var/log/messages Jul 8 07:14:39 localhost Keepalived_vrrp[14510]: VRRP_Instance(VI_1) Received higher prio advert # node2收到node1发送的vrrp报文,发现node1的优先级比自己的高 Jul 8 07:14:39 localhost Keepalived_vrrp[14510]: VRRP_Instance(VI_1) Entering BACKUP STATE # node2重新返回BACKUP状态 Jul 8 07:14:39 localhost Keepalived_vrrp[14510]: VRRP_Instance(VI_1) removing protocol VIPs. Jul 8 07:14:39 localhost Keepalived_healthcheckers[14509]: Netlink reflector reports IP 192.168.10.66 removed # node2将VIP移除 |
此时node2上应该没有配置VIP。
1 2 3 4 5 | [root@node2 ~] # ip a ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1280 qdisc pfifo_fast state UP qlen 1000 link /ether 00:0c:29:68:80:eb brd ff:ff:ff:ff:ff:ff inet 192.168.10.7 /24 brd 192.168.10.255 scope global ens34 valid_lft forever preferred_lft forever |
测试演示完毕。
补充:
此外,也可将VIP配置在网卡别名上,例如:
1 2 3 4 5 6 7 | # vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 { ... virtual_ipaddress { 192.168.10.66 dev ens33 label ens33:0 } } |
这样配置的VIP则可以通过ifconfig命令来查看。
原文链接:https://blog.51cto.com/xuweitao/1953656
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人