长风1959

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  27 随笔 :: 0 文章 :: 0 评论 :: 7625 阅读
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

 

 

环境说明:

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节点上的页面内容了。

 

posted on   长风1959  阅读(402)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示