ubuntu

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加密(生产环境必选)

注意

四、初始化组复制集群

  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端口(只读节点路由)连接集群。

注意事项

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

0
看了该问题的人还看了