3

シャードが2つあります。1つはスタンドアロンサーバー上にあり、もう1つはレプリカセット上にあります。

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

約3000万枚のレコードを挿入しました。

私が理解している限り、mongoはシャード間でデータのバランスを均等にする必要がありますが、それは起こりません。

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
}

私は何が間違っているのですか?

ありがとう。

4

1 に答える 1

3

コメントの出力によると、sh.status()shard0000(単一のホスト)に164個のチャンクがあり、set1(レプリカセット)に85個のチャンクがあります。この種の不均衡が発生する可能性がある一般的な理由はいくつかあります。

  1. 悪いシャードキーを選択しました(単調に増加または類似)
  2. すべてのデータは最初は単一のシャードにあり、再調整されています

バランサーは、チャンクを高シャードから低シャードに継続的に移動しようとすると同時に、最大チャンクを移動します(前述の単調に増加するキーを選択する場合、これは役立ちます)。ただし、一度に実行できる移行は1つだけであるため、特にシャードからの書き込み/読み取りを同時に続行する場合は、これには時間がかかります。状況が本当に悪く、貧弱なシャードキーを選択した場合、これはしばらく続く可能性があります。

すべてのデータが最初に1つのシャードにあり、次に別のシャードを追加した場合、同様の問題が発生します。データの半分を元のシャードから移動する必要があるため、チャンクカウントが安定するまでに時間がかかります(他の活動)物事のバランスをとる。バランサーは、一般的に最初に移動する低範囲のチャンクを選択するため、これらがメモリ内にある可能性が低い場合(再び貧弱なシャードキーに戻る)、移行する前にページインする必要があります。

バランサーが実行されていることを確認するには:

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

次に、それが何をしているかを確認するために、mongosに接続します(最後の10回の操作)。

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

同様に、各シャードのパフォーマンスを確認したい場合は、移行に関連する各シャードのプライマリログ、移行にかかる時間などにメッセージが表示されます。

于 2012-10-16T16:17:59.293 に答える