Mysql Cluster水平扩展-添加数据节点

本文详细介绍如何在现有MySQL Cluster环境中增加数据节点的过程,包括配置修改、服务重启、节点初始化等关键步骤。

原文地址

http://blog.youkuaiyun.com/yabingshi_tech/article/details/47953109

一:实验环境

 

 

已搭建好MySQL cluster(一个管理节点,2sql节点及2个数据节点),搭建步骤请参考:http://blog.youkuaiyun.com/yabingshi_tech/article/details/47952135,现要在此基础上添加

192.168.6.70,192.168.6.71作为数据节点。(由于副本集参数已经配置成了2,所以必须一次添加2个数据节点)


二:实验步骤


2.1:解压cluster安装包


tar -xvf mysql-cluster-gpl-7.2.15-linux2.6-x86_64.tar.gz 

mv mysql-cluster-gpl-7.2.15-linux2.6-x86_64 /usr/local/mysql

 

2.2:修改管理节点配置文件

cd /data/mysql/mysql-cluster

 

修改全局配置文件vi mgmd.cnf,修改后的配置文件如下:

[plain]  view plain  copy
  1. [ndbd default]  
  2.    
  3. NoOfReplicas=2  
  4.    
  5. DataMemory=80M  
  6.    
  7. IndexMemory=18M  
  8.    
  9. [ndb_mgmd]  
  10.    
  11. hostname=192.168.6.66  
  12. datadir=/data/mysql/mysql-cluster  
  13.    
  14. [ndbd]  
  15.    
  16. hostname=192.168.6.68  
  17.    
  18. datadir=/usr/local/mysql/data  
  19.    
  20. [ndbd]  
  21.    
  22. hostname=192.168.6.69  
  23.    
  24. datadir=/usr/local/mysql/data  
  25.    
  26. [ndbd]  
  27.    
  28. hostname=192.168.6.70  
  29.    
  30. datadir=/usr/local/mysql/data  
  31.    
  32. [ndbd]  
  33.    
  34. hostname=192.168.6.71  
  35.    
  36. datadir=/usr/local/mysql/data  
  37.    
  38. [mysqld]  
  39.    
  40. hostname=192.168.6.66  
  41.    
  42. [mysqld]  
  43.    
  44. hostname=192.168.6.67  
 

 

2.3重新启动管理节点服务

 

2.3.1 停止管理节点

 

ndb_mgm> 1 stop  

Node 1 has shutdown.  

Disconnecting to allow Management Server to shutdown  

 

--停止管理节点不影响sql节点的正常访问。

 

2.3.2 重新加载配置文件

[root@ser6-66 mysql-cluster]# ndb_mgmd -f mgmd.cnf --initial

MySQL Cluster Management Server mysql-5.5.35 ndb-7.2.15

/*

用initial或者reload参数重新加载

如果只在配置文件中新增一个数据节点,会报错:

[root@ser6-66 mysql-cluster]#  ndb_mgmd -f mgmd.cnf --initial

MySQL Cluster Management Server mysql-5.5.35 ndb-7.2.15

2015-08-18 16:18:37 [MgmtSrvr] ERROR    -- at line 38: Nodegroup 1 has 1 members, NoOfReplicas=2

2015-08-18 16:18:37 [MgmtSrvr] ERROR    -- Could not load configuration from 'mgmd.cnf'

*/

 

2.3.4 查看集群状态

 

[plain]  view plain  copy
  1. [root@ser6-66 mysql-cluster]# ndb_mgm 192.168.6.66  
  2. -- NDB Cluster -- Management Client --  
  3. ndb_mgm> show  
  4. Connected to Management Server at: 192.168.6.66:1186  
  5. Cluster Configuration  
  6. ---------------------  
  7. [ndbd(NDB)]4 node(s)  
  8. id=2@192.168.6.68  (mysql-5.5.35 ndb-7.2.15, Nodegroup: 0)  
  9. id=3@192.168.6.69  (mysql-5.5.35 ndb-7.2.15, Nodegroup: 0, *)  
  10. id=4 (not connected, accepting connect from 192.168.6.70)  
  11. id=5 (not connected, accepting connect from 192.168.6.71)  
  12.    
  13. [ndb_mgmd(MGM)]1 node(s)  
  14. id=1@192.168.6.66  (mysql-5.5.35 ndb-7.2.15)  
  15.    
  16. [mysqld(API)]2 node(s)  
  17. id=6 (not connected, accepting connect from 192.168.6.66)  
  18. id=7 (not connected, accepting connect from 192.168.6.67)  


发现我的两个sql节点not connect了,网上别人的都没断啊。以保万一,这个还是晚上访问量比较少的时候添数据节点加比较好。


2.4:修改配置文件/etc/my.cnf

