新米インフラエンジニアの研修日記

とある会社で研修させて頂いたことを書いてます。

Solr Cloud (ver.5.5.0) ~サーバ3台~

目次

  • 概要

  • 作成手順

  • 確認


概要

サーバ3台構成で、Zookeeper(3.4.8)とSolr Cloud(5.5.0)を使い、分散冗長構成の作り方をまとめます。
OSは、CentOS6.7です。

作成手順

まず、Zookeeperを用意します。
設定はこちらに記載してます。

the-casket-of-star.hatenablog.com

/opt/zookeeper/bin/zkServer.sh start
まで行った前提です。

Solrの設定を行います。

こちらを参考にさせて頂きました。

Tutorial – Deploying Solrcloud 5 on Amazon EC2 | Blog of France Labs on Search technologies

cd /tmp
wget http://ftp.tsukuba.wide.ad.jp/software/apache/lucene/solr/5.5.0/solr-5.5.0.tgz
tar -zxvf solr-5.5.0.tgz
mv /tmp/solr-5.5.0 /opt/
ln -s /opt/solr-5.5.0 /opt/solr

cd /opt/solr/
vi ./bin/solr.in.sh ※変更箇所
================================================
ZK_HOST="<Server1のIP>:2181,<Server2のIP>:2181,<Server3のIP>:2181"
ZK_CLIENT_TIMEOUT="150000"
SOLR_HOME=/var/solr/data
SOLR_PORT=8983
SOLR_MODE=solrcloud
================================================

mkidr -p /var/solr/data
chmod 777 /var/solr/data

cp -ap /opt/solr/server/solr/solr.xml /var/solr/data/
vi /var/solr/data/solr.xml
   <str name="host"><Server1のIPを記載></str>

solrを起動します。
オプションの -cはクラウドモードで起動するのに必要です。

./bin/solr start -c
Waiting up to 30 seconds to see Solr running on port 8983 [\]  
Started Solr server on port 8983 (pid=6299). Happy searching!

coreを作ります。

 ./bin/solr create -c test

※testはcore名なので、任意のcore名を指定して下さい。

ls /var/solr/data

testフォルダがあることを確認します。

間違えた時は、deleteコマンド

./bin/solr delete -c test

ブラウザで、

http://xxx.xxx.xxx.xxx:8983/solr/#/
にアクセスすると、下図のように表示されるはずです。

f:id:the-casket-of-star:20160427132120p:plain

左側のCore Adminをクリックすると、先ほど作ったcoreがあります。
f:id:the-casket-of-star:20160427115526p:plain

 cd /opt/solr/server/scripts/cloud-scripts/
./zkcli.sh -zkhost <Server1のIP>:2181,<Server2のIP>:2888,<Server3のIP>:2888 -cmd upconfig -confdir /opt/solr/server/solr/configsets/basic_configs/conf -confname solrconfig

上記までを、 残り2台のサーバ上で実行します。
IPアドレスは適宜変更して下さい。


ブラウザの アドレスバーで以下を実行すると、

http://xxx.xxx.xxx.xxx:8983/solr/admin/collections?action=CREATE&name=test&numShards=1&replicationFactor=3&collection.configName=solrconfig&maxShardsPerNode=3

各値について

  • name: collectionの名前

  • numShards: Shardsの数

  • replicationFactor: shards毎のレプリケーションの数。サーバーの台数と同じ必要がある。

  • collection.configName: /var/solr/data/test/conf/ の中の設定ファイル。初期はsolrconfig.xml

  • maxShardsPerNode: NodeあたりのShardsの最大数。

以下のようなXMLが返ってきます。

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">8649</int>
  </lst>
  <lst name="success">
  <lst>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">7170</int>
    </lst>
    <str name="core">test_shard1_replica1</str>
  </lst>
  <lst>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">7891</int>
  </lst>
  <str name="core">test_shard1_replica2</str>
  </lst>
  <lst>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">7903</int>
  </lst>
  <str name="core">test_shard1_replica3</str>
  </lst>
  </lst>
</response>


確認

ブラウザで確認したら、Recoverring状態でした。 f:id:the-casket-of-star:20160427140636p:plain

LeaderのSolrを再起動したら、全てActiveになり、再度Server1のSolrをstopしたら、leaderが変更されたのを確認しました。 f:id:the-casket-of-star:20160427141255p:plain

各サーバーのデータディレクトリの中に、
test_shard1_replica1
test_shard1_replica2
test_shard1_replica3

がそれぞれ作られました。

データを入れた検証はまた今度。