AWS EC2 上の SolrCloud

このガイドでは、初期の開発と設計のために、Amazon Web Services (AWS) EC2 インスタンスにマルチノード SolrCloud クラスタをセットアップする方法をチュートリアル形式で説明します。

このチュートリアルは、本番システム用ではありません。一つには、Solr の組み込み ZooKeeper インスタンスを使用していますが、本番環境では、アンサンブル内に少なくとも 3 つの ZooKeeper ノードが必要です。本番環境へのインストールには、追加の手順を実行する必要があります。本番環境に Solr をデプロイする方法については、Solr を本番環境に移行する を参照してください。

このガイドでは、次のことを行います。

  1. 複数の AWS EC2 インスタンスを起動する

    • 新しい *セキュリティグループ* を作成する

    • インスタンスを設定して起動する

  2. 新しく起動した EC2 インスタンスに Solr をインストール、設定、起動する

    • システム前提条件をインストールする: Java 1.8 以降

    • 最新バージョンの Solr をダウンロードする

    • SolrCloud モードで Solr ノードを起動する

  3. コレクションを作成し、ドキュメントをインデックス付けし、システムにクエリを実行する

    • 複数のシャードとレプリカを持つコレクションを作成する

    • 新しく作成されたコレクションにドキュメントをインデックス付けする

    • コレクションにクエリを実行してドキュメントの存在を確認する

始める前に

このガイドを使用するには、以下が必要です。

  • AWS アカウント。

  • ローカルマシンにシングルノード SolrCloud をセットアップする方法に関する知識。Solr を使用したことがない場合は、Solr チュートリアル を参照してください。

EC2 インスタンスの起動

新しいセキュリティグループの作成

  1. AWS EC2 コンソール に移動し、選択したリージョンに移動します。

  2. インストールへのアクセスを制限し、起動した EC2 インスタンスが制限なく相互に通信できるようにする AWS セキュリティグループ を設定します。

    1. EC2 ダッシュボードの左側のメニューにある「ネットワークとセキュリティ」の下にある セキュリティグループ をクリックします。

    2. *セキュリティグループ* セクションの下にある セキュリティグループの作成 をクリックします。セキュリティグループにわかりやすい名前を付けます。

    3. 既存の VPC のいずれかを選択するか、新しい VPC を作成できます。

    4. ここでは、クラウド用に 2 つのポートを開く必要があります。

      1. Solr ポート。この例では、Solr のデフォルトポート 8983 を使用します。

      2. ZooKeeper ポート: Solr の組み込み ZooKeeper を使用するため、デフォルトポート 9983 を使用します(外部 ZooKeeper を設定するには、外部 ZooKeeper でのデプロイ を参照してください)。

    5. 受信ネットワークルールを設定するには、受信 をクリックし、ルールの追加 を選択します。タイプとして「カスタム TCP」を選択します。「ポート範囲」に `8983` と入力し、ソースに「マイ IP」を選択し、パブリック IP を入力します。同じタイプとソースで 2 番目のルールを作成しますが、ポートには `9983` と入力します。

      これにより、現在のマシンへのアクセスが制限されます。他のユーザーと共同作業するために、インスタンスへのより広範なアクセスが必要な場合は、それを指定できますが、必要なアクセスのみを許可するようにしてください。Solr インスタンスを一般的なインターネットトラフィックに公開しないでください。

    6. SSH アクセス用の別のルールを追加します。タイプとして「SSH」を選択し、ソースとして再び「マイ IP」を選択し、再びパブリック IP を入力します。Solr をインストールして設定するには、すべてのインスタンスで SSH アクセスが必要です。

    7. 詳細を確認します。グループ設定は次のようになります。

      image
    8. 完了したら、作成 をクリックします。

    9. グループに属するインスタンスが、同じグループに属する他のすべてのインスタンスと通信できるように、ルールを変更する必要があります。グループの作成中はこれを行うことができなかったため、作成後にグループを編集してこれを追加する必要があります。

      1. セキュリティグループの概要テーブルで、新しく作成されたグループを選択します。「受信」タブで、編集 をクリックします。

      2. ルールの追加をクリックします。 タイプのプルダウンリストからAll TCPを選択し、ポート範囲に0-65535と入力します。 現在のセキュリティグループの名前をsolr-sampleとして指定します。

    10. 詳細を確認してください。グループの設定は次のようになります。

      image
    11. 完了したら、保存をクリックします。

インスタンスの設定と起動

セキュリティグループの設定が完了したら、左側のナビゲーションメニューからインスタンスを選択します。

