SharePoint Server でインデックス コンポーネントを管理する
適用対象:2016 2019 Subscription Edition SharePoint in Microsoft 365
この記事の手順と例では、SharePoint Server と Search Service アプリケーションがインストール済みで、また、SharePoint Server 検索インデックス内に、既存の検索トポロジおよびアイテムがあると想定しています。 SharePoint Server と Search Service アプリケーションがインストールされたばかりで、SharePoint Server 検索インデックスが空の場合、検索トポロジをスケール アウトするには、「SharePoint Server で既定の検索トポロジを変更する」で概要を説明している手順を使用してください。
この記事の手順はインデックス コンポーネントに適用されます。 分析処理コンポーネント、コンテンツ処理コンポーネント、クロール コンポーネント、検索管理コンポーネント、およびクエリ処理コンポーネントを管理する方法については、「SharePoint Server で検索コンポーネントを管理する」をご覧ください。
インデックス パーティションとインデックス レプリカの両方を管理する目的で、インデックス コンポーネント PowerShell コマンドレット (New-SPEnterpriseSearchIndexComponent) を使用します。 検索トポロジ内の各インデックス コンポーネントがインデックス レプリカを表します。
検索インデックスは、 インデックス パーティション と呼ばれる個別の部分に分割されます。 各インデックス パーティションはローカル ディスク上に一連のファイルとして保存されます。 検索インデックスを スケール アウト するには、新しいインデックス パーティションを追加します。
SharePoint Server 検索インデックスで フォールト トレランス を実現するには、検索トポロジに既存のインデックス パーティションのインデックス レプリカを追加します。 各インデックス レプリカには同じ情報が含まれます。
開始する前に
作業を始める前に、次の前提条件を確認してください。
SharePoint Server がインストールされており、検索トポロジを使用する Search Service アプリケーションが作成されている。
この記事の手順を実行するユーザー アカウントが ファームの管理者 グループのメンバーである。
ターゲット検索トポロジを計画しており、インデックス パーティションとインデックス レプリカをホストするサーバーを計画している。
SharePoint Server が、インデックス コンポーネントをホストする予定のすべてのサーバー上にインストールされています。 新しいアプリケーション サーバーを作成することも、既存の展開のアプリケーション サーバーを定義することもできます。 サーバーはファームに追加され、ユーザーは、これらのすべてのサーバーの管理者である必要があります。
既存のインデックス パーティションにインデックス レプリカを追加する
既存のインデックス パーティションのフォールト トレランスを実現するには、検索トポロジにインデックス レプリカを追加します。 個別のサーバー上の個別の障害ドメイン上にインデックス レプリカを配置します。 インデックス レプリカを追加するとき、検索トポロジに新しいインデックス コンポーネントを追加して、レプリカを作成するインデックス パーティションにそれを関連付けます。
重要
この手順では Microsoft PowerShell を使用します。 ファーム内の任意のサーバー上で Microsoft PowerShell コマンドを実行できます。 しかし、コマンド間で Microsoft PowerShell オブジェクト参照を共有できるように、この手順のすべての Microsoft PowerShell コマンドで同じ SharePoint 管理シェルを使用する必要があります。
インデックス レプリカを追加するには
この手順を実行するユーザー アカウントがファーム管理者グループのメンバーであることを確認します。
ファーム内の 1 つのサーバーで SharePoint 管理シェルを開始します。
インデックス レプリカを作成するサーバー上で Search Service インスタンスを開始し、Search Service インスタンス ID への参照を作成します。Microsoft PowerShell コマンド プロンプトで、次のコマンドを入力します。
$<host n > = Get-SPEnterpriseSearchServiceInstance -Identity "<Server name>" Start-SPEnterpriseSearchServiceInstance -Identity $<host n >
ここで、
$<host n> 検索サービス インスタンスの PowerShell オブジェクト参照を指定します。
<Server name> には、インデックス コンポーネントを追加するサーバーを指定します。 入力は、
12345678-90ab-cdef-1234-567890bcdefgh
形式の有効な GUID、サーバーの有効な名前 ( myserver1 など)、または有効な SearchServiceInstance オブジェクトのインスタンスである必要があります。
例:
$hostA = Get-SPEnterpriseSearchServiceInstance -Identity "myserver1" Start-SPEnterpriseSearchServiceInstance -Identity $hostA
検索サービス インスタンスが実行されるまで待ちます。 Microsoft PowerShell コマンド プロンプトで、コマンドが 状態 Online を返すまで、次のコマンドを入力します。
Get-SPEnterpriseSearchServiceInstance -Identity $<host n >
アクティブな検索トポロジを複製します。 Microsoft PowerShell コマンド プロンプトで、次のコマンドを入力します。
$ssa = Get-SPEnterpriseSearchServiceApplication $active = Get-SPEnterpriseSearchTopology -SearchApplication $ssa -Active $clone = New-SPEnterpriseSearchTopology -SearchApplication $ssa -Clone -SearchTopology $active
新しいインデックス コンポーネントを追加し、それをパーティションに関連付けます。 Windows PowerShell コマンド プロンプトで、次のコマンドを入力します。
New-SPEnterpriseSearchIndexComponent -SearchTopology $clone -SearchServiceInstance <host n > -IndexPartition <Index partition number>
詳細は次のとおりです。
$clone は、変更する、複製したトポロジです。
$<host n> は、インデックス レプリカを追加するサーバー上の実行中の検索サービス インスタンスへの PowerShell オブジェクト参照です。
<Index partition number> は、レプリカ作成元の既存のインデックス パーティションの番号です。 たとえば、インデックス パーティション 0 のインデックス レプリカを作成するには、パラメーター値として "0" を選択します。
次に例を示します。
New-SPEnterpriseSearchIndexComponent -SearchTopology $clone -SearchServiceInstance $hostA -IndexPartition 0
複製トポロジをアクティブ化します。 Microsoft PowerShell コマンド プロンプトで、次のコマンドを入力します。
Set-SPEnterpriseSearchTopology -Identity $clone
新しいトポロジがアクティブであり、新しいインデックス レプリカを表すインデックス コンポーネントが追加されていることを確認してください。 Microsoft PowerShell コマンド プロンプトで、次のコマンドを入力します。
Get-SPEnterpriseSearchTopology -Active -SearchApplication $ssa
既存のインデックスの新しいレプリカへの配信を監視します。 配信が完了するまで、追加されたインデックス レプリカは 低下 状態になります。 Microsoft PowerShell コマンド プロンプトで、次のコマンドを入力します。
Get-SPEnterpriseSearchStatus -SearchApplication $ssa -Text
新しいインデックス コンポーネントを含め、すべての検索コンポーネントが アクティブ 状態を出力するまで、このコマンドを繰り返します。 大規模な検索インデックスで、これは数時間をかかることがあります。
新しいインデックス パーティションを追加する
新しいインデックス パーティションを追加するとき、検索インデックスは再パーティション化する必要があります。 検索インデックスのサイズによって、この再パーティション化は完了まで数時間かかることがあります。
インデックス パーティションを追加し、検索インデックスを再パーティション分割するには、新しいインデックス コンポーネントを検索トポロジに追加し、このインデックス コンポーネントを新しいインデックス パーティション番号に関連付けます。 インデックス パーティションの追加と検索インデックスの再パーティション分割は、別のプロセスとして開始する必要があり、検索トポロジに他の変更を加える間は開始しないでください。
新しいインデックス パーティションには、既存のパーティションと同じ数のインデックス レプリカを追加する必要があります。
検索トポロジに新しいインデックス パーティションを追加し、検索インデックスを再パーティション化する前に、以下を実行します。
Search Service アプリケーションと既存の検索インデックスをバックアップします。 「SharePoint Server で Search service アプリケーションをバックアップする」をご覧ください。
最新のアクティブなトポロジが正常であることを確認してください。 サーバーの全体管理の [検索管理] ページで検索トポロジの状態を表示するか、Microsoft PowerShell コマンドレット
Get-SPEnterpriseSearchStatus
を実行します。インデックス パーティションを追加するサーバー上に十分なディスク領域があることを確認してください。
注意
Search Service アプリケーションはインデックス再パーティション化中に一時停止することから、コンテンツのクロールや、インデックス作成はできません。 また、ユーザーはクエリを実行できません。
インデックス パーティションを追加するには
この手順を実行するユーザー アカウントがファーム管理者グループのメンバーであることを確認します。
ファーム内の 1 つのサーバーで SharePoint 管理シェルを開始します。
新しいインデックス パーティションのインデックス レプリカを追加するすべてのサーバー上で Search Service インスタンスを開始します。 後の手順で使用する Search Service インスタンスへの PowerShell オブジェクト参照を作成します。 各サーバーの Microsoft PowerShell コマンド プロンプトで、次のコマンドを入力します。
$<host n > = Get-SPEnterpriseSearchServiceInstance -Identity "<Server name>" Start-SPEnterpriseSearchServiceInstance -Identity $<host n >
詳細は次のとおりです。
<host n> には、Search Service インスタンスの PowerShell オブジェクト参照を指定します。
<Server name> には、インデックス コンポーネントを追加するサーバーを指定します。 入力は、
12345678-90ab-cdef-1234-567890bcdefgh
形式の有効な GUID、サーバーの有効な名前 ( myserver1 など)、または有効な SearchServiceInstance オブジェクトのインスタンスである必要があります。
例:
$hostC = Get-SPEnterpriseSearchServiceInstance -Identity "myserver3" Start-SPEnterpriseSearchServiceInstance -Identity $hostC $hostD = Get-SPEnterpriseSearchServiceInstance -Identity "myserver4" Start-SPEnterpriseSearchServiceInstance -Identity $hostD
検索サービス インスタンスが実行されるまで待ちます。 サーバーごとに、Microsoft PowerShell コマンド プロンプトで、コマンドが 状態 Online を返すまで次のコマンドを入力します。
Get-SPEnterpriseSearchServiceInstance -Identity $<host n >
アクティブな検索トポロジを複製します。 Microsoft PowerShell コマンド プロンプトで、次のコマンドを入力します。
$ssa = Get-SPEnterpriseSearchServiceApplication $active = Get-SPEnterpriseSearchTopology -SearchApplication $ssa -Active $clone = New-SPEnterpriseSearchTopology -SearchApplication $ssa -Clone -SearchTopology $active
コマンドは、 $clone で参照できる複製検索トポロジを作成し、複製トポロジに関する情報を返します。 再パーティション化プロセスを取り消す場合に備えて、複製されたトポロジのトポロジ ID を記録しておいてください。
1 つまたは複数のインデックス コンポーネントを追加することによって新しいインデックス パーティションを追加し、新しいインデックス パーティションにそれらを関連付けます。 新しいインデックス パーティションには、既存のパーティションと同じ数のインデックス レプリカを作成することを推奨します。 新しい各インデックス コンポーネントについて、Windows PowerShell コマンド プロンプトで、次のコマンドを入力します。
New-SPEnterpriseSearchIndexComponent -SearchTopology $clone -SearchServiceInstance <host n > -IndexPartition <Index partition number>
詳細は次のとおりです。
$clone は、変更する、複製したトポロジです。
$<host n> 検索サービス インスタンスの PowerShell オブジェクト参照を指定します。
<Index partition number> は、作成するインデックス パーティションの番号です。 既定では、インデックス パーティションは 1 つだけであり、これはインデックス パーティション 0 です。 新しいインデックス パーティションを作成するときは、IndexPartition パラメーターの値を 1、2、3、と大きくしていきます。
たとえば、ホスト A およびホスト B 上にインデックス レプリカを持つ既存のインデックス パーティション 0 がある場合は、ホスト C およびホスト D 上にインデックス レプリカを持つ新しいインデックス パーティションを追加する必要があります。
New-SPEnterpriseSearchIndexComponent -SearchTopology $clone -SearchServiceInstance $hostC -IndexPartition 1 New-SPEnterpriseSearchIndexComponent -SearchTopology $clone -SearchServiceInstance $hostD -IndexPartition 1
Search Service アプリケーションが実行されていることを確認します。 Microsoft PowerShell コマンド プロンプトで、以下のコマンドを入力します。
$ssa.IsPaused() -ne 0
このコマンドで False が返された場合、Search Service アプリケーションは実行中です。 手順 9 に進んでください。
このコマンドで True が返された場合、Search Service アプリケーションは一時停止中です。 手順 8 に進んでください。
Search Service アプリケーションが一時停止している場合は、手順 9 に進む前に、操作の完了を待つ必要があるかどうか、および待つ場合はその理由を調べてください。 詳細については、「SharePoint Server で一時停止した Search service アプリケーションを管理する」を参照してください。
複製トポロジの活性化を開始します。 これにより、新しいインデックス パーティションに関連付けられた新しいインデックス レプリカが含まれるトポロジの活性化が開始します。 これにより、インデックス再パーティション化過程が開始します。
重要
Search Service アプリケーションはインデックス再パーティション化中に一時停止することから、コンテンツのクロールや、インデックス作成はできません。 また、ユーザーはクエリを実行できません。 ユーザーは、活性化コマンドが実行される Windows PowerShell コンソールにアクセスすることはできません。
注:
サーバーの全体管理の [検索管理] ページは、インデックス再パーティション化の目的で Search Service アプリケーションが一時停止したことを表示しません。 しかし、再パーティション化の Search Service アプリケーションを一時停止したとき、すべてのクエリ処理コンポーネントが中断されることにより、[検索管理] ページはこの過程中のクエリ処理コンポーネントのエラーを表示します。
Windows PowerShell コマンド プロンプトで、以下のコマンドを入力します。
$ssa.PauseForIndexRepartitioning() Set-SPEnterpriseSearchTopology -Identity $clone
インデックス再パーティション化過程の進行状況を監視します。 既存のトポロジのプライマリ インデックス コンポーネント上の再パーティション化過程の進行状況のみを監視できます。 以下の手順は、プライマリ インデックス コンポーネントを見つける方法を示します。
注:
インデックス再パーティション化過程を含むトポロジ活性化が完了するまで、既存の SharePoint 管理シェルでは何もコマンドは実行できません。 2 番目の SharePoint 管理シェルで以下のコマンドを実行します。
2 番目の SharePoint 管理シェルを起動します。
既存のインデックス パーティションの各プライマリ インデックス レプリカを探します。 2 番目の SharePoint 管理シェルの Windows PowerShell コマンド プロンプトで、次のコマンドを入力します。
$ssa = Get-SPEnterpriseSearchServiceApplication Get-SPEnterpriseSearchStatus -SearchApplication $ssa -Text
このコマンドにより、インデックス コンポーネントとそれらのプロパティのリストが戻されます。 プライマリ インデックス コンポーネントの名前を記録します。 これらはプロパティ Primary: True を持つインデックス コンポーネントです。
たとえば、出力は以下のようになります。 この例では、IndexComponent2 がプライマリ インデックス コンポーネントです。
Name : IndexComponent1 State : Active Primary : False Partition : 0 Host : MyMachine1 Name : Cell:IndexComponent1-SPd32cdffb08a2I.0.0 State : Active Primary : False Partition : 0 Name : IndexComponent2 State : Active Primary : True Partition : 0 Host : MyMachine2 Name : Cell:IndexComponent2-SPd32cdffb08a2I.1.0 State : Active Primary : True Partition : 0
各プライマリ インデックス コンポーネントで、インデックス再パーティション化の進行状況を監視します。 2 番目の SharePoint 管理シェルの Windows PowerShell コマンド プロンプトで、次のコマンドを入力します。
Get-SPEnterpriseSearchStatus -SearchApplication $ssa -Healthreport -Component <Index component name> | ? { ($_.name -match "repart") -or ( $_.name -match "splitting") } | ft -AutoSize Name, Message
詳細は次のとおりです。
- <Index component name> は、たとえば IndexComponent2 など、進行状況を監視するプライマリ インデックス コンポーネントの名前です。
各プライマリ インデックス コンポーネントのコマンドの出力を監視します。 コマンドの出力には、インデックスの再パーティション化の進行情報が含まれます。
インデックス再パーティション化過程の初期フェーズ中、出力は以下のようになります。
Name Message ---- ------- repartition_component_state[SP...] Pending
インデックス パーティションは、インデックス再パーティション化過程のメイン フェーズ中に分割されます。 このフェーズ中に、出力は以下のようになります。
Name Message ---- ------- index splitting: current fusion progress[SP...] <Percentage value> index splitting: splitting state [SP...] Index splitter running fusion, building: <Folder> repartition_component_state [SP...] Splitting
出力のパーセンテージ値は、再パーティション化過程のおおよその進行状況を示します。
コマンドの出力が値を戻さなくなるまで、すべてのプライマリ インデックス コンポーネントでこのコマンドを繰り返します。 値を戻さないということは、インデックス再パーティション化過程が完了し、再パーティション化されたインデックスが複製され、サーバー上に配信されることを意味します。 これには数時間かかることがあります。
新しいインデックス レプリカへのインデックスの配信の進行状況を監視します。 これを行うには、新しいトポロジがアクティブで、すべての検索コンポーネントが正常であることを確認してください。 2 番目の SharePoint 管理シェルの Windows PowerShell コマンド プロンプトで、次のコマンドを入力します。
Get-SPEnterpriseSearchStatus -SearchApplication $ssa | ft -AutoSize Name, State, Details
新しいインデックス レプリカへのインデックスの配信中に、追加されたインデックス レプリカは 低下 状態を戻します。 すべてのインデックス コンポーネントの出力が アクティブ 状態を戻すとき、配信は完了します。 これには数時間かかることがあります。
注:
インデックス再パーティション化の目的で Search Service アプリケーションを一時停止したことにより、クエリ処理コンポーネントは中断されます。 出力では、クエリ処理コンポーネントの状態は 不明 と示されます。
トポロジ活性化過程の開始に使用した PowerShell 管理シェルで、検索トポロジ活性化コマンドが完了したことを確認してください。
(省略可能) 再パーティション化の前に、(プライマリ インデックス レプリカなどのインデックス レプリカを表す) インデックス コンポーネントをホストしていたすべてのサーバーで、SharePoint Search Host Controller サービスを再起動します。
適切なドキュメント カウントを取得し、検索インデックスを再パーティション化した後でメモリを解放する目的で、この手順を実行します。 この手順を実行しない場合は、メモリ使用量が徐々に減ってドキュメント数 (PowerShell コマンドレットから返される数と、サーバーの全体管理の [検索管理] での数) が正しくなるまでに、数日の時間と何回かのインデックス作成が必要です。
注:
クエリを機能停止させないように、SharePoint Search Host Controller Service を再起動する前に、各インデックス パーティションの状態で、少なくとも 1 つのインデックス コンポーネントが 実行してい を戻すようにします。
重要
サービスを再起動する際に、SharePoint Server サーバーの全体管理 Web サイトの [サーバーのサービス] ページを使用しないでください。
SharePoint Search ホストコントローラーを再起動するには、既存のインデックス パーティションのインデックス コンポーネントをホストする各サーバー上でコマンド プロンプト ウィンドウを開きます。
SharePoint Search ホスト コントローラーを停止するには、次のコマンドを入力します。 net stop spsearchhostcontroller
SharePoint Search ホスト コントローラーを再起動するには、次のコマンドを入力します。 net start spsearchhostcontroller
Search Service アプリケーションを再開します。 Windows PowerShell コマンド プロンプトで、次のコマンドを入力します。
$ssa.ResumeAfterIndexRepartitioning()
再パーティション化過程を取り消す
進行中の再パーティション化過程を取り消す必要がある場合、以下の手順を使用します。
再パーティション化過程を取り消すには
トポロジ活性化コマンドを実行したサーバー上で新しい SharePoint 管理シェルを開始します。
活性化トポロジ ID を取得します。Windows PowerShell コマンド プロンプトで、次のコマンドを入力します。
$activating = Get-SPEnterpriseSearchTopology -Identity <Id of the activating topology> -SearchApplication $ssa
詳細は次のとおりです。
- <Id of the activating topology> は、検索トポロジを複製したときに記録しておいた複製トポロジの ID (GUID) です。
トポロジ活性化を取り消します。 Windows PowerShell コマンド プロンプトで、次のコマンドを入力します。
$activating.CancelTopologyActivation()
インデックス コンポーネントを削除する
インデックス パーティションに複数のアクティブなインデックス レプリカがある場合、「SharePoint Server で検索コンポーネントを管理する」記事の「 Remove a search component 」の手順を実行してインデックス レプリカを削除できます。
この手順では、インデックス パーティションの最後のインデックス レプリカは削除できません。 検索トポロジからすべてのインデックス レプリカを削除しなければならない場合、Search Service アプリケーションを削除し、再度、作成してから、インデックス パーティションの数を減らして、完全に新しい検索トポロジを作成する必要があります。
インデックス コンポーネントを移動する
サーバー間でインデックス レプリカを移動する場合、古いインデックス コンポーネントを削除する前に、検索トポロジに新しいインデックス コンポーネントを追加することを推奨します。
インデックス コンポーネントを移動するには
インデックス レプリカを移動するサーバーに新しいインデックス コンポーネントを追加します。 検索トポロジを複製し、新しいインデックス レプリカを追加して、新しいインデックス レプリカにインデックスが複製されるのを待って、検索トポロジを活性化します。 「既存のインデックス パーティションにインデックス レプリカを追加する」をご覧ください。
新しいインデックス レプリカがクエリに応答する準備ができるまで待ちます。 サーバーの全体管理の [検索管理] ページで検索トポロジの状態を表示するか、Windows PowerShell コマンドレット
Get-SPEnterpriseSearchStatus
を実行します。 続行する前に、追加したインデックス レプリカが アクティブ になる必要があります。検索トポロジを、再度複製します。
インデックス コンポーネントを削除することによって余分なインデックス レプリカを削除します。 記事「SharePoint Server で検索コンポーネントを管理する」の「 検索コンポーネントを削除する 」の手順をご覧ください。
検索トポロジを、再度アクティブ化します。
これにより、インデックス レプリカの移動中の、検索インデックスのフォールト トレランスが保証されます。