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集群,满足企业级应用的高可靠性需求。