注意:如果集群防火墙开启的状态下需要执行一下命令

#--in-interface 对应的是服务器的网卡
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0   --in-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload

docker安装可视化界面 docker安装keepalived_mysql

 

docker Keepalived+mysql 实现高可用
 docker 运行Keepalived脚本
 docker run  -d --net=host --cap-add=NET_ADMIN --name  keepalived-mysql -v /home/docker/keepalived/conf/keepalived.conf:/usr/local/etc/keepalived/keepalived.conf -v /tmp/mysql.sh:/tmp/mysql.sh keepalived:2.0.20

内网

mkdir -p /home/docker/keepalived/conf/

192.168.160.10

编辑本地keepalived.conf文件内容

global_defs {
   script_user root #执行chk_mysql_port脚本用户需要root用户来实现
   enable_script_security #开启运行脚本的配置
 }vrrp_script chk_mysql_port {
   script "/tmp/mysql.sh" #判断端口mysql端口是否存在
   interval 2 #脚本执行间隔,每2s检测一次
   weight -5#脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5  
   fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
   rise 1#检测1次成功就算成功。但不修改优先级
 }vrrp_instance VI_1 {
   interface ens33 #需要宿主记得网卡
   state BACKUP
   mcast_src_ip 192.168.160.10 #服务器本机的ip
   virtual_router_id 200#建议不用默认的51 换一个1-255之间 但是必须要要和另几台Keepalived一样
   priority 100 #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。这样MASTER故障恢复后,就可以将VIP资源再次抢回来 
   advert_int 1  authentication {
     auth_type PASS#账号
     auth_pass 123456#密码
   }  virtual_ipaddress {
     192.168.160.111#虚拟ip
   }   track_script {
     chk_mysql_port
   }
 }
 保存退出
 编辑/tmp/mysql.sh
 #!/bin/bash
 counter=$(netstat -na|grep "LISTEN"|grep "3307"|wc -l)
 if [ "${counter}" == 0 ];then
    pkill keepalived
 fi

保存退出
执行

chmod 755 /tmp/mysql.sh 

192.168.160.20

编辑本地keepalived.conf文件内容
global_defs {
  script_user root #执行chk_mysql_port脚本用户需要root用户来实现
  enable_script_security #开启运行脚本的配置
}

vrrp_script chk_mysql_port {
  script "/tmp/mysql.sh" #判断端口mysql端口是否存在
  interval 2 #脚本执行间隔,每2s检测一次
  weight -5#脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5  
  fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
  rise 1#检测1次成功就算成功。但不修改优先级
}

vrrp_instance VI_1 {
  interface ens33 #需要宿主记得网卡
  state MASTER
  mcast_src_ip 192.168.160.20 #服务器本机的ip
  virtual_router_id 200#建议不用默认的51 换一个1-255之间 但是必须要要和另几台Keepalived一样
  priority 101 #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。这样MASTER故障恢复后,就可以将VIP资源再次抢回来 
  advert_int 1

  authentication {
    auth_type PASS#账号
    auth_pass 123456#密码
  }

  virtual_ipaddress {
    192.168.160.111#虚拟ip
  }

  track_script {
    chk_mysql_port
  }
}
保存退出
编辑/tmp/mysql.sh
#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3307"|wc -l)
if [ "${counter}" == 0 ];then
   pkill keepalived
fi

保存退出
执行

chmod 755 /tmp/mysql.sh 

外网

10.10.0.203

编辑本地keepalived.conf文件内容

global_defs {
  script_user root
  enable_script_security
}

vrrp_script chk_mysql_port {
  script "/tmp/mysql.sh"
  interval 2
  weight -5
  fall 2
  rise 1
}

vrrp_instance VI_1 {
  interface eno1 #需要宿主记得外网卡
  state MASTER
  mcast_src_ip 10.10.0.203#外网的ip地址
  virtual_router_id 203 
  priority 101
  advert_int 1

  authentication {
    auth_type PASS
    auth_pass 123456
  }

  virtual_ipaddress {
    10.10.0.222
  }

  track_script {
    chk_mysql_port
  }
}

编辑/tmp/mysql.sh
#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3307"|wc -l)
if [ "${counter}" == 0 ];then
   pkill keepalived
fi

保存退出
执行

chmod 755 /tmp/mysql.sh 

运行docker脚本

docker run  -d --net=host --cap-add=NET_ADMIN --name  keepalived-mysql -v /home/docker/keepalived/conf/keepalived.conf:/usr/local/etc/keepalived/keepalived.conf -v /tmp/mysql.sh:/tmp/mysql.sh keepalived:2.0.20