production.log

ピクスタ株式会社でエンジニアのマネージャーをやっている星直史のブログです。

Solr 4.10.4でSolrCloudを試してみました。

ピクスタの開発部で開発合宿を開催したので、
Solr4からの新機能であるSolrCloudを試してみました。
前回の記事はこちらです。

また参考にした書籍は↓こちらです

分散インデクシングやレプリケーションを自前で構築してもいいけど・・・

前回の記事では、インデクシング時の偏り、エラーによる単一障害によるシステム全体のダウンなどを挙げました。
SolrCloudは、分散インデクシングやレプリケーションのメリットを活かしつつ、
これらの問題を回避できる分散環境の仕組みを提供します。

具体的にはZooKeeperというものが組み込まれており、それがnodeのステータス管理、分散検索時のフェイルオーバー、単一障害点などをなくす仕組みになっています。

今回は、シャード数2, レプリケーション数2の4台構成のシステムを想定して、環境を構築していきます。

まずは各nodeの基となるデータを作成します。

$ cd ~/solr-4.10.4/
$ cp -R example/ node1
$ cp -R example/ node2
$ cp -R example/ node3
$ cp -R example/ node4

SolrCloudの起動

node1を立ち上げる際にzookeeperの起動と設定も同時に行います。

$ cd ~/solr-4.10.4/node1
$ java -Dbootstrap_confdir=./solr/collection1/conf -Dcollection.configName=myconf -DzkRun -DnumShards=2 -jar start.jar

注意する点が一点あります。
書籍では
java -DzkRun -DzkHost=http://localhost:9983 -Dbootstrap_conf=true -DnumShards=2 -jar start.jar
と書いてあるのですが、bootstrap_conf=trueだけでは、zookeeperがconfigファイルを読み込めないので、
bootstrap_confdirを設定する必要があります。

続いて、node2, node3, node4をzookerrperの管理下で起動します。

$ cd ~/solr-4.10.4/node2
$ java -Djetty.port=8985 -DzkHost=localhost:9983 -jar start.jar

$ cd ~/solr-4.10.4/node3
$ java -Djetty.port=8987 -DzkHost=localhost:9983 -jar start.jar

$ cd ~/solr-4.10.4/node4
$ java -Djetty.port=8989 -DzkHost=localhost:9983 -jar start.jar

node4まで立ち上げたらSolrCloud(zookeeper)が起動しているhttp://localhost:8983にアクセスしてみましょう。
zookeeperを立ち上げた状態であれば、サイドバーにCloudというタブがあるはずなので、表示してみましょう。

f:id:watasihasitujidesu:20160124011240p:plain

設定した通り、シャード数2, レプリケーション数2の構成が出来上がりました。
ここまで簡単に環境ができるとはあっぱれ。

また、SolrCloudではRest APIを提供しており、管理画面からだけではなく、CLIで設定を変更できます。
一覧や詳細はこちらを参照してみてください

CLIを使用しても、レプリケーション数やシャード数を変更することができるので、
サーバー監視ツールからのalertなどで、状況に応じて柔軟にスケールすることができます。

今回の開発合宿では手元の書籍がSolr4系だったので、それで進めてきたのですが、
今後は5系でも同様の構成が作成できるように学んで行こうと思います。