• 使用keepalived实现mysql主从复制的自动切换


    最近测试了一下mysql+keepalived实现主从自动切换,主从都需要安装keepalived,使用vip漂移实现主从自动切换,这里主要记录的是keepalived的文件配置。

    这里mysql搭建的是双主。

    环境:

    主:192.168.184.128

    从:192.168.184.133

    vip:192.168.184.132

    两台服务器配置的均是BACKUP,主机优先级是100,从机优先级是90.均为非抢占模式nopreempt(只有BACKUP才可以设置为nopreempt),设置非抢占模式后,在原主机恢复并正常启动keepalived后,不会自动切回,若想切回master,只需去掉该节点的nopreempt选项并且将priority改的比其他节点大,然后重新加载配置文件即可(等MASTER切过来之后再将配置文件改回去再reload一下)。

    主从配置文件除了优先级priority和virtual_server中的real_server不一样外,其他均一样。

    notify_master 是切换为master时执行的脚本,主要用于判断主从是否已同步,并记录下主从切换时的日志位置。
    notify_backup 是切换为backup时执行的脚本,主要是修改一些使用于从库的参数。
    nofify_stop   是keepalived服务停掉后执行的脚本,主要是配置一些参数,并判断是否存在写操作。
    notify_down /data/mysql/bin/MySQL.sh部分是在mysql 3306端口不通时执行的操作,脚本内容是:
    #! /bin/sh
    pkill keepalived

    keepalived停掉后就会发生主从切换。

    主机keepalived.conf
    global_defs {
       notification_email{
       XXXX
    }
       notification_email_from XXX
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id KeepAlive_Mysql
    }
    vrrp_instance VI_1 {
        state BACKUP
        nopreempt
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        notify_master /home/sh/master.sh
        notify_backup /home/sh/backup.sh
        nofify_stop  /home/sh/stop.sh
        smtp_alert
        virtual_ipaddress {
           192.168.184.132
        }
    }
    virtual_server 192.168.184.132 3306 {
          delay_loop 2
          lb_algo wrr
          lb_kind DR
          persistence_timeout 60
          protocol TCP
          real_server 192.168.184.133 3306 {
          weight 3
          notify_down /data/mysql/bin/MySQL.sh
          TCP_CHECK {
          connect_timeout 10
          nb_get_retry 3
          delay_before_retry 3
          connect_port 3306
          }
          }
    }

     从机keepalived.conf

    global_defs {
       notification_email{
       XXXX
    }
       notification_email_from XXXX
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id KeepAlive_Mysql
    }
    vrrp_instance VI_1 {
        state BACKUP
        nopreempt
        interface eth0
        virtual_router_id 51
        priority 90
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        notify_master /home/sh/master.sh
        notify_backup /home/sh/backup.sh
        nofify_stop  /home/sh/stop.sh
        smtp_alert
        virtual_ipaddress {
           192.168.184.132
        }
    }
    virtual_server 192.168.184.132 3306 {
          delay_loop 2
          lb_algo wrr
          lb_kind DR
          persistence_timeout 60
          protocol TCP
          real_server 192.168.184.128 3306 {
          weight 3
          notify_down /data/mysql/bin/MySQL.sh
          TCP_CHECK {
          connect_timeout 10
          nb_get_retry 3
          delay_before_retry 3
          connect_port 3306
          }
          }
    }

    关于keepalived相关参数的说明可参考:

    http://outofmemory.cn/wiki/keepalived-configuration

    http://www.keepalived.org/documentation.html

  • 相关阅读:
    网络基础知识
    mysql安装
    docker打包镜像
    python的基础
    python静态属性的理解
    python中的静态方法和类方法
    python类的两种创建方式
    python的继承
    python中time和datetime模块
    python之模块
  • 原文地址:https://www.cnblogs.com/xiaotengyi/p/5459377.html
Copyright © 2020-2023  润新知