192.168.6.70,192.168.6.71

编辑/etc/my.cnf

内容如下:

[plain]  view plain  copy
  1. [mysqld]  
  2. ndbcluster                          #运行NDB存储引擎  
  3. ndb-connectstring=192.168.6.66    #定位管理节点  
  4. [mysql_cluster]  
  5. ndb-connectstring=192.168.6.66    #定位管理节点  


2.5轮流重新启动已连接的数据节点

[plain]  view plain  copy
  1. ndb_mgm> 2 stop  
  2. Node 2: Node shutdown initiated  
  3. Node 2: Node shutdown completed.  
  4. Node 2 has shutdown.  
  5.   
  6. [root@ser6-68 ~]# /usr/local/mysql/bin/ndbd   --ndb-connectstring=192.168.6.66  
  7. 2015-08-18 16:56:31 [ndbd] INFO     -- Angel connected to '192.168.6.66:1186'  
  8. 2015-08-18 16:56:31 [ndbd] INFO     -- Angel allocated nodeid: 2  
  9. ndb_mgm> show  
  10. Cluster Configuration  
  11. ---------------------  
  12. [ndbd(NDB)]4 node(s)  
  13. id=2@192.168.6.68  (mysql-5.5.35 ndb-7.2.15, Nodegroup: 0)  
  14. id=3@192.168.6.69  (mysql-5.5.35 ndb-7.2.15, Nodegroup: 0, *)  
  15. id=4 (not connected, accepting connect from 192.168.6.70)  
  16. id=5 (not connected, accepting connect from 192.168.6.71)  
  17.    
  18. [ndb_mgmd(MGM)]1 node(s)  
  19. id=1@192.168.6.66  (mysql-5.5.35 ndb-7.2.15)  
  20.    
  21. [mysqld(API)]3 node(s)  
  22. id=6@192.168.6.66  (mysql-5.5.35 ndb-7.2.15)  
  23. id=7 (not connected, accepting connect from 192.168.6.67)  
  24. id=8 (not connected, accepting connect from any host)  
  25. --发现sql节点也起来了一个。  
  26. ndb_mgm> 3 stop  
  27. Node 3: Node shutdown initiated  
  28. Node 3: Node shutdown completed.  
  29. Node 3 has shutdown.  
  30. [root@ser6-69 download]# /usr/local/mysql/bin/ndbd   --ndb-connectstring=192.168.6.66  
  31. 2015-08-18 16:57:54 [ndbd] INFO     -- Angel connected to '192.168.6.66:1186'  
  32. 2015-08-18 16:57:54 [ndbd] INFO     -- Angel allocated nodeid: 3  
  33.    
  34. ndb_mgm> show  
  35. Cluster Configuration  
  36. ---------------------  
  37. [ndbd(NDB)] 4 node(s)  
  38. id=2    @192.168.6.68  (mysql-5.5.35 ndb-7.2.15, Nodegroup: 0, *)  
  39. id=3    @192.168.6.69  (mysql-5.5.35 ndb-7.2.15, Nodegroup: 0)  
  40. id=4 (not connected, accepting connect from 192.168.6.70)  
  41. id=5 (not connected, accepting connect from 192.168.6.71)  
  42.    
  43. [ndb_mgmd(MGM)] 1 node(s)  
  44. id=1    @192.168.6.66  (mysql-5.5.35 ndb-7.2.15)  
  45.    
  46. [mysqld(API)]   3 node(s)  
  47. id=6    @192.168.6.66  (mysql-5.5.35 ndb-7.2.15)  
  48. id=7    @192.168.6.67  (mysql-5.5.35 ndb-7.2.15)  
  49. id=8 (not connected, accepting connect from any host)  
  50.    
  51. 此时发现id=7的sql节点也自动连接上了。  

 

2.6轮流重新启动连接的sql节点

[plain]  view plain  copy
  1. service mysql restart  
  2. ndb_mgm> show  
  3. Cluster Configuration  
  4. ---------------------  
  5. [ndbd(NDB)]4 node(s)  
  6. id=2@192.168.6.68  (mysql-5.5.35 ndb-7.2.15, Nodegroup: 0, *)  
  7. id=3@192.168.6.69  (mysql-5.5.35 ndb-7.2.15, Nodegroup: 0)  
  8. id=4 (not connected, accepting connect from 192.168.6.70)  
  9. id=5 (not connected, accepting connect from 192.168.6.71)  
  10.    
  11. [ndb_mgmd(MGM)]1 node(s)  
  12. id=1@192.168.6.66  (mysql-5.5.35 ndb-7.2.15)  
  13.    
  14. [mysqld(API)]3 node(s)  
  15. id=6 (not connected, accepting connect from 192.168.6.66)  
  16. id=7@192.168.6.67  (mysql-5.5.35 ndb-7.2.15)  
  17. id=8@192.168.6.66  (mysql-5.5.35 ndb-7.2.15)  

 

