3 votes

Les shards ne sont pas équilibrés dans la grappe

J'ai deux tessons. L'un est sur un serveur autonome et l'autre sur un jeu de répliques :

mongos> db.runCommand({listshards:1})
{
        "shards" : [
            {
                "_id" : "shard0000",
                "host" : "mongo3:10001"
            },
            {
                "_id" : "set1",
                "host" : "set1/mongo1:10001,mongo2:10001"
            }
        ],
        "ok" : 1
}

J'ai inséré environ 30 millions d'enregistrements.

D'après ce que j'ai compris, Mongo devrait répartir les données de manière égale entre les différentes unités, mais ce n'est pas le cas :

mongos> db.stats()
{
    "raw" : {
        "set1/mongo1:10001,mongo2:10001" : {
            "db" : "my_ginger",
            "collections" : 3,
            "objects" : 5308714,
            "avgObjSize" : 811.9953284354742,
            "dataSize" : 4310650968,
            "storageSize" : 4707774464,
            "numExtents" : 23,
            "indexes" : 2,
            "indexSize" : 421252048,
            "fileSize" : 10666115072,
            "nsSizeMB" : 16,
            "ok" : 1
        },
        "mongo3:10001" : {
            "db" : "my_ginger",
            "collections" : 6,
            "objects" : 25162626,
            "avgObjSize" : 1081.6777010475776,
            "dataSize" : 27217851444,
            "storageSize" : 28086624096,
            "numExtents" : 38,
            "indexes" : 6,
            "indexSize" : 1903266512,
            "fileSize" : 34276900864,
            "nsSizeMB" : 16,
            "ok" : 1
        }
    },
    "objects" : 30471340,
    "avgObjSize" : 1034.6936633571088,
    "dataSize" : 31528502412,
    "storageSize" : 32794398560,
    "numExtents" : 61,
    "indexes" : 8,
    "indexSize" : 2324518560,
    "fileSize" : 44943015936,
    "ok" : 1
}

Qu'est-ce que je fais de travers ?

Gracias.

3voto

Adam Comerford Points 9084

Selon le sh.status() dans les commentaires, vous avez 164 chunks sur shard0000 (l'hôte unique) et 85 sur set1 (l'ensemble de répliques). Ce type de déséquilibre peut se produire pour plusieurs raisons :

  1. Vous avez choisi une mauvaise clé de tesson (augmentation monotone ou similaire).
  2. Toutes vos données se trouvaient initialement sur un seul shard et sont en train d'être rééquilibrées.

L'équilibreur tentera continuellement de déplacer des morceaux du shard le plus élevé vers le plus bas tout en déplaçant le max-chunk (pour les personnes qui choisissent les clés à augmentation monotone mentionnées plus haut, cela aide). Cependant, il ne peut y avoir qu'une seule migration à la fois, donc cela prendra un certain temps, surtout si vous continuez à écrire et à lire dans les shards en même temps. Si les choses vont vraiment mal et que vous avez choisi une mauvaise clé, le problème peut persister pendant un certain temps.

Si toutes vos données se trouvaient d'abord sur un shard, puis que vous en avez ajouté un autre, vous êtes confronté à un problème similaire : il faudra un certain temps pour que le nombre de morceaux se stabilise, car la moitié des données doit être déplacée depuis le shard d'origine (en plus de ses autres activités) afin d'équilibrer les choses. En général, l'équilibreur choisira d'abord les morceaux de faible portée, donc s'ils sont moins susceptibles d'être en mémoire (retour à la mauvaise clé de découpage), ils devront être paginés avant d'être migrés.

Pour vérifier que l'équilibreur fonctionne :

http://docs.mongodb.org/manual/reference/method/sh.setBalancerState/#sh.getBalancerState

Ensuite, pour voir ce qu'il a fait, connectez-vous à un mongos (10 dernières opérations) :

use config
db.changelog.find().sort({$natural:-1}).limit(10).pretty()

De même, vous verrez des messages dans les journaux primaires de chaque groupe de stockage concernant les migrations, leur durée, etc. si vous souhaitez connaître leurs performances.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X