温馨提示×

Ubuntu MySQL集群搭建方法是什么

小樊
44
2025-10-16 03:36:19
栏目: 云计算

Ubuntu环境下MySQL集群搭建指南(以InnoDB Cluster为例)

InnoDB Cluster是MySQL官方推出的高可用、强一致性集群方案,基于Group Replication(组复制)技术,支持多主模式(自动选主)和单主模式,适用于需要高可靠性的生产环境。以下是详细搭建步骤:

一、准备工作

  1. 环境要求

    • 至少3台Ubuntu服务器(推荐Ubuntu 22.04 LTS及以上),确保节点间网络互通(延迟≤10ms);
    • 每台服务器安装MySQL Community Server 8.0+(通过MySQL APT仓库安装,避免版本冲突);
    • 安装必要工具:sudo apt install mysql-shell net-tools sshpass
  2. 基础配置

    • 统一所有节点的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需包含所有节点的地址。

四、初始化组复制集群

  1. 启动第一个节点(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%'; 
  2. 添加其他节点
    登录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%'; 

五、验证集群状态

  1. 检查节点同步情况
    在任意节点执行:

    SHOW STATUS LIKE 'group_replication%'; 

    关键指标:

    • Group_replication_group_size:应等于集群节点数(如3);
    • Group_replication_primary_member:显示当前主节点(多主模式下为空)。
  2. 测试数据同步
    在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可将客户端请求自动转发到当前主节点,提升可用性。安装与配置步骤:

  1. 安装MySQL Router
    sudo apt install mysql-router -y 
  2. 配置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 
  3. 启动Router
    sudo systemctl start mysqlrouter sudo systemctl enable mysqlrouter 
  4. 客户端连接
    使用6447端口(主节点路由)或6446端口(只读节点路由)连接集群。

注意事项

  • 生产环境建议
    • 启用SSL加密(loose-group_replication_ssl_mode=REQUIRED);
    • 使用监控工具(如Prometheus+Granafa)监控集群状态;
    • 定期备份数据(可使用mysqldump或MySQL Enterprise Backup)。
  • 故障排查
    • 若节点无法加入集群,检查group_replication_recovery通道的复制权限;
    • 查看MySQL错误日志(/var/log/mysql/error.log)定位具体问题。

通过以上步骤,即可在Ubuntu环境下搭建高可用的MySQL InnoDB Cluster集群,满足企业级应用的高可靠性需求。

0