MySQL8.0之MGR单主模式部署(二)

本文介绍如何通过配置Keepalived实现MySQL集群中虚拟IP(VIP)的漂移,确保主节点故障时,VIP能平滑切换到备用节点,保持数据库服务的高可用性。

配置vip漂移

本文目的,为实现当mysql主节点挂掉后,从节点变为主节点时,代码连接数据库的ip需要修改的问题。

采用vip的方式,代码连接VIP地址进行读写。连接从节点ip进行读。

VIP对应的服务器始终是mysql集群中的主节点。

安装keepalived

三台服务器都安装

yum install keepalived -y

修改配置文件

1、修改11主配置文件

cat > /etc/keepalived/keepalived.conf << EOF
global_defs { 
   notification_email { 
     acassen@firewall.loc 
     failover@firewall.loc 
     sysadmin@firewall.loc 
   } 
   notification_email_from Alexandre.Cassen@firewall.loc  
   smtp_server 127.0.0.1 
   smtp_connect_timeout 30 
   router_id MYSQL_BACKUP
} 
​
#检测mysql是否存活
vrrp_script check_mysql {
    script "/etc/keepalived/check_mysql.sh"
}
​
vrrp_instance VI_1 { 
    state BACKUP 
    interface eno16780032  # 修改为实际网卡名
    virtual_router_id 66 # VRRP 路由 ID实例,每个实例是唯一的 
    priority 100    # 优先级,备服务器设置 90 80
    nopreempt    #设置为非抢占模式
    advert_int 1    # 指定VRRP 心跳包通告间隔时间,默认1秒 
    authentication { 
        auth_type PASS      
        auth_pass 1111 
    }  
    # 虚拟IP
    virtual_ipaddress { 
        172.16.251.99/24
    } 
    track_script {
        check_mysql
    } 
}
EOF

2、修改12从配置文件

cat > /etc/keepalived/keepalived.conf << EOF
global_defs { 
   notification_email { 
     acassen@firewall.loc 
     failover@firewall.loc 
     sysadmin@firewall.loc 
   } 
   notification_email_from Alexandre.Cassen@firewall.loc  
   smtp_server 127.0.0.1 
   smtp_connect_timeout 30 
   router_id MYSQL_BACKUP
} 
​
#检测mysql是否存活
vrrp_script check_mysql {
    script "/etc/keepalived/check_mysql.sh"
}
​
vrrp_instance VI_1 { 
    state BACKUP 
    interface eno16780032  # 修改为实际网卡名
    virtual_router_id 66 # VRRP 路由 ID实例,每个实例是唯一的 
    priority 90    # 优先级,备服务器设置 90 80
    nopreempt    #设置为非抢占模式
    advert_int 1    # 指定VRRP 心跳包通告间隔时间,默认1秒 
    authentication { 
        auth_type PASS      
        auth_pass 1111 
    }  
    # 虚拟IP
    virtual_ipaddress { 
        172.16.251.99/24
    } 
    track_script {
        check_mysql
    } 
}
EOF

3、修改13从配置文件

三台集群最多允许挂一台,最低优先级的服务器可以不进行设置是否抢占

cat > /etc/keepalived/keepalived.conf << EOF
global_defs { 
   notification_email { 
     acassen@firewall.loc 
     failover@firewall.loc 
     sysadmin@firewall.loc 
   } 
   notification_email_from Alexandre.Cassen@firewall.loc  
   smtp_server 127.0.0.1 
   smtp_connect_timeout 30 
   router_id MYSQL_BACKUP
} 
​
#检测mysql是否存活
vrrp_script check_mysql {
    script "/etc/keepalived/check_mysql.sh"
}
​
vrrp_instance VI_1 { 
    state BACKUP 
    interface eno16780032  # 修改为实际网卡名
    virtual_router_id 66 # VRRP 路由 ID实例,每个实例是唯一的 
    priority 80    # 优先级,备服务器设置 90 80
    advert_int 1    # 指定VRRP 心跳包通告间隔时间,默认1秒 
    authentication { 
        auth_type PASS      
        auth_pass 1111 
    }  
    # 虚拟IP
    virtual_ipaddress { 
        172.16.251.99/24
    } 
    track_script {
        check_mysql
    } 
}
EOF

编写check_mysql.sh脚本

cat > /etc/keepalived/check_mysql.sh  << "EOF"
#!/bin/bash
​
count=$(ss -antp |grep mysql |egrep -cv "grep|$$")
​
if [ "$count" -eq 0 ];then
 systemctl stop keepalived
fi
EOF

设置开机自启keepalive

systemctl start keepalived ; systemctl enable keepalived

查看状态

systemctl status keepalived
systemctl restart keepalived

主服务器挂掉后执行:

启动数据库

#启动 
/usr/local/mysql/bin/mysqld  --defaults-file=/etc/my.cnf --daemonize

#登陆
mysql -uroot -ptj123456

启动组复制

START GROUP_REPLICATION USER='mgr_user', PASSWORD='mgr@123';

查询组复制

SELECT * FROM performance_schema.replication_group_members;

重启keepalive

systemctl restart keepalived
systemctl status keepalived

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lee_yanyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值