1

我正在尝试使用两个 MySQL 集群之间的单个复制通道来设置复制。我已经多次关注 mysql.com 的文档,但似乎无法使其正常工作。

我遇到的问题是对未配置为 Master 的 SQL 节点进行的查询不会复制 NDBCLUSTER 表的任何 INSERT、UPDATE 或 DELETE 查询,但是当我在 SQL 节点上插入、更新或删除一行时是主节点,它可以很好地复制到另一个集群。

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

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

我的理解正确吗?

以下是我的设置方式:

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

集群 1(主集群):
1 x ndb_mgmd 管理节点(服务器 1A - IP:10.14.64.10)
2 x mysqld API 节点(服务器 1B 和 1C - IP:10.14.64.11 和 10.14.64.12)
2 x ndbd 数据节点(服务器1D 和 1E - IP: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 - IP:10.13.64.11 和 10.13.64.12)
2 x ndbd 数据节点(服务器2D 和 2E - IP:10.13.64.13 和 10.13.64.14)

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

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

我有复制设置,因此服务器 1C 是复制主机,服务器 2C 是复制从机。

这是服务器 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

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

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

[mysql_cluster]
ndb-connectstring=10.13.64.10

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

但是,这是问题所在- 当我在Server 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和集群 2中的所有 SQL 节点上看到该条目- 所以在所有四个 SQL 节点上 - 这是我所期望的。

我一定错过了一些非常简单的东西。我已经尝试炸毁这些服务器并在许多场合重新开始 - 并且似乎无法将服务器 1B 上的任何 INSERT、UPDATE 或 DELETE 查询发送到我的辅助集群。

任何指示或帮助将不胜感激(对于冗长的帖子感到抱歉)

问候,
克里斯。

4

1 回答 1

0

在 1B 上启用 binlog。

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

log-bin=binlog
binlog-format=ROW
于 2013-04-18T15:36:13.443 回答