本文共 2151 字,大约阅读时间需要 7 分钟。
在生产环境中部署高可用系统是确保业务连续性的重要手段。本文将详细介绍如何利用 Keepalived 和 MySQL 双主架构实现 MySQL 的高可用性。
在这个高可用架构中,主从复制是关键的实现机制。主服务器 (Master) 记录二进制日志,而从服务器 (Slave) 将这些日志复制到本地的中继日志中。具体流程如下:
通过这种方式,主从复制确保了数据的一致性和高可用性。
Keepalived 是一个开源的高可用性解决方案,常用于实现虚拟IP (VIP) 的负载均衡和故障转移。以下是 Keepalived 的安装和配置步骤:
在两台服务器 (master1 和 master2) 上安装 Keepalived 软件包。注意,在安装之前,需要先安装以下依赖软件包:
yum install kernel-devel openssl-devel popt-devel
在 CentOS 7 上,默认已经支持 Keepalived 的安装,不需要手动指定内核目录。
安装完成后,Keepalived 会自动生成初始脚本文件 /etc/init.d/keepalived
,但需要手动添加为系统服务:
chmod 755 /etc/init.d/keepalivedchkconfig keepalived on
Keepalived 的配置文件为 /etc/keepalived.conf
,主要包含以下配置项:
global_defs { router_id MYSQL-1}
vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 51 priority 100 auth_type PASS auth_pass 1111 virtual_ipaddress 192.168.0.30/32 3306 delay_loop 2 lb_algo rr lb_kind DR persistence_timeout 60 protocol TCP real_server 192.168.0.10/32 3306 weight 3 notify_down /etc/keepalived/bin/mysql.sh TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 3306 }}
在两台服务器上创建以下脚本,用于检测到 MySQL 服务停止时自动关闭 Keepalived:
#!/bin/bash# 检查 MySQL 服务状态status=$(mysqldsafe --status | grep -c "Percona server is running")if [ $status -eq 0 ]; then # 停止 Keepalived systemctl stop keepalivedfi
脚本需保存为 mysql.sh
,并在 keepalived.conf
中指定路径。
在 master1 和 master2 上运行以下命令,查看 VIP 的控制权:
ip addr show dev ens33 | grep 192.168.0.30
在 master1 上停止 MySQL 服务,观察 Keepalived 是否能自动触发脚本,完成故障转移。
在两台服务器上启动 Keepalived 服务:
systemctl start keepalived
nopreempt
选项,避免因脑裂等问题导致服务抢占。auto_increment_increment
和 auto_increment_offset
不同,避免主从复制失败导致的自增冲突。通过以上配置,Keepalived + MySQL 双主架构能够有效实现 MySQL 的高可用性,确保业务的连续性和稳定性。
转载地址:http://ldbfk.baihongyu.com/