mysqlclusterの導入手順 PART2
FAQ編 2
Q.わーいわーい、ndbクラスタが動いたよ!!!
でも・・・server1のmysqlで
create database hoge;を実行して
hogeスキーマを作ったんだ。
で、
hogesテーブルをNDB型でつくったんだけど、
server2から見るにはどうしたらいいんだろう?
そもそもserver2にhogeスキーマがないしさぁ。
A.ここはmysqlクラスタの力の見せ所だね。どれ・・・
カタッカタッ
(server2のmysqlを起動した音)
カタカタカタッ
(server2でcreate database hoge;を実行した音)
>show tables;
+—————-+
| Tables_in_hoge |
+—————-+
| hoges |
+—————-+
Q.すっげー!!!hogesテーブルが勝手に出来たよ!!
A.クラスタリングではもともと同じデータストアを利用するわけ
だから、当然スキーマがあればテーブルは既に存在してるわけさ。
Q.じゃあさ、mysql clientをserver1で立ち上げて
insert into hoges values(”こんにちわー”);
ってやってね、server2でselectすれば当然
+—-+——————–+
| id | name |
+—-+——————–+
| 1 | こんにちわー |
+—-+——————–+
ってでるんだよね。
これならinsertとselectでチャットが出来るね!!!!!
mysqlマニア感激のチャットクライアントさ!
A.・・・・
o.t.a
mysqlclusterの導入手順 PART3
便利な設定へん
ndb_mgmdを起動するときに
ndb_mgmd –config-file=/hoge/hoge/config.ini &
みたいにいちいち書くのはだるい!
そんなときはmy.cnfに書いちゃおう!
my.cnfに以下の項目を追加
[ndb_mgmd]
config-file=/var/lib/ndb/config.ini
(configファイルのフルパス)
これでndb_mgmd &だけでconfigを
自動的にロードして動きます。
サーバ2からndbd(データノード)を接続するときに
ndbd –ndb-connctstring=server1
みたいに書くのもだるいんだけど・・・
[ndbd]
connect-string=server1
(ndb_mgmdが動いてるサーバのホスト名)
これでserver2からndbdって打つだけで
起動します。
おまけ
[ndb_mgm]
connect-string=server1
(ndb_mgmdが動いてるサーバのホスト名)
これを設定しておけば、ndb_mgmdが動いてる
サーバ以外からもndb_mgm(管理コンソール)
が実行できるよ。
(そんなのやらないよね・・・)
!!起動手順はこんなかんじ!!
想定構成
server1= ndb_mgmd、ndbd、mysqldが動いている場合
***server1で実行***
# ndb_mgmd
# ndbd
# mysqld_safe &
***server2で実行***
# ndbd
# mysqld_safe &
これだけで動きます。
o.t.a
mysqlclusterの導入手順 PART2
FAQ編 1
Q.mysqld(APIノード)が立ち上がらないんだけど・・・?
A.ここはハマリどころなんだ!なぜかというと・・
ndb_mgmd(マネージメントノード)は、色んなところから
見られる目立ちたがり屋さんなんだ。
Q.それだけじゃわからないよ・・・
A.目立ちたがり屋さんだから、/etc/hostsをいじって
サーバ名とIPアドレスを対応付けなきゃダメなんだ。
Q.ふーん
A.つまりね・・127.0.0.1みたいなlocalipアドレスが
ndb_mgmdのホスト名に対応付けられてると動かないんだよ。
Q.うーん、ピンとこないなあ
A.ローカルアドレスでndb_mgmdが起動しても、他の
サーバから見たら当然見えないよね。
だから、他のサーバは当然どこにつないでいいか
わからなくなる。
Q.ndb_mgmdくんって、人に見られてないと仕事を
出来ないかわいそうな人だなあ・・・
A.そう。悲しい人なんだ。だから他人からわかる
アドレスとhost名を設定して、connectstringに
設定して繋いであげてね。
そうするとバリバリ働くよ!
Q.わかったよ、ありがとう!
(でもそれってハマリどころというか、設定
ミスっただけじゃん・・・)
A.それは言わないお約束です。
o.t.a
※.便宜上、クラスタリングに使用する2台のサーバを
「test1、test2」と記載しています。
これらのサーバ内で、既にmysql5.1系のインストールが
行われていることを前提とします。
1. データを入れておくディレクトリを作成します。(ここでは適当な場所につくってみます。)
***test1サーバ上にて***
shell# mkdir /home/hoge/ndb_mgmd-file
shell# mkdir /home/hoge/cluster-file
***test2サーバ上にて***
shell# mkdir /home/hoge2/cluster-file
2.mysqlルートに移動(test1,test2)
shell# cd /usr/local/mysql
3. my.cnfを設定します(test1,test2)
shell# cp support-files/my-large.cng /etc/my.cnf
shell# vi /etc/my.cnf
[mysqld]
ndbcluster
ndb-connectstring=hoge1
4. config.iniを設定します(test1)
shell# cp /support-files/ndb-config2-node.ini /support-files/config.ini
shell# vi /support-files/config.ini
[ndbd default]※変更箇所
NoOfReplicas= 2 → NoOfReplicas= 1
→レプリカ数です。1にすると冗長性を失いますが、
複数のサーバを1つのDBとして使えます。
DataDir → コメントアウト
→特に必要ないので・・
[ndb_mgmd_default]
DataDir → コメントアウト
HostName= hoge1
→マネージメントノードを起動するサーバのhost名
[ndb_mgmd]
id=1
DataDir= /home/hoge/ndb_mgmd-file
→マネージメントノードファイル置き場
HostName= hoge1
→マネージメントノードを動かすサーバのホスト名
[ndbd]
id=2
DataDir= /home/hoge/cluster-file
→データの置き場所のパス
HostName= hoge1
→データノードを動かすサーバのホスト名
[ndbd]※データノードの数分だけ[ndbd]を書きます。
id=3
DataDir= /home/hoge2/cluster-file
HostName= hoge2
[mysqld]※sqlノードの設定。デフォルトのままでOKです。
こいつもノードの数だけ書きます。
5. host名とIPアドレスを対応付けます。(test1,test2)
shell# vi /etc/hosts
192.168.0.x test1
192.168.0.y test2
6. マネージメントサーバ[ndb_mgmd]を起動します(test1)
shell# ./bin/ndb_mgmd –daemon –config-file ./support-files/config.ini
※引数でconfig.iniを指定しています。
7. 環境に応じてファイアウォールのポートを空けます。(test1,test2)
1)マネージメントノードを動かすサーバのポートを空けます。(1186.※test1のみ)
2)クラスタリングで使用するtcpのポートを空けます。(defaultだと63132、test1とtest2で設定)
→config.iniの[tcp_default]で変更可能
3)mysqlノードのポートを空けます。(defaultだと3306、test1とtest2で設定)
8.ndbdを起動します(test1,test2)
***test1で実行***
shell# ./bin/ndbd –initial(初回のみ–initialをつけます。)
***test2で実行***
shell# ./bin/ndbd –ndb-connectstring=test1 –initial
9.mysqldをSQLノードとして起動します(test1, test2)
shell# ./bin/mysqld_safe &
(my.cnfの設定が行われていれば
自動的にsqlノードとして認識されます。)
10.ndb_mgmを起動して状態を確認します(test1)
shell# ./bin/ndb_mgm
ndb_mgm> show
※クラスタリングの停止はshutdownコマンドで。すべてのノードが停止します。
成功例)
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
———————
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.x (Version: 5.1.17, Nodegroup: 0, Master)
id=3 @192.168.0.x (Version: 5.1.16, Nodegroup: 1)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.x (Version: 5.1.17)
[mysqld(API)] 4 node(s)
id=4 @192.168.0.x (Version: 5.1.17)
id=5 (not connected, accepting connect from any host)
id=6 (not connected, accepting connect from any host)
id=7 (not connected, accepting connect from any host)
このように、5.1系であればバージョンが異なっても
動作自体はします。
(実運用上はバグフィックス等々ある為
バージョンをあわせたほうが良さそう)
11.早速クラスタリングしてみましょう!!
shell# ./bin/mysql -uxx -p
mysql> CREATE DATABASE hoge_development default char set=utf8
mysql> CREATE TABLE hoges (
id INT(10) NOT NULL AUTO_INCREMENT
, name VARCHAR(255)
, PRIMARY KEY (id)
)ENGINE=NDB;
※クラスタリングを行っているとcreate table,
create database等のddlは遅くなります。
mysql> show table status where Name = “hoges” and Engine=”NDBCLUSTER”;
※レコードが取得されればNDBClusterの設定は完了です。
それでは良いクラスタリングライフを。
o.t.a
1.CoLinux 0.71のダウンロード
http://sourceforge.net/project/showfiles.php?group_id=98788&package_id=217177&release_id=497190
2.インストールで次のコンポーネントをチェックから外す
→coLinux Virtual Ethenet Driver(TAP-Win32)
coLinux Bridge Ethenet(WinPcap)
3.distributionの選択、Fedora Core5が推奨です。
4.ダウンロードが完了したらインストールしたディレクトリを開きます。
5.distributionのアーカイブをインストールディレクトリに解凍します。
(Fedora Core5ならFedoraCore5-2006.8-ext3-2gb.7z)
6.コマンドプロンプトからfsutilを使用してスワップファイル用の空イメージを作成します。
→コマンド)fsutil file createnew swap.img 268435456
7.引き続きfsutilでデータ量域用の空イメージを作成します
→コマンド)fsutil file createnew fslocal.ext3 2147483648
8.作成したファイルをCoLinuxインストールディレクトリに移しましょう。
–これで準備が整いました。あとは起動用のファイルを設定しましょう。
9.fedora5-start.batに以下の内容にします。
→colinux-daemon.exe kernel=vmlinux initrd=initrd.gz
mem=128 cobd0=Fedora5-2gb.ext3 cobd1=swap.img
cobd2=fslocal.ext3
cofs0=C:\Temp eth0=slirp,,tcp:22:22/tcp:23:23/tcp:80:80
root=/dev/cobd0 fastboot nogui -t nt
※これは編集都合の改行です。実際はすべて1行で記載してください。
10.fedora-star.batを起動してください
11.loginはrootで行ってください。
12.日本語キーボードに対応させます。
→shell# loadkeys jp106
swap.imgの設定を行います。
→shell# mkswap /dev/cobd1
shell# swapon -a -e
shell# free
※これでswap領域にswap.imgのサイズが表示されればokです。
13.あとは環境を作ってください
1)ユーザを追加してください。
→shell# adduser hoge(hogeは好きな名前で)
2)ユーザをrootから変更します。
→shell# su - hoge
3)rubyをソースからdownloadします。
***必要ライブラリのインストールをします***
→shell# su -
shell# yum install make
shell# yum -y update
shell# yum install ‘gcc*’
※yumが動かない(Determining fastest mirrorsで落ちる)
場合は、ウィンドウズのエラー画面が出た後、送信しないを
クリックしてしばらくまってみる。
しばらく待ってると、画面が動き出すので、
http://なんちゃらと表示されたらctrl+zでyumから抜ける。
ps -efでyumのプロセスIDを確認した後、
kill -KILLでyumをkill。
その後coLinuxを再起動するとなぜかyumが動くようになります・・・
(問題ないけど意味不明。)
shell# wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6.tar.gz
shell# tar -xvzf ruby-1.8.6.tar.gz
shell# cd ruby-1.8.6
shell# ./configure
shell# make
shell# make install
***ruby gemsのインストール***
shell# cd ../
shell# wget http://rubyforge.org/frs/download.php/17190/rubygems-0.9.2.tgz
shell# tar -xvzf rubygems-0.9.2
shell# cd rubygems-0.9.2
shell# ruby setup.rb
***railsのインストール***
shell# gem install rails
***subversionのインストール***
shell# yum install subversion
これにてひとまず、windows上でrailsの開発環境(最低限)が整います。
それではよいColinux&railsライフを!
o.t.a
細かい設定に関しては つづく
RubyOnRailsでHyperEstraierをインストールする方法です。
1.qdbmをダウンロードしてインストールします。
$ su - ※スーパーユーザーで
$ wget http://qdbm.sourceforge.net/qdbm-1.8.75.tar.gz
$ tar -xvzf qdbm-1.8.75.tar.gz
$ cd qdbm-1.8.75.tar.gz
$ ./configure –enable-zlib
$ make
$ make install
2.HyperEstraierをダウンロードしてインストールします
$ su -
$ wget http://hyperestraier.sourceforge.net/hyperestraier-1.4.10.tar.gz
$ tar -xvzf hyperestraier-1.4.10.tar.gz
$ cd hyperstraier
$ ./configure
$ make
$ make install
3.estmasterサーバを起動します
$ estmaster init /usr/local/share/hyperestraier
$ estmaster start /usr/local/share/hyperestraier &
→サーバをとめるときはestmaster stop /var/lib/hyperestraier
→ユーザの設定をミスったりしてログインできなくなったら、stopしたあとにもう一回initしてstart
4.管理画面でユーザの設定とノードの設定を行います。
1.http://[hyperestraierをインストールしたサーバ]:1978/を開きます
2.administrationをクリックするとid/passを求められるので、defaultのadmin/adminを入力します。
3.Manage Usersでadminのpassをかえます。(Editを押す)※セキュリティ対策
4.defaultのadminではなく他にユーザを作っておくほうが良さそうなので、もう一個ユーザを作ります。
→権限はadminと同様でok。ここではidとpassをhoge/piyoとします。
5.Manage Nodesにて適当なノードを作ります。ここではノード名をnodes_hogeとします。
→左のテキストボックスがnode名、右のテキストボックスが説明文。
後述のdatabase.ymlの設定で使用します。
以上でHyperEstrairerサーバサイドの設定は終了です。
こんどはRail側の設定を行いましょう。
※全文検索プラグイン、acts_as_searchableの使い方についてはぐぐると色々出てくるので、割愛します。
5.gemでacts_as_searchableをインストールします。
$gem install acts_as_searchable
6.RAILS_ROOT/config/database.ymlに以下の項目を追加します。
estraier:
port: 1978
user: hoge
password piyo
node: nodes_hoge
7.enviroment.rbにrequire_gemを書いておきます。
require_gem ‘acts_as_searchable’
8.全文検索用のモデルからHyperEstraierのインデックスを作ります。
アプリケーションルートで./script/console
>> Hoge.reindex!※Hogeモデルがacts_as_searchableを使う全文検索対象モデルであった場合の書き方です。
凡例)def Hoge < ActiveRecod::Base
acts_as_searchable :searchable_fields => [:piyo]
end
以上で、Rails上からHogeモデルを使用しての全文検索が可能となります。
動かない場合は、全文検索用のテーブルがInnoDBになっていないかを確認したり、
Railsアプリケーションを再起動してみたりすると大体動きます。
それでは、よいHyperEstraierライフを。
(ちなみにacts_as_searchable、ぶっちゃけ使いにくいです。重いです。
sennaにすればよかった、と後悔している今日この頃です。)
o.t.a
スペシャルサンクス: ライドオンレイルズ
真夜中にMySqlをいじくりまわしました。
(開発用TestServerです、もちろん)
そんな中で、
一番の落とし穴だったのが
innodb_log_file_sizeの値変更。
普通にやるとサーバが怒って、起動出来ません。
DB設計用ツールには色々ありますが、
そこはRAWHIDE.、フリーで使用できちゃう
ツールを活用するわけです。
(お金が無いわけじゃないですよ!ほんと!ポリシーです!…)
今までもDBDesigner4とかClayとか、色々使ってみたものの
どれもこれも微妙なラインで使いにくい箇所があったりして。
そこで登場したのがタイトルのコイツです。
[MySqlWorkBench]
http://dev.mysql.com/downloads/gui-tools/5.0.html
MySql公式のGUI設計ツールです。
まだAlpha1.1.4と、作りの荒さは否めない感じですが
リバースエンジニアリングもばっちり出来るし、UIも快適。画面も綺麗。
今後のVersionupの出来次第ではありますが、
近い将来にMySql前提でDB設計をする人間にとっての
デファクトスタンダードになるのではないでしょうか。
とかえらそうなことを言いつつ、
僕もまだ使い方よく分かっていません。
ゴリゴリ使ってみて本当に良さそうだったら使用法を
ここに書いてみようと思います。

