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クエリをセカンダリクラスターに送信できないようです。
任意のポインタまたは支援をいただければ幸いです (そして、長い記事で申し訳ありません)。
よろしく、
クリス。