やったことだけ書く備忘録

CentOS 6.x(x86_64)にmysql-clusterを入れて動かすメモ

そろそろ必要になったので。


今までやってきた案件は単一サーバor別稼働DBサーバ+Webサーバで十分な事が多くて、手を付けなかった所だったのですが、今回ちょっと大きめな案件をやることになり、「やべぇ!」と思って勉強を始めました。
わりと素人目線なのでツッコミがあれば是非。あと備忘録も含めててちょっとエントリ長くなります。

あ、MySQL Cluserについては公式サイトなどを見てくださいね。



サーバ構成


社内の勉強用のサーバーを特別にお借りすることができて、さくらのCentOS 6.3 x86_64 2GBを2台準備しました。
色々サンプルを見てたんですが、1台のサーバでクラスタを導入するサンプルばかりで、実際に別ホストのサーバに対して設定をしてるものがなかったので(テストだし費用かさむし仕方ないですね)、せっかく準備できたので私はちゃんと別サーバでクラスタを組んでみることに。クラスタってどういうものかは省いて、今回は以下の構成です。




  • Server1 : IP xxx.xxx.xxx.xx - 管理ノード+Dataノード+SQLノード

  • Server2: IP yyy.yyy.yyy.yy - Dataノード+SQLノード



Server1をプライマリとして管理ノードを持たせる感じで、それぞれはDataノードとSQLノードを持たせます。本当はDataノードだけを切り分けるほうがスマートなのかな?ともあれ、以下の設定については操作対象のものを@Server1とか書きますので覚えておいて下さい。




インストールまでやってみる



インストールとかは大体以下のサイトを参考にさせて頂きました:







基本的なところはふむふむと見てたんですが、みなさん何かyumでインストールされてるんですよね。
で、自分のサーバでコマンド発行すると…




# yum install mysql-cluster --enablerepo=remi

No package myql-cluster available.
Error: Nothing to do



そんなものはないと怒られてしまいます…(´;ω;`)
どうやらCentOS 6系のリポジトリにはmysql-clusterは存在しないようです。で、CentOS 6系で参考にさせて頂いたいのはいかのサイトです。ほぼそのままですが…




Mysql Cluster 7.2.5 On Cent OS 6 (From Scratch)




ソースからインストール


仕方がないのでソースコードからインストールすることにします。公式サイトからLinux Genericをダウンロードしてサーバーにアップ。




Download MySQL Cluster




mysql-cluster



アーカイブをDLしたら、それぞれのサーバーにアップして展開。それぞれのサーバーにです。
基本的には各サーバに対して同じ設定をする感じですね。また、共通ユーザとしてmysqlユーザを作成します。




# mysqlグループ、ユーザを作成
groupadd mysql
useradd 
-g mysql mysql

# アーカイブを/usr/local/に展開
tar -zxvf /path/to/mysql-cluster-gpl-7.2.5-linux2.6-x86_64.tar.gz -/usr/local
mv 
/usr/local/mysql-cluster-gpl-7.2.5-linux2.6-x86_64 /usr/local/mysql-cluster

# 使いやすいようにシンボリックリンク作る
cd /usr/local/mysql
ln 
-s mysql-cluster mysql

#MySQLインストール
scripts/mysql_install_db –user=mysql

# SQLノード用にmysqlサーバをセットアップ
chown -R root  .
chown -R mysql data
chgrp 
-R mysql .

cp support-files/mysql.server /etc/rc.d/init.d/
chmod +/etc/init.d/mysql.server
chkconfig –add mysql
.server

/etc/init.d/mysql.server start
/etc/init.d/mysql.server stop
 


DataノードとSQLノードのみのServer2はここまででOKです。続いて、管理ノードのセットアップ。




@Server1

# 管理コマンド系のセットアップ
cd /usr/local/mysql-cluster

# ndb_mgmは管理ノードコマンドツール
mv bin/ndb_mgm .

# ndb_mgmdは管理ノードのデーモン
mv bin/ndb_mgmd .

# 実行権限付与
chmod +x ndb_mg*

# PATHの通ってる所に移す(/usr/local/bin/でもいいかも)
mv ndb_mg* /usr/bin/
 


続いて、管理ノードの設定ファイルをconfig.iniとして作成します。設置位置は/var/lib/mysql-clusterがいいみたいです。




@Server1

mkdir 
-/var/lib/mysql-cluster

# 設定ファイルを新規作成
vi /var/lib/mysql-cluster/config.ini

[NDBD DEFAULT]
NoOfReplicas=2  # レプリケートしているサーバ数(多分Dataノードの数?)

[MYSQLD DEFAULT]

[
NDB_MGMD DEFAULT]

[
TCP DEFAULT]

# 管理ノード設定
[NDB_MGMD]
HostName=xxx.xxx.xxx.xx        # 管理ノードを置いているサーバ(つまり自分)のIP。localhostでもいいかも

# DataノードのIP設定
[NDBD]
HostName=xxx.xxx.xxx.xx        # このサーバにもDataノードがあるので指定
DataDir= /var/lib/mysql-cluster
[NDBD]
HostName=yyy.yyy.yyy.yy        # もう一個のDataノード設置先サーバのIP
DataDir=/var/lib/mysql-cluster

[MYSQLD]

:
wq
 


これで管理ノードの準備ができたので、設定ファイルを指定して起動。




ndb_mgmd 
-/var/lib/mysql-cluster/config.ini
MySQL Cluster Management Server mysql
-5.5.28 ndb-7.2.9
 


メッセージが返ればOK、設定ミスならエラーメッセージが出ます。あとは、Dataノードとして使うDB(今回は両方ですね)に管理ノードのIPを指定しておきます。




@Server1,Server2両方

vi 
/etc/my.cnf

[mysqld]
ndbcluster  # この記述でクラスタを利用できるようになる
ndb-connectstring=xxx.xxx.xxx.xx    # 管理ノードのあるIP

[mysql_cluster]
ndb-connectstring=xxx.xxx.xxx.xx    # こっちも管理ノードへのコネクトIPを指定
 


あとはDataノード側でndbコマンドでDataノードを起動します。




@Server1,Server2

mkdir 
-/var/lib/mysql-cluster

# Dataノードのデーモンを初期化して起動
/usr/local/mysql/bin/ndbd --initial

# MySQLデーモン(つまりSQLノードのこと)も起動
/etc/init.d/myser.server start
 


どちらも問題なく起動できれば、管理ノードから起動情報を確認します。




@Server1

# 管理ツール起動
ndb_mgm
-- NDB Cluster -- Management Client --
# プロンプトに変わるので、showコマンドで確認できる
ndb_mgmshow

Connected to Management Server at
xxx.xxx.xxx.xx:1186
Cluster Configuration
---------------------

# Dataノード2つ
[ndbd(NDB)]     2 node(s)
id=2    @xxx.xxx.xxx.xx  (mysql-5.5.28 ndb-7.2.9Nodegroup0Master)
id=3    @yyy.yyy.yyy.yy  (mysql-5.5.28 ndb-7.2.9Nodegroup0)

# 管理ノード1つ
[ndb_mgmd(MGM)] 1 node(s)
id=1    @xxx.xxx.xxx.xx  (mysql-5.5.28 ndb-7.2.9)

# SQLノード2つ
[mysqld(API)]   2 node(s)
id=4    @yyy.yyy.yyy.yy  (mysql-5.5.28 ndb-7.2.9)
id=5    @xxx.xxx.xxx.xx  (mysql-5.5.28 ndb-7.2.9)
 


うんうん、ちゃんと起動してますね(∩´∀`)∩ ちなみに、管理ノードはデフォルトで1186番ポートを使うようなので、ファイアーウォールの設定に気をつけたほうがいいですね。あと、試してないですが、それぞれ起動するclusterのバージョンは揃えたほうがいいと思います、多分。



