Solr Cloudを動かしてみる

シーマークの山本です。

Apache Solr は全文検索エンジンとして様々なところで使われており、もはや特殊なプロダクトでは無く、検索機能を実現するならSolrというほどコモディティーとしての広がりを見せています。Solrバージョン5からはSolr Cloud機能が実装され、検索「エンジン」から検索「システム」へと変貌を遂げてきています。

そこで、Solr Cloudを使って検索システムを構築する方法についてまとめていきたいと思います。ただ、Solr Cloudのチュートリアルにある付属のサンプルを動かす方法ではなく、実際の商用プロジェクトで必要になりそうな「こんな時どうする」的なTipsを中心にまとめていきます。

構築する検索サービスの想定(=要件)

商用で提供する検索サービスであれば最低限気にすることではありますが、今回説明していくためのサービス想定、言い換えれば要件を列挙しました。

  1. AmazonのAWSや、Microsoft Azureなどのクラウド環境で複数台のサーバインスタンスを使ってSolr Cloudを構築する
  2. 検索サービスが止まらないよう高い可用性を実現する
  3. 検索サービスで提供する機能が増え、Solrの設定を変更する場合でも簡単に行える
  4. 利用者が増えても検索速度が落ちないよう簡単に負荷分散できる
  5. 検索対象データが増えても検索速度が落ちないよう簡単に拡張できる

こう書いてみると、なかなか大変そうな要件ではありますが、Solr Cloudを使えば、案外簡単にできちゃったりする(かも)のでご安心を。

 

1. 開発環境の構築

まず、「要件1 複数サーバを使って構築すること」をいきなり実現しようとすると、AWSのアカウントだったり費用がかかったりするので、まずは自分のPC上で開発環境をつくるところから始めましょう。

開発環境ですが、私がMac派なので、Macを前提に書いていきます。ただ、Windowsとまるっきり違うかどうかと言えば、あまり差異はないはずです。明らかに違うところは補足を入れます。

1.1 Solrのダウンロード

まずは、Solrのダウンロードです。執筆時点では 6.2.1 が最新でした。

https://lucene.apache.org/solr/mirrors-solr-latest-redir.html

ダウンロードしたSolrをお好きなところに展開します。

 

1.2 検索サービス用のSolr configセット

検索サービスとしてどのようなデータをインデックスし、どのように検索させるかを定義するため、Solrではいくつかの設定ファイルを用意する必要があります。通常のSolrとは異なり、Solr Cloudで利用するSolr設定ファイルセットは、zookeeperという別のミドルウェアに登録し管理することになります。

Solr設定ファイルの内容については、本題からはずれることもあり、Solrダウンロードパッケージに含まれるサンプルである「techproducts」用の設定ファイルをそのまま利用します。既にあるので、それを適当なところへコピーします。

 

次は、Solrの設定から一旦はなれ、Solr Cloudを構成する名脇役 zookeeperの設定についてです。

 

1.3 zookeeperを設定する

zookeeperって初めて聞いたって人もいるかと思いますので、軽く紹介を。

https://zookeeper.apache.org/

Apache zookeeperは、複数のサーバインスタンスで構成される分散システムにおいて、設定情報の同期、グルーピングや名前付けの管理を提供するミドルウェアです。

Solr Cloudでは、Solr設定ファイルの集中管理と配布、Solrサーバの管理(shards / Replica、solr nodeの生死等)をzookeeperが提供しています。

zookeeperのインストールは、上記のzookeeperのサイトからダウンロードして、Solrと同じく好きなところに展開します。(もし、Mac環境でbrewをお使いであれば、brew install zookeeperでインストールも可能です)

執筆時点での stableなバージョンは 3.4.9 でした。

http://ftp.jaist.ac.jp/pub/apache/zookeeper/stable/zookeeper-3.4.9.tar.gz

zookeeperは、検索システムの設定情報や構成情報を集中的に管理しています。zookeeperが止まれば、Solr Cloudも停止します。そこで、zookeeperの可用性を高めるため、zookeeperを複数台のサーバーで稼働させます。できれば、Solr Cloudとは異なる専用サーバを用意することが望ましいです。また複数台と言ってもzookeeperの特性上、奇数台で運用をすることが要件となっています。つまり、3台、5台構成をとることが必要です。開発環境では1台の中で3プロセスを起動するようにしましょう。

まず、3プロセス用のzookeeper設定ファイルを用意します。

そして、格納されるデータディレクトリ(dataDirで指定されているディレクトリ)を作成し、そこに設定ファイルを追加します。

これで、zookeeperを起動する準備が整いました。さて起動させましょう。

一応止めるコマンドも。

これで、zookeeperの準備は整いました。

 

1.4 Solr configファイルセットのzookeeperへの登録

1.2 で用意したSolr設定ファイルセットをzookeeperに登録しましょう。登録する際、zookeeper上で管理するための名前を付ける必要があります。ここでは「techp」としました。

これで、Solr Cloudで利用される設定ファイルセットがzookeeperで「techp」という名前で管理されました。

 

1.5 Solr cloudの立ち上げ

本体であるSolr Cloudを立ち上げましょう。複数台で構成するのでしたよね。開発環境なので、1台で複数インスタンスを立ち上げましょう。今回は4台構成とします。

まず、そのための準備です。

では、立ち上げます。Solrの待受ポートは通常は8983なんですが、4つのインスタンスを立ち上げるため、8983, 8984, 8985, 8986として起動します。

これで、4インスタンスがSolr Cloudとして立ち上がっています。

念のため、停止させるコマンドも。

 

1.6 collectionの作成

Solr Cloudでは、検索データをとりまとめる単位をCollectionと呼んでいます(通常起動のSolrでcoreと呼ばれていたものと同じ概念です)。Collectionを作成しましょう。Solr Cloudでは、複数台のサーバにうちどれか1台に対して操作するだけで、Solr Cloud全体に反映されます。

パラメータの説明です

パラメータ設定内容
-ctechproductsCollection名
-ntechpzookeeperで登録されている設定ファイルセット名
-shards2シャード数。1つのインデックスを複数に分割する場合。通常SolrでいうShardsと同じ意味。
-replicationFactor2レプリカ数。レプリケーションとしていくつコピーを作成しておくかの指定。通常Solrではreplication用Solrの数と同じ意味。
-p8984操作対象とするSolrインスタンス。今回であれば、8983, 8984, 8985, 8986のどれか

 

作成されたことを、Solr管理画面で確認してみましょう。

localhost8983

 

1.6 データの投入

Solr Cloudへのデータ投入は様々な方法があります。これについては本題からはずれるため、サンプルで用意されているデータファイルをコマンドを使って投入してみましょう。ここでも、複数台のうちどれかにデータを投げれば、Solr Cloud全台に反映されます。8984, 8986 に投げてみる例です。

検索できるかどうか、Solr管理画面で確認してみましょう。

solrsearch

できましたね。

今回は、ここまでといたします。残りの部分は、後日アップいたします。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です