MySQL-Clusterクラスタ研究


一、紹介
このドキュメントでは、2台のサーバベースのMySQLクラスタを構成する方法について説明します.また、いずれかのサーバで問題が発生したり、ダウンタイムが発生したりした場合でも、MySQLは引き続き実行できます.
注意!
これは2台のサーバベースのMySQLクラスタですが、管理ノードとして追加の3台目のサーバが必要ですが、このサーバはクラスタの起動が完了した後に閉じることができます.また、クラスタの起動が完了した後に管理ノードとしてのサーバを閉じることは推奨されないことに注意してください.理論的には2台のサーバのみに基づくMySQLクラスタを構築できるが、このようなアーキテクチャは、1台のサーバがダウンタイムするとクラスタが正常に動作しなくなり、クラスタの意味を失う.このため,管理ノードとして3台目のサーバが実行される必要がある.
また,3台のサーバの実環境を持たない友人も多いかもしれないが,VMWareや他の仮想マシンでの実験も考えられる.
この3つのサービスを想定します.
 Server1: mysql1.vmtest.net 192.168.0.1
 Server2: mysql2.vmtest.net 192.168.0.2
 Server3: mysql3.vmtest.net 192.168.0.3

サーバs 1およびサーバ2は、MySQLクラスタを実際に構成するサーバとして機能します.管理ノードとしてのサーバ3については、サーバ3のシステムを小さく調整し、MySQLをインストールする必要がなく、サーバ3は構成の低いコンピュータを使用し、サーバ3で他のサービスを同時に実行することができます.
 
二、サーバー1とサーバー2にMySQLをインストールする
http://www.mysql.com上ダウンロードmysql-max-4.1.9-pc-linux-gnu-i 686.tar.gzから
注意:maxバージョンのMySQLでなければなりません.Standardバージョンではクラスタ導入はサポートされていません.
次の手順では、サーバ1とサーバ2を1回ずつ行う必要があります.
 # mv mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz /usr/local/
 # cd /usr/local/
 # groupadd mysql
 # useradd -g mysql mysql
 # tar -zxvf mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz
 # rm -f mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz
 # mv mysql-max-4.1.9-pc-linux-gnu-i686 mysql
 # cd mysql
 # scripts/mysql_install_db --user=mysql
 # chown -R root  .
 # chown -R mysql data
 # chgrp -R mysql .
 # cp support-files/mysql.server /etc/rc.d/init.d/mysqld
 # chmod +x /etc/rc.d/init.d/mysqld
 # chkconfig --add mysqld

MySQLを起動しないでください.
 
三、管理ノードサーバーのインストールと構成(Server 3)
管理ノードサーバとして、サーバ3にはndb_が必要です.mgmとndb_mgmdの2つのファイル:
http://www.mysql.com上ダウンロードmysql-max-4.1.9-pc-linux-gnu-i 686.tar.gzから
 # mkdir /usr/src/mysql-mgm
 # cd /usr/src/mysql-mgm
 # tar -zxvf mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz
 # rm mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz
 # cd mysql-max-4.1.9-pc-linux-gnu-i686
 # mv bin/ndb_mgm .
 # mv bin/ndb_mgmd .
 # chmod +x ndb_mg*
 # mv ndb_mg* /usr/bin/
 # cd
 # rm -rf /usr/src/mysql-mgm

この管理ノード・サーバのプロファイルの作成を開始します.
 # mkdir /var/lib/mysql-cluster
 # cd /var/lib/mysql-cluster
 # vi config.ini

config.iniには以下の内容が追加されています.
 [NDBD DEFAULT]
 NoOfReplicas=2
 [MYSQLD DEFAULT]
 [NDB_MGMD DEFAULT]
 [TCP DEFAULT]
 # Managment Server
 [NDB_MGMD]
 HostName=192.168.0.3 #       Server3 IP  
 # Storage Engines
 [NDBD]
 HostName=192.168.0.1 #MySQL  Server1 IP  
 DataDir= /var/lib/mysql-cluster
 [NDBD]
 HostName=192.168.0.2 #MySQL  Server2 IP  
 DataDir=/var/lib/mysql-cluster
 #   2 [MYSQLD]    Server1 Server2    。
 #                  ,    ,                   。
 [MYSQLD]
 [MYSQLD]

