デプロイメント・ポリシー記述子 XML ファイルを使用して、ゾーンおよびゾーン・ルールを指定できます。
この例は、1 つの非同期レプリカで、プライマリー断片を 1 つのゾーンに、レプリカ断片を別のゾーンに配置するものです。 すべてのプライマリー断片は、DC1 ゾーンで開始します。レプリカ断片はゾーン DC2 で開始します。
<?xml version="1.0" encoding="UTF-8"?>
<deploymentPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/deploymentPolicy
../deploymentPolicy.xsd" xmlns="http://ibm.com/ws/objectgrid/deploymentPolicy">
<objectgridDeployment objectgridName="library">
<mapSet name="ms1" numberOfPartitions="13" minSyncReplicas="0"
maxSyncReplicas="0" maxAsyncReplicas="1">
<map ref="book" />
<zoneMetadata>
<shardMapping shard="P" zoneRuleRef="primaryRule"/>
<shardMapping shard="A" zoneRuleRef="replicaRule"/>
<zoneRule name="primaryRule">
<zone name="DC1" />
</zoneRule>
<zoneRule name="replicaRule">
</zoneRule>
</zoneMetadata>
</mapSet>
</objectgridDeployment>
</deploymentPolicy>
1 つの非同期レプリカが ms1 mapSet エレメントの中で定義されます。したがって、各区画に、1 つのプライマリー断片と 1 つの非同期レプリカ断片の、2 つの断片が存在します。zoneMetadata エレメントの中で、断片ごとに shardMapping エレメントが定義されます。つまり、プライマリーには P が、非同期レプリカには DC1 が定義されます。 primaryRule 属性はプライマリー断片のゾーン・セット (これがまさにゾーン DC1 です) を定義し、このルールはプライマリー断片の配置に使用されます。 非同期レプリカは DC2 ゾーンに配置されます。
しかし、DC2 ゾーンが失われると、レプリカ断片は使用不可になります。DC1 ゾーンでコンテナー・サーバーが失われるか失敗すると、たとえレプリカが指定されていてもデータが損失する可能性があります。
この可能性に対処するには、次のセクションで説明しているように、ゾーンを追加するか、レプリカを追加します。
次のコードは、新しいゾーンを構成します。
<?xml version="1.0" encoding="UTF-8"?>
<deploymentPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/deploymentPolicy
../deploymentPolicy.xsd" xmlns="http://ibm.com/ws/objectgrid/deploymentPolicy">
<objectgridDeployment objectgridName="library">
<mapSet name="ms1" numberOfPartitions="13" minSyncReplicas="0"
maxSyncReplicas="0" maxAsyncReplicas="1">
<map ref="book" />
<zoneMetadata>
<shardMapping shard="P" zoneRuleRef="stripeRule"/>
<shardMapping shard="A" zoneRuleRef="stripeRule"/>
<zoneRule name="stripeRule" exclusivePlacement="true">
<zone name="A" />
<zone name="B" />
<zone name="C" />
</zoneRule>
</zoneMetadata>
</mapSet>
</objectgridDeployment>
</deploymentPolicy>
このコードでは、全部で 3 つのゾーン (A、B、および C) が定義されました。プライマリーとレプリカで別々のゾーン・ルールではなく、stripeRule という共有ゾーン・ルールが定義されています。 このルールには、すべてのゾーンが含まれ、exclusivePlacement 属性は true に設定されています。eXtreme Scale 配置ポリシーによって、プライマリー断片とレプリカ断片は確実に別々のゾーンに配置されます。 この配置のストライピングによって、プライマリー断片とレプリカ断片が、このポリシーに従って両方のゾーンに拡散することになります。 3 つ目のゾーン C を追加することで、いずれか 1 つのゾーンが失われてもデータは損失されず、各区画のプライマリー断片とレプリカ断片は依然として残ることになります。 ゾーンが失敗すると、プライマリー断片かレプリカ断片のどちらかが失われるか、どちらも失われないという結果になります。失われた断片は、残っているゾーンにある残存断片で置き換えられ、もう一方の残っているゾーンに配置されます。
古典的な 2 つのデータ・センターのシナリオは、各データ・センター内では高速で待ち時間が短いネットワークですが、データ・センター間の待ち時間は長くなります。同期レプリカは各データ・センター内で使用され、待ち時間が短いことにより、レプリカ生成が応答時間に与える影響が最小に抑えられます。データ・センター間では非同期レプリカ生成が使用されるため、ネットワークの長い待ち時間が応答時間に影響を及ぼすことはありません。
<?xml version="1.0" encoding="UTF-8"?>
<deploymentPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/deploymentPolicy
../deploymentPolicy.xsd" xmlns="http://ibm.com/ws/objectgrid/deploymentPolicy">
<objectgridDeployment objectgridName="library">
<mapSet name="ms1" numberOfPartitions="13" minSyncReplicas="1"
maxSyncReplicas="1" maxAsyncReplicas="1">
<map ref="book" />
<zoneMetadata>
<shardMapping shard="P" zoneRuleRef="primarySync"/>
<shardMapping shard="S" zoneRuleRef="primarySync"/>
<shardMapping shard="A" zoneRuleRef="async"/>
<zoneRule name="primarySync" exclusivePlacement="false">
<zone name="DC1" />
<zone name="DC2" />
</zoneRule>
<zoneRule name="async" exclusivePlacement="true">
<zone name="DC1" />
<zone name="DC2" />
</zoneRule>
</zoneMetadata>
</mapSet>
</objectgridDeployment>
</deploymentPolicy>
プライマリーと同期レプリカは、exclusivePlacement 属性設定 false で primarySync ルールを共有します。exclusivePlacement 属性が false に設定されていると、各区画のプライマリー断片と同期レプリカ断片を同じゾーンに配置する構成が作成されます。 非同期レプリカ断片は、primarySync ゾーン・ルールとゾーンがほとんど同じである第 2 のゾーン・ルールを使用します。 しかし、非同期レプリカは、true に設定された exclusivePlacement 属性を使用します。exclusivePlacement 属性は true に設定されると、断片を同じ区画の別の断片があるゾーンには配置できないことを意味します。 結果的に、非同期レプリカ断片は、プライマリーまたは同期レプリカ断片と同じゾーンに配置されません。この mapSet には区画ごとに 3 つの断片 (プライマリー、同期レプリカ、および非同期レプリカ) があるため、3 つの shardMapping エレメント (各断片に 1 つ) があります。
ゾーンが失われると、非同期レプリカも失われます。非同期レプリカには独立したゾーンがないため、失われた非同期レプリカは再生成されません。 プライマリー断片とレプリカ断片が失われると、残存した非同期レプリカがプライマリーにプロモートされ、ゾーン内に新しい同期レプリカが作成されます。プライマリーとレプリカは、各ゾーンの間でストライピングされます。
排他的配置の場合、各断片は独自のゾーンを持ちます。つまり、これらの断片をすべて独自のゾーンに配置できるだけの十分なゾーンを用意する必要があります。 ルールに 1 つのゾーンがある場合は、そのゾーンに断片を 1 つしか配置できません。 2 つのゾーンがあれば、最大 2 つの断片をそのゾーンに配置できます。
次のコードは、新しいゾーンを構成します。
<?xml version="1.0" encoding="UTF-8"?>
<deploymentPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/deploymentPolicy
../deploymentPolicy.xsd" xmlns="http://ibm.com/ws/objectgrid/deploymentPolicy">
<objectgridDeployment objectgridName="library">
<mapSet name="ms1" numberOfPartitions="13" minSyncReplicas="0"
maxSyncReplicas="0" maxAsyncReplicas="1">
<map ref="book" />
<zoneMetadata>
<shardMapping shard="P" zoneRuleRef="stripeRule"/>
<shardMapping shard="A" zoneRuleRef="stripeRule"/>
<zoneRule name="stripeRule" exclusivePlacement="true">
<zone name="ReplicationZoneA" />
<zone name="ReplicationZoneB" />
<zone name="ReplicationZoneC" />
</zoneRule>
</zoneMetadata>
</mapSet>
</objectgridDeployment>
</deploymentPolicy>