Clusterの起動と停止


起動と停止には順番があるようで、停止から。




@Server1
# 先に管理ノードをシャットダウン
ndb_mgm
shutdown

# 続いて、SQLノードを停止
@Server1,Server2
/etc/init.d/mysql.server stop
 


先に管理ノード停止→SQLノード停止の流れですかね。起動の場合は今回の手順をまとめて、




@Server1
# 管理ノードのデーモン起動
ndb_mgmd -/var/lib/mysql-cluster/config.ini

# 各Dataノード、SQLノードを起動
/usr/local/mysql/bin/ndb
/etc/init.d/mysql.server start
 


これでOK。ndb_mgmで起動しているかチェックするのを忘れず。



試しにやってみないとね


MySQL Clusterは「ndbcluster」というエンジンを使ってるテーブルに対して有効になるそうです。なので、ndbclusterエンジンが有効になっているかどうかを確認してみます。




@Sever1 OR Server2

mysql 
-uroot -p
mysql
show engines;
 


ndbclusterというエンジンが含まれていればOK!
続いて、Server1のSQLノードでテーブルを作ったらServer2のDataノード側でも生成されているかを確認してみます。




@Server1

# Server1からテーブル作成
use test;
mysqlcreate table hoge (id INTENGINE=NDBCLUSTER;

@
Server2
# Server2でテーブル確認
mysql -uroot -p test
mysql
show tables;
+----------------+
Tables_in_test |
+----------------+
hoge           |
+----------------+
 


テーブルが同期されてますね!本当はもっとmy.cnfで設定周りをちゃんとした方がいいのですが、今回は動かすまでの第一歩としてここまでー。



まとめ


NDBはメモリを比較的沢山使うようなので、ちょっとスペックの良いDBサーバを用意するといいらしいですね。あとは片方をフェイルオーバーさせてみたりして動作を検証してみたいと思います。まだまだ勉強しなければ。

« 前の記事 次の記事 »

1件のコメント

ponde さん

参考にさせていただきました。
とても分かりやすく書かれていたため大変助かりました。

現在7.3.2を使って構築していたのですが、
データノードが全て立ち上がっていないとSQLノードが起動できないのですね。。起動順序がややこしい。。

コメントを投稿する

 画像に表示されている文字を入力してください。