2.7初始化新的数据节点

[plain]  view plain  copy
  1. 在192.168.6.70,192.168.6.71上分别:  
  2.  /usr/local/mysql/bin/ndbd  --initial --ndb-connectstring=192.168.6.66  
  3. ndb_mgm> show  
  4. Cluster Configuration  
  5. ---------------------  
  6. [ndbd(NDB)]4 node(s)  
  7. id=2@192.168.6.68  (mysql-5.5.35 ndb-7.2.15, Nodegroup: 0, *)  
  8. id=3@192.168.6.69  (mysql-5.5.35 ndb-7.2.15, Nodegroup: 0)  
  9. id=4@192.168.6.70  (mysql-5.5.35 ndb-7.2.15, no nodegroup)  
  10. id=5@192.168.6.71  (mysql-5.5.35 ndb-7.2.15, no nodegroup)  
  11.    
  12. [ndb_mgmd(MGM)]1 node(s)  
  13. id=1@192.168.6.66  (mysql-5.5.35 ndb-7.2.15)  
  14.    
  15. [mysqld(API)]3 node(s)  
  16. id=6 (not connected, accepting connect from 192.168.6.66)  
  17. id=7@192.168.6.67  (mysql-5.5.35 ndb-7.2.15)  
  18. id=8@192.168.6.66  (mysql-5.5.35 ndb-7.2.15)  
  19. /*  
  20. mycluster 中没有参数设置节点组数. 节点组数=节点数/NoOfReplicas.  
  21. 所以你如果总共有两个数据节点,如果NoOfReplicas设为2, 那么意味着只有一个节点组. 如果NoOfReplicas=1,那么就有两个节点组。  
  22. */  
  23.    
  24. ndb_mgm> CREATE NODEGROUP 4,5  
  25. Nodegroup 1 created  
  26.    
  27. 这个数字不是随意设置的,是指你要添加哪些node到nodegroup中,这里是id=4,id=5的数据节点。  
  28.    
  29. ndb_mgm> show  
  30. Cluster Configuration  
  31. ---------------------  
  32. [ndbd(NDB)]4 node(s)  
  33. id=2@192.168.6.68  (mysql-5.5.35 ndb-7.2.15, Nodegroup: 0, *)  
  34. id=3@192.168.6.69  (mysql-5.5.35 ndb-7.2.15, Nodegroup: 0)  
  35. id=4@192.168.6.70  (mysql-5.5.35 ndb-7.2.15, Nodegroup: 1)  
  36. id=5@192.168.6.71  (mysql-5.5.35 ndb-7.2.15, Nodegroup: 1)  
  37.    
  38. [ndb_mgmd(MGM)]1 node(s)  
  39. id=1@192.168.6.66  (mysql-5.5.35 ndb-7.2.15)  
  40.    
  41. [mysqld(API)]3 node(s)  
  42. id=6 (not connected, accepting connect from 192.168.6.66)  
  43. id=7@192.168.6.67  (mysql-5.5.35 ndb-7.2.15)  
  44. id=8@192.168.6.66  (mysql-5.5.35 ndb-7.2.15)  
  45.    
  46. mysql> ALTER ONLINE TABLE t2 REORGANIZE PARTITION;  
  47. Query OK, 0 rows affected (7.99 sec)  
  48. Records: 0  Duplicates: 0  Warnings: 0  
  49.    
  50. mysql> select partition_name,table_rows from information_schema.PARTITIONS where     table_name='t2' and table_schema='dba';  
  51. +----------------+------------+  
  52. | partition_name | table_rows |  
  53. +----------------+------------+  
  54. | p0             |          3 |  
  55. | p1             |          0 |  
  56. | p2             |          1 |  
  57. | p3             |          2 |  
  58. +----------------+------------+  
  59. 4 rows in set (0.02 sec)  


原先t2分布在p0,p1,现在也能分布在p2,p3啦。成功啦!嘎嘎!

 

注意:如果配置过程中出现问题,记得将防火墙给关闭。

 /*

以下是我在配置过程中遇到的问题:

ndb_mgm>  create nodegroup 6,7

*   110: Error

*        Time out talking to management server


mysql> ALTER ONLINE TABLE t2 REORGANIZE PARTITION;

ERROR 1297 (HY000): Got temporary error 711 'System busy with node restart, schema operations not allowed' from NDBCLUSTER


出错原因:192.168.6.70,192.168.6.71的防火墙处于开启状态

解决办法:关闭防火墙

*/

本篇文章参考:

http://blog.youkuaiyun.com/chengfei112233/article/details/7706275


