第19章 一般的なレプリケーションの問題解決

マルチサプライヤーレプリケーションは、最終的に調整されたレプリケーションモデルを使用します。つまり、同じエントリーを別のサーバーで変更できることを意味します。これらの 2 つのサーバー間でレプリケーションが発生すると、Directory Server は競合する変更を解決する必要があります。多くの場合は、各サーバーでの変更に関連するタイムスタンプに基づいて解決が自動的に行われます。最新の変更が優先されます。ただし、解像度に到達するには、競合を手動で介入する必要があるケースがあります。

19.1. 命名の競合特定および解決

複数のサプライヤーサーバーが同じ識別名 (DN) を持つエントリーを作成する要求を受け取ると、各サーバーはこの DN と異なるエントリーの一意の識別子 (エントリー ID) を使用してエントリーを作成します。エントリー ID は、nsuniqueid 操作属性に保存されます。

たとえば、Server A および Server B は、uid=user_name,ou=people,dc=example,dc=com ユーザーエントリーを作成する要求を受け取ります。その結果、各サーバーに独自のエントリーがあります。

  • Server A では、エントリーには以下が含まれます。

    • uid=user_name,ou=people,dc=example,dc=com
    • nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b
  • Server B では、エントリーには以下が含まれます。

    • uid=user_name,ou=people,dc=example,dc=com
    • nsuniqueid=643a461e-b61311e1-b23be826-4afeed5f

レプリケーション中に、Server A は新しく作成されたエントリー uid=user_name,ou=people,dc=example,dc=comServer B にレプリケートし、Server B は新しく作成されたエントリーを Server A にレプリケートし、各サーバーで名前の競合が発生します。変更シーケンス番号 (CSN) を比較することにより、各サーバーはどのエントリーが以前に作成されたかを判断します。たとえば、Server B のエントリーが先に作成されました。

自動競合解決手順では、最後に作成されたエントリー (Server A 上のエントリー) が次のように変更されます。

  • 一意でない DN に nsuniqueid 値を追加します。
  • nsds5replconflict 属性と、競合の原因となった操作の説明を追加します。
  • ldapsubentry objectclass を追加します。

現在、次のエントリーが両方のサーバーに存在します。

  • 有効な エントリーには以下が含まれます。

    • uid=user_name,ou=people,dc=example,dc=com
    • nsuniqueid=643a461e-b61311e1-b23be826-4afeed5f
  • 競合 エントリー:

    • nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=people,dc=example,dc=com
    • nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b

名前の競合を手動で解決するには、各サーバーで次の手順を実行します。

手順

  1. 競合エントリーをリスト表示します。

    # dsconf -D "cn=Directory Manager" ldap://server.example.com repl-conflict list dc=example,dc=com
    dn: nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=people,dc=example,dc=com
    cn: user_name
    displayName: user
    gidNumber: 99998
    homeDirectory: /var/empty
    legalName: user name
    loginShell: /bin/false
    nsds5replconflict: namingConflict (ADD) uid=user_name,ou=people,dc=example,dc=com
    objectClass: top
    objectClass: nsPerson
    objectClass: nsAccount
    objectClass: nsOrgPerson
    objectClass: posixAccount
    objectClass: ldapsubentry
    uid: user_name
    uidNumber: 99998
  2. 競合エントリーが存在する場合は、続行方法を決定します。

    • 有効なエントリー (uid=user_name,ou=people,dc=example,dc=com) を維持し、競合エントリーを削除するには、次のコマンドを実行します。

      # dsconf -D "cn=Directory Manager" ldap://server.example.com repl-conflict delete nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=People,dc=example,dc=com
    • 競合エントリー (nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=People,dc=example,dc=com) のみを保持し、有効なエントリーを削除するには、次のように入力します。

      # dsconf -D "cn=Directory Manager" ldap://server.example.com repl-conflict swap nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=People,dc=example,dc=com
    • 両方のエントリーを保持するには、新しい相対識別名 (RDN) を指定して、競合エントリーの名前を変更します。

      # dsconf -D "cn=Directory Manager" ldap://server.example.com repl-conflict convert --new-rdn=uid=user_name_NEW nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=people,dc=example,dc=com

      上記のコマンドは、競合エントリーの名前を uid=user_name_NEW,ou=people,dc=example,dc=com に変更します。

警告

Directory Server は、競合エントリーに対して実行された LDAP 操作を複製します。通常、レプリケートされた操作は、操作 dn ではなく、元の操作エントリーの nsuniqueid を使用してエントリーを対象としています。ただし、競合エントリーを使用する場合は、動作が異なる場合があります。