1、虚拟IP没有生成

  • 问题描述:

服务启动后虚拟IP没有生成,查看日志有如下报错信息

  1. Jun 29 10:43:11 cloud-config2 Keepalived_vrrp[2442]: ip address associated with VRID not present in received packet : 172.21.15.64
  2. Jun 29 10:43:11 cloud-config2 Keepalived_vrrp[2442]: one or more VIP associated with VRID mismatch actual MASTER advert
  3. Jun 29 10:43:11 cloud-config2 Keepalived_vrrp[2442]: bogus VRRP packet received on eth0 !!!
  4. Jun 29 10:43:11 cloud-config2 Keepalived_vrrp[2442]: VRRP_Instance(VI_1) ignoring received advertisment...
  • 问题原因及解决方案:
    • 两台主机时间不同步,使用ntpdate同步服务器时间
    • virtual_router_id设置有问题,需主从保持一致 ```bash Master: vrrp_instance VI_1 { interface eth0 state MASTER
      virtual_router_id 88 ====>默认是51 priority 100

Slave: vrrp_instance VI_1 { interface eth0 state BACKUP
virtual_router_id 88 ====>默认是51,统一集群MASTER跟Slave需要保持一致 priority 90

  1. <a name="plRE9"></a>
  2. ### 2、脑裂问题
  3. - 问题描述:
  4. 在Keepalived高可用系统中,出现两个节点同时拥有VIP的情况
  5. - 问题原因
  6. keepalived 分为主备两台机器,但对外只提供一个VIP访问,只有主机down 机VIP 才会漂移到备机提供服务。脑裂会导致主备两台机器同时拥有VIP出现争抢问题。<br />原因是主备机器之间通信断开,例如启用了iptables,不设置"系统接收VRRP协议"的规则,就会出现脑裂,备机keepAlived程序接收不到主机的广播信息,表现为备机上存在VIP。
  7. - 解决方案:
  8. ```bash
  9. # 为iptables 添加规则限制:
  10. vim /etc/sysconfig/iptables
  11. # 添加:
  12. -A INPUT -s 192.168.244/24 -d 224.0.0.18 -p vrrp -j ACCEPT
  13. #重启iptables :
  14. service iptables restart

之后可以看到备机VIP消失,问题解决。

3、多组Keepalived冲突

  • 问题描述:

在同一局域网中,如果部署了多套Keepalived服务,而又未配置专门的心跳通信时,可能会发生高可用接管的严重故障问题,导致多组keepalived服务地址冲突。

  • 问题原因:

keepalived 高可用功能是通过VRRP 协议实现的,VRRP 协议默认通过IP 多播的形式实现高可用对之间的通信,如果同一个局域网内存在多组keepalived服务器对,就会造成IP多播地址冲突问题,导致接管错乱,不同组的keepalived 都会使用默认的224.0.0.18 作为多播地址。

  • 解决方案:

在同组Keepalived服务器指定独立的多播地址,配置如下:

global_defs{
    router_id LVS_19
    vrrp_mcast_group4 224.0.0.19 #这个就是指定多播地址的配置
}

修改后重启服务即可。

4、systemctl无法停止keepalived进程

  • 问题描述:

测试服务启停时,使用systemctl stop keepalvied发现进程无法停止。

  • 问题原因:

启动脚本配置了KillMode=process,表示当停止keepalived时只会停掉主进程,子进程是不会被kill的,而默认的killmode为control-group,意思为会kill掉所有进程。

  • 解决方案:
    $ vim /usr/lib/systemd/system/keepalived.service
    # 注释下面这行内容
    KillMode=process
    
    修改后使用systemctl daemon-reload重载服务

5、健康检查脚本无法执行

  • 问题描述

Keepalived配置了健康检查脚本,但在服务宕掉后无法自动执行切换。

  • 问题原因:

一般出现这种情况原因有如下几种

  • 脚本路径错误,无法找到脚本
  • 脚本权限异常,没有权限执行
  • selinux权限导致
    • 解决方案:

首先仔细检查脚本是否有误,然后手动执行脚本查看执行结果,然后检查脚本是否有可执行权限,最后检查selinux是否关闭。

6、Keepalived启动报错

6.1、案例一

  • 问题描述:

使用systemctl start keepalived启动服务时,报错信息提示:
May 7 17:12:51 mysql01 Keepalived[5467]: Configuration file ‘/etc/keepalived/keepalived.conf’ is not a regular non-executable file

  • 问题原因:

/etc/keepalived/keepalived.conf文件权限不是664。

  • 解决方案:

    chmod 644 /etc/keepalived/keepalived.conf
    

    6.2、案例二

  • 问题描述

使用systemctl start keepalived启动服务时,报错信息提示:
May 07 17:41:14 mysql01 Keepalived_vrrp[9448]: (VI_1): Cannot find an IP address to use for interface enp0s9

  • 问题原因:

/etc/keepalived/keepalived.conf配置文件中interface模块,网卡上没有IP地址,

  • 解决方案:

可以通过添加临时IP来解决,或者在keepalived版本2.0.5之后添加dynamic_interfaces

ifconfig eth1 172.16.20.101/16 up

6.3、案例三

  • 问题描述

使用systemctl start keepalived启动服务时,报错信息提示:

May  7 11:07:15 mysql01 Keepalived[8755]: daemon is already running
May  7 11:07:15 mysql01 systemd: PID file /usr/local/var/run/keepalived.pid not readable (yet?) after start.
May  7 11:08:45 mysql01 systemd: keepalived.service start operation timed out. Terminating.
May  7 11:08:45 mysql01 systemd: Failed to start LVS and VRRP High Availability Monitor.
May  7 11:08:45 mysql01 systemd: Unit keepalived.service entered failed state.
May  7 11:08:45 mysql01 systemd: keepalived.service failed.
  • 问题原因:

NetworkManager自动管理网络,keepalived使用虚拟IP无法绑定到指定接口。

  • 解决方案:
    systemctl stop NetworkManager
    systemctl disable NetworkManager