是的,**MySQL 目前仍然支持 MySQL Cluster**,但需要注意的是:**“MySQL Cluster” 是一个独立的产品线**,与我们通常所说的基于 InnoDB 存储引擎的单机或主从架构的 “MySQL” 有所不同。 --- ### ✅ 一、什么是 MySQL Cluster? **MySQL Cluster**(全称:**MySQL NDB Cluster**)是一个高可用、高冗余、分布式数据库系统,基于 **NDB(Network Database)存储引擎** 实现,支持: - 数据自动分片(Sharding) -节点复制(Replication) - 毫秒级故障转移 - 写性能横向扩展 - 强一致性保障 > 🔗 官网地址:[https://www.mysql.com/products/cluster/](https://www.mysql.com/products/cluster/) --- ### ✅ 二、当前支持状态(截至 2025) | 项目 | 状态 | |------|------| | 是否仍在维护? | ✅ 是,由 Oracle 维护 | | 最新版本 | **MySQL Cluster 8.4.x**(基于 MySQL 8.4 内核) | | 支持平台 | Linux, Windows, Solaris 等 | | 开源协议 | GPL v2 | | 是否免费? | ✅ 社区版免费;企业版提供额外监控和管理工具 | 📌 **MySQL Cluster 当前版本已同步到 MySQL 8.4 的核心功能集**,包括: - 原生 JSON 支持(通过 NDB 引擎优化) - 在线 DDL - 更好的 SQL 兼容性 - 安全增强(TLS、角色权限等) --- ### ✅ 三、MySQL Cluster vs 普通 MySQL(InnoDB) | 特性 | MySQL Cluster (NDB) | 标准 MySQL (InnoDB) | |------|---------------------|------------------------| | 存储引擎 | NDB | InnoDB(默认) | | 架构类型 | 分布式集群(Shared-nothing) | 单机 / 主从 / MGR | | 自动分片 | ✅ 支持 | ❌ 不支持(需中间件) | | 高可用性 | 多副本 + 快速故障转移(<1s) | 依赖 MHA、MGR 或云服务 | | 写扩展性 | ✅ 水平扩展写负载 | 读可扩展,写难扩展 | | 事务支持 | 支持 ACID(跨节点短事务) | 支持完整事务 | | JOIN 性能 | 较弱(跨节点 JOIN 成本高) | 强大且优化良好 | | 使用场景 | 电信、实时计费、IoT、高并发低延迟 | Web 应用、ERP、CRM、通用 OLTP | --- ### ✅ 四、MySQL Cluster 的典型架构组件 ```text +----------------+ +----------------+ | MySQL Server |<--->| NDB Data Node | ← 存储实际数据,支持自动分片 | (SQL Node) | | (ndbd/ndbmtd) | +----------------+ +----------------+ ↑ ↑ | | +----------------+ +----------------+ | Application |---->| Management | ← 配置集群节点(ndb_mgmd) | | | Node | +----------------+ +----------------+ ``` - **Data Nodes**:存储数据,负责数据复制与分片。 - **SQL Nodes (MySQLD)**:处理 SQL 请求,连接应用。 - **Management Node**:管理集群配置、启动、监控。 --- ### ✅ 五、如何获取和部署 MySQL Cluster? #### 方法 1:下载官方包 ```bash # 下载示例(Linux) wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-8.4/mysql-cluster-gpl-8.4.3-linux-glibc2.12-x86_64.tar.gz ``` #### 方法 2:使用 Docker(社区支持) ```bash docker run --name mysql-cluster -d mysql/mysql-cluster:latest ``` #### 方法 3:在云上部署 - AWS、Azure、GCP 上可通过虚拟机手动搭建 - Oracle Cloud 提供集成支持 --- ### ✅ 六、适用场景推荐 ✅ 推荐使用 MySQL Cluster 的场景: - 需要 **99.999% 可用性** 的系统(如通信设备后台) - 高并发写入 + 实时响应(如游戏积分系统) - 数据需要自动分布到多个物理节点 - 对停机零容忍 ❌ 不推荐场景: - 复杂 SQL 查询多(JOIN、子查询) - 数据量小、业务简单 - 成本敏感型项目(运维复杂度较高) --- ### ✅ 七、替代方案对比 | 方案 | 优势 | 缺点 | |------|------|------| | **MySQL InnoDB + MGR** | 易用、SQL 强大 | 写不可扩展 | | **MariaDB Galera Cluster** | 多主写入、兼容性好 | 扩展性有限 | | **Percona XtraDB Cluster** | 类似 Galera,稳定性强 | 同样受限于广播复制机制 | | **TiDB**(兼容 MySQL 协议) | 真正的 HTAP、无限扩展 | 属于 NewSQL,非传统 MySQL 架构 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值