mysql学习(二) 使用keppalived实现mysql主--主集群(docker下)的ip漂移

mysql学习(二) 使用keppalived实现mysql主–主集群的ip漂移

关于MYSQL“主–主”集群的搭建,请参考我的另一篇博客:
https://blog.csdn.net/yangkang1122/article/details/88912658

1 安装配置keppalived实现mysql主–主集群的ip漂移

1.1 在主节点a和主节点b上执行如下操作:

yum install -y openssl-devel
cd /usr/local/src/
wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz
tar -zvxf keepalived-1.3.5.tar.gz
cd keepalived-1.3.5
./configure --prefix=/usr/local/keepalived
make && make install
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
echo "/etc/init.d/keepalived start" >> /etc/rc.local

1.2 在主节点a上的修改keepalived.conf配置。

 cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
 vim /etc/keepalived/keepalived.conf       #清空默认内容,直接采用下面配置:
 
        ! Configuration File for keepalived

        global_defs {
              notification_email {  //收件的邮箱
                      ops@wangshibo.cn
                      tech@wangshibo.cn
              }
       
               notification_email_from ops@wangshibo.cn  //发送方邮件设置
               smtp_server 127.0.0.1 
               smtp_connect_timeout 30
               router_id MASTER-HA
        }
       
        vrrp_script chk_mysql_port { #检测mysql服务是否在运行
               script "/opt/chk_mysql.sh"  #这里通过脚本监测,这是检测脚本的执行路径
               interval 2                   #脚本执行间隔,每2s检测一次
               weight -5 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
               fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
               rise 1  #检测1次成功就算成功。但不修改优先级
        }
       
        vrrp_instance VI_1 {
               state MASTER    
               interface eth0      #指定虚拟ip的网卡接口
               mcast_src_ip 10.10.10.26  //主机ip
               virtual_router_id 51   #路由器标识,MASTER和BACKUP必须是一致的
               priority 101            #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。这样MASTER故障恢复后,就可以将VIP资源再次抢回来 
               advert_int 1         
               authentication {   
                         auth_type PASS 
                         auth_pass 1111     
               }
               virtual_ipaddress {    //虚拟出的ip,和主机在同一网段
                        10.10.10.200
               }
      
               track_script {               
                        chk_mysql_port             
               }
       }

1.3 编写切换脚本对KeepAlived做心跳检测,如果主节点a的MySQL服务挂了(3306端口挂了),那么它就会选择自杀。主节点b的KeepAlived通过心跳检测发现这个情况,就会将VIP的请求接管:

vim /opt/chk_mysql.sh
          #!/bin/bash
          counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
          if [ "${counter}" -eq 0 ]; then
                 /etc/init.d/keepalived stop
          Fi
chmod 755 /opt/chk_mysql.sh
service keepalived restart

1.4 在主节点b上修改keepalived配置。b机器上的keepalived.conf文件只修改priority为90、nopreempt不设置、real_server设置本地IP:

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf

         ! Configuration File for keepalived
       
         global_defs {
                 notification_email {
                         ops@wangshibo.cn
                         tech@wangshibo.cn
                 }
       
                notification_email_from ops@wangshibo.cn
                smtp_server 127.0.0.1 
                smtp_connect_timeout 30
                router_id MASTER-HA
         }
       
         vrrp_script chk_mysql_port {  //检测脚本设置
                 script "/opt/chk_mysql.sh"   //检测脚本路径
                 interval 2            
                 weight -5                 
                 fall 2                 
                 rise 1               
         }
       
         vrrp_instance VI_1 {
                 state BACKUP
                 interface eth0     //指定网卡
                 mcast_src_ip 10.10.10.48  //主机ip
                 virtual_router_id 51    
                 priority 99          
                 advert_int 1         
                 authentication {   
                        auth_type PASS 
                        auth_pass 1111     
                 }
                 virtual_ipaddress {    //虚拟出来的ip,和主机在同一网段,且主从节点虚拟出来ip必须一样
                       10.10.10.100
                 }
      
                track_script {               
                       chk_mysql_port             
                }
        }

1.5 修改检测脚本:

vi  /opt/chk_mysql.sh
         #!/bin/bash
         counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
         if [ "${counter}" -eq 0 ]; then
                   /etc/init.d/keepalived stop
         fi
chmod 755 /opt/chk_mysql.sh
service keepalived restart

1.6 测试ip漂移:
在主节点a上,输入ip a s
在eth0网卡上看是否出现虚拟出来的ip:
在这里插入图片描述
** 停掉主节点 a上的mysql容器,此时mysql容器默认占用的3306端口不再占用,虚拟ip应漂移到主节点b上:**
在这里插入图片描述
因为我们在keepalived配置文件中设置的为抢占模式,则若在主节点a上重启mysql容器,在等待2s~3s后,虚拟ip应漂回到主节点a上,则使用 ip a s指令应该可以看到。这说明ip漂移成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值