1

2 つの MySQL クラスター間で単一のレプリケーション チャネルを使用してレプリケーションをセットアップしようとしています。mysql.com のドキュメントを数回たどりましたが、正しく動作していないようです。

私が抱えている問題は、マスターとして構成されていない SQL ノードに対して行われたクエリが、NDBCLUSTER テーブルの INSERT、UPDATE、または DELETE クエリを複製していないことですが、SQL ノードの行を INSERT、UPDATE、または DELETE すると、マスターであり、他のクラスターに正常に複製されます。

マスター クラスター内の任意の SQL ノードで CREATE DATABASE クエリを実行すると、スレーブ クラスターに正常に複製されるため、レプリケーションがセットアップされていることがわかります。同様に、任意の SQL ノードで CREATE TABLE クエリを実行して、新しいデータベースに NDBCLUSTER テーブルを作成すると、それもスレーブ クラスターに正常に複製されます。

私がドキュメントを読んで、クラスタ レプリケーションが機能することをどのように理解したかというと、クラスタ内に 10 個の API ノードがあり、それらのノードの 1 つがマスターとしてレプリケーション専用に構成されているということです。そのため、クラスター内の 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 (マスター) の /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

クエリ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 (つまり、サーバー 2B および 2C) のどの SQL ノードのエントリも確認できません。

Server 1Cで同様のクエリを実行すると、次のようになります。

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

クラスター 1 とクラスター 2 のすべての SQL ノードでエントリを確認できます。したがって、4 つの 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 に答える