2016-06-09 23 views
2

Ich habe MongoDB 3.2.6 auf 5 Rechnern installiert, die alle einen sharded Cluster bestehend aus 2 Shards bilden (jeweils ein Replikat mit Primär-Sekundär-Arbiter-Konfiguration).Mongo Sharding entfernt keine Daten der sharded Sammlung im Quell-Shard

Ich habe auch eine Datenbank mit sehr großen Sammlung (~ 50M Datensätze, 200 GB) und es wurde durch Mongos importiert, die es zusammen mit anderen Sammlungen zu primären Shard setzen.

Ich generierte Hash-ID auf dieser Sammlung, die mein Shard-Schlüssel sein wird.

Nach Thay ich sharded Sammlung mit:

> use admin 
> db.runCommand({ enablesharding : "my-database" }) 

> use my-database 
> sh.shardCollection("my-database.my-collection", { "_id": "hashed" }) 

Comand zurückgegeben:

{ "collectionsharded" : "my-database.my-collection", "ok" : 1 } 

Und es begann tatsächlich zu Scherbe. Der Status des Scherbe sieht wie folgt aus:

> db.my-collection.getShardingDistribution() 
Totals 
data : 88.33GiB docs : 45898841 chunks : 2825 
Shard my-replica-1 contains 99.89% data, 99.88% docs in cluster, avg obj size on shard : 2KiB 
Shard my-replica-2 contains 0.1% data, 0.11% docs in cluster, avg obj size on shard : 2KiB() 

Dieses sieht alles in Ordnung, aber Problem ist, dass, wenn ich my-Sammlung durch mongos zählen Ich sehe Zahl steigt.

Wenn ich in der primären replica Holzset (my-replica-1) I, dass die Anzahl der Datensätze in my-Sammlung zu sehen ist nicht abnehm obwohl Zahl in my-replica-2 ist Erhöhung (voraussichtlich) Ich nehme an, dass mongodb keine Stücke aus dem Quell-Shard entfernt, während es zum zweiten Shard migriert.

Wer weiß, ist das normal und wenn nicht warum passiert es?

BEARBEITEN: Eigentlich begann es jetzt auf my-replica-1 zu sinken, obwohl es immer noch wächst, wenn man auf mongos zählt (manchmal geht es etwas runter und dann nach oben). Vielleicht ist das ein normales Verhalten, wenn eine große Sammlung migrieren, ich weiß nicht,

Ivan

Antwort

1

nach Dokumentation here Sie eine gültige Situation beobachten. Wenn das Dokument von a zu b verschoben wird, wird es doppelt so lange gezählt wie a Bestätigung erhalten, dass die Verlagerung erfolgreich war.

Auf einem sharded Cluster, db.collection.count() in einer ungenauen Zählung führen kann, wenn verwaiste Dokumente vorhanden sind, oder wenn eine Migration chunk im Gange ist.

Um diese Situationen zu vermeiden, verwenden Sie in einem Sharded-Cluster die $ group-Stufe der Methode db.collection.aggregate(), um die Dokumente zu summieren. Für Beispiel zählt die folgende Operation, die Dokumente in einer Sammlung:

db.collection.aggregate(
    [ 
     { $group: { _id: null, count: { $sum: 1 } } } 
    ] 
)