部署 Keepalived 实现 MySQL 双主高可用架构

原创
2018/08/21 15:37
阅读数 798

1.部署 MySQL 双主(Master - Master)集群

参考我的博文:《MySQL 双主 Master to Master 架构部署方法》
地址:http://www.sunbloger.com/2018/08/16/604.html

假设已经在 IP 为 192.168.0.1192.168.0.2 的两台主机上部署好了 MySQL 双主集群,接下来我们进行 Keepalived 的部署。

2.修改 Linux 系统内核参数

# vi /etc/sysctl.conf

net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

完成修改并保存后,用下面的命令让配置立即生效
# sysctl -p

3.安装 Keepalived

推荐直接 yum 安装,命令如下:
yum install keepalived

4.配置 keepalived.conf

这里我们用 192.168.0.3 当做 VIP 进行配置

在 192.168.0.1 的主机上配置 keepalived.conf
# vi /etc/keepalived/keepalived.conf

配置如下:

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from jason.wei@xxxxx.com
   smtp_server 192.168.0.4
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 1
    priority 100
    advert_int 1
    nopreempt # <---- 这个参数代表这台主机从故障中恢复后,不主动抢占回vip
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.0.3
    }
}

virtual_server 192.168.0.3 3306 {
    delay_loop 2
    lb_algo wrr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 60
    protocol TCP

    real_server 192.168.0.1 3306 {
        weight 3
        notify_down /etc/keepalived/shutdown.sh #MySQL访问失败时执行的脚本
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 3306
        }
    }
}

在 192.168.0.2 的主机上配置 keepalived.conf
# vi /etc/keepalived/keepalived.conf

配置如下:

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from jason.wei@xxxxx.com
   smtp_server 192.168.0.4
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 2
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.0.3
    }
}

virtual_server 192.168.0.3 3306 {
    delay_loop 2
    lb_algo wrr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 60
    protocol TCP

    real_server 192.168.0.2 3306 {
        weight 3
        notify_down /etc/keepalived/shutdown.sh
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 3306
        }
    }
}

 

5.创建一个当 MySQL 访问失败时执行的脚本,用于让故障主机的 Keepalived 服务停止,以便让集群中的其他主机接管 VIP 从而实现 VIP 的故障漂移。

分别在 192.168.0.1 和 192.168.0.2 两台主机上执行如下操作:

# vi /etc/keepalived/shutdown.sh

脚本代码如下:

#!/bin/bash

if [ `ps -ef|grep -w "$0"|grep -v "grep"|wc -l` -gt 2 ];then
    exit 0
fi
logfile="/etc/keepalived/mysql_error.log"
echo -e "`date "+%F %H:%M:%S"` MySQL service error, stop keepalived." >> ${logfile}
service keepalived stop &>> ${logfile}

上边这个 Shell 脚本,需要运行权限,命令如下:
# chmod +x /etc/keepalived/shutdown.sh

备注:这个脚本在前面的环节中已经被定义在了 keepalived.conf 的 notify_down 参数中

6.开启 Keepalived 服务,测试遇到故障时 VIP 是否可以正常漂移

分别启动 192.168.0.1 和 192.168.0.2 两台主机上的 Keepalived 服务,命令如下:

# service keepalived start

两台主机的 Keepalived 服务器都启动后,我们可以通过访问 192.168.0.3 这个 VIP 来测试 MySQL 是否可以访问,为了测试,我们可以在两台主机以外的机器上来测试访问,例如:

# mysql -h 192.168.0.3 -uroot -p123456

用上述命令如果能够正常登录 MySQL 的话,接下来我们就可以停掉 192.168.0.1 上的 MySQL 进程,看 VIP 是否能够漂移到 192.168.0.2 这台主机上。

# service mysqld stop

再次尝试登录

# mysql -h 192.168.0.3 -uroot -p123456

如果依旧可以登录,就说明部署成功了。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部