提问者:小点点

MySQL群集复制配置


我正在尝试在两个MySQL集群之间使用单个复制通道设置复制。我已经看了mysql.com的文档几次了,但似乎不能让它正常工作。

我遇到的问题是,对未配置为主服务器的SQL节点进行的查询不会复制NDBCLUSTER表的任何INSERT、UPDATE或DELETE查询,然而,当我在作为主服务器的SQL节点上插入、更新或删除一行时,它会很好地复制到其他集群。

我知道复制是设置的,因为如果我在主集群中的任何SQL节点上运行CREATE DATABASE查询,它将很好地复制到从集群。同样,如果我在任何SQL节点上运行CREATE TABLE查询以在我的新数据库中创建NDBCLUSTER表,它也会很好地复制到从集群。

我阅读文档的方式以及我对集群复制工作的理解是,集群中可以有10个API节点,其中一个节点配置为复制并专用于复制,作为主节点。因此,如果在集群中的10个API节点中的任何一个节点上发生INSERT、UPDATE或DELETE查询,那么复制主节点和NDB binlog将拾取该查询,从而允许从节点进行复制。这似乎对我不起作用。

我的理解正确吗?

下面是我如何设置的:

所有服务器都是运行64位CentOS 6.2和MySQL Cluster 7.2.8x86_64的虚拟机。

群集1(主群集):
1 x ndb_mgmd管理节点(服务器1a-ip:10.14.64.10)
2 x mysqld API节点(服务器1b和1c-ips:10.14.64.11和10.14.64.12)
2 x ndbd数据节点(服务器1d和1e-ips:10.14.64.13和10.14.64.14)

群集2(从群集):
1 x ndb_mgmd管理节点(服务器2a-ip:10.13.64.10)
2 x mysqld API节点(服务器2B和2C-ips:10.13.64.11和10.13.64.12)
2 x ndbd数据节点(服务器2D和2E-ips:10.13.64.13和10.13.64.14)

这里有一张漂亮的图片来帮助解释:
(必须包含一个链接,因为这是我的第一篇文章)

http://cpjon.es/wp-content/uploads/2013/01/mysql-cluster-replication.png

我设置了复制,以便服务器1C是复制主服务器,服务器2C是复制从服务器。

下面是服务器1C(作为主服务器)的/etc/my.cnf文件:

[mysqld]
ndbcluster
ndb-connectstring=10.14.64.10
log-bin
binlog-format=ROW
server-id=10

[mysql_cluster]
ndb-connectstring=10.14.64.10

以下是服务器2C(作为从机)的/etc/my.cnf文件:

[mysqld]
ndbcluster
ndb-connectstring=10.13.64.10
server-id=11

[mysql_cluster]
ndb-connectstring=10.13.64.10

当我运行查询时,创建数据库test_db1;在SQL Server1B或1C上,它会立即复制到集群2,我可以在SQL Server2B和2C上看到数据库test_db1。

当我运行以下CREATE TABLE查询时:

CREATE TABLE `City` (
  `ID` int(11) NOT NULL auto_increment,
  `Name` char(35) NOT NULL default '',
  `CountryCode` char(3) NOT NULL default '',
  `District` char(20) NOT NULL default '',
  `Population` int(11) NOT NULL default '0',
  PRIMARY KEY  (`ID`)
) ENGINE=NDBCLUSTER DEFAULT CHARSET=latin1;

在SQL Server1B或1C上,它会立即复制到集群2,并且我可以在SQL Server2B和2C上看到我新创建的表城市。

但是,问题就在这里--当我在服务器1B上运行以下查询时:

INSERT INTO City VALUES (1,'Melbourne','AUS','Victoria',4100000);

我可以看到集群1中所有SQL节点(即服务器1b和1c)上的条目,但看不到集群2中任何SQL节点(即服务器2b和2c)上的条目。

如果我在服务器1c上运行类似的查询:

INSERT INTO City VALUES (2,'Sydney','AUS','New South Wales',4600000);

我可以在集群1和集群2中的所有SQL节点上看到条目--所以在所有四个SQL节点上--这是我所期望的。

我一定是错过了一些很简单的东西。我已经尝试了关闭这些服务器,并重新启动了很多次--似乎无法得到任何插入,更新或删除查询的服务器1B到我的次要集群。

如果有任何指示或帮助,我们将非常感激(对于冗长的帖子,我很抱歉)

问候你,
克里斯。


共1个答案

匿名用户

在1B上启用binlog。

要启用它,请添加到my.cfg:

log-bin=binlog
binlog-format=ROW