10bet网址
MySQL集群NDB 8.0
相关的文档10bet官方网站 下载这个摘录
PDF (Ltr)- 4.6 mb
PDF (A4)- 4.6 mb


MySQL集群NDB 8.0// 添加NDB集群数据节点在线:详细的例子

6.7.3添加NDB集群数据节点在线:详细的例子

在本节中,我们提供了一个详细的例子说明如何添加新的集群NDB在线数据节点,从一个NDB集群有两个数据节点在一个集群节点组和结论中有4个数据节点2节点组。

开始配置。出于演示的目的,我们假设最小配置集群使用一个config.ini文件只包含以下信息:

[ndbd违约]DataMemory = 100 IndexMemory = 100 NoOfReplicas = 2 DataDir = /usr/local/mysql/var/mysql-cluster [ndbd] Id = 1主机名= 198.51.100.1 [ndbd] Id = 2主机名= 198.51.100.2 (mgm)主机名= 198.51.100.10 Id = 10 (api) Id = 20主机名= 198.51.100.20 (api) Id = 21 = 198.51.100.21主机名
请注意

我们已经留下了一个缺口数据节点id和其他节点之间的序列。这个以后更容易分配节点id不已经在使用新添加的数据节点。

我们还假设您已经开始使用适当的命令行或集群my.cnf选项,运行显示在管理客户端产生的输出所示:

——NDB集群管理客户机——ndb_mgm >显示连接到管理服务器:198.51.100.10:1186集群配置- - - - - - - - - - - - - - - - - - - - - - - - [ndbd (NDB)] 2节点(s) id = 1 @198.51.100.1 (8.0.32-ndb-8.0.32节点组:0 *)id = 2 @198.51.100.2 (8.0.32-ndb-8.0.32节点组:0)[ndb_mgmd (MGM)] 1节点(s) id = 10 @198.51.100.10 (8.0.32-ndb-8.0.32) (mysqld (API)] 2节点(s) id = 20 @198.51.100.20 (8.0.32-ndb-8.0.32) id = 21 @198.51.100.21 (8.0.32-ndb-8.0.32)

最后,我们假设集群包含一个NDBCLUSTER表创建如下所示:

使用n;创建表ips (id BIGINT NOT NULL AUTO_INCREMENT主键,country_code CHAR (2) NOT NULL, CHAR类型(4)NOT NULL, ip_address VARCHAR(15)不是NULL, BIGINT无符号地址默认为空,日期BIGINT UNSIGNED默认空)引擎NDBCLUSTER;

显示的内存使用情况和相关信息后在本节中生成大约50000行插入该表。

请注意

在这个例子中,我们显示了单线程ndbd被用于数据节点的过程。你也可以应用这个例子中,如果你是使用多线程ndbmtdndbmtdndbd无论它出现在下面的步骤。

步骤1:更新配置文件。在文本编辑器中打开集群全局配置文件并添加(ndbd)部分对应的2新数据节点。(我们给这些数据节点id 3和4,并假设他们是运行在主机地址198.51.100.3 198.51.100.4,分别)。增加了新的章节,之后的内容config.ini文件看起来应该是什么所示,添加到文件粗体所示:

[ndbd违约]DataMemory = 100 IndexMemory = 100 NoOfReplicas = 2 DataDir = /usr/local/mysql/var/mysql-cluster [ndbd] Id = 1主机名= 198.51.100.1 [ndbd] Id = 2主机名= 198.51.100.2 [ndbd] Id = 3主机名= 198.51.100.3 [ndbd] Id = 4主机名= 198.51.100.4 (mgm)主机名= 198.51.100.10 Id = 10 (api) Id = 20主机名= 198.51.100.20 (api) Id = 21 = 198.51.100.21主机名

一旦你做了必要的修改,保存文件。

第二步:重新启动管理服务器。重新启动集群管理服务器要求您发出单独的命令停止管理服务器,然后再开始,如下:

  1. 停止管理服务器使用管理客户端停止命令,如下所示:

    ndb_mgm > 10停止节点已经关闭了。断开允许管理服务器关闭$ >
  2. 因为关闭管理服务器管理客户端将会被终止,你必须从系统启动管理服务器层。为简单起见,我们假设config.ini在管理服务器二进制文件相同的目录中,但在实践中,您必须提供正确的配置文件路径。您还必须提供——重新加载——初始选项,以便管理服务器读取新配置文件而不是其配置缓存。如果您的shell的当前目录也是一样的目录管理服务器的二进制文件的位置,然后你可以调用管理服务器如下所示:

    $ > ndb_mgmd - f配置。ini——重载2008-12-08 17:29:23 MgmSrvr信息——NDB集群管理服务器。8.0.32-ndb-8.0.32 2008-12-08 17:29:23 [MgmSrvr]信息——从“config.ini”阅读集群配置

