18.5.13.3 在线增加 MySQL Cluster 数据节点: 详细例子
18.5.13.3 在线增加 MySQL Cluster 数据节点: 详细例子
liangkiller 发表于3年前
18.5.13.3 在线增加 MySQL Cluster 数据节点: 详细例子
  • 发表于 3年前
  • 阅读 28
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: MySQL Cluster 新增数据节点的操作。翻译自5.6的18.5.13.3

18.5.13.3 在线增加 MySQL Cluster 数据节点: 详细例子
https://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-online-add-node-example.html

MySQL Cluster开始有1个组2个节点,增加到2个组4个节点。

开始的配置

[ndbd default]
DataMemory = 100M
IndexMemory = 100M
NoOfReplicas = 2
DataDir = /usr/local/mysql/var/mysql-cluster

[ndbd]
Id = 1
Hostname = x.1

[ndbd]
Id = 2
Hostname = x.2

[ndb_mgmd]
Id = 10
Hostname = x.10

[mysqld]
Id = 20
Hostname = x.20

[mysqld]
Id = 21
Hostname = x.21

在数据节点ID段和其他节点ID段留下一段空白。为新加节点留下空间。
x 表示:192.168.0


Step 1: 修改config.ini

[ndbd default]
DataMemory = 100M
IndexMemory = 100M
NoOfReplicas = 2
DataDir = /usr/local/mysql/var/mysql-cluster

[ndbd]
Id = 1
Hostname = x.1

[ndbd]
Id = 2
Hostname = x.2

[ndbd]
Id = 3
Hostname = x.3

[ndbd]
Id = 4
Hostname = x.4

[ndb_mgmd]
Id = 10
Hostname = x.10

[mysqld]
Id = 20
Hostname = x.20

[mysqld]
Id = 21
Hostname = x.21


Step 2:重启管理节点

(1)使用管理客户端停止管理节点

ndb_mgm> 10 STOP


(2) 从shell启动管理节点。使用--reload或--initial选项来重载配置文件。

shell> ndb_mgmd -f config.ini --reload


Step 3:滚动重启现有的数据节点

ndb_mgm> 1 RESTART
ndb_mgm> 2 RESTART


可以通过检查ndbinfo.nodes表来查看数据节点是否使用新的配置。

Step 4:滚动重启API节点

shell> mysqladmin shutdown
shell> mysqld_safe --ndbcluster --ndb-connectstring=x.10 &


Step 5:使用--initial启动新的数据节点

shell> ndbd -c x.10 --initial


不同于重启已存在的数据节点要等待一个数据节点启动好,可以并行启动新数据节点。

查看新节点是否启动好

ndb_mgm> SHOW


Step 6:创建节点组,使用CREATE NODEGROUP,参数是数据节点ID

ndb_mgm> CREATE NODEGROUP 3,4
ndb_mgm> SHOW


Step 7:重分配集群数据
当创建一个新节点组时,现有的数据和索引不会自动分配到新的节点组数据节点

ndb_mgm> ALL REPORT MEMORY


使用ndb_desc查看分区信息。查看ips表的情况

shell> ndb_desc -c x.10 -d n ips -p


可以在mysqld里运行ALTER ONLINE TABLE table_name  REORGANIZE PARTITION 语句来重分配数据。

另外,对每一张,ALTER ONLINE TABLE 语句要跟着OPTIMIZE TABLE 回收浪费的空间。可以从INFORMATION_SCHEMA.TABLES里获取所有NDBCLUSTER的表。

SELECT TABLE_SCHEMA,TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE='NDBCLUSTER';

NDBCLUSTER只有DDL操作能一次执行。必须等一个ALTER ONLINE TABLE ... REORGANIZE PARTITION 语句运行完才能运行下一个。

在新数据节点增加好后,新创建的表就不用ALTER ONLINE TABLE ...REORGANIZE PARTITION,会自动分发到所有节点。然后,之前的表如果没有ALTER ONLINE TABLE ... REORGANIZE PARTITION ,添加的新数据也不会分发到新数据节点。

可选过程,不用滚动重启

在配置时就先定义好节点组,但不使用。

[ndbd default]
DataMemory = 100M
IndexMemory = 100M
NoOfReplicas = 2
DataDir = /var/lib/mysql/
[ndbd]
Id = 1
Hostname = x.1
[ndbd]
Id = 2
Hostname = x.2
[ndbd]
Id = 3
Hostname = x.3
Nodegroup = 65536
[ndbd]
Id = 4
Hostname = x.4
Nodegroup = 65536
[ndb_mgmd]
Id = 10
Hostname = x.10
[mysqld]
Id = 20
Hostname = x.20
[mysqld]
Id = 21
Hostname = x.21

稍后上线的node 3,4可以配置为NodeGroup = 65536,node1,2启动

shell> ndbd -c 192.168.0.10 --initial

在管理节点配置NodeGroup=65536的数据节点就像 等待StartNoNodeGroupTimeout时间(默认15秒)后使用--nowait-nodes=3,4启动node1,2。

当想要增加第二节点组时,只需进行以下操作:

1 启动数据节点3,4

shell> ndbd -c 192.168.0.10 --initial


2 在管理节点使用CREATE NODEGROUP

ndb_mgm> CREATE NODEGROUP 3,4


3 在MYSQLD,为NDBCLUSTER表使用ALTER ONLINE TABLE ... REORGANIZE PARTITIION 和 OPTIMIZE TABLE 语句。


共有 人打赏支持
粉丝 0
博文 1
码字总数 862
×
liangkiller
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: