ちょっと実験的な感じだけど、FessCloudを作ってみた。まぁ、FessCloudと言っても、SolrCloudを使ったFessみたいな感じです。なので、SolrCloudな感じだけど、Fess自体も適当に追加していけるから、ロードバランサとかで適当に負荷分散とかしてくれれば、Fessについてもクラウド的には使えるかと思う。
現状、これのリリース物があったりするわけじゃなくて、Linux(bash)で環境構築できる感じにした感じです。本当はAntとかでWindowsとかでも試せるようにしたかったのですが、時間の都合でシェルで作りました。
$ svn co http://svn.sourceforge.jp/svnroot/fess/fess-cloud/trunk fess-cloud
$ cd fess-cloud/
今回の構成は、全部ローカルで試す感じにしてみます。構成的にはSolrCloudのWikiにあるExample CのZooKeeper+Solrが3台とSolr単体が1台の構成にします(さらに別途Fessがいます)。ZooKeeper+Solrの構成では、Solrのポートを8180とした場合は、ZooKeeperのポートは+1000した9180を利用する仕組みになっています。環境構築時にZooKeeperのアドレスとポートを決めておく必要があります。今回は以下のような感じ。
Fess | Solr | ZooKeeper | |
---|---|---|---|
Fess Server1 | localhost:8080 | – | – |
ZK+Solr Server1 | – | localhost:8180 | localhost:9180 |
ZK+Solr Server2 | – | localhost:8280 | localhost:9280 |
ZK+Solr Server3 | – | localhost:8380 | localhost:9380 |
Solr Server4 | – | localhost:8380 | – |
通常のFessだと、同じところにSolrを置いていますが、今回はSolrを取り除いています。今回はshardsの数はExample Cと同じように2で作ります。
それから環境をビルドします。引数にはZooKeeperのホストをカンマ区切りで記述します。
$ bash build.sh localhost:9180,localhost:9280,localhost:9380
実行するとtarget以下にfess-server-8.0.0とfess-cloud-jettyが生成されます。fess-cloud-jettyの方がZK+Solrの環境になります。Fessで利用しているSolrのschema.xmlなどが組み込まれています。
次に、fess-cloud-jettyコピーしてZK+Solr環境を作ります。今回はすべて同じサーバー上で行なっていますが、別サーバーで試すためには、fess-cloud-jettyをコピーすればOKです。
$ cd target
$ cp -r fess-cloud-jetty/ fess-cloud-1
$ cp -r fess-cloud-jetty/ fess-cloud-2
$ cp -r fess-cloud-jetty/ fess-cloud-3
$ cp -r fess-cloud-jetty/ fess-cloud-4
$ chmod +x fess-cloud-*/bin/*.sh
$ cd ..
あとは、順に起動していきます。server.shを含めてあるのでそれを実行すればOKです。(将来的にserver.shは変更するかも…)
別ターミナルで実行したほうがわかりやすいので、それぞれを順に上げていきます。
まず、ターミナル1でZK+Solr Server1を上げます。shardの数も2を指定します。
$ cd target/fess-cloud-1/
$ bash bin/server.sh leader 8180 2
$ tail -f logs/solrcloud.log
その他のZooKeeperが起動していないのでExceptionがでますが、無視して進めます。
ターミナル2でZK+Solr Server2を上げます。
$ cd target/fess-cloud-2/
$ bash bin/server.sh replica 8280
$ tail -f logs/solrcloud.log
ターミナル3でZK+Solr Server3を上げます。
$ cd target/fess-cloud-3/
$ bash bin/server.sh replica 8380
$ tail -f logs/solrcloud.log
ターミナル4でSolr Server4を上げます。
$ cd target/fess-cloud-4/
$ bash bin/server.sh solr 8480
$ tail -f logs/solrcloud.log
ここまでできたら、ブラウザから http://localhost:8180/solr/#/~cloud にアクセスしてみます。すると、SolrCloud図が表示されます。server.shスクリプトの第一引数がサブコマンドで、leaderにするとSolrのschema.xmlなどをZooKeeperに取り込みます。replicaはZKとSolrを起動して、別なZooKeeperから値を取得してきます。solrはZooKeeperなしでSolrだけ起動します。Solrだけを起動しますが、Solrの設定情報はZooKeeperから参照します。その他にstopとcleanがありますが、server.sh stop とすれば、起動したものを停止できます。clean で ZooKeeperで取り込んでいたものを削除します。インデックスまでは削除しません。(将来的にはこの辺のサブコマンドのあり方を見直したいです…)
次はFessです。target/fess-server-8.0.0のものを利用します。Fessも複数立ち上げたければ、それをコピーして別サーバーに持っていってください。
$ cd target/fess-server-8.0.0
$ ./bin/startup.sh
普通に起動するだけです。この辺は普通のFessと変わりません。あとは、いつのどおり、クロール設定をしてクロールして、検索してみてください。FessからはZooKeeperから取得できるSolrCloudの情報を元にアクセスするので、ZooKeeperのホスト指定を正しくしていれば、どっかのサーバーで起動すればSolrCloudから検索結果を取得することができると思います。これでFessCloudが完成です!
という感じで、FessCloudは以上ですが、現時点で気づいていることは、Fessの管理画面でシステム設定のSolrインスタンス情報がunknownになります。これは同じTomcatにないので仕方がないのですが…。Solrのスキーマについては、標準のschema.xmlにはtext_gosenのフィールド型があるのですが、gosenがあるとSolrCloudがgetConfigDir()的な(?)Exceptionが発生するため、取り除いてあります。あとは、本当はJettyでなく、Tomcatで動かしたかったのですが認証周りでいろいろとやる必要があるようで、ZooKeeperの知識を深めないとよくわかりません…(まだ、勉強不足です…)。そんな感じですが、普通に動いて、Fessからリクエストを送れば、SolrCloudの何かが返してくれるので、見ると面白いです。
「FessCloudを作ってみる」への1件のフィードバック