Solrクラスターのアップグレード

このページでは、サービスインストールスクリプトを使用してインストールされた既存のSolrクラスターをアップグレードする方法について説明します。

このページで概説する手順では、デフォルトのサービス名solrを使用することを前提としています。別のサービス名またはSolrインストールディレクトリを使用する場合は、以下に記載されているパスとコマンドの一部を適宜変更する必要があります。

アップグレードの計画

アップグレードプロセスを開始する前に準備する必要がある事項のチェックリストを以下に示します。

  1. Solrアップグレードノートを確認して、新しいバージョンのSolrでの動作変更がインストールに影響を与えるかどうかを判断してください。

  2. レプリケーションを使用していない場合(つまり、replicationFactorが1未満のコレクション)、各コレクションのバックアップを作成する必要があります。すべてのコレクションがレプリケーションを使用している場合は、各ノードを個別にアップグレードおよび検証するため、技術的にはバックアップを作成する必要はありません。

  3. SolrCloudで現在OverseerリーダプロセスをホストしているSolrノードを特定します。このノードは最後にアップグレードする必要があります。Overseerを特定するには、OverseerステータスAPIを使用します。

  4. 可能な場合は、システムメンテナンスウィンドウ中にアップグレードを実行することを計画してください。クラスターのローリング再起動(各ノードを1つずつ)を実行しますが、システムの使用率が最小限のときにアップグレードを実行することをお勧めします。

  5. クラスターが現在正常であり、すべてのレプリカがアクティブであることを確認します。劣化しているクラスターではアップグレードを実行しないでください。

  6. 新しいSolr JARファイルに対して、すべてのカスタムサーバー側コンポーネントを再構築してテストします。

  7. Solrコントロールスクリプトで使用される次の変数の値を決定します。

    • ZK_HOST: 現在のSolrCloudノードがZooKeeperに接続するために使用するZooKeeper接続文字列。この値は、クラスター内のすべてのノードで同じになります。

    • SOLR_HOST: 各SolrノードがSolrCloudクラスターに参加するときにZooKeeperに登録するために使用したホスト名。この値は、新しいSolrプロセスを開始するときにhost Javaシステムプロパティを設定するために使用されます。

    • SOLR_PORT: 各Solrノードがリッスンしているポート(例:8983)。

    • SOLR_HOME: 各SolrノードのSolrホームディレクトリへの絶対パス。この値は、solr.solr.homeシステムプロパティを使用して新しいSolrプロセスに渡されます。参照:solr.xmlの設定

      Solr 5.x以降のインストールからアップグレードする場合は、これらの値は通常、/var/solr/solr.in.shまたは/etc/default/solr.in.shのいずれかにあります。

これでクラスターをアップグレードする準備が整いました。本番環境で実行する前に、テストクラスターまたはステージングクラスターでこのプロセスを検証してください。

アップグレードプロセス

推奨するアプローチは、Solrの各ノードを一つずつアップグレードすることです。言い換えれば、ノードを停止し、Solrの新しいバージョンにアップグレードし、次のノードに進む前に再起動する必要があります。これは、短期間の間、クラスター内で「旧Solr」と「新Solr」のノードが混在して実行されることを意味します。また、新しいSolrノードが、ノード上の各コレクションでLuceneインデックスファイルを管理している既存のSolrホームディレクトリを指すことを想定しています。これは、アップグレードを実行するためにインデックスファイルを移動する必要がないことを意味します。

ステップ 1: Solr を停止する

まず、アップグレードするSolrノードを停止します。ノードを停止した後、レプリケーションを使用している場合(つまり、replicationFactorが1未満のコレクション)、ダウンしたノードでホストされていたすべてのリーダーが他のレプリカに正常に移行したことを確認します。これは、Solr Admin UIのCloud Screensにアクセスすることで確認できます。レプリケーションを使用していない場合、ダウンしたノードでシャードがホストされているコレクションは一時的にオフラインになります。

ステップ 2: Solr をサービスとしてインストールする

Solrを本番環境に導入するに記載されているLinuxでのSolrをサービスとしてインストールする手順に従ってください。インストーラースクリプトによるSolrの自動起動を避けるために、-nパラメータを使用します。アップグレードプロセスを完了するには、次のステップで/etc/default/solr.in.shインクルードファイルを更新する必要があります。

既存のSolrインストールで/var/solr/solr.in.shファイルがある場合、install_solr_service.shスクリプトを実行すると、このファイルは新しい場所/etc/default/solr.in.shに移動します(詳細については、SOLR-8101を参照してください)。

ステップ 3: 環境変数オーバーライドを設定する

テキストエディタで/etc/default/solr.in.shを開き、次の変数が正しく設定されていることを確認するか、必要に応じてインクルードファイルの末尾に追加します。

ZK_HOST=
SOLR_HOST=
SOLR_PORT=
SOLR_HOME=

Solrプロセスを所有する予定のユーザーが、SOLR_HOMEディレクトリの所有者であることを確認してください。たとえば、Solrを「solr」ユーザーとして実行し、SOLR_HOME/var/solr/dataである場合、sudo chown -R solr: /var/solr/dataを実行します。

ステップ 4: Solr を起動する

sudo service solr startを実行して、アップグレードされたSolrノードを起動する準備ができました。アップグレードされたインスタンスは、古いSolrノードで使用していた同じSOLR_HOMESOLR_PORT、およびSOLR_HOST設定を使用しているため、既存のクラスターに参加します。したがって、新しいサーバーは実行中のクラスターにとって古いノードのように見えます。起動中にエラーが発生した場合、/var/solr/logs/solr.logを確認してください。

ステップ 5: ヘルスチェックを実行する

クラスター内の次のノードをアップグレードする前に、アップグレードしたノードでホストされているすべてのコレクションに対してSolrのヘルスチェックコマンドを実行する必要があります。たとえば、新しくアップグレードしたノードがMyDocumentsコレクションのレプリカをホストしている場合は、次のコマンドを実行できます(ZK_HOSTをZooKeeper接続文字列に置き換えてください)。

/opt/solr/bin/solr healthcheck -c MyDocuments -z ZK_HOST

コレクションのレプリカに関する問題が報告されていないか確認してください。

最後に、クラスター内のすべてのノードに対してステップ1〜5を繰り返します。