温馨提示×

MySQL如何在Linux上进行集群配置

小樊
46
2025-12-31 17:45:55
栏目: 云计算

Linux 上 MySQL 集群配置实操指南

一 方案选型与架构

  • 常见两类方案:
    • MySQL NDB Cluster(共享无共享架构):由管理节点 ndb_mgmd数据节点 ndbd/ndbmtdSQL 节点 mysqld三层组成,数据在内存中分片存储,具备高可用、自动分片、强一致等特性,适合高并发 OLTP 场景。
    • 主从复制(InnoDB + 异步/半同步复制):由主库写入、从库异步/半同步回放,提供读扩展与故障切换能力,部署简单,适合读多写少与通用业务。
  • 典型最小拓扑(NDB Cluster):
    • 3 台主机:1 台管理节点(仅运行 ndb_mgmd),2 台同时承载数据节点与 SQL 节点(ndbd/ndbmtd + mysqld),实现数据双副本与基本高可用。

二 快速搭建 MySQL NDB Cluster(3 节点示例)

  • 环境与端口
    • 主机规划:
      • mgmd172.16.43.142
      • ndbd/SQL172.16.43.148172.16.43.149
    • 开放端口:1186(管理节点)、1181(数据节点通信)、3306(MySQL 客户端)。
  • 步骤
    1. 安装集群软件(三台均准备 MySQL Cluster 包,例如 mysql-cluster-gpl-7.6.13-el7-x86_64.tar.gz
      • 仅管理节点可仅保留二进制文件:ndb_mgm / ndb_mgmd;数据/SQL 节点保留完整 mysqld 与 ndbd/ndbmtd。
    2. 配置管理节点(172.16.43.142)
      • 创建目录与配置文件:
        • mkdir -p /var/lib/mysql-cluster
        • vi /var/lib/mysql-cluster/config.ini
      • 示例配置:
        [ndbd default]
        NoOfReplicas=2
        
        [ndb_mgmd]
        NodeId=1
        HostName=172.16.43.142
        DataDir=/var/lib/mysql-cluster
        
        [ndbd]
        NodeId=2
        HostName=172.16.43.148
        DataDir=/var/mysql/data
        
        [ndbd]
        NodeId=3
        HostName=172.16.43.149
        DataDir=/var/mysql/data
        
        [mysqld]
        NodeId=4
        HostName=172.16.43.148
        
        [mysqld]
        NodeId=5
        HostName=172.16.43.149
        
      • 启动管理节点:
        • ndb_mgmd -f /var/lib/mysql-cluster/config.ini
    3. 配置数据节点与 SQL 节点(148/149)
      • 创建系统用户与目录:
        • groupadd mysql;useradd -g mysql mysql
        • mkdir -p /var/mysql/data
      • 编辑 /etc/my.cnf(两台一致):
        [mysqld]
        ndbcluster
        [mysql_cluster]
        ndb-connectstring=172.16.43.142
        
      • 安装与初始化(以 148 为例,149 同理):
        • tar xzf mysql-cluster-gpl-7.6.13-el7-x86_64.tar.gz
        • mv mysql-cluster-gpl-7.6.13-el7-x86_64 /usr/local/mysql
        • chown -R root:mysql /usr/local/mysql
        • chown -R mysql:mysql /var/mysql/data
        • /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/var/mysql/data
        • cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
        • chkconfig --add mysqld
      • 启动服务(首次数据节点需 --initial):
        • ndbd --initial (仅首次)
        • service mysqld start
    4. 验证集群状态
      • ndb_mgm
      • 在管理控制台执行:show
      • 正常应看到:2 个数据节点1 个管理节点2 个 SQL 节点均为已连接状态。

三 主从复制高可用方案(InnoDB,2 或 3 节点)

  • 适用场景:已有或计划使用 InnoDB,追求部署简单、读扩展、故障切换可控
  • 步骤
    1. 基础配置(所有节点 /etc/my.cnf)
      • 主库(server-id=1):
        [mysqld]
        server-id=1
        log-bin=mysql-bin
        binlog-format=ROW
        
      • 从库(server-id=2/3,各不相同):
        [mysqld]
        server-id=2
        relay-log=mysql-relay-bin
        log-slave-updates=1
        
    2. 创建复制用户(主库)
      • CREATE USER ‘repl’@‘%’ IDENTIFIED BY ‘password’;
      • GRANT REPLICATION SLAVE ON . TO ‘repl’@‘%’;
      • FLUSH PRIVILEGES;
    3. 初始化复制(从库)
      • 在主库执行:SHOW MASTER STATUS; 记录 File / Position
      • 在从库执行:
        CHANGE MASTER TO
          MASTER_HOST='主库IP',
          MASTER_USER='repl',
          MASTER_PASSWORD='password',
          MASTER_LOG_FILE='记录的File',
          MASTER_LOG_POS=记录的Position;
        START SLAVE;
        
      • 检查:SHOW SLAVE STATUS\G,确保 Slave_IO_Running=Yes、Slave_SQL_Running=Yes
    4. 扩展与切换
      • 增加从库:重复步骤 2-3。
      • 故障切换:提升从库为主库(手动或配合 MHA/Orchestrator 等工具)。

四 运维与常见问题

  • 常用命令
    • 管理控制台:ndb_mgm;查看状态:show
    • 关闭集群:ndb_mgm -e shutdown
    • 数据节点首次启动:ndbd --initial;后续:ndbd
    • SQL 节点启停:service mysqld start/stop
  • 配置变更与滚动重启
    • 修改 config.ini 后,管理节点可用:ndb_mgmd -f /var/lib/mysql-cluster/config.ini --reload
    • 数据节点变更建议滚动重启(逐台 restart),避免同时停导致前端报错。
  • 防火墙与连通性
    • 确保 1186/1181/3306 端口开放;常见异常为 mysqld(API) not connected,多由防火墙或 ndb-connectstring 配置不当引起。
  • NDB 使用注意
    • 需将表改为 ENGINE=NDB/NDBCLUSTER;每张 NDB 表必须有主键(未显式定义时会自动生成隐含主键,可能带来空间与性能影响)。

0