Vous pouvez utiliser différentes options pour contrôler quand les fragments sont placés sur les différents serveurs de la configuration. Lors du démarrage, vous pouvez décider de retarder le placement des fragments. Lorsque vous exécutez tous les serveurs de conteneur, il peut être nécessaire de suspendre ou de changer le placement pendant dans la gestion des serveurs.
Procédure
Contrôle du placement lors du démarrage
Vous pouvez contrôler quand les fragments commencent à être placés lors du démarrage de l'environnement.
Il existe un contrôle par défaut. Si vous n'exécutez aucune action pour contrôler le placement des fragments, ce dernier commence immédiatement. Dans ce cas, les fragments peuvent ne pas être placés uniformément lorsque les serveurs de conteneur suivants démarrent et que d'autres opérations de placement sont exécutées pour équilibrer la répartition.
- Suspendez temporairement l'équilibrage des fragments pour que les fragments ne soient pas placés immédiatement lorsque les serveurs de conteneur démarrent.
Avant de démarrer les serveurs de conteneur, utilisez la commande xscmd -c suspendBalancing pour arrêter l'équilibrage des fragments pour une grille de données et un groupe de mappes donnés. Après que les serveurs de conteneur ont démarré, vous pouvez utiliser la commande xscmd -c resumeBalancing pour commencer à placer les fragments sur le serveurs de conteneur.
- Définissez la propriété placementDeferralInterval.
La propriété placementDeferralInterval réduit le nombre de cycles de placement de fragment sur les serveurs de conteneur.
Le placement des fragments se déclenche à la fréquence définie.
Définissez la propriété placementDeferralInterval dans le fichier des propriétés du serveur de catalogue. Si vous utilisez l'API de serveur intégré, utilisez la méthode setPlacementDeferralInterval sur l'interface CatalogServerProperties. Cette propriété définit le délai en millisecondes qui précède le placement des fragments sur les serveurs de conteneur. La valeur par défaut de la propriété est 15 secondes.
Avec cette valeur, lorsqu'un serveur de conteneur démarre, le placement ne démarre pas tant que le délai défini dans la propriété n'est pas écoulé. Si plusieurs serveurs de conteneur démarrent consécutivement, le chronomètre de report est réinitialisé si un nouveau serveur de conteneur démarre dans le délai défini. Si, par exemple, un deuxième conteneur démarre 10 secondes après le premier, le placement a lieu 15 secondes après le démarrage du deuxième serveur de conteneur.
Toutefois, si un troisième serveur de conteneur démarre 20 secondes après le deuxième, le placement a déjà commencé sur les deux premiers serveurs de conteneur.
Lorsqu'un serveur de conteneur devient indisponible, le placement a lieu dès que le serveur de catalogue a connaissance de l'événement pour que la récupération ait lieu aussi rapidement que possible.
Suivez les conseils ci-dessous pour déterminer si la valeur de report du placement correspond au délai correct :
- Lorsque vous démarrez les serveurs simultanément, consultez les messages CWOBJ1001 dans le fichier SystemOut.log de chaque serveur de conteneur. L'horodatage de ces messages dans chaque fichier journal de serveur de conteneur indique l'heure de début du serveur de conteneur. Vous pouvez envisager d'ajuster la propriété placementDeferralInterval pour inclure plus de démarrages de serveur de conteneur. Par exemple, si le premier serveur de conteneur démarre 90 secondes avant le dernier serveur de conteneur, vous pouvez affecter la valeur 90 secondes à la propriété.
- Notez le délai d'apparition des messages CWOBJ1511 après les messages CWOBJ1001. Ce délai peut indiquer si le report a abouti.
- Si vous utilisez un environnement de développement, tenez compte du délai lorsque vous testez l'application.
- Définissez l'attribut numInitialContainers.
Si vous avez déjà utilisé l'attribut numInitialContainers, vous pouvez continuer de l'utiliser. Toutefois, il est préférable d'utiliser les commandes xscmd
-c suspendBalancing et xscmd -c resumeBalancing suivies de placementDeferralInterval que l'attribut numInitialContainers pour contrôler le placement. L'attribut numInitialContainers indique le nombre de serveurs de conteneur nécessaires avant le placement initial des fragments dans cet élément mapSet. L'attribut numInitialContainers se trouve dans le fichier XML descripteur de stratégie de déploiement. Si numInitialContainers et placementDeferralInterval sont définis, aucun placement n'a lieu jusqu'à ce que la valeur numInitialContainers soit atteinte, quelle que soit la valeur de la propriété placementDeferralInterval.
Contrôle du placement après le démarrage initial
- Forcez le placement.
Utilisez la commande xscmd
-c triggerPlacement -g my_OG -ms my_Map_Set, où my_OG et my_Map_Set sont affectés de valeur pour la grille de données et le groupe de mappes, pour forcer le placement à un moment où il n'aurait pas lieu.
Par exemple, vous pouvez exécuter cette commande lorsque le délai défini par la propriété placementDeferralInterval n'a pas encore été transmise ou lorsque l'équilibrage est suspendu.
- Réaffectez un fragment primaire.
Utilisez la commande xscmd
-c swapShardWithPrimary pour affecter un fragment de réplique comme fragment primaire. Le fragment primaire antérieur devient une réplique.
- Rééquilibrez les fragments primaire et de réplique.
Utilisez la commande xscmd -c balanceShardTypes pour ajuster le taux des fragments primaire et de réplique uniformément entre les serveurs de conteneur de la configuration. Le taux est cohérent dans un fragment sur chaque serveur de conteneur.
- Suspendez ou relancez le placement.
Utilisez la commande
xscmd
-c suspendBalancing ou
xscmd -c resumeBalancing pour arrêter et démarrer l'équilibrage des fragments d'une grille de données ou d'un groupe de mappes. Lorsque l'équilibrage est suspendu, les actions de placement suivantes peuvent toujours s'exécuter :
- La promotion de fragment peut avoir lieu lorsque les serveurs de conteneur sont défaillants.
- La permutation de rôle de fragment avec la commande xscmd -c swapShardWithPrimary.
- L'équilibrage déclenché par le placement de fragments avec la commande xscmd -c
triggerPlacement -g myOG -ms myMapSet.
Que faire ensuite
Vous pouvez surveiller le placement de votre environnement à l'aide de la commande
xscmd -c placementServiceStatus.