如果你检查的输出显示在管理客户端重新启动之后ndb_mgm过程中,您现在应该看到这样的:

——NDB集群管理客户机——ndb_mgm >显示连接到管理服务器:198.51.100.10:1186集群配置- - - - - - - - - - - - - - - - - - - - - - - - [ndbd (NDB)] 2节点(s) id = 1 @198.51.100.1 (8.0.32-ndb-8.0.32节点组:0 *)id = 2 @198.51.100.2 (8.0.32-ndb-8.0.32节点组:0)id = 3(未连接,接受连接从198.51.100.3)id = 4(没有连接,接受连接从198.51.100.4)[ndb_mgmd (MGM)] 1节点(s) id = 10 @198.51.100.10 (8.0.32-ndb-8.0.32) (mysqld (API)] 20 (s) 2节点id = @198.51.100.20 (8.0.32-ndb-8.0.32) id = 21 @198.51.100.21 (8.0.32-ndb-8.0.32)

步骤3:执行滚动重启的现有数据节点。这一步可以实现完全在集群管理客户端使用重新启动命令,如下所示:

ndb_mgm > 1重启节点1:节点关闭启动节点1:节点关闭完成后,重新启动,没有开始。正在重新启动节点1 ndb_mgm >节点1:开始启动(版本8.0.32)节点1:开始(版本8.0.32)ndb_mgm > 2重启节点2:节点关闭启动节点2:节点关闭完成后,重新启动,没有开始。正在重新启动节点2 ndb_mgm >节点2:开始启动(版本8.0.32)ndb_mgm >节点2:开始(8.0.32版)
重要的

之后,每X重新启动命令,等到管理客户端报告节点X:开始(版本…)之前进行任何进一步的。

您可以验证所有现有数据节点重新启动使用更新后的配置通过检查ndbinfo.nodes表中mysql客户端。

第四步:执行滚动重启所有集群API的节点。关闭并重新启动每个MySQL服务器作为一个SQL节点集群中使用mysqladmin关闭紧随其后的是mysqld_safe(或另一个启动脚本)。这应该是类似于所示是什么,在哪里密码是MySQL密码对于一个给定的MySQL服务器实例:

$ > mysqladmin -uroot - p密码081208年关闭20:19:56 mysqld_safe mysqld /usr/local/mysql/var/tonfisk.从pid文件pid结束美元> mysqld_safe——ndbcluster ndb-connectstring = 198.51.100.10 & 081208 20:20:06 mysqld_safe日志记录的/ usr /地方/ mysql / var / tonfisk.err’。081208年20:20:06 mysqld_safe开始从/usr/local/mysql/var mysqld守护进程与数据库

当然,准确的输入和输出取决于和MySQL安装在系统,以及你选择哪个选项启动它(是否部分或全部这些选项中指定my.cnf文件)。

第五步:执行一个新数据的初始启动节点。从一个系统的每个主机上壳新数据节点,启动数据节点如下所示,使用——初始选择:

$ > ndbd - c 198.51.100.10——最初的
请注意

与现有数据节点重启的情况不同,你可以开始新的数据节点并发;你不需要等待一个开始前完成开始另一个。

等到两个新的数据节点之前已经开始继续进行下一步。一旦新数据节点开始,你可以看到在管理的输出端显示命令,他们还不属于任何节点组(与粗体显示):

ndb_mgm >显示连接到管理服务器:198.51.100.10:1186集群配置- - - - - - - - - - - - - - - - - - - - - - - - [ndbd (NDB)] 2节点(s) id = 1 @198.51.100.1 (8.0.32-ndb-8.0.32节点组:0 *)id = 2 @198.51.100.2 (8.0.32-ndb-8.0.32节点组:0)id = 3 @198.51.100.3 (8.0.32-ndb-8.0.32,没有节点组)id = 4 @198.51.100.4 (8.0.32-ndb-8.0.32,没有节点组)[ndb_mgmd (MGM)] 1节点(s) id = 10 @198.51.100.10 (8.0.32-ndb-8.0.32) (mysqld (API)] 2节点(s) id = 20 @198.51.100.20 (8.0.32-ndb-8.0.32) id = 21 @198.51.100.21 (8.0.32-ndb-8.0.32)

步骤6:创建一个新节点组。你可以通过发行创建节点组命令在集群管理客户端。这个命令需要作为它的参数一个以逗号分隔的数据节点的节点id包含在新的节点组,如下所示:

