10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 41.3 mb
PDF (A4)- 41.4 mb
PDF (RPM)- 39.6 mb
HTML下载(TGZ)- 9.3 mb
HTML下载(Zip)- 9.3 mb
HTML下载(RPM)- 7.8 mb
手册页(TGZ)- 260.7 kb
手册页(Zip)- 372.0 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

23.5.7.3在线添加NDB集群数据节点:详细示例

在本节中,我们将提供一个详细的示例,说明如何在线添加新的NDB集群数据节点,首先是在单个节点组中有2个数据节点的NDB集群,最后是在2个节点组中有4个数据节点的集群。

开始配置。为了便于说明,我们假设一个最小配置,并且集群使用config.ini只包含以下信息的文件:

[ndbd default] DataMemory = 100M IndexMemory = 100M NoOfReplicas =2 DataDir = /usr/local/mysql/var/mysql-cluster [ndbd] Id= 1 HostName = 198.51.100.1 [ndbd] Id=2 HostName = 198.51.100.2 [mgm] HostName = 198.51.100.10 Id= 10 [api] Id=20 HostName = 198.51.100.20 [api] Id=21 HostName = 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.26-ndb-8.0.26节点组:0 *)id = 2 @198.51.100.2 (8.0.26-ndb-8.0.26节点组:0)[ndb_mgmd (MGM)] 1节点(s) id = 10 @198.51.100.10 (8.0.26-ndb-8.0.26) (mysqld (API)] 2节点(s) id = 20 @198.51.100.20 (8.0.26-ndb-8.0.26) id = 21 @198.51.100.21 (8.0.26-ndb-8.0.26)

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

使用n;创建表ips (id BIGINT NOT NULL AUTO_INCREMENT主键,country_code CHAR(2) NOT NULL,类型CHAR(4) NOT NULL, ip_address VARCHAR(15) NOT NULL,地址BIGINT UNSIGNED DEFAULT NULL,日期BIGINT UNSIGNED DEFAULT NULL)引擎NDBCLUSTER;

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

请注意

在本例中,我们将展示单线程ndbd用于数据节点进程。如果您正在使用多线程,也可以应用此示例ndbmtdndbmtdndbd在接下来的步骤中出现。

步骤1:更新配置文件在文本编辑器中打开集群全局配置文件并添加(ndbd)对应于2个新数据节点的节。(我们赋予这些数据节点id 3和4,并假设它们将分别在地址为198.51.100.3和198.51.100.4的主机上运行。)类的内容在添加了新节之后config.ini文件应该像这里显示的那样,其中文件的附加内容以粗体显示:

[ndbd default] DataMemory = 100M IndexMemory = 100M NoOfReplicas =2 DataDir = /usr/local/mysql/var/mysql-cluster [ndbd] Id= 1 HostName = 198.51.100.1 [ndbd] Id=2 HostName = 198.51.100.2 [ndbd] Id= 3 HostName = 198.51.100.3 [ndbd] Id= 4 HostName = 198.51.100.4 [mgm] HostName = 198.51.100.10 Id= 10 [api] Id=20 HostName = 198.51.100.20 [api] Id=21 HostName = 198.51.100.21

完成必要的更改后,保存文件。

步骤2:重启管理服务器。重新启动集群管理服务器需要您发出单独的命令来停止管理服务器,然后再次启动它,如下所示:

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

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

    shell> ndb_mgmd -f config.ini——reload 2008-12-08 17:29:23 [MgmSrvr] INFO——NDB Cluster Management Server. 8.0.26-ndb-8.0.26 2008-12-08 17:29:23 [MgmSrvr] INFO——从'config.ini'读取集群配置

的输出显示在管理客户端中重新启动ndb_mgm进程,你现在应该看到如下内容:

——NDB Cluster——Management Client——ndb_mgm> SHOW Connected to Management Server at: 198.51.100.10:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=1 @198.51.100.1 (8.0.26-ndb-8.0.26, Nodegroup: 0, *) id=2 @198.51.100.2 (8.0.26-ndb-8.0.26, Nodegroup: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.26- db-8.0.26) [mysqld(API)] 2节点(s) id=20 @198.51.100.20 (8.0.26- db-8.0.26) id=21 @198.51.100.21 (8.0.26- db-8.0.26)

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

ndb_mgm> 1 RESTART节点1:节点shutdown started节点1:节点shutdown completed, RESTART, no start。Node 1 is being RESTART ndb_mgm> Node 1: Start initiated (version 8.0.26) Node 1: Started (version 8.0.26) ndb_mgm> 2 RESTART Node 2: Node shutdown Started Node 2: Node shutdown completed, RESTART, no Start。节点2正在重新启动ndb_mgm>节点2:启动(版本8.0.26)
重要的

发行后X重新启动命令,等待管理客户端上报节点X: Started (version…)之前继续进行。

属性可以验证所有现有数据节点是否已使用更新后的配置重新启动ndbinfo.nodes表中的mysql客户端。

