タグ » mysql «

2009/08/16 日曜日 | 投稿者: aqua

こんばんは、aquaです。

以前から気になっていたサーバ単位での冗長化を実現すべくロード・バランスの方法を検討してみる。一般的に考えて、自宅環境で実現可能なロード・バランスは、DNSラウンドロビンかLVSといったところ。専用ハードの導入は当然ながら無理。障害時のホット・スタンバイやダウンしたサーバの自動切り離しを実施したい場合はLVSが現実的である。うちのDNSはmydnsなので動的な変更も難しくはないが、機能の本質を考えてLVSを採用する。いまどきのlinuxであれば特に障壁もなく使えてしまう、というのもLVSを使い易くなった理由の一つである。

早速LVSの構築に入るが、CentOS 5系で必要な作業はipvsadmとkeepalivedのインストール。今回は実績のあるipvsadm-1.24とkeepalived-1.1.13を使用する。この2つの導入については特に何の問題もなく、いつものmake;make installでインストール出来た。ちょっと特殊な点としては、keepalivedに幾つかパッチを当てた。1つはkeepalivedのヘルスチェックを強化するパッチ(keepalived-extcheck.patch)と、もう1つはkeepalivedの設定ファイルをインクルードで別ファイル化できるようにするパッチ(keepalived-include.patch)である(幾つかのサービスを扱う場合、設定ファイルを別ファイルに整理できる方がベター)。

ロードバランスするための環境としてDSRを前提とする。DSRの特徴として戻りパケットをLB通さないで済む、というメリットがあるのも見逃せないが、それよりもサービスからの切り離しを容易に行えるのが採用のポイント。DSRを利用するサーバでは、バーチャルなループバック・インターフェースを使用するので、余計なarpを投げないように設定をする必要がある。実際にラウンドロビンの設定で動きを試したところ、ループバックVIPをダウンさせてもサービスから切り離されなかった事を除いて、あとは期待通りの動作をしてくれた。ループバックVIPの動きについては、よくあるLBとは異なる動きなので気を付ける事。

最後に簡単な負荷試験をしてみた。MySQLサーバ2台(ラウンドロビン)を使って負荷をかけてみたところ、軽く秒間3万クエリーは捌いていた。差し当たって性能面に不安点はなさそうだ。しかし、LVSサーバのリソースをウォッチしていると、リクエスト量に応じてCPUのsysは変動するが、usrは微動だにしない(常にゼロ)。何を以ってLVSサーバの限界点を見極めるかにもよるが、運用上において注意が必要そうだ。総論として、シンプルな使い方をするのであればLVS構築は非常に容易なので、積極的に使用を検討すべきである(但し、運用面で幾つか注意点あり)。

カテゴリ: 技術系  | タグ: , ,  | コメント
2009/03/10 火曜日 | 投稿者: aqua

こんばんは、aquaです。

今のところ特に使う必要もないんだけど、MySQLにて全文索引が使用できるように構築しておく。MySQLには元々FULLTEXT INDEXという全文索引は準備されているが、この索引はスペース区切りの文字列に対して使用する事を前提としている。例えば英文などであればそのまま使用できるが、日本語の場合は形態素解析して文節ごとにスペースを挿入する必要がある。その場合、元の文章と全文索引用の文章を別に保管するなどの工夫が必要になるため、運用上いろいろと面倒である。

そこで登場するのがsennaである。sennaは上記のスペース区切りの全文索引や、形態素解析した全文索引、n-gramと呼ばれるn文字単位でインデクシングする全文索引など、一般的に使用するものは全て準備されている。この機能をMySQLから利用するにはtritonnを使う事になる。こちらのプロジェクトでrpm化されたパッケージも配布されているが、今回はsenna以外にもopensslによる暗号化通信を組み込みたいのでソースからビルドする。tritonnパッチが当てられたMySQLソースをここからダウンロードする。

まず大前提としてsennaは64bit OSで使用する。以前のバージョン(数年前だけど・・・)で無理矢理32bit OSで試してみた事もあったが、インストールか運用かで相当苦労し最終的に諦めた覚えがある。次に、形態素解析で利用するmecabをインストールする。文字コードはEUC-JPをデフォルトにする予定なので、mecabもEUC-JPでmakeしておく事。そして、このmecabを利用する形でsennaをインストールする。mecabのインストール先に注意して、きちんとmecab-configのパスを指定する。

最後にMySQLをインストールする。この際にも、mecabやsennaのパスを指定する事を忘れないように。今回は更にEUC-JPを使う事やopensslを組み込む事も追加する。無事にインストールできたら、全文索引つきのテーブルを作成してみよう。全文索引の状態は『show senna status;』で確認出来る。また、my.cnfに『senna-log』と指定する事で、デバッグ用のログを吐かす事も出来る。最新のバージョンについてはまだ未確認だが、以下のような問題ではまった事がある。

  • USING指定を省略した場合のデフォルト索引がバージョン毎に異なる
  • mysqldumpした際にUSING句の指定が抜ける
  • create tableとcreate fulltext indexした場合でnormalize(大文字小文字判別)の指定が異なる

こういう細かい部分の修正と、MyISAMでしか使えない事、スコアリングの機能が弱い辺りが強化されると、更に使い易くなるだろう。今後の発展に期待が高まる。以下、参考までに。

カテゴリ: 技術系  | タグ:  | コメント