インスタンスで、インスタンスの起動ボタンをクリックし、ウィザードの手順に従います。

  1. Amazonマシンイメージ(AMI)を選択します。AMIとして**Amazon Linux AMI、SSDボリュームタイプ**を選択します。 コマーシャルAMIとコミュニティベースのAMIの両方があります(例:Amazon Linux AMI(HVM)、SSDボリュームタイプ)。これは、今回の目的には適したAMIです。 選択したイメージの横にある選択をクリックします。

  2. 次の画面では、インスタンスタイプを選択するように求められます。**t2.medium**で十分です。 リストから選択し、インスタンスの詳細の設定をクリックします。

  3. インスタンスを設定します。 「インスタンスの数」フィールドに**2**と入力します。 「パブリックIPの自動割り当て」の設定が「有効」になっていることを確認します。

  4. 完了したら、ストレージの追加をクリックします。 サイズはデフォルトの**8 GB**、ボリュームタイプは**汎用SSD**で、このクイックスタートを実行するには十分です。 インスタンスを終了した後にSolrインデックスに保存されているデータが不要な場合は、オプションで「終了時に削除」を選択します。

  5. 完了したら、タグの追加をクリックします。 このクイックスタートではタグを追加する必要はありませんが、必要に応じて追加できます。

  6. セキュリティグループの設定をクリックします。 **既存のセキュリティグループを選択**を選択し、前に作成したセキュリティグループsolr-sampleを選択します。 ページの下部に、想定されるインバウンドルールが表示されます。

  7. 確認をクリックします。

  8. すべてが正しければ、起動をクリックします。

  9. 既存の「秘密鍵ファイル」を選択するか、新しいファイルを作成してローカルマシンにダウンロードし、SSH経由でインスタンスにログインできるようにします。

    image
  10. インスタンスリストで、状態の変化を確認できます。 インスタンスが**「実行中」**になるまで、インスタンスを使用できません。

インストール、設定、および起動

  1. インスタンスのリストからインスタンスを選択して、インスタンスのパブリックDNSレコードを見つけ、各マシンに1つずつログオンします。

    SSHを使用して、AWS IDキーファイルがaws-key.pemで、AMIがログインユーザーとしてec2-userを使用している場合、各AWSインスタンスで次の手順を実行します。

    $ ssh-add aws-key.pem
    $ ssh -A ec2-user@<instance-public-dns>
  2. 各AWS EC2インスタンスにログインしている間に、Java 1.8を設定し、Solrをダウンロードします。

    # verify default java version packaged with AWS instances is 1.7
    $ java -version
    $ sudo yum install java-1.8.0
    $ sudo /usr/sbin/alternatives --config java
    # select jdk-1.8
    # verify default java version to java-1.8
    $ java -version
    # download desired version of Solr
    $ wget http://archive.apache.org/dist/solr/solr/{solr-full-version}/solr-{solr-full-version}.tgz
    # untar
    $ tar -zxvf solr-{solr-full-version}.tgz
    # set SOLR_HOME
    $ export SOLR_HOME=$PWD/solr-{solr-full-version}
    # put the env variable in .bashrc
    # vim ~/.bashrc
    export SOLR_HOME=/home/ec2-user/solr-{solr-full-version}
  3. パブリックDNSをより単純なホスト名に解決します。

    AWSインスタンスのパブリックDNSとIPv4パブリックIPが以下のようになっていると仮定します。

    • ec2-54-1-2-3.us-east-2.compute.amazonaws.com: 54.1.2.3

    • ec2-54-4-5-6.us-east-2.compute.amazonaws.com: 54.4.5.6

      /etc/hostsを編集し、上記のマシンのエントリを追加します。

      $ sudo vim /etc/hosts
      54.1.2.3 solr-node-1
      54.4.5.6 solr-node-2
  4. 実行中のEC2インスタンスでSolrを設定します。

    この場合、マシンの1つがSolrノードと共に埋め込まれたZooKeeperをホストします。たとえば、ec2-101-1-2-3.us-east-2.compute.amazonaws.com(別名、solr-node-1)です。

    外部ZooKeeperの設定については、外部ZooKeeperを使用したデプロイを参照してください。

    ec2-101-1-2-3.us-east-2.compute.amazonaws.comsolr-node-1)内

    $ cd $SOLR_HOME
    # start Solr node on 8983 and ZooKeeper will start on 8983+1000 9983
    $ bin/solr start -c -p 8983 -h solr-node-1

    もう一方のノード、ec2-101-4-5-6.us-east-2.compute.amazonaws.comsolr-node-2)上

    $ cd $SOLR_HOME
    # start Solr node on 8983 and connect to ZooKeeper running on first node
    $ bin/solr start -c -p 8983 -h solr-node-2 -z solr-node-1:9983
  5. 検査と検証。ローカルマシンのブラウザからSolrノードの状態を検査します。

    次へ移動します。

    http://ec2-101-1-2-3.us-east-2.compute.amazonaws.com:8983/solr (solr-node-1:8983/solr)
    
    http://ec2-101-4-5-6.us-east-2.compute.amazonaws.com:8983/solr (solr-node-2:8983/solr)

    両方のノードのSolr UIダッシュボードが表示されます。