ndb_mgm >创建节点组3、4节点组1创建的

通过发行显示同样,您可以验证数据节点3和4加入新节点组(再次表示以粗体显示):

ndb_mgm >显示连接到管理服务器:198.51.100.10:1186集群配置- - - - - - - - - - - - - - - - - - - - - - - - [ndbd (NDB)] 2节点(s) id = 1 @198.51.100.1 (8.0.32-ndb-8.0.32节点组:0 *)id = 2 @198.51.100.2 (8.0.32-ndb-8.0.32节点组:0)id = 3 @198.51.100.3 (8.0.32-ndb-8.0.32,节点组:1)id = 4 @198.51.100.4 (8.0.32-ndb-8.0.32节点组:1)[ndb_mgmd (MGM)] 1节点(s) id = 10 @198.51.100.10 (8.0.32-ndb-8.0.32) (mysqld (API)] 2节点(s) id = 20 @198.51.100.20 (8.0.32-ndb-8.0.32) id = 21 @198.51.100.21 (8.0.32-ndb-8.0.32)

第七步:重新分配集群数据。当创建一个节点组,现有的数据和索引不会自动分发到新节点组的数据节点,可以看到通过发出适当的报告命令在管理客户端:

ndb_mgm >所有报告内存节点1:数据使用率是5%(总3200)的177个32 k页面节点1:索引使用是0% (108 8 k页面的总12832)节点2:数据使用的是5%(总3200)的177个32 k页面节点2:索引使用是0% (108 8 k页面的总12832)节点3:数据使用的是0% (0 32 k页面总数的3200)节点3:索引使用0% (0 8 k页面总数的12832)节点4:数据使用的是0% (0 32 k页面总数的3200)节点4:索引使用0% (0 8 k页面总数的12832)

通过使用ndb_desc- p选项,这导致输出包括分区信息,您可以看到,仍然只使用2分区(表每个分区信息粗体文本显示部分的输出,如图所示):

$ > ndb_desc - c 198.51.100.10 - d n ips - p - ips -版本:1片段类型:9 K值:6分钟负载因素:78 Max负载因素:80临时表:没有数量的属性:6主键的数量:1纳数据长度:340行校验和:1行GCI: 1 SingleUserMode: 0 ForceVarPart: 1 FragmentCount: 2 TableStatus:检索——属性——id Bigint主键分布键在圣= =固定内存AUTO_INCR country_code Char (2; latin1_swedish_ci) NOT NULL =固定圣=内存类型字符(4;latin1_swedish_ci) NOT NULL =固定圣=记忆ip_address Varchar (15; latin1_swedish_ci) NOT NULL = SHORT_VAR圣=内存地址Bigunsigned NULL =固定圣圣= =内存日期Bigunsigned NULL =固定内存索引,主键(id) - UniqueHashIndex初级(id) - OrderedIndex——每个分区信息——分区行数提交数固定内存碎片弹碎片弹varsized内存0 26086 26086 1572864 557056 26329 26329 1572864 557056 NDBT_ProgramExit: 0 -好的

你可以导致数据被执行的所有数据节点之间重新分配,为每一个NDB表,一个ALTER TABLE……算法=原地,重组分区声明mysql客户端。

重要的

ALTER TABLE……算法=原地,重组分区不创建工作表的吗MAX_ROWS选择。相反,使用ALTER TABLE……算法=原地,MAX_ROWS =…重组这样的表。

请记住,使用MAX_ROWS设置每个表的分区数弃用,你应该使用PARTITION_BALANCE相反;看到设置NDB评论选项为更多的信息。

后发布的声明ALTER TABLE ips算法=原地,重组分区中,您可以看到使用ndb_desc现在这个表的数据是使用4存储分区,如下所示(相关部分的输出以粗体显示):

$ > ndb_desc - c 198.51.100.10 - d n ips - p - ips -版本:16777217片段类型:9 K值:6分钟负载因素:78 Max负载因素:80临时表:没有数量的属性:6主键的数量:1纳数据长度:341行校验和:1行GCI: 1 SingleUserMode: 0 ForceVarPart: 1 FragmentCount: 4 TableStatus:检索——属性——id Bigint主键分布键在圣= =固定内存AUTO_INCR country_code Char (2; latin1_swedish_ci) NOT NULL =固定圣=内存类型字符(4;latin1_swedish_ci) NOT NULL =固定圣=记忆ip_address Varchar (15; latin1_swedish_ci) NOT NULL = SHORT_VAR圣=内存地址Bigunsigned NULL =固定圣圣= =内存日期Bigunsigned NULL =固定内存索引,主键(id) - UniqueHashIndex初级(id) - OrderedIndex——每个分区信息——分区行数提交数固定内存碎片弹碎片弹varsized记忆0 12981 52296 1572864 557056 13236 52515 1605632 557056 13105 13105 819200 294912 13093 13093 819200 294912 NDBT_ProgramExit: 0 -好的
请注意

