InnoDB Cluster是MySQL官方推出的高可用、强一致性集群方案,基于Group Replication(组复制)技术,支持多主模式(自动选主)和单主模式,适用于需要高可靠性的生产环境。以下是详细搭建步骤:
环境要求
sudo apt install mysql-shell net-tools sshpass。基础配置
root用户密码(便于后续配置);sudo ufw allow 3306;# 在主节点生成SSH密钥
ssh-keygen -t rsa
# 将公钥复制到其他节点
ssh-copy-id user@node2_ip
ssh-copy-id user@node3_ip
在所有集群节点上执行以下命令,安装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配置文件(/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可将客户端请求自动转发到当前主节点,提升可用性。安装与配置步骤:
sudo apt install mysql-router -y
/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
sudo systemctl start mysqlrouter
sudo systemctl enable mysqlrouter
6447端口(主节点路由)或6446端口(只读节点路由)连接集群。loose-group_replication_ssl_mode=REQUIRED);mysqldump或MySQL Enterprise Backup)。group_replication_recovery通道的复制权限;/var/log/mysql/error.log)定位具体问题。通过以上步骤,即可在Ubuntu环境下搭建高可用的MySQL InnoDB Cluster集群,满足企业级应用的高可靠性需求。