CentOS 7 下搭建 MySQL 集群:双主双从

在现代应用中,数据库作为关键组成部分,承载着大量的数据读写请求。而单一数据库实例容易成为瓶颈,因此搭建高可用性和负载均衡的数据库集群显得尤为重要。在本教程中,我们将学习如何在 CentOS 7 上搭建双主双从的 MySQL 集群,使得数据能在多个节点之间进行同步和管理。

1. 系统架构设计

在我们的集群中,将会有两个主节点(Master),两个从节点(Slave),每个主节点都能写入数据,并且将数据同步到各自的从节点。集群的基本架构如下:

erDiagram
    MASTER1 {
        string hostname
        string ip
    }
    MASTER2 {
        string hostname
        string ip
    }
    SLAVE1 {
        string hostname
        string ip
    }
    SLAVE2 {
        string hostname
        string ip
    }
    MASTER1 ||--o{ SLAVE1 : "replicates to"
    MASTER1 ||--o{ SLAVE2 : "replicates to"
    MASTER2 ||--o{ SLAVE1 : "replicates to"
    MASTER2 ||--o{ SLAVE2 : "replicates to"

2. 环境准备

首先,确保您的 CentOS 7 系统上已经安装了 MySQL。可以使用下面的命令安装 MySQL。

yum install -y mysql-server

安装完成后,启动 MySQL 服务并设置其开机自启:

systemctl start mysqld
systemctl enable mysqld

3. 配置 MySQL 主节点

3.1. 修改 MySQL 配置文件

在每个主节点的 MySQL 配置文件 /etc/my.cnf 中,添加以下配置:

[mysqld]
log-bin=mysql-bin
server-id=1 # 对于第二个主节点,server-id=2
auto_increment_offset=1 # 对于第二个主节点,设置为2
auto_increment_increment=2

3.2. 重启 MySQL 服务

修改完成后,请重启 MySQL 服务使配置生效:

systemctl restart mysqld

3.3. 创建复制用户

接下来,我们需要为复制创建一个用户。

mysql -u root -p

执行以下命令:

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

3.4. 记录当前日志位置

在成为从节点的机器中,我们需要记录日志位置。首先,确认当前日志文件及位置:

SHOW MASTER STATUS;

这将返回当前的日志文件名和位置(File, Position),记录下来。

4. 配置从节点

4.1. 修改从节点配置

在每个从节点的 MySQL 配置文件中,添加以下配置:

[mysqld]
server-id=2 # 对于第二个从节点,server-id=3

4.2. 重启 MySQL 服务

同样,重启从节点的 MySQL 服务:

systemctl restart mysqld

4.3. 设置从节点复制

使用记录的日志位置配置从节点:

mysql -u root -p

然后执行以下命令(用真实的值替换以下示例):

CHANGE MASTER TO
    MASTER_HOST='主节点IP',
    MASTER_USER='replication',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='记录的日志文件',
    MASTER_LOG_POS=记录的位置;

最后,启动复制:

START SLAVE;

4.4. 验证复制状态

确保从节点正在运行并且没有错误:

SHOW SLAVE STATUS\G;

检查 Slave_IO_RunningSlave_SQL_Running 两项均为 Yes

5. 双主双从设置

在完成上述步骤后,需将另一台主节点的设置和从节点的配置类似地进行配置。每台主节点需要指定其对应的从节点,并设置好复制。

6. 负载均衡

在双主双从的架构中,可以将数据库请求分散到各个节点,实现负载均衡。可以使用 MySQL Proxy、HAProxy 或者其他负载均衡工具,将读请求转发到从节点,将写请求转发到主节点。

7. 结论

通过以上步骤,我们已经在 CentOS 7 上成功搭建了一个双主双从的 MySQL 集群。这种架构不仅提高了系统的可用性和扩展性,还能够有效地分散数据的负载。然而,在实际应用中,数据库集群的配置与管理是复杂的课题,没有绝对完美的解决方案,管理员需根据实际的业务需求和环境配置适合的方案。

希望本文能为大家搭建 MySQL 集群提供有价值的参考。