第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=com
を Server 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
-
名前の競合を手動で解決するには、各サーバーで次の手順を実行します。
手順
競合エントリーをリスト表示します。
# 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
競合エントリーが存在する場合は、続行方法を決定します。
有効なエントリー (
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
を使用してエントリーを対象としています。ただし、競合エントリーを使用する場合は、動作が異なる場合があります。