Red Hat Training

A Red Hat training course is available for Red Hat Directory Server

15.26. 一般的なレプリケーションの競合の解決

マルチマスターレプリケーションは、最終的に調整されたレプリケーションモデルを使用します。つまり、同じエントリーを別のサーバーで変更できることを意味します。この 2 つのサーバー間でレプリケーションが発生した場合は、競合する変更を解決する必要があります。多くの場合は、各サーバーでの変更に関連するタイムスタンプに基づいて解決が自動的に行われます。最新の変更が優先されます。
ただし、解像度に到達するには、競合を手動で介入する必要があるケースがあります。レプリケーションプロセスで自動的に解決できない変更競合を持つエントリーには、nsds5ReplConflict 競合マーカー属性および ldapSubEntry オブジェクトクラスが含まれます。nsds5ReplConflict 属性は、存在および等価性のためにインデックス化される操作属性です。
競合エントリーを一覧表示するには、次のコマンドを実行します。
# ldapsearch -D "cn=Directory Manager" -W -b "dc=example,dc=com" \
     "(&(objectClass=ldapSubEntry)(nsds5ReplConflict=*))" \* nsds5ReplConflict

15.26.1. ネーミングの競合の解決

異なるサーバーの同じ DN で 2 つのエントリーを作成すると、レプリケーション中に自動的に競合解決が行われ、DN のエントリーの一意識別子を含む、最後に作成されたエントリーの名前が変更します。すべてのディレクトリーエントリーには、nsuniqueid の操作属性に格納されている一意の識別子が含まれます。命名の競合が発生すると、この一意の ID が一意でない DN に追加されます。
たとえば、2 つの異なるサーバーに uid=user_name,ou=People,dc=example,dc=com エントリーが作成された場合、レプリケーションは一意の ID を、作成した最後のエントリーの DN に追加します。つまり、以下のエントリーが存在します。
  • uid=user_name,dc=example,dc=com
  • nsuniqueid=66446001-1dd211b2+uid=user_name,dc=example,dc=com
レプリケーションの競合を解決するには、以下の手順を手動で決定する必要があります。
  • 競合エントリーを削除して、有効なエントリー(uid=user_name,dc=example,dc=com)のみを保持するには、次のコマンドを実行します。
    # ldapdelete -D "cn=Directory Manager" -W -p 389 -h server.example.com -x \
         uid=nsuniqueid=66446001-1dd211b2+user_name,dc=example,dc=com
  • 競合エントリー(nsuniqueid=66446001-1dd211b2+uid=user_name,dc=example,dc=com)のみを保持します。
    1. 有効なエントリーを削除します。
      # ldapdelete -D "cn=Directory Manager" -W -p 389 -h server.example.com -x \
           uid=user_name,dc=example,dc=com
    2. 競合エントリーの名前を変更します。「多値命名属性を使用したエントリーの名前変更」 を参照してください。
  • 両方のエントリーを保持するには、競合エントリーの名前を変更します。「多値命名属性を使用したエントリーの名前変更」 を参照してください。

15.26.1.1. 多値命名属性を使用したエントリーの名前変更

多値命名属性を持つエントリーの名前を変更するには、次のコマンドを実行します。
  1. naming 属性の新しい値を使用してエントリーの名前を変更し、古い RDN を保持します。以下に例を示します。
    # ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
      dn: nsuniqueid=66446001-1dd211b2+uid=adamss,dc=example,dc=com
      changetype: modrdn
      newrdn: uid=NewValue
      deleteoldrdn: 0
    エントリーの名前変更時に RDN を維持する方法は、deleteOldRDN パラメーター」 を参照してください。
  2. naming 属性と conflict マーカー属性の古い RDN 値を削除します。以下に例を示します。
    # ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
      dn: uid=NewValue,dc=example,dc=com
      changetype: modify
      delete: uid
      uid: adamss
      -
      delete: nsds5ReplConflict
      -
注記
一意の識別子属性 nsuniqueid は削除できません。
コンソールは、多値 RDN の編集をサポートしません。たとえば、マルチマスターレプリケーションモードで 2 つのサーバーがある場合、同じユーザー ID を持つ各サーバーにエントリーを作成し、新しいエントリーの RDN が nsuniqueid uid 値に変更されます。コンソールからこのエントリーを変更しようとすると、多値 RDN を持つエントリーについてエラーの変更を保存できません。
高度なモードでエントリーを開くと、命名属性が nsuniqueid uid に設定されていることが分かります。ただし、ユーザー ID と RDN の値を異なる値に変更したり、修正したりすることはできません。たとえば、ユーザー ID がユーザー ID であり、jdoe1 変更する必要がある場合はコンソールから実行できません。代わりに ldapmodify コマンドを使用します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x

dn: cn=John Doe
changetype: modify
replace: uid
uid: jdoe

dn: cn=John Doe
changetype: modrdn
newrdn: uid=jdoe1
deleteoldrdn: 1

15.26.1.2. 単一の値命名属性でエントリーの名前変更

1 値の naming 属性を持つエントリーの名前を変更するには、次のコマンドを実行します。
  1. 別の naming 属性を使用してエントリーの名前を変更し、古い RDN を保持します。以下に例を示します。
    # ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
      dn: nsuniqueid=66446001-1dd211b2+dc=pubs,dc=example,dc=com
      changetype: modrdn
      newrdn: cn=TempValue
      deleteoldrdn: 0
    エントリーの名前変更時に RDN を維持する方法は、deleteOldRDN パラメーター」 を参照してください。
  2. naming 属性と conflict マーカー属性の古い RDN 値を削除します。以下に例を示します。
    # ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
      dn: cn=TempValue,dc=example,dc=com
      changetype: modify
      delete: dc
      dc: pubs
      -
      delete: nsds5ReplConflict
      -
    注記
    一意の識別子属性 nsuniqueid は削除できません。
  3. 目的の属性と値のペアでエントリーの名前を変更します。以下に例を示します。
    # ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
      dn: cn=TempValue,dc=example,dc=com
      changetype: modrdn
      newrdn: dc=NewValue
      deleteoldrdn: 1
    deleteoldrdn 属性の値を 1 に設定して、一時属性と値のペア cn=TempValue を削除します。この属性を保持するには、deleteoldrdn 属性の値を 0 に設定します。