Beispiel: Zonendefinitionen in der XML-Implementierungsrichtliniendeskriptordatei

Sie können Zonen und Zonenregeln mit der XML-Implementierungsrichtliniendeskriptordatei definieren.

Beispiel: Primäre Shards und Replikat-Shards in verschiedenen Zonen

In diesem Beispiel werden primäre Shards einer Zone zugeordnet und Replikat-Shards einer anderen Zone, wobei es nur ein einziges asynchrones Replikat gibt. Alle primären Shards werden in der Zone DC1 gestartet. Replikat-Shards werden in der Zone DC2 gestartet.

<?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>

Es ist ein asynchrones Replikat im Element "mapSet" von ms1 definiert. Deshalb sind zwei Shards für jede Partition vorhanden: ein primäres Shard und ein asynchrones Replikat. Im Element "zoneMetadata" ist ein Element "shardMapping" für jedes Shard definiert: P für das primäre Shards und DC1 für das asynchrone Replikat. Das Attribut "primaryRule" definiert die für die primären Shards festgelegte Zone (Zone DC1), und diese Regel muss für die Verteilung primärer Shards verwendet werden. Asynchrone Replikate werden an die Zone DC2 verteilt.

Wenn die Zone DC2 jedoch verloren geht, sind die Replikat-Shards nicht mehr verfügbar. Der Verlust oder Ausfall eines Container-Servers in der Zone DC1 kann zu einem Datenverlust führen, obwohl ein Replikat angegeben wurde.

Zur Berücksichtigung dieser Möglichkeit können Sie entweder eine Zone oder ein Replikat hinzufügen, wie in den folgenden Abschnitten beschrieben wird.

Beispiel: Zone hinzufügen und Shards einheitenübergreifended speichern

Der folgende Code konfiguriert eine neue Zone:

<?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>

Es wurden insgesamt drei Zonen in diesem Code definiert: A, B und C. Anstelle separater Zonenregeln für primäre Shards und Replikat-Shards wird eine gemeinsame Zonenregel mit dem Namen "stripeRule" definiert. Diese Regel enthält alle Zonen und das Attribut "exclusivePlacement", das auf true gesetzt ist. Die eXtreme-Scale-Verteilungsrichtlinie stellt sicher, dass primäre Shards und Replikat-Shards in separaten Zonen enthalten sind. Diese einheitenübergreifende Verteilung bewirkt, dass primäre Shards und Replikat-Shards auf beide Zonen verteilt werden, um dieser Richtlinie zu entsprechen. Durch das Hinzufügen eine dritten Zone C wird sichergestellt, dass der Verlust einer Zone nicht zu einem Datenverlust führt und weiterhin primäre Shards und Replikat-Shards für jede Partititon verfügbar sind. Ein Zonenausfall führt entweder zum Verlust des primären Shards oder zum Verlust des Replikat-Shards, aber nicht zum Verlust beider Shards. Jedes Shard, das verloren geht, wird über das verbleibende Shard in eine verbleidenden Zone ersetzt, indem es in die andere verbleibende Zone gestellt wird.

Beispiel: Replikat hinzufügen und mehrere Rechenzentren definieren

Das klassische Szenario mit zwei Rechenzentren hat Hochgeschwindigkeitsnetze mit geringen Latenzzeiten in jedem Rechenzentrum, aber hohen Latenzzeiten zwischen den Rechenzentren. Synchrone Replikate werden in jedem Rechenzentrum verwendet, in dem die geringen Latenzzeiten die Auswirkungen der Replikation auf die Antwortzeiten minimiert. Asynchrone Replikation wird zwischen Rechenzentren verwendet, so dass das Netz mit den hohen Latenzzeiten keine Auswirkungen auf die Antwortzeit hat.

<?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>

Das primäre Shard und das synchrone Replikat-Shard verwenden beide die Zonenregel "primarySync" mit der Einstellung false für das Attribut "exclusivePlacement" Da das Attribut "exclusivePlacement" auf "false" gesetzt ist, wird eine Konfiguration erstellt, in der die primären Shards und die synchronen Replikat-Shards jeder Partition auf dieselbe Zone verteilt werden. Das asynchrone Replikat-Shard verwendet eine zweite Zonenregel mit nahezu denselben Zonen wie die Zonenregel "primarySync". Das asynchrone Replikat-Shard verwendet jedoch das Attribut "exclusivePlacement" mit dem Wert true. Wenn das Attribut "exclusivePlacement" auf "true" gesetzt ist, kann ein Shard nicht zusammen mit einem anderen Shard aus derselben Partition in derselben Zone platziert werden. Deshalb wird das asynchrone Replikat-Shard nicht in derselben Zone platziert wie das primäre Shard bzw. das synchrone Replikat-Shard. Es gibt drei Shards pro Partition in diesem MapSet: ein primäres Shard mit eínem synchronen und einem asynchronen Replikat-Shard. Deshalb gibt es drei Elemente "shardMapping", eines für jedes Shard.

Wenn eine Zone verloren geht, gehen alle asynchronen Replikate verloren und werden nicht neu generiert, weil sie keine separate Zone haben. Wenn das primäre Shard und das Replikat-Shard verloren gehen, wird das verbleibende asynchrone Replikat-Shard in ein primäres Shard hochgestuft, und es wird ein neues synchrones Replikat-Shard in der Zone erstellt. Die primären Shards und die Replikat-Shards werden einheitenübergreifend auf jede Zone verteilt.

Bei der exklusiven Verteilung hat jedes Shard eine eigene Zone: Sie müssen genügend Zonen für alle Shards haben, die Sie in jeweils eigenen Zonen platzieren möchten. Wenn eine Regel nur eine einzige Zone enthält, kann nur ein einziges Shard in der Zone platziert werden. Bei zwei Zonen können bis zu zwei Shards in der Zone platziert werden.

Beispiel: Zonen in einer Umgebung von WebSphere Application Server

Der folgende Code konfiguriert eine neue Zone:

<?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>
Für dieses Beispiel wurden drei Knotengruppen in der Umgebung von WebSphere Application Server definiert: ReplicationZoneA, ReplicationZoneB und ReplicationZoneC. Der Knotengruppenname und der Zonenname in der XML-Deskriptordatei der Implementierungsrichtlinie müssen identisch sein und den Text ReplicationZone<identifier> enthalten. Diese Datei definiert eine ähnliche Konfiguration wie im Beispiel mit der einheitenübergreifenden Speicherung von Shards, zeigt aber die erforderliche Benennung in einer Konfiguration von WebSphere Application Server.