Pour configurer une règle de déploiement, utilisez un fichier
XML de descripteur de règle de déploiement.
Dans les sections ci-après, les éléments et les attributs du
fichier XML du descripteur de règle de déploiement sont définis. Voir la rubrique Fichier deploymentPolicy.xsd pour le schéma XML de la règle de déploiement correspondante.
Eléments dans le fichier deploymentPolicy.xml(1) <deploymentPolicy>
(2) <objectgridDeployment objectGridName="blah">
(3) <mapSet
(4) name="mapSetName"
(5) numberOfPartitions="numberOfPartitions"
(6) minSyncReplicas="minimumNumber"
(7) maxSyncReplicas="maximumNumber"
(8) maxAsyncReplicas="maximumNumber"
(9) replicaReadEnabled="true|false"
(10) numInitialContainers="numberOfInitialContainersBeforePlacement"
(11) autoReplaceLostShards="true|false"
(12) developmentMode="true|false"
(13) placementStrategy="FIXED_PARTITION|PER_CONTAINER">
(14) <map ref="backingMapReference" />
(15)
(16) <zoneMetadata>
(17) <shardMapping
(18) shard="shardType"
(19) zoneRuleRef="zoneRuleRefName" />
(20) <zoneRule
(21) name="zoneRuleName"
(22) exclusivePlacement="true|false" >
(23) <zone name="ALPHA" />
(24) <zone name="BETA" />
(25) <zone name="GAMMA" />
(26) </zoneRule>
(27) </zoneMetadata>
(28) </mapSet>
(29) </objectgridDeployment>
(30) </deploymentPolicy>
deploymentPolicy element (line 1)
L'élément deploymentPolicy
correspond à l'élément de niveau supérieur du fichier XML de la règle de déploiement.
Cet élément configure l'espace de noms du fichier et l'emplacement du schéma.
Le
schéma est défini dans le fichier
deploymentPolicy.xsd.
- nombre d'occurrences : une
- élément enfant : objectgridDeployment
Elément objectgridDeployment (ligne 2)
L'élément objectgridDeployment
permet de référencer une instance ObjectGrid à partir du fichier XML ObjectGrid. Dans l'élément objectgridDeployment, vous pouvez diviser
vos mappes en groupes de mappes.
- nombre d'occurrences : une ou plusieurs
- élément enfant : mapSet
Attributs- objectgridName
- Indique le nom de l'instance ObjectGrid à déployer. Cet
attribut fait référence à un élément objectGrid défini dans le fichier XML ObjectGrid (obligatoire).
Par
exemple, l'attribut objectgridName possède la valeur
CompanyGrid dans le fichier companyGridDpReplication.xml. L'attribut
objectgridName fait référence à la valeur
CompanyGrid
définie dans le fichier companyGrid.xml. Consultez la rubrique
Fichier XML du descripteur d'ObjectGrid
en association avec le fichier des règles de déploiement de chaque instance ObjectGrid.
Elément mapSet (ligne 3)
L'élément mapSet permet de reqrouper les mappes ensemble. Les mappes d'un élément mapSet sont partitionnées
et répliquées de la même manière. Chaque mappe ne doit appartenir qu'à un élément mapSet.
- nombre d'occurrences : une ou plusieurs
- éléments enfants :
Attributs- name
- Indique le nom du groupe de mappes. Cet attribut doit être unique
dans l'élément objectgridDeployment (obligatoire).
- numberOfPartitions
- Indique le nombre de partitions de l'élément mapSet. La valeur par défaut est 1. Ce nombre doit être adapté au nombre de serveurs de conteneur qui hébergent les partitions. (Facultatif).
- minSyncReplicas
- Indique le nombre minimal de fragments réplique synchrones de chaque partition du mapSet. La
valeur par défaut est 0. Les fragments ne sont pas placés tant que le
domaine ne peut pas prendre en charge le nombre minimal de fragments réplique
synchrones.
Pour pouvoir prendre en charge la valeur minSyncReplicas, vous devez augmenter le nombre de serveurs d'une unité par rapport à la valeur minSyncReplicas. Si le nombre de répliques synchrones tombe en dessous de la valeur minSyncReplicas, les transactions d'écriture ne sont plus autorisées pour la partition. (Facultatif).
- maxSyncReplicas
- Indique le nombre maximal de fragments réplique synchrones de chaque partition du mapSet. La valeur par défaut est 0. Aucune autre réplique synchrone n'est placée pour
une partition une fois qu'un domaine a atteint ce nombre de fragments réplique
synchrones pour cette partition spécifique. L'ajout de serveurs de conteneur qui peuvent prendre en charge cet ObjectGrid peut augmenter le nombre de répliques synchrones si la valeur maxSyncReplicas n'a pas été déjà atteinte. (Facultatif).
- maxAsyncReplicas
- Indique le nombre maximal de fragments réplique asynchrones de chaque partition du
mapSet. La valeur par défaut est 0. Une fois les fragments primaires et toutes les répliques synchrones d'une partition placés, les répliques asynchrones sont placées jusqu'à ce que la valeur maxAsyncReplicas soit atteinte. (Facultatif).
- replicaReadEnabled
- Si cet attribut est défini sur true, les demandes
de lecture sont réparties entre le fragment primaire d'une partition et ses fragments réplique.
Si l'attribut replicaReadEnabled est défini sur false,
les demandes de lecture ne sont acheminées que vers le fragment primaire. La valeur par défaut est false. (facultatif).
- numInitialContainers
- Indique le nombre de serveurs de conteneur requis pour le placement initial des fragments de cet élément mapSet. La valeur par défaut est 1. Cet attribut peut permettre d'économiser la bande passante des processus et du réseau lorsque vous mettez une grille de données en ligne à partir d'un démarrage à froid. (Facultatif).
- Vous pouvez également utiliser la propriété placementDeferralInterval et la commande xscmd -c suspendBalancing pour retarder le placement des fragments sur les serveurs de conteneur.
- Le démarrage d'un serveur de conteneur envoie un événement au service de catalogue.
La première fois que le nombre de serveurs de conteneur actifs est égal à la valeur numInitialContainers d'un mapSet, le service de catalogue place les fragments du mapSet si la valeur minSyncReplicas peut être également satisfaite.
Une fois que la valeur numInitialContainers a été atteinte, chaque événement de serveur de conteneur peut déclencher un rééquilibrage des fragments non placés et déjà placés. Si vous connaissez à peu près le nombre de serveurs de conteneur que vous allez démarrer pour cet élément mapSet, vous pouvez définir une valeur numInitialContainers proche de ce nombre pour éviter le rééquilibrage après chaque démarrage du serveur de conteneur. Le placement n'est effectué que si vous atteignez la valeur numInitialContainers spécifiée dans l'élément mapSet.
Si le serveur doit remplacer la valeur numInitialContainers, par exemple, lorsque vous effectuez des opérations de maintenance sur les serveurs et voulez continuer de placement des fragments, vous pouvez utiliser la commande xscmd -c triggerPlacement. Cette substitution est temporaire et elle est appliquée lorsque vous exécutez la commande. Une fois que vous avez exécuté la commande, toutes les exécutions de placement suivantes utilisent la valeur numInitialContainers.
- autoReplaceLostShards
- Indique si les fragments perdus sont placés dans d'autres serveurs de conteneur.
La valeur par défaut est true. Lorsqu'un serveur de conteneur est arrêté ou défaillant, les fragments exécutés sur le serveur sont perdus. Lors de la perte
d'un fragment primaire, l'un de ses fragments réplique est
promu comme fragment primaire pour la partition correspondante.
En raison de cette promotion, l'un des serveur secondaire est perdu. Si vous souhaitez que les fragments perdus ne soient pas placés, affectez à
l'attribut autoReplaceLostShards la valeur false. Ce paramètre n'affecte pas la chaîne de promotion, mais seulement le remplacement du dernier fragment de la chaîne. (Facultatif)
- developmentMode
- Avec cet attribut, vous pouvez influencer le positionnement d'un fragment
par rapport à ses fragments homologues. La valeur par défaut est true. Si
l'attribut developmentMode a la valeur false,
deux fragments d'une même partition ne peuvent pas être placés sur un même ordinateur.
Si l'attribut developmentMode a la valeur true, les
fragments d'une même partition peuvent être placés sur une même
machine.
Dans les deux cas, deux fragments d'une même partition ne sont jamais placés dans le même serveur de conteneur. (Facultatif)
- placementStrategy
- Il existe deux stratégies de positionnement. La stratégie par défaut est FIXED_PARTITION, dans laquelle le nombre de fragments primaires qui sont placés dans les serveurs de conteneur disponibles est égal au nombre de partitions définies plus le nombre de répliques. L'autre stratégie est PER_CONTAINER, dans laquelle le nombre de fragments primaires placés sur chaque serveur de conteneur est égal au nombre de partitions définies, avec un nombre identique de fragments de réplique placés sur d'autres serveurs de conteneur. (Facultatif)
Elément map (ligne 14)
Chaque mappe d'un élément mapSet fait
référence à l'un des éléments backingMap définis dans le fichier XML ObjectGrid
correspondant. Chaque mappe d'un environnement
eXtreme Scale réparti
ne peut appartenir qu'à un élément mapSet.
- nombre d'occurrences : une ou plusieurs
- élément enfant : aucun
Attributs- ref
- Fournit une référence à un élément backingMap dans le fichier XML ObjectGrid. Chaque
mappe d'un élément mapSet doit faire référence à un élément backingMap
du fichier XML ObjectGrid. La valeur affectée à l'attribut ref doit
correspondre à l'attribut name de l'un des éléments backingMap
du fichier XML d'ObjectGrid, comme dans le fragment de code ci-après
(obligatoire).
Elément zoneMetadata (ligne 16)
Il est possible de placer des fragments dans des zones. Cette fonction permet de mieux contrôler la manière dont eXtreme Scale positionne les fragments dans la grille. Les machines virtuelles Java qui hébergent un serveur eXtreme Scale peuvent être marquées à l'aide d'un identificateur de zone. Le fichier de déploiement peut inclure une ou plusieurs règles de zone, lesquelles sont associées à un type de fragment. L'élément zoneMetadata est un réceptacle d'éléments de configuration de zone. Dans l'élément zoneMetadata, des zones peuvent être définies et le comportement de positionnement de fragment peut être modifié.
Pour plus d'informations, voir Configuration de zones pour le positionnement de fragments réplique.
- nombre d'occurrences : zéro ou une
- éléments enfants :
Attributs : aucun
élément shardMapping (ligne 17)
L'élément shardMapping est utilisé pour associer un type de fragment à l'aide d'une règle de zone. Le placement du fragment est influencé par le mappage à la règle de zone.
- nombre d'occurrences : zéro ou une
- éléments enfants : aucun
Attributs- shard
- Spécifiez le nom d'un fragment auquel associer la règle de zone
(obligatoire).
- zoneRuleRef
- Spécifiez le nom de la règle de zone à laquelle associer le fragment
(Facultatif)
élément zoneRule (ligne 20)
Une règle de zone spécifie l'ensemble des zones possibles dans lequel un fragment peut être positionné. L'élément zoneRule est utilisé pour spécifier un ensemble de zone dans lequel un groupe de types de fragments peut être placés. La règle de zone peut être également utilisée pour déterminer le regroupement des fragments dans les zones en utilisant l'attribut exclusivePlacement.
- nombre d'occurrences : une ou plusieurs
- éléments enfants : zone
Attributs- name
- Spécifiez le nom de la règle de zone que vous avez précédemment définie
comme zoneRuleRef dans un élément shardMapping (obligatoire).
- exclusivePlacement
- Un paramètre exclusif indique que chaque type de fragment associé à cette règle de zone est placé dans une zone différente dans la liste de zones. Un paramètre inclusif indique que lorsqu'un fragment est placé dans une zone d'une liste, les autres types de fragments associés à la règle de zone sont également placés dans cette zone. Notez que si vous utilisez un paramètre exclusif avec trois fragments associés à une même règle de zone (primaire et deux répliques synchrones), trois zones au moins sont nécessaires pour placer tous les fragments. (Facultatif)
Elément zone (lignes 23 à 25)
L'élément zone est utilisé pour nommer une zone dans une règle de zone. Chaque zone nommée doit correspondre à un nom de zone utilisé pour lancer les serveurs.
Exemple
Dans l'exemple ci-après, l'élément mapSet est utilisé
pour configurer une règle de déploiement. La valeur est
mapSet1 et elle est divisée en 10 partitions.
Pour
chacune de ces partitions, une ou deux répliques synchrones doivent être
disponibles. Chaque partition possède également une réplique asynchrone si
l'environnement peut la prendre en charge.
Tous les fragments réplique synchrones sont
placés avant les éventuels fragments réplique asynchrones. En outre, le
service de catalogue ne tente pas de placer les fragments de
l'élément mapSet1 tant que le domaine ne prend pas en charge la valeur minSyncReplicas. La prise en charge de la valeur minSyncReplicas nécessite deux serveurs de conteneur ou plus, un pour le fragment primaire et deux pour la réplique synchrone.
<?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="CompanyGrid">
<mapSet name="mapSet1" numberOfPartitions="10"
minSyncReplicas="1" maxSyncReplicas="2" maxAsyncReplicas="1"
numInitialContainers="10" autoReplaceLostShards="true"
developmentMode="false" replicaReadEnabled="true">
<map ref="Customer"/>
<map ref="Item"/>
<map ref="OrderLine"/>
<map ref="Order"/>
</mapSet>
</objectgridDeployment>
</deploymentPolicy>
Bien que seuls deux serveurs de conteneur soient requis pour satisfaire les paramètres de réplication, l'attribut numInitialContainers
nécessite 10 serveurs de conteneur disponibles pour que le service de catalogue puisse tenter de placer les fragments dans l'élément mapSet.
Une fois que le domaine dispose de 10 serveurs de conteneur qui peuvent prendre en charge l'ObjectGrid CompanyGrid, tous les fragments de l'élément mapSet1 sont placés.
Comme l'attribut autoReplaceLostShards a la valeur true, tout fragment de cet élément mapSet qui est perdu suite à une panne du serveur de conteneur est automatiquement replacé sur un autre serveur de conteneur, à condition qu'un serveur de conteneur soit disponible pour héberger le fragment perdu. Les fragments d'une même partition
ne peuvent pas être positionnés sur la même machine que l'élément mapSet1 car
l'attribut developmentMode possède la valeur false. Les demandes en lecture seule sont réparties entre le fragment primaire
et ses fragments réplique pour chaque partition car la valeur de replicaReadEnabled
est true.
Le fichier companyGridDpMapSetAttr.xml utilise l'attribut ref
sur la mappe pour faire référence à chacun des éléments backingMap du fichier companyGrid.xml.
Voir Routage par zone préférée pour des exemples impliquant les configurations de zone.