通常情况下,ALTER TABLEtable_name算法=原地,重组分区是使用分区标识符和一组分区的列表定义为表创建一个新的分区方案已经明确分区。使用它来重新分配数据到一个新的NDB集群节点组在这方面是个例外;以这种方式使用时,没有其他关键字或标识符重组分区

有关更多信息,请参见ALTER TABLE语句

此外,对于每个表,ALTER TABLE声明应遵循的优化表回收浪费空间。您可以获得所有的列表NDBCLUSTER使用以下查询表格INFORMATION_SCHEMA.TABLES表:

选择TABLE_SCHEMA TABLE_NAME INFORMATION_SCHEMA。表在引擎=“NDBCLUSTER”;
请注意

INFORMATION_SCHEMA.TABLES.ENGINE值表总是一个NDB集群NDBCLUSTER,不管创建表(或语句用于创建表ALTER TABLE语句用于将一个现有表从一个使用不同的存储引擎)NDBNDBCLUSTER在其引擎选择。

你可以看到在执行这些语句的输出所有报告内存数据和索引现在所有集群数据节点之间的重新分配,如下所示:

ndb_mgm >所有报告内存节点1:数据使用率是5%(总3200)的176个32 k页面节点1:索引使用是0% (76 8 k页面的总12832)节点2:数据使用的是5%(总3200)的176个32 k页面节点2:索引使用是0% (76 8 k页面的总12832)节点3:数据使用的是2%(总3200)的80个32 k页面节点3:索引使用0% (51 8 k页面总数的12832)节点4:数据使用的是2%(总3200)的80个32 k页面节点4:索引使用0% (8 k页面总数的12832)
请注意

因为只有一个DDL操作NDBCLUSTER表可以执行一次,你必须等待ALTER TABLE……重组分区声明发布下一个之前完成。

没有必要的问题ALTER TABLE……重组分区语句NDBCLUSTER表创建添加了新的数据节点;数据添加到表分布在所有自动数据节点。然而,在NDBCLUSTER表存在之前添加新的节点,现有和新数据分布式使用新的节点,直到这些表已重新使用ALTER TABLE……重组分区

替代过程,没有重启。可以避免需要滚动重启配置额外的数据节点,而不是从他们开始,当第一次启动集群。像之前一样,我们假设您希望从两个数据nodes-nodes 1和那一个集群节点组,后来扩大到四个数据节点,通过添加第二个节点组组成的节点3和4:

[ndbd违约]DataMemory = 100 IndexMemory = 100 NoOfReplicas = 2 DataDir = /usr/local/mysql/var/mysql-cluster [ndbd] Id = 1主机名= 198.51.100.1 [ndbd] Id = 2主机名= 198.51.100.2 [ndbd] Id = 3主机名= 198.51.100.3节点组= 65536 (ndbd) Id = 4主机名= 198.51.100.4节点组= 65536 (mgm)主机名= 198.51.100.10 Id = 10 (api) Id = 20主机名= 198.51.100.20 (api) Id = 21 = 198.51.100.21主机名

在线数据节点将在稍后的时间(节点3和4)可以配置节点组= 65536,在这种情况下,节点1和2都可以开始如下所示:

$ > ndbd - c 198.51.100.10——最初的

数据节点配置节点组= 65536被管理服务器,好像你已经开始节点1和2使用吗——nowait-nodes = 3, 4等待一段时间后由设置的StartNoNodeGroupTimeout数据节点配置参数。默认情况下,这是15秒(15000毫秒)。

请注意

StartNoNodegroupTimeout必须是相同的集群中的所有数据节点;出于这个原因,你应该把它的(ndbd违约)部分的config.ini文件,而不是为个人数据节点。

当您已经准备好添加第二个节点组,您只需要执行以下额外的步骤:

  1. 开始数据节点3和4,调用数据节点流程一旦为每个新节点:

    $ > ndbd - c 198.51.100.10——最初的
  2. 相应的问题创建节点组命令在管理客户端:

    ndb_mgm >创建节点组3、4
  3. mysql客户,问题ALTER TABLE……重组分区优化表为每个现有的语句NDBCLUSTER表。(如上所述其他地方在这一节中,现有NDB集群表不能使用数据分布的新节点,直到这个已经完成。)