步骤4:执行所有集群API节点的滚动重启。关闭并重新启动作为集群中SQL节点的每个MySQL服务器mysqladmin关闭紧随其后的是mysqld_safe(或其他启动脚本)。这应该类似于这里显示的密码是MySQLMySQL服务器实例的密码:

Shell > mysqladmin -uroot -p密码mysqld_safe mysqld from pid file /usr/local/mysql/var/tonfisk.pid结束shell> mysqld_safe——ndbcluster——ndb-connectstring=198.51.100.10 & 081208 20:20:06 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'mysqld_safe从/usr/local/mysql/var启动mysqld守护进程

当然,确切的输入和输出取决于MySQL在系统上的安装方式和位置,以及选择哪些选项来启动它(以及是否在数据库中指定了部分或全部这些选项)my.cnf文件)。

步骤5:执行新数据节点的初始启动。从新数据节点的每个主机上的系统shell启动数据节点,如图所示,使用——初始选择:

Shell > NDBD -c 198.51.100.10——初始化
请注意

与重新启动现有数据节点不同,您可以并发地启动新的数据节点;在启动另一个之前,您不需要等待其中一个完成启动。

等待两个新的数据节点都启动后再继续下一步.一旦启动了新的数据节点,您可以在管理客户机的输出中看到显示命令它们还不属于任何节点组(如粗体所示):

ndb_mgm> SHOW Connected to Management Server at: 198.51.100.10:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=1 @198.51.100.1 (8.0.26-ndb-8.0.26, Nodegroup: 0, *) id=2 @198.51.100.2 (8.0.26-ndb-8.0.26, Nodegroup:0) id=3 @198.51.100.3 (8.0.26- db-8.0.26, no nodegroup) id=4 @198.51.100.4 (8.0.26- db-8.0.26, no nodegroup) [ndb_mgmd(MGM)] 1 node(s) id=10 @198.51.100.10 (8.0.26- db-8.0.26) [mysqld(API)] 2 node(s) id=20 @198.51.100.20 (8.0.26- db-8.0.26) id=21 @198.51.100.21 (8.0.26- db-8.0.26)

步骤6:创建新的节点组。您可以通过发出创建节点组命令。该命令以逗号分隔的数据节点id列表作为参数,这些节点id将包含在新节点组中,如下所示:

ndb_mgm> CREATE NODEGROUP 3,4已创建NODEGROUP 1

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

ndb_mgm> SHOW Connected to Management Server at: 198.51.100.10:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=1 @198.51.100.1 (8.0.26-ndb-8.0.26, Nodegroup: 0, *) id=2 @198.51.100.2 (8.0.26-ndb-8.0.26, Nodegroup: 0) id=3 @198.51.100.3 (8.0.26-ndb-8.0.26, Nodegroup: 1) id=4 @198.51.100.4 (8.0.26-ndb-8.0.26, Nodegroup: 1)1) [ndb_mgmd (MGM)] 1节点(s) id = 10 @198.51.100.10 (8.0.26-ndb-8.0.26) (mysqld (API)] 2节点(s) id = 20 @198.51.100.20 (8.0.26-ndb-8.0.26) id = 21 @198.51.100.21 (8.0.26-ndb-8.0.26)

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

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个分区(在每个分区信息部分输出,在这里以粗体显示):

shell> ndb_desc -c 198.51.100.10 -d n ips -p——ips——版本:1分片类型:9 K取值:6最小负载因子:78最大负载因子:80临时表:no属性个数:6主键个数:1 frm数据长度:340 Row Checksum: 1 Row GCI: 1 SingleUserMode: 0 ForceVarPart: 1 FragmentCount: 2 TableStatus:检索——属性——id Bigint主键分布键AT=FIXED ST=MEMORY AUTO_INCR country_code Char(2;latin1_swedish_ci) NOT NULL AT=FIXED ST=MEMORY类型Char(4;latin1_swedish_ci) NOT NULL AT=SHORT_VAR ST=MEMORY地址Bigunsigned NULL AT=FIXED ST=MEMORY日期Bigunsigned NULL AT=FIXED ST=MEMORY——Indexes——PRIMARY KEY(id) - UniqueHashIndex PRIMARY(id) - OrderedIndex——Per partition info——partition Row countCommit count Frag fixed memory Frag varsized memory 0 26086 26086 1572864 557056 1 26329 26329 1605632 557056 NDBT_ProgramExit: 0 - OK

您可以通过执行,在所有数据节点之间重新分配数据NDB表,一个修改表…算法= inplace,重新组织分区声明mysql客户端。

重要的

修改表…算法= inplace,重新组织分区对使用?创建的表无效MAX_ROWS选择。相反,使用修改表…算法=原地,MAX_ROWS =…重新组织这样的表

记住使用MAX_ROWS不建议设置每个表的分区数,您应该使用PARTITION_BALANCE相反;看到章节13.1.20.11“设置NDB_TABLE选项”,以获取更多资料。

