Ubuntu环境下MySQL集群搭建指南(以InnoDB Cluster为例)
InnoDB Cluster是MySQL官方推出的高可用、强一致性集群方案,基于Group Replication(组复制)技术,支持多主模式(自动选主)和单主模式,适用于需要高可靠性的生产环境。以下是详细搭建步骤:
一、准备工作
-
环境要求
- 至少3台Ubuntu服务器(推荐Ubuntu 22.04 LTS及以上),确保节点间网络互通(延迟≤10ms);
- 每台服务器安装MySQL Community Server 8.0+(通过MySQL APT仓库安装,避免版本冲突);
- 安装必要工具:
sudo apt install mysql-shell net-tools sshpass。
-
基础配置
- 统一所有节点的
root用户密码(便于后续配置); - 开启防火墙MySQL端口(默认3306):
sudo ufw allow 3306; - 配置SSH免密登录(方便MHA或自动化脚本管理):
# 在主节点生成SSH密钥 ssh-keygen -t rsa # 将公钥复制到其他节点 ssh-copy-id user@node2_ip ssh-copy-id user@node3_ip
- 统一所有节点的
二、安装MySQL Server
在所有集群节点上执行以下命令,安装MySQL Community Server:
# 添加MySQL APT仓库
wget https://dev.mysql.com/get/mysql-apt-config_0.8.28-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.28-1_all.deb
sudo apt update
# 安装MySQL Server
sudo apt install mysql-community-server -y
# 启动MySQL服务并设置开机自启
sudo systemctl start mysql
sudo systemctl enable mysql
三、配置MySQL节点(组复制基础参数)
编辑每台节点的MySQL配置文件(/etc/mysql/mysql.conf.d/mysqld.cnf),添加以下参数:
[mysqld]
# 唯一标识节点(集群内不可重复)
server-id=1 # node1设为1,node2设为2,node3设为3
# 启用GTID(全局事务标识符,确保事务一致性)
gtid_mode=ON
enforce_gtid_consistency=ON
# 配置二进制日志(组复制依赖)
log_bin=mysql-bin
binlog_format=ROW
binlog_checksum=NONE
# 组复制相关参数
loose-group_replication_group_name="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeeeee" # 集群唯一ID(UUID格式)
loose-group_replication_start_on_boot=OFF
loose-group_replication_local_address="node1_ip:33061" # 节点自身监听地址
loose-group_replication_group_seeds="node1_ip:33061,node2_ip:33061,node3_ip:33061" # 所有节点地址列表
loose-group_replication_bootstrap_group=OFF # 初始启动时设为ON(仅第一个节点)
loose-group_replication_ssl_mode=REQUIRED # 启用SSL加密(生产环境必选)
注意:
server-id必须唯一;group_replication_local_address为节点自身IP+端口(33061为组复制专用端口);group_replication_group_seeds需包含所有节点的地址。
四、初始化组复制集群
-
启动第一个节点(bootstrap)
登录node1的MySQL,执行以下命令:-- 登录MySQL mysql -u root -p -- 开启组复制 SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; -- 关闭bootstrap(后续节点无需开启) SET GLOBAL group_replication_bootstrap_group=OFF; -- 验证状态(需看到"GROUP_REPLICATION_RUNNING=ON") SHOW STATUS LIKE 'group_replication%'; -
添加其他节点
登录node2、node3的MySQL,执行以下命令(替换为node1的root密码):mysql -u root -p -- 加入集群 CHANGE MASTER TO MASTER_USER='root', MASTER_PASSWORD='your_root_password' FOR CHANNEL 'group_replication_recovery'; START GROUP_REPLICATION; -- 验证状态 SHOW STATUS LIKE 'group_replication%';
五、验证集群状态
-
检查节点同步情况
在任意节点执行:SHOW STATUS LIKE 'group_replication%';关键指标:
Group_replication_group_size:应等于集群节点数(如3);Group_replication_primary_member:显示当前主节点(多主模式下为空)。
-
测试数据同步
在node1上创建数据库和表,插入数据,验证node2、node3是否同步:-- node1操作 CREATE DATABASE test_cluster; USE test_cluster; CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50)); INSERT INTO users (name) VALUES ('Alice'), ('Bob'); -- node2/node3操作 USE test_cluster; SELECT * FROM users; -- 应返回Alice、Bob两条记录
六、可选:添加MySQL Router实现智能路由
MySQL Router可将客户端请求自动转发到当前主节点,提升可用性。安装与配置步骤:
- 安装MySQL Router
sudo apt install mysql-router -y - 配置Router
编辑/etc/mysql-router/mysqlrouter.conf,添加以下内容:[DEFAULT] logging_folder = /var/log/mysql-router data_folder = /var/lib/mysql-router [routing:cluster_readonly] bind_port = 6446 mode = read-only destinations = node1_ip:3306,node2_ip:3306,node3_ip:3306 protocol = classic [routing:cluster_primary] bind_port = 6447 mode = first-available destinations = node1_ip:3306,node2_ip:3306,node3_ip:3306 protocol = classic - 启动Router
sudo systemctl start mysqlrouter sudo systemctl enable mysqlrouter - 客户端连接
使用6447端口(主节点路由)或6446端口(只读节点路由)连接集群。
注意事项
- 生产环境建议:
- 启用SSL加密(
loose-group_replication_ssl_mode=REQUIRED); - 使用监控工具(如Prometheus+Granafa)监控集群状态;
- 定期备份数据(可使用
mysqldump或MySQL Enterprise Backup)。
- 启用SSL加密(
- 故障排查:
- 若节点无法加入集群,检查
group_replication_recovery通道的复制权限; - 查看MySQL错误日志(
/var/log/mysql/error.log)定位具体问题。
- 若节点无法加入集群,检查
通过以上步骤,即可在Ubuntu环境下搭建高可用的MySQL InnoDB Cluster集群,满足企业级应用的高可靠性需求。
以上就是关于“Ubuntu MySQL集群搭建方法是什么”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm