9.2. レプリケーショントポロジーからのサプライヤーの削除

レプリケーショントポロジーからサプライヤーをきれいに削除することは、ハブまたはシューマーを削除するよりも複雑です。これは、トポロジー内のすべてのサプライヤーが他のサプライヤーに関する情報を保存し、サプライヤーが利用できない状態になった場合でも、その情報を保持するためです。

Directory Server は、レプリカ更新ベクトル (RUV) と呼ばれるメタデータセットに、レプリケーショントポロジーに関する情報を維持します。RUV には、ID と URL 等のサプライヤーに関する情報、ローカルサーバー上の最新の変更状態番号 (CSN)、および最初の変更の CSN などが含まれています。サプライヤーとコンシューマーはいずれも RUV 情報を保存し、これを使用してレプリケーションの更新を制御します。

サプライヤーを完全に削除するには、設定エントリーと共にそのメタデータを削除する必要があります。

前提条件

  • 削除するインスタンスがサプライヤーである。
  • 削除するホストがトポロジー内の他のサーバーのサプライヤーとしても機能する場合、分離しないように、これらのサーバーにデータを複製するように他のサプライヤーまたはハブを設定している。

手順

  1. 削除するサプライヤーで、以下を行います。

    1. 接尾辞とそれに対応するデータベースをリスト表示します。

      # dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com backend suffix list
      dc=example,dc=com (userroot)

      データベースの名前を書き留めます。

    2. データベースを読み取り専用モードに設定して、追加の更新を回避します。

      # dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com backend suffix set --enable-readonly "userroot"
    3. トポロジー内の他のすべてのサーバーが、このサプライヤーからすべてのデータを受け取るまで待ちます。確認のため、他のサーバーの CSN が、削除するサプライヤーの CSN と同等以上であることを確認します。

      # ds-replcheck online -D "cn=Directory Manager" -w password -m ldap://host-to-remove.example.com:389 -r ldap://server.example.com:389 -b dc=example,dc=com
      ================================================================================
               Replication Synchronization Report  (Tue Mar  5 09:46:20 2021)
      ================================================================================
      
      Database RUV's
      =====================================================
      
      Supplier RUV:
        {replica 1 ldap://host-to-remove.example.com:389} 5c7e8927000100010000 5c7e89a0000100010000
        {replicageneration} 5c7e8927000000010000
      
      Replica RUV:
        {replica 1 ldap://host-to-remove.example.com:389} 5c7e8927000100010000 5c7e8927000400010000
        {replica 2 ldap://server.example.com:389}
        {replicageneration} 5c7e8927000000010000
    4. レプリカ ID を表示します。

      # dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com replication get --suffix "dc=example,dc=com" | grep -i "nsds5replicaid"
      nsDS5ReplicaId: 1

      この例では、レプリカ ID は 1 です。この手順の最後のステップのレプリカ ID を書き留めます。

  2. 削除するホストとレプリカ合意があるすべてのサプライヤーで、以下を実施します。

    1. レプリケートされる接尾辞のレプリカ合意をリスト表示します。

      # dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt list --suffix "dc=example,dc=com"
      dn: cn=example-agreement,cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config
      cn: example-agreement
      ...

      cn 属性には、次の手順に必要なレプリカ合意名が含まれます。

    2. レプリカ合意を削除します。

      # dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt delete --suffix "dc=example,dc=com" example-agreement
  3. 削除するサプライヤーで、すべての接尾辞のレプリケーションを無効にします。

    # dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com replication disable --suffix "dc=example,dc=com"

    レプリケーションを無効にすると、このサーバーのこの接尾辞のレプリカ合意もすべて自動的に削除されます。

  4. 次に進む前に、ds-replcheck 出力の Replica RUV セクションにリスト表示されているすべての Directory Server インスタンスがオンラインであることを確認します。
  5. トポロジー内の残りのサプライヤーのいずれかで、レプリカ ID の RUV をクリーンアップします。

    # dsconf -D "cn=Directory Manager" ldap://server.example.com repl-tasks cleanallruv --suffix "dc=example,dc=com" --replica-id 1

    このコマンドでは、この手順の前のステップで表示されるレプリカ ID を指定する必要があります。

検証

  • ds-replcheck コマンドの出力で、削除したホストのレプリカ ID と URL を持つエントリーが残っていないことを確認します。

    # ds-replcheck online -D "cn=Directory Manager" -w password -m ldap://host-to-remove.example.com:389 -r ldap://server.example.com:389 -b dc=example,dc=com

次のステップ

  • 削除されたインスタンスをテスト目的に使用する場合は、読み取り専用モードを無効にします。

    # dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com backend suffix set --disable-readonly userroot
    重要

    テスト目的でトポロジーから削除したインスタンスを使用する場合は、クライアントが引き続き使用していないことを確認してください。

  • インスタンスを削除します。

    # dsctl instance_name remove --do-it