温馨提示×

Debian MySQL集群如何搭建与管理

小樊
35
2025-12-08 21:13:02
栏目: 云计算

Debian 上搭建与管理 MySQL 集群

一、方案选型与架构

  • MySQL NDB Cluster(NDB 存储引擎):由管理节点 ndb_mgmd数据节点 ndbd/ndbmtdSQL 节点 mysqld组成,适合高可用、强一致、实时场景,具备自动分片多主写入能力。
  • InnoDB Cluster(Group Replication + MySQL Shell + Router):基于组复制(GR)的多主/单主集群,使用MySQL Shell部署与运维,配合MySQL Router做读写分离与故障转移,适合通用 OLTP。
  • 主从复制 + 负载均衡(HAProxy/ProxySQL):搭建简单、成本低,适合读多写少快速容灾场景,但需自行处理故障切换与一致性策略。
  • 建议准备至少3 台服务器(管理/数据/SQL 分离或混合部署视资源而定),并保证互通网络与 NTP 时间同步。生产环境务必开启防火墙访问控制,并进行备份与演练

二、快速上手 MySQL NDB Cluster(示例 1 管理 + 2 数据 + 2 SQL)

  • 节点规划
    • 管理节点:192.168.10.10(运行 ndb_mgmd)
    • 数据节点:192.168.10.11、192.168.10.12(运行 ndbd/ndbmtd)
    • SQL 节点:192.168.10.13、192.168.10.14(运行 mysqld,接入 NDB 引擎)
  • 安装软件(各节点)
    • Debian 仓库通常提供 mysql-cluster-community-server 等包,可直接安装:
      • sudo apt update
      • sudo apt install -y mysql-cluster-community-server mysql-cluster-community-client
  • 配置管理节点(192.168.10.10)
    • 创建配置目录:sudo mkdir -p /var/lib/mysql-cluster
    • 编辑 /var/lib/mysql-cluster/config.ini(示例):
      • [ndb_mgmd DEFAULT]
        • NoOfReplicas=2
        • DataDir=/var/lib/mysql-cluster
      • [ndbd DEFAULT]
        • NoOfReplicas=2
        • DataMemory=1G
        • IndexMemory=256M
      • [ndb_mgmd]
        • HostName=192.168.10.10
      • [ndbd]
        • HostName=192.168.10.11
      • [ndbd]
        • HostName=192.168.10.12
      • [mysqld]
        • HostName=192.168.10.13
      • [mysqld]
        • HostName=192.168.10.14
    • 启动管理节点:
      • ndb_mgmd --config-file=/var/lib/mysql-cluster/config.ini
  • 配置并启动数据节点(192.168.10.11、192.168.10.12)
    • 编辑 /etc/mysql/my.cnf(或 /etc/mysql/mysql.conf.d/mysqld.cnf),在 [mysqld] 下加入:
      • ndbcluster
      • ndb-connectstring=192.168.10.10
    • 首次初始化并启动数据节点:
      • sudo systemctl restart mysql
      • ndbd --initial
      • 后续启动可直接:ndbd
  • 配置并启动 SQL 节点(192.168.10.13、192.168.10.14)
    • 编辑 /etc/mysql/my.cnf,在 [mysqld] 下加入:
      • ndbcluster
      • ndb-connectstring=192.168.10.10
    • 重启:sudo systemctl restart mysql
  • 验证与运维
    • 查看集群状态:ndb_mgm -e “show”(应看到管理节点、2 个数据节点与 2 个 SQL 节点均为 connected/started
    • 进入 SQL 节点验证引擎与表:
      • mysql -uroot -p -e “SHOW ENGINES;”(确认 NDBCLUSTER 为 YES)
      • CREATE TABLE t(id INT PRIMARY KEY, name CHAR(30)) ENGINE=NDBCLUSTER;
    • 常用运维:
      • 滚动重启:先停 SQL/数据节点,再停管理节点;启动顺序相反。
      • 扩缩容:新增 [ndbd]/[mysqld] 段后,使用 ndb_mgm 执行 add node 并在新节点启动 ndbd/mysqld 完成联入。

三、管理与运维要点

  • 监控与健康检查
    • 使用 ndb_mgm -e “show” 观察节点状态;关注 DataMemory/IndexMemory 使用率与 事务冲突
    • SQL 节点执行:SHOW STATUS LIKE ‘wsrep%’(NDB 场景主要看 NDB 相关状态;InnoDB Cluster 场景关注 wsrep_cluster_size/wsrep_ready)。
  • 备份与恢复
    • NDB:使用 ndb_restore 从备份目录恢复(先停集群或切换到维护模式,按数据节点顺序恢复)。
    • 建议定期在 SQL 节点做逻辑备份(mysqldump),并保留 备份与时间点
  • 升级与回滚
    • 采用滚动升级(先 SQL、后数据、最后管理节点),每步验证 show 与业务连通性。
  • 安全加固
    • 仅开放必要端口(如 1186/2202/3306),使用 TLS/SSL 加密节点间与管理通道通信,限制管理节点与数据节点的访问来源。

四、常见故障排查

  • 节点无法加入集群
    • 检查 防火墙/安全组/etc/hosts 解析、config.ini 主机名与 IP 一致性;确认 数据目录权限与磁盘空间。
  • 数据节点反复重启
    • 查看 ndb_1_error.log/ndb_2_error.log,常见为 内存不足版本不匹配;适当调大 DataMemory/IndexMemory 或统一版本。
  • SQL 节点连不上管理节点
    • 确认 ndb-connectstring 正确、管理节点 ndb_mgmd 已启动、网络可达;必要时在 SQL 节点执行 mysqladmin ping
  • 表不可用或元数据不一致
    • 确认表引擎为 NDBCLUSTER;执行 SHOW TABLE STATUSndb_desc 核对;必要时重建表或从备份恢复。

0