コレクション、インデックス、およびクエリの作成

複数のシャードとレプリカを持つコレクションの作成、さまざまな方法によるデータのインデックス作成、およびそれに応じたドキュメントのクエリに関する詳細なチュートリアルについては、Solrチュートリアルを参照してください。

外部ZooKeeperを使用したデプロイ

Solrノードと同じJVMで実行される埋め込みシングルインスタンスZooKeeperの使用を回避するために、外部ZooKeeperアンサンブルを設定する場合、上記の手順を次のように少し調整する必要があります。

  • セキュリティグループを作成するときに、ZooKeeperのポート9983を開く代わりに、2181(またはZooKeeperに使用しているポート:デフォルトは2181)を開きます。

  • 起動するインスタンスの数を設定するときは、2つではなく3つのインスタンスを開くように選択します。

  • 各マシンで/etc/hostsを変更するときは、3番目のインスタンスの3行目を追加し、認識可能な名前を付けます。

    $ sudo vim /etc/hosts
    54.1.2.3  solr-node-1
    54.4.5.6  solr-node-2
    54.7.8.9  zookeeper-node
  • 次のセクションで説明するように、ZooKeeperを手動でインストールする必要があります。

ZooKeeperのインストール

以下の手順は、AWSにZooKeeperの単一インスタンスをインストールして設定するのに役立ちます。 ただし、これは、少なくとも3つのノードのZooKeeperアンサンブルが推奨される本番環境での使用には十分ではありません。 この単一インスタンスをアンサンブルに変更する方法については、ZooKeeperアンサンブルの設定セクションを参照してください。

  1. 安定バージョンのZooKeeperをダウンロードします。 この例では、ZooKeeper v3.9.1を使用しています。 ZooKeeper(zookeeper-node)をホストするために使用しているノードで、パッケージをダウンロードして展開します。

    # download stable version of ZooKeeper, here {dep-version-zookeeper}
    $ wget https://archive.apache.org/dist/zookeeper/zookeeper-{dep-version-zookeeper}/apache-zookeeper-{dep-version-zookeeper}.tar.gz
    # untar
    $ tar -zxvf apache-zookeeper-{dep-version-zookeeper}.tar.gz

    ZooKeeperのホームディレクトリ(ZOO_HOME)の環境変数を、プロセスを実行するユーザーの.bashrcに追加します。 残りの手順では、この変数を設定していることを前提としています。 ZooKeeperのインストール場所が以下と一致しない場合は、パスを適切に修正してください。

    $ export ZOO_HOME=$PWD/apache-zookeeper-3.9.1
    # put the env variable in .bashrc
    # vim ~/.bashrc
    export ZOO_HOME=/home/ec2-user/apache-zookeeper-3.9.1
  2. ディレクトリをZOO_HOMEに変更し、ZooKeeperによって提供されるテンプレートを使用してZooKeeper設定を作成します。

    $ cd $ZOO_HOME
    # create ZooKeeper config by using zoo_sample.cfg
    $ cp conf/zoo_sample.cfg conf/zoo.cfg
  3. ファイルシステムにZooKeeperデータディレクトリを作成し、zoo.cfgファイルを編集して、自動パージパラメータのコメントを外し、データディレクトリの場所を定義します。

    # create data dir for ZooKeeper, edit zoo.cfg, uncomment autopurge parameters
    $ mkdir data
    $ vim conf/zoo.cfg
    # -- uncomment --
    autopurge.snapRetainCount=3
    autopurge.purgeInterval=1
    # -- edit --
    dataDir=data
  4. ZooKeeperを起動します。

    $ cd $ZOO_HOME
    # start ZooKeeper, default port: 2181
    $ bin/zkServer.sh start
  5. Solrに使用されている最初のノード(solr-node-1)で、Solrを起動し、ZooKeeperの場所を指示します。

    $ cd $SOLR_HOME
    # start Solr node on 8983 and connect to ZooKeeper running on ZooKeeper node
    $ bin/solr start -c -p 8983 -h solr-node-1 -z zookeeper-node:2181
  6. 2番目のSolrノード(solr-node-2)で、再びSolrを起動し、ZooKeeperの場所を指示します。

    $ cd $SOLR_HOME
    # start Solr node on 8983 and connect to ZooKeeper running on ZooKeeper node
    $ bin/solr start -c -p 8983 -h solr-node-1 -z zookeeper-node:2181

前述のように、単一のZooKeeperノードは本番環境のインストールには十分ではありません。 EC2インスタンスが起動して実行されたら使用できる、本番環境でのSolrのデプロイに関する詳細については、以下の追加リソースを参照してください。