2.2. Directory Server がレプリケーション環境でスキーマの更新を管理する方法

ディレクトリースキーマが cn=schema ツリーで更新されると、Directory Server は変更状態番号 (CSN) を含む /etc/dirsrv/slapd-instance_name/schema/99user.ldif ファイルに変更を保存します。

Directory Server は、スキーマの変更を他のレプリカに直接複製しません。スキーマレプリケーションは、ディレクトリーのコンテンツが複製されたツリーで更新されると開始します。たとえば、スキーマの変更後にユーザーエントリーを更新すると、nsSchemaCSN 属性に保存されている CSN と、コンシューマーにある CSN が比較されます。コンシューマーの nsSchemaCSN 属性の値がサプライヤーの値よりも低い場合、Directory Server はスキーマをコンシューマーに複製します。レプリケーションに成功すると、サプライヤーにあるすべてのオブジェクトクラスと属性タイプはコンシューマーの定義のスーパーセットである必要があります。

例2.1 スキーマのサブセットとスーパーセット

  • server1 では、example オブジェクトクラスが a1 属性、a2 属性、および a3 属性を許可します。
  • server2 では、example オブジェクトクラスが a1 属性および a3 属性を許可します。

前の例では、server1example オブジェクトクラスのスキーマ定義は、server2 のオブジェクトクラスのスーパーセットです。検証フェーズで、Directory Server がスキーマを複製または受け入れると、サーバーはスーパーセット定義を取得します。たとえば、ローカルスキーマのオブジェクトクラスがサプライヤースキーマのオブジェクトクラスよりも少ない属性を許可していることをコンシューマーが検出すると、Directory Server がローカルスキーマを更新します。

スキーマ定義が正常に複製された場合、nsSchemaCSN 属性は両サーバーで同一になり、オブジェクトクラスや属性タイプなどのスキーマ定義はレプリケーションセッションの開始時に比較されなくなります。

次のシナリオでは、Directory Server はスキーマを複製しません。

  • あるホストのスキーマが、別のホストのスキーマのサブセットの場合

    たとえば、server2 にある example オブジェクトクラスのスキーマ定義は server1 のオブジェクトクラスのサブセットです。サブセットは、属性 (単一値属性は多値属性のサブセット) および属性の構文に対しても発生する可能性があります。

  • サプライヤースキーマとコンシューマースキーマの定義をマージする必要がある場合
  • Directory Server がマージするスキーマをサポートしない場合。たとえば、1 台のサーバーのオブジェクトクラスが a1 属性、a2 属性、および a3 属性を許可し、別のサーバーのオブジェクトクラスが a1 属性、a3 属性、および a4 属性を許可する場合、スキーマはサブセットではないので、マージできません。
  • /etc/dirsrv/slapd-instance_name/schema/99user.ldif 以外のスキーマファイルを使用する場合

    Directory Server を使用すると、/etc/dirsrv/slapd-instance_name/schema/ ディレクトリーにスキーマファイルを追加できます。ただし、/etc/dirsrv/slapd-instance_name/schema/99user.ldif ファイルの CSN のみが更新されます。このため、他のスキーマファイルはローカルでのみ使用され、レプリケーションパートナーに自動的に転送されません。

    重要

    Directory Server がスキーマを自動的に複製できるようにし、スキーマ定義の重複を回避するには、カスタムスキーマを /etc/dirsrv/slapd-instance_name/schema/99user.ldif ファイルに保存します。