发表声明后修改表ips算法=INPLACE,重新组织分区,你可以看到使用ndb_desc该表的数据现在使用4个分区存储,如图所示(输出的相关部分以粗体显示):

shell> ndb_desc -c 198.51.100.10 -d n ips -p——ips——Version: 16777217 Fragment type: 9k取值:6 Min load factor: 78 Max load factor: 80临时表:no属性个数:6 primary key个数:1 frm data长度:341 Row Checksum: 1 Row GCI: 1 SingleUserMode: 0 ForceVarPart: 1 FragmentCount: 4 TableStatus:检索——属性——id Bigint主键分布键AT=FIXED ST=MEMORY AUTO_INCR country_code Char(2;latin1_swedish_ci) NOT NULL AT=FIXED ST=MEMORY类型Char(4;latin1_swedish_ci) NOT NULL AT=SHORT_VAR ST=MEMORY地址Bigunsigned NULL AT=FIXED ST=MEMORY日期Bigunsigned NULL AT=FIXED ST=MEMORY——Indexes——PRIMARY KEY(id) - UniqueHashIndex PRIMARY(id) - OrderedIndex——Per partition info——partition Row countCommit count Frag fixed memory Frag varsized memory 0 12981 52296 1572864 557056 1 13236 52515 1605632 557056 2 13105 13105 819200 294912 3 13093 13093 819200 294912 NDBT_ProgramExit: 0 - OK
请注意

通常情况下,ALTER TABLEtable_name[algorithm = inplace,]重组分区与一组分区标识符和一组分区定义一起使用,为已经显式分区的表创建新的分区方案。在这方面,使用它将数据重新分布到新的NDB集群节点组是一个例外;当以这种方式使用时,没有其他关键字或标识符跟随重组分区

有关更多信息,请参见第13.1.9节“ALTER TABLE语句”

此外,对于每个表,ALTER TABLE语句后面应该跟着优化表回收浪费的空间。您可以获得所有的列表NDBCLUSTER表中使用以下查询INFORMATION_SCHEMA。表表:

从information_schema中选择table_schema, table_name。表engine = ' ndbcluster ';
请注意

INFORMATION_SCHEMA.TABLES.ENGINENDB集群表的值为alwaysNDBCLUSTER,不论是否创建表语句用于创建表(或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表可以一次执行,您必须等待每个表修改表…重组分区语句,然后再发布下一个语句。

没有必要发行修改表…重组分区语句NDBCLUSTER表创建已经添加了新的数据节点;添加到这些表中的数据会自动分布到所有数据节点中。然而,在NDBCLUSTER已经存在的表之前在添加新节点时,现有数据和新数据都不会使用新节点分布,直到使用重新组织这些表修改表…重组分区

替代程序,无需滚动重启。通过配置额外的数据节点,而不是在第一次启动集群时启动它们,可以避免滚动重新启动的需要。和前面一样,我们假设您希望从一个节点组中的两个数据节点(节点1和2)开始,然后通过添加由节点3和4组成的第二个节点组,将集群扩展到四个数据节点:

[ndbd default] DataMemory = 100M IndexMemory = 100M NoOfReplicas =2 DataDir = /usr/local/mysql/var/mysql-cluster [ndbd] Id= 1 HostName = 198.51.100.1 [ndbd] Id=2 HostName = 198.51.100.2 [ndbd] Id= 3 HostName = 198.51.100.3 Nodegroup = 65536 [ndbd] Id= 4 HostName = 198.51.100.4 Nodegroup = 65536 [mgm] HostName = 198.51.100.10 Id= 10 [api] Id=20 HostName = 198.51.100.20 [api] Id=21 HostName = 198.51.100.21

可以配置稍后上线的数据节点(节点3和节点4)NodeGroup = 65536,此时节点1和节点2都可以启动,如下图所示:

Shell > NDBD -c 198.51.100.10——初始化

配置的数据节点NodeGroup = 65536是否被管理服务器视为您已经使用——nowait-nodes = 3, 4等待一段时间后确定为设置StartNoNodeGroupTimeout数据节点配置参数。缺省情况下,这是15秒(15000毫秒)。

请注意

StartNoNodegroupTimeout集群中的所有数据节点必须相同;出于这个原因,您应该始终将其设置在(ndbd违约)部份config.ini文件,而不是单独的数据节点。

当您准备好添加第二个节点组时,您只需要执行以下附加步骤即可:

  1. 启动数据节点3和4,为每个新节点调用一次数据节点进程:

    Shell > NDBD -c 198.51.100.10——初始化
  2. 发出适当的创建节点组管理客户端命令:

    ndb_mgm>创建NODEGROUP 3,4 .使用实例
  3. mysql客户,问题修改表…重组分区而且优化表每个现有的语句NDBCLUSTER表格(如本节其他地方所述,现有的NDB集群表不能使用新节点进行数据分发,直到完成此操作。)