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_Running
和 Slave_SQL_Running
两项均为 Yes
。
5. 双主双从设置
在完成上述步骤后,需将另一台主节点的设置和从节点的配置类似地进行配置。每台主节点需要指定其对应的从节点,并设置好复制。
6. 负载均衡
在双主双从的架构中,可以将数据库请求分散到各个节点,实现负载均衡。可以使用 MySQL Proxy、HAProxy 或者其他负载均衡工具,将读请求转发到从节点,将写请求转发到主节点。
7. 结论
通过以上步骤,我们已经在 CentOS 7 上成功搭建了一个双主双从的 MySQL 集群。这种架构不仅提高了系统的可用性和扩展性,还能够有效地分散数据的负载。然而,在实际应用中,数据库集群的配置与管理是复杂的课题,没有绝对完美的解决方案,管理员需根据实际的业务需求和环境配置适合的方案。
希望本文能为大家搭建 MySQL 集群提供有价值的参考。