• mysql keepalived双主ha


    【1】环境

    操作系统 Centos7.8

    192.168.148.39  DB3

    192.168.148.27  DB4

    192.168.148.253 VIP(一个尚未占用的内网ip即可)

    备注:互为主从 DB 3/DB 4:该部分参考:mysql双主gtid模式,在有数据情况下 

    备注:当然不互为主从也不影响该篇文章对于 keepalived 的研究效果

    【2】keepalived 安装配置

    (2.1)操作系统环境配置

    #(1)添加非本机IP绑定支持
    echo "net.ipv4.ip_nonlocal_bind=1" >> /etc/sysctl.conf
    
    #(2)开启路由转发
    echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

    sysctl -p #(
    3)iptables相关 #配置iptables,添加VRRP通讯支持 -A INPUT -d 224.0.0.18 -j ACCEPT #允许组播地址访问本机,组播地址用于keepalived互相检测心跳 -A INPUT -s 192.168.1.0/24 -d 224.0.0.18 -j ACCEPT #允许组播地址通信 -A INPUT -s 192.168.1.0/24 -p vrrp -j ACCEPT #允许VRRP(虚拟路由器冗余协议)通信 -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCPET #开发mysql3306端口

    (2.2)安装与查阅

    方法一:yum安装:

    yum install-y keepalived 

      

    如何找到 keepalived 安装到哪里了呢?

    rpm -qal|grep keepalived

      

    很明显,相关配置文件在 /etc/keepalived/keepalived.conf 

    方法二:二进制包安装

    #(1)下载
    官网:https://www.keepalived.org/download.html
    wget https://www.keepalived.org/software/keepalived-1.3.3.tar.gz
    
    #(2)安装前置依赖包
    mount /dev/cdrom /mnt #加载本地源,有网络直接配置也可(参考:yum源配置、epel源配置)
    yum install kernel-devel openssl-devel popt-devel -y
    
    #(3)安装
    cd /soft/
    tar -zxvf keepalived-1.3.3.tar.gz
    cd keepalived-1.3.4
    ./configure --prefix=/usr/local/keepalived/
    make && make install

    (2.3)修改配置文件

    主从配置文件都一样~

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         guochaoqun@bianfeng.com
         815202984@qq.com
       }
       notification_email_from dbmoniter@bianfeng.com
       smtp_server 60.191.38.219
       smtp_connect_timeout 30
       router_id mysql_ha
       vrrp_skip_check_adv_addr
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    vrrp_script check_run {
    script "/etc/keepalived/mysql_check.sh"
    interval 60
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface ens33
        virtual_router_id 51
        noproeempt
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        track_script {
            check_run
        }
        virtual_ipaddress {
            192.168.148.253
        }
    }

    /etc/keepalived/mysql_check.sh 的作用是为了每分钟判断一次mysql服务是否存活

    记得加权限  chmod +x /etc/keepalived/mysql_check.sh,否则会报错:

      

    因为我这里在配置文件里就写了密码,所以我这里 mysql -e  就没写账户密码

    #!/bin/bash
    source /etc/profile
    count=1
    
    while true
    do
    mysql -e "show status;" > /dev/null 2>&1
    i=$?
    ps aux | grep mysqld | grep -v grep > /dev/null 2>&1
    j=$?
    if [ $i = 0 ] && [ $j = 0 ]
    then
       exit 0
    else
       if [ $i = 1 ] && [ $j = 0 ]
       then
           exit 0
       else
            if [ $count -gt 5 ]
            then
                  break
            fi
       count=$((${count}+1))
       continue
       fi
    fi
    
    done
    systemctl stop keepalived

    (2.4)启动 keepalived ,核验

    我们在 192.168.148.39  DB3  上启动 keepalived

    如下,成功

      

     另外一台机器

      192.168.148.27  DB4

    也启动:

      

    (2.5)故障转移测试,飘VIP测试

    当前VIP 拥有者 192.168.148.39 ,关闭 mysql 服务

      [root@DB3 keepalived]# systemctl stop mysql

      

     如上图,我们立即查看 keepalived 是正常的;

     等一个我们60秒的check间隔,再去查看 keepalived 的情况,发现其在 15.08分还是在启动状态的,在15.11分关闭了

      

    然后我们查看另外一个机器,VIP 已经飘过来了;

       

    我们再重新启动

      192.168.148.39 DB3机器的 Mysql 和 keepalived;

      发现其 VIP 也没有自动飘回来;这是因为 我们都 keepalived 配置文件中  设置的  state BACKUP ,且权重参数都是100 一样的,所以不会出现抢占情况(具体原理见参考文件中的 mysql keepalived 双主更全面详细的)

        

    (2.6)mysql持续连接视角(再飘一下VIP)

    那我们在2个机器上都新建了 账户

    create user ruser@'192.168.148.%' identified by 'a123456!';

    根据上面的操作,我们当前VIP 是在 

      192.168.148.27 DB4 上

    我们用另外一个机器DB5去连接

      

     然后我们在DB4上关闭mysql;

      

     在VIP切换的过程中,我们的查询一直是 丢失连接,无法连接的;等VIP彻底切到 DB3 之后,我们的查询就好了;这个过程对于程序是完全透明的,程序只需要连这个VIP 等待它恢复即可;

      

    【故障处理】

    (1)vrrp_script 定义的脚本不执行

    需要加权限 chmod +x  脚本名

    (2)vip无法ping通,无法访问端口

    #vrrp_strict

      keepalived.conf中vip配置好后,通过ip addr可以看到vip已经顺利挂载,但是无法ping通,并且防火墙都已关闭;

      原因是keepalived.conf配置中默认vrrp_strict打开了,需要把它注释掉。重启keepalived即可ping通。

    【参考文档】

    超详细keepalived 配置文件参数:https://blog.csdn.net/mofiu/article/details/76644012

    mysql keepalived 双主更全面详细的:https://www.cnblogs.com/gered/p/12328155.html#autoid-2-0-0

  • 相关阅读:
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    day 47 前端基础之BOM和DOM
    day 46 Javascript学习
    day 45 前端CSS
  • 原文地址:https://www.cnblogs.com/gered/p/15826159.html
Copyright © 2020-2023  润新知