7.2.9.5.1. Extension du cluster : ajouter un ou n Shards
¶
Lorsque la volumétrie des données gérées par un seul Shard
devient trop importante, il faut ajouter de nouveaux Shards
dans le cluster. Des lors que les nouveaux Shards
sont opérationnels, une opération de migration des données (voir balancing
) est réalisée en tâche de fond afin d’équilibrer l’ensemble des Shards
.
Les éléments déplacés entre Shard
sont des regroupements de données par collection. Ce regroupement est nommé Chunk
et le composant MongoDB qui réalise ce déplacement est nommé balancer
.
Le mécanisme interne du balancer
n’est pas paramétrable. Une opération de transfert de Chunk
est réalisée exclusivement entre un Shard
et un autre Shard
. Si le cluster contient 4 Shards
, 2 opérations, au maximum, pourront être réalisées en parallèle à un instant donné.
Note
il est recommandé de favoriser un grand nombre de Shards
(avec un nombre pair), déployés sur des “petites” machines, afin de favoriser le re-équilibrages des Shards
.
Note
Dans Vitam, les clés de Sharding
implémentées permettent une répartition uniforme des données. En régime de croisière, les Shards
n’ont donc pas besoin d’être équilibrés et l’opération de balancing
ne devrait pas logué une activité.
Pour ajouter un nouveau Shard
au cluster, il faut exécuter les opérations suivantes :
Créer les machines qui seront utilisées comme membre des nouveaux shards.
Ajouter ces machines dans le fichier d’inventaire ansible.
se connecter à un service
vitam-mongos
:Depuis une machine ou l’utilitaire mongo est installé et pour laquelle le flux réseau vers le service est ouvert. Le cas échéant, se connecter en ssh sur la machine pour utiliser l’utilitaire mongo en spécifiant le hostname de la machine (pas localhost) :
mongo --host <hostname> --port 27017 --username vitamdb-admin --password <password> --authenticationDatabase admin
- Vérifier l’état du sharding dans le cluster en tappant la commande suivante :
sh.status()
La commande retourne un ensemble d’informations dont 2 sont importantes pour cette opération d’exploitation. La première détaille la composition des shards opérationnels, dont voici un exemple :
shards:
{ "_id" : "shard0", "host" : "shard0/<ipMember1>:27019,<ipMember2>:27019,<ipMember3>:27019", "state" : 1 }
{ "_id" : "shard1", "host" : "shard1/<ipMember1>:27019,<ipMember2>:27019,<ipMember3>:27019", "state" : 1 }
La seconde détaille les activités de balancing desChunks
, dont voici un exemple :
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Last reported error:
Time of Reported error: Tue Jul 30 2019 09:05:45 GMT+0000 (UTC)
Migration Results for the last 24 hours:
No recent migrations
Dans ces informations, on constate que le service debalancing
est actif et qu’aucune migration n’est en cours. De plus, aucune migration n’a été réalisée au cours des dernières 24 heures.
- Ajouter les shards en récupérant les adresses Ip de chacun des membres, en conservant le regroupement qui a été configuré dans l’ansiblerie Vitam, et en executant la commande suivante pour chaque shard :
sh.addShard("shard2/<ipMember1>:27019,<ipMember2>:27019,<ipMember3>:27019")
- Vérifier que le balancing a démarré en récupérant l’état du sharding via la commande :
sh.status()
Voici un exemple d’information que l’on peut récupérer :
balancer:
Currently enabled: yes
Currently running: yes
Collections with active migrations:
logbook.LogbookLifeCycleObjectGroup started at Wed Jul 31 2019 12:43:19 GMT+0000 (UTC)
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
22 : Success
Note
cette opération a été testée dans l’environnement de performance Vitam, qui contenait environ 200 millions d’AU. Le temps de migration des Chunks
depuis les 2 Shards
existants vers les 2 nouveaux Shards
a été d’une trentaine de jours.