MySQL双主架构实现高可用性与数据同步的最佳实践指南

引言

在当今数字化时代,数据已成为企业最宝贵的资产之一。数据库系统作为存储、管理和检索这些数据的核心组件,其稳定性和可用性对业务的连续性和可靠性至关重要。高可用性(High Availability, HA)数据库解决方案确保了即使在面临硬件故障、软件崩溃或网络问题时,数据仍然可以被访问和处理。MySQL作为最受欢迎的开源数据库之一,其双主架构(互为主从)是实现高可用性的有效手段。本文将详细介绍如何在Linux系统中配置MySQL双主架构,确保数据实时同步和高可用性。

一、MySQL双主架构概述

1.1 双主架构的定义

MySQL双主架构是指两台MySQL服务器互为主从关系,即每台服务器既是主节点又是从节点。这种架构允许任何一台服务器在发生故障时,另一台服务器能够立即接管服务,确保业务的连续性。

1.2 双主架构的优势

  • 高可用性:任何一台服务器故障,另一台服务器可以立即接管。
  • 数据冗余:数据在两台服务器上实时同步,避免单点故障导致数据丢失。
  • 负载均衡:读写操作可以分散到两台服务器上,提高系统性能。

二、环境准备与依赖安装

2.1 系统环境

  • 操作系统:CentOS 7.2 x86_64
  • MySQL版本:MySQL 5.7.13
  • Keepalived版本:Keepalived 1.2.20

2.2 安装MySQL

yum install -y mysql-community-server
systemctl start mysqld
systemctl enable mysqld

2.3 安装Keepalived

yum install -y keepalived
systemctl start keepalived
systemctl enable keepalived

三、配置MySQL双主复制

3.1 修改MySQL配置文件

在两台服务器上分别修改/etc/my.cnf文件,添加以下配置:

[mysqld]
server-id=1  # 服务器1为1,服务器2为2
log-bin=mysql-bin
binlog-format=row
relay-log=mysql-relay-bin
log-slave-updates=1
gtid_mode=on
enforce-gtid-consistency=true

3.2 创建具有复制权限的用户

在服务器1上执行:

CREATE USER 'replicator'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;

在服务器2上执行相同的操作。

3.3 配置主从复制

在服务器1上执行:

CHANGE MASTER TO
MASTER_HOST='192.168.1.200',
MASTER_USER='replicator',
MASTER_PASSWORD='password',
MASTER_AUTO_POSITION=1;
START SLAVE;

在服务器2上执行:

CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='replicator',
MASTER_PASSWORD='password',
MASTER_AUTO_POSITION=1;
START SLAVE;

3.4 验证复制状态

在两台服务器上执行:

SHOW SLAVE STATUS\G

确保Slave_IO_RunningSlave_SQL_Running均为Yes

四、配置Keepalived实现高可用

4.1 配置Keepalived

在服务器1上修改/etc/keepalived/keepalived.conf

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.150
    }
}

在服务器2上修改/etc/keepalived/keepalived.conf

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.150
    }
}

4.2 重启Keepalived服务

systemctl restart keepalived

4.3 验证虚拟IP

执行ip addr show,确保虚拟IP 192.168.1.150已绑定到主服务器。

五、测试与验证

5.1 数据同步测试

在服务器1上插入数据:

CREATE DATABASE test;
USE test;
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50));
INSERT INTO users (name) VALUES ('Alice'), ('Bob');

在服务器2上查询数据:

USE test;
SELECT * FROM users;

确保数据已同步。

5.2 故障切换测试

关闭服务器1的MySQL服务:

systemctl stop mysqld

检查虚拟IP是否漂移到服务器2:

ip addr show

确保虚拟IP 192.168.1.150已绑定到服务器2。

六、总结

通过配置MySQL双主架构和Keepalived,我们成功实现了高可用性和数据同步。这种架构不仅提高了系统的稳定性和可靠性,还提供了灵活的负载均衡能力。希望本文的详细步骤和配置示例能够帮助读者理解和应用这些技术,构建高效稳定的MySQL高可用环境。

七、参考资料

  • MySQL官方文档:
  • Keepalived官方文档:

八、讨论与反馈


本文由[作者名]撰写,发布于[发布日期],版权所有,未经允许不得转载。