MySQL双主同步配置实战:构建高可用数据库架构
一、背景介绍
在实际生产环境中,单点故障是数据库系统面临的最大风险之一。一旦主数据库发生故障,整个业务可能会陷入瘫痪。为了避免这种情况,我们需要构建一个高可用的数据库架构,确保在主数据库出现问题时,能够迅速切换到备用数据库,保证业务的连续性。
MySQL双主同步配置是一种常见的高可用解决方案,它通过在两台服务器上分别部署MySQL实例,并配置它们互为主从关系,实现数据的双向同步。在此基础上,结合Keepalived工具,可以进一步实现虚拟IP(VIP)的自动漂移,从而实现无缝切换。
二、准备工作
在开始配置之前,我们需要做好以下准备工作:
- 两台服务器,分别作为主数据库和备用数据库。
- 确保服务器网络互通,且配置相同的操作系统环境。
- 安装相同版本的MySQL数据库,建议使用MySQL 8.0及以上版本。
- 安装Keepalived工具,用于实现VIP的自动漂移。
- 确保操作用户具有足够的权限,能够进行MySQL和Keepalived的配置和管理。
硬件环境:
软件环境:
权限配置:
三、MySQL双主同步配置
1. 安装MySQL
首先,在两台服务器上分别安装MySQL数据库。可以通过以下命令进行安装(以CentOS为例):
yum install -y mysql-community-server
安装完成后,启动MySQL服务并进行初始配置:
systemctl start mysqld
systemctl enable mysqld
2. 修改MySQL配置文件
在两台服务器的/etc/my.cnf
配置文件中,分别添加以下配置:
服务器A(主节点1):
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW
sync-binlog=1
gtid-mode=ON
enforce-gtid-consistency=ON
服务器B(主节点2):
[mysqld]
server-id=2
log-bin=mysql-bin
binlog-format=ROW
sync-binlog=1
gtid-mode=ON
enforce-gtid-consistency=ON
注意:server-id
必须唯一,用于标识不同的MySQL实例。
3. 创建同步用户
在两台服务器上分别创建用于数据同步的用户,并授予相应的权限:
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
4. 配置双主同步
在服务器A上执行以下命令,获取当前的二进制日志位置:
SHOW MASTER STATUS;
记录下File
和Position
的值,然后在服务器B上执行以下命令,配置同步:
CHANGE MASTER TO
MASTER_HOST='服务器A的IP',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='记录的File值',
MASTER_LOG_POS=记录的Position值;
同样,在服务器B上获取二进制日志位置,并在服务器A上配置同步。
5. 启动同步
在两台服务器上分别启动同步:
START SLAVE;
通过以下命令检查同步状态:
SHOW SLAVE STATUS\G
确保Slave_IO_Running
和Slave_SQL_Running
都为Yes
,表示同步正常。
四、Keepalived配置
1. 安装Keepalived
在两台服务器上分别安装Keepalived:
yum install -y keepalived
2. 配置Keepalived
在两台服务器的/etc/keepalived/keepalived.conf
配置文件中,分别添加以下配置:
服务器A:
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100
}
}
virtual_server 192.168.1.100 3306 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.1.10 3306 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.20 3306 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
服务器B:
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100
}
}
virtual_server 192.168.1.100 3306 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.1.10 3306 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.20 3306 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
注意:virtual_ipaddress
中的IP地址为虚拟IP,real_server
中的IP地址分别为两台服务器的实际IP。
3. 启动Keepalived
在两台服务器上分别启动Keepalived服务:
systemctl start keepalived
systemctl enable keepalived
五、测试与验证
1. 检查VIP
通过以下命令检查VIP是否已绑定到主节点:
ip addr show
2. 模拟故障切换
在主节点上停止MySQL服务或Keepalived服务,观察VIP是否自动漂移到备用节点。
3. 验证数据同步
在主节点上插入一条数据,检查备用节点是否能够同步到该数据。
六、总结
通过本文的详细步骤,我们已经成功搭建了一个基于MySQL双主同步配置的高可用数据库架构。结合Keepalived工具,实现了VIP的自动漂移,确保在主数据库发生故障时,能够迅速切换到备用数据库,保障业务的连续性和数据的安全性。
在实际生产环境中,还可以进一步优化和扩展该架构,例如增加更多的备用节点、配置读写分离、使用监控工具实时监控数据库状态等,以进一步提升系统的稳定性和可靠性。
希望本文能够帮助读者掌握MySQL双主同步配置的实战技巧,为构建高可用数据库架构提供有力支持。