Есть ли основной осколок в БД, в которых sh .enableSharding () еще не был выполнен? - PullRequest
0 голосов
/ 02 мая 2020

Кластер шардинга MongoDB использует «первичный шард» для хранения данных коллекции в тех БД, в которых активирован шардинг (с sh.enableSharding()), но сам сбор еще не был включен (с sh.shardCollection() ). Процесс mongos автоматически выбирает основной сегмент, за исключением случаев, когда пользователь явно указывает его как параметр sh.enableSharding()

Однако, что происходит в БД, где sh.enableSharding() не было выполнено еще? Есть ли какой-то «глобальный первоочередной» для этих случаев? Как я могу узнать, какой это? sh.status() не показывает информацию об этом ...

Я использую версию MongoDB 4.2.

Спасибо!

1 Ответ

2 голосов
/ 03 мая 2020

Документация гласит:

Монго выбирают основной шард при создании новой базы данных, выбирая шард в кластере с наименьшим количеством данных.

Если enableSharding вызывается для базы данных, которая уже существует, приведенная выше цитата будет определять местоположение базы данных до того, как для нее будет активирован шард.

sh.status() показывает где база данных хранится:

MongoDB Enterprise mongos> use foo
switched to db foo
MongoDB Enterprise mongos> db.foo.insert({a:1})
WriteResult({ "nInserted" : 1 })
MongoDB Enterprise mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("5eade78756d7ba8d40fc4317")
  }
  shards:
        {  "_id" : "shard01",  "host" : "shard01/localhost:14442,localhost:14443",  "state" : 1 }
        {  "_id" : "shard02",  "host" : "shard02/localhost:14444,localhost:14445",  "state" : 1 }
  active mongoses:
        "4.3.6" : 2
  autosplit:
        Currently enabled: yes
  balancer:
        Currently enabled:  yes
        Currently running:  no
        Failed balancer rounds in last 5 attempts:  0
        Migration Results for the last 24 hours: 
                No recent migrations
  databases:
        {  "_id" : "config",  "primary" : "config",  "partitioned" : true }
        {  "_id" : "foo",  "primary" : "shard02",  "partitioned" : false,  "version" : {  "uuid" : UUID("ff618243-f4b9-4607-8f79-3075d14d737d"),  "lastMod" : 1 } }
        {  "_id" : "test",  "primary" : "shard01",  "partitioned" : false,  "version" : {  "uuid" : UUID("4d76cf84-4697-4e8c-82f8-a0cfad87be80"),  "lastMod" : 1 } }

foo не разбивается на разделы и хранится в shard02.

Если enableSharding вызывается для базы данных, которая еще не существует, база данных и, если указан основной осколок, указанный осколок используется в качестве основного. Тестовый код здесь .

...