やぎLabs

MySQL Cluster(MySQLクラスター)をインストールしてみた

直接自分の案件ではなかったが時間が空いたこともあり調べてほしいということで調べてみた。

MySQLは5.1.26を使用。

設定としては、

server1 : MGM

server2,server3 : data,SQLノード

#インストール

これはMySQLのcongifureに–with-ndbcluster」を追加してコンパイル・インストール

#設定

■server1

config.iniの作成

mkdir /var/lib/mysql-cluster

vi /var/lib/mysql-cluster/config.ini

作成したconfig.iniに下記を記載

[NDBD DEFAULT]

NoOfReplicas=2

[NDB_MGMD]

id=1

hostname=server1のIPアドレス

datadir=/var/lib/mysql-cluster

[NDBD]

id=2

hostname=server2のIPアドレス

[NDBD]

id=3

hostname=server3のIPアドレス

[MYSQLD]

[MYSQLD]

[MYSQLD]

[MYSQLD]

■sever2/server3

/etc/my.cnfの設定(下記を追加)

[mysqld]

ndbcluster

ndb-connectstring=”server1のIPアドレス”

[mysql_cluster]

ndb-connectstring=”server1のIPアドレス”

# DATAノードの起動

server2 : /usr/local/mysql/libexec/ndbd –initial

(注)「–initial」は最初だけ指定

server3 : /usr/local/mysql/libexec/ndbd –initial –ndb-mgmd-host=server1のIPアドレス

(注)「–initial」は最初だけ指定。–ndb-mgmd-hostは両方のノードで指定しないとだめかも。

# MySQLノードの起動(MySQLの起動)

server2/server3 : /usr/local/mysql/bin/mysqld_safe &

# 管理ノードでチェック

server1で

/usr/local/mysql/bin/ndb_mgm

これで管理コンソールが開きます

「show」コマンドで状態の確認をする

Connected to Management Server at: localhost:1186

Cluster Configuration

———————

[ndbd(NDB)] 2 node(s)

id=2 @server2のIPアドレス (Version: 5.1.26, Nodegroup: 0, Master)

id=3 @server3のIPアドレス (Version: 5.1.26, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)

id=1 @server1のIPアドレス (Version: 5.1.26)

[mysqld(API)] 4 node(s)

id=4 @server2のIPアドレス (Version: 5.1.26)

id=5 @server3のIPアドレス (Version: 5.1.26)

id=6 (not connected, accepting connect from any host)

id=7 (not connected, accepting connect from any host)

こんな感じで表示していたら成功

# テスト

server2とsever3で同じ名前のDBを作成

create database test_cl;

 

server2でテーブルを作る

create table test_table(id int, name varchar(255)) ENGINE=NDBCLUSTER

(注)clusterを使う場合は必ず「ENGINE=NDBCLUSTER」を指定する

 

server3でserver2で作ったテーブルができていれば良い。

後はINSERTなりUPDATEを実行しても片方のサーバーでも同期が取れていれば良い。

また、片方のSQLを落としてSQL文を実行させた後、落としたMySQLを起動してもデータの同期はとれてます。

ちなみにPHPからのアクセスはmysql_connectでdataノードのサーバーのIPアドレスを指定すればアクセスできます(もちろんデータの同期もできます)

感想としてはすぐに同期がとれるのでわざわざbatchなりcornでまわす必要がないので便利かなとおもう。

ただ、MySQLのリファレンスなどによると単純なテーブル構造や簡単な問い合わせ(SELECT)に向いているようなので、複雑な物はだめみたいですね。。。

参考書籍


WEB+DB PRESS Vol.45

インストール/設定するにあたり下記のページを参考にさせていただきました。ありがとうございます。

http://d.hatena.ne.jp/rx7/20070521/p1

http://d.hatena.ne.jp/rx7/20070602/p3

http://hogehoge.que.jp/thh4601/wiki/index.php?MySQLCluster(MultipleBoxConfig)

http://blog.k-go.org/archives/50342331.html

http://beck.boo.jp/pukiwiki/MySQL/%A5%AF%A5%E9%A5%B9%A5%BF/

http://dev.mysql.com/doc/refman/5.1/ja/mysql-cluster.html