MySQL群集复制配置

时间:2013-01-02 09:02:52

标签: mysql replication cluster-computing database-replication

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

我遇到的问题是,对未配置为Master的SQL节点的查询不会复制NDBCLUSTER表的任何INSERT,UPDATE或DELETE查询,但是当我在INSERT,UPDATE或DELETE上执行作为主节点的SQL节点,它可以很好地复制到其他集群。

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

我阅读文档的方式以及我如何理解群集复制的工作原理是,您的群集中可以有10个API节点,其中一个节点已配置并专用于复制作为主节点。因此,如果在群集中的任何10个API节点上发生INSERT,UPDATE或DELETE查询,则复制主机和NDB binlog将选择此选项,从而允许从属设备进行复制。这对我来说似乎没有用。

我的理解是否正确?

以下是我如何设置的内容:

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

群集1(主群集):
1 x ndb_mgmd管理节点(服务器1A - IP:10.14.64.10)
2个mysqld API节点(服务器1B和1C - IP:10.14.64.11和10.14.64.12)
2个ndbd数据节点(服务器1D和1E - IP:10.14.64.13和10.14.64.14)

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

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

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

我有复制设置,因此Server 1C是Replication Master,Server 2C是Replication Slave。

这是Server 1C(作为MASTER)的/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

这是Server 2C的/etc/my.cnf文件(作为SLAVE):

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

[mysql_cluster]
ndb-connectstring=10.13.64.10

当我在SQL Server 1B或1C上运行查询 CREATE DATABASE test_db1; 时,它会立即复制到Cluster 2,我可以在SQL上看到数据库 test_db1 服务器2B和2C。

当我运行以下 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 Server 1B或1C上,它会立即复制到群集2,我可以在SQL Server 2B和2C上看到我新创建的表 City

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

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

我可以看到群集1中所有SQL节点上的条目(即服务器1B和1C),但是无法在群集2中的任何SQL节点上看到该条目(即服务器2B和2C)。

如果我在 Server 1C 上运行类似的查询:

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

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

我必须遗漏一些非常简单的事情。我已经尝试吹掉这些服务器并重新启动多次 - 并且似乎无法在服务器1B上获得任何INSERT,UPDATE或DELETE查询进入我的辅助集群。

任何指示或协助都会非常感激(对于冗长的帖子感到抱歉)

的问候,
克里斯。

1 个答案:

答案 0 :(得分:0)

在1B上启用binlog。

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

log-bin=binlog
binlog-format=ROW