7.2. レプリケーション環境で Directory Server がスキーマ更新を管理する方法
cn=schema
ツリー内のディレクトリースキーマを更新すると、Directory Server は変更状態番号 (CSN) を含む変更を /etc/dirsrv/slapd-<instance_name>/schema/99user.ldif
ファイルに保存します。
Directory Server は、スキーマの変更を他のレプリカに直接複製しません。スキーマレプリケーションは、ディレクトリーのコンテンツが複製されたツリーで更新されると開始します。たとえば、スキーマを変更した後にユーザーを更新すると、サプライヤーは nsSchemaCSN
属性に格納されている CSN をコンシューマーの CSN と比較します。コンシューマーの nsSchemaCSN
属性の値がサプライヤーの値よりも低い場合、Directory Server はスキーマをコンシューマーに複製します。レプリケーションに成功すると、サプライヤーにあるすべてのオブジェクトクラスと属性タイプはコンシューマーの定義のスーパーセットである必要があります。
例7.1 スキーマのサブセットとスーパーセット
-
server1
では、example
オブジェクトクラスがa1
属性、a2
属性、およびa3
属性を許可します。 -
server2
では、example
オブジェクトクラスがa1
属性およびa3
属性を許可します。
前の例では、server1
の example
オブジェクトクラスのスキーマ定義は、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
ファイルに保存します。