保存終了後、管理ノードサーバサーバサーバサーバ3を起動します.
 # ndb_mgmd

管理ノードを起動したら、これは管理ノードサービスにすぎず、管理端末ではないことに注意してください.したがって、起動後の出力情報は表示されません.
四、クラスタサーバーを構成し、MySQLを起動する
サーバ1とサーバ2では、以下の変更が必要です.
 # vi /etc/my.cnf
 [mysqld]
 ndbcluster
 ndb-connectstring=192.168.0.3 #Server3 IP  
 [mysql_cluster]
 ndb-connectstring=192.168.0.3 #Server3 IP  

保存終了後、データディレクトリを作成してMySQLを起動します.
 # mkdir /var/lib/mysql-cluster
 # cd /var/lib/mysql-cluster
 # /usr/local/mysql/bin/ndbd --initial
 # /etc/rc.d/init.d/mysqld start

/usr/local/mysql/bin/ndbdを/etc/rcに加えることができる.localで起動を実現します.
注意:ndbdが最初に起動する場合またはサーバ3のconfigのみ.iniを変更してから--initialパラメータを使用する必要があります!
 
五、作業状態を検査する
管理ノードサーバServer 3に戻り、管理端末を起動します.
 # /usr/bin/ndb_mgm

showコマンドを入力して現在の動作状態を表示します:(次はステータス出力の例です)
 [root@mysql3 root]# /usr/bin/ndb_mgm
 -- NDB Cluster -- Management Client --
 ndb_mgm> show
 Connected to Management Server at: localhost:1186
 Cluster Configuration
 ---------------------
 [ndbd(NDB)]     2 node(s)
 id=2    @192.168.0.1  (Version: 4.1.9, Nodegroup: 0, Master)
 id=3    @192.168.0.2  (Version: 4.1.9, Nodegroup: 0)
 [ndb_mgmd(MGM)] 1 node(s)
 id=1    @192.168.0.3  (Version: 4.1.9)
 [mysqld(API)]   2 node(s)
 id=4   (Version: 4.1.9)
 id=5   (Version: 4.1.9)
 ndb_mgm>

問題がない場合は、MySQLのテストを開始します.
なお、このドキュメントではMySQLにrootパスワードは設定されていません.サーバ1とサーバ2のMySQL rootパスワードを自分で設定することをお勧めします.
サーバ1で:
 # /usr/local/mysql/bin/mysql -u root -p
 > use test;
 > CREATE TABLE ctest (i INT) ENGINE=NDBCLUSTER;
 > INSERT INTO ctest () VALUES (1);
 > SELECT * FROM ctest;

1 row returned情報(数値1を返す)が表示されるはずです.
上記が正常であれば、サーバ2に移行して上記のテストを繰り返し、効果を観察します.成功した場合は、INSERTを実行してサーバ2に戻り、正常に動作しているかどうかを確認します.
問題がなければ、成功おめでとうございます.
 
六、破壊性テスト
サーバ1またはサーバ2のネットワークケーブルを抜いて、別のクラスタサーバが正常に動作しているかどうかを確認します(SELECTクエリーテストを使用できます).テストが終わったら、ネットワークケーブルを再挿入すればいいです.
物理サーバに接続できない場合、つまりネットワークケーブルを抜くことができない場合は、サーバ1またはサーバ2でテストすることもできます.
 # ps aux | grep ndbd

すべてのndbdプロセス情報が表示されます.
 root      5578  0.0  0.3  6220 1964 ?        S    03:14   0:00 ndbd
 root      5579  0.0 20.4 492072 102828 ?     R    03:14   0:04 ndbd
 root     23532  0.0  0.1  3680  684 pts/1    S    07:59   0:00 grep ndbd

その後、ndbdプロセスを殺してMySQLクラスタサーバを破壊する目的を達成します.
 # kill -9 5578 5579

その後、別のクラスタサーバでSELECTクエリーテストを使用します.また、管理ノードサーバの管理端末でshowコマンドを実行すると、破壊されたサーバの状態が表示されます.
テストが完了したら、破壊されたサーバのndbdプロセスを再起動するだけです.
 # ndbd

注意!前に言ったように、この時は--initalパラメータを追加する必要はありません!
これでMySQLクラスタの構成が完了しました!