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系でも同様の構成が作成できるように学んで行こうと思います。