Можно ли реплицировать и сегментировать коллекцию?

Я видел, что для распределения данных я могу выбирать между ReplicaSet или Sharding. Использование кода mongodb с этими параметрами --shardsvr --replSet.

mongod --shardsvr --port 27021 --replSet rs1 --dbpath C:\data\data5 --bind_ip localhost

Что я делаю, так это создаю осколочный сервер, который также является набором реплик, или я просто делаю осколок? И если я не делаю и то, и другое, что я должен написать?

Редактировать

mongod --shardsvr --port 27020 --replSet rs1 --dbpath C:\data\data4 --bind_ip localhost
mongod --shardsvr --port 27021 --replSet rs1 --dbpath C:\data\data5 --bind_ip localhost
mongod --shardsvr --port 27022 --replSet rs1 --dbpath C:\data\data6 --bind_ip localhost
mongos --port 40000 --configdb rs0/localhost:27017
mongo --port 40000
rs.initiate( { _id : "rs1",  members: [   { _id: 0, host: "localhost:27020" },   { _id: 1, host: "localhost:27021" },   { _id: 2, host: "localhost:27022" }    ] })
sh.addShard( "rs1/localhost:27020,localhost:27021,localhost:27022")
sh.enableSharding("db")
sh.shardCollection("db.collection", { "_id" : 1 } )

Когда я делаю такой код, я получаю коллекцию, разделенную на 3 «сервера», которые также шардируют и repliceSet? А с mongos на порту 40 000 я могу взаимодействовать и делать запросы?

хорошо спасибо! Я собираюсь отредактировать свой вопрос, указав лучший код, чтобы вы могли сказать мне, работает ли он? пожалуйста

costabrava 14.12.2020 16:19

Осколок также является набором реплик.

prasad_ 14.12.2020 16:22

Набор реплик и сегментированный кластер имеют разные цели. Каждый сегмент в сегментированном кластере должен быть набором реплик. См. Sharded Cluster.

prasad_ 14.12.2020 16:55

Итак, что я здесь делаю, так это делаю 3 осколка mongod, которые ТАКЖЕ являются набором реплик. я прав? Твою ссылку я читал несколько раз, но не могу понять правильно

costabrava 14.12.2020 16:58

@Minsky, конечно, вы можете развернуть набор реплик с одним участником. Это не рекомендуемый дизайн для производства, но в целом он работает нормально. Сервер конфигурации также должен быть набором реплик, отдельно это невозможно. Но никто не заставляет вас создавать набор реплик с более чем двумя или более узлами.

Wernfried Domscheit 14.12.2020 21:12

@Minsky, ты уверен в автономной конфигурации? В примечании к выпуску MongoDB 3.4 говорится: чтобы обновить сегментированный кластер до версии 3.4, серверы конфигурации должны работать как набор реплик.

Wernfried Domscheit 15.12.2020 12:10

@WernfriedDomscheit приятно знать. Я не был уверен, но мне кажется, что я построил его для развлечения несколько месяцев назад, и он действительно работал. Честно говоря, в любом случае нет особого смысла иметь наборы реплик и отдельную конфигурацию!

Minsky 15.12.2020 12:12

@Minsky, я думаю, что документация не на 100% ясна, когда в ней говорится, что «серверы конфигурации для сегментированных кластеров могут быть развернуты как набор реплик», я только что проверил это. На самом деле, вы можете настроить и запустить автономный сервер конфигурации, однако вы потерпите неудачу при попытке настроить маршрутизатор mongos с помощью: BadValue: configdb supports only replica set connection string Конечно, несмотря на то, что он работает, набор реплик с одним участником не имеет особого смысла.

Wernfried Domscheit 15.12.2020 12:44
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
8
226
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы создали один сегмент, который представляет собой набор реплик из трех участников, и один сервер конфигурации в виде наборов реплик с одним участником. Каждый шард и каждый сервер конфигурации должны быть набором реплик.

Если вы хотите получить несколько осколков, вы должны использовать другое имя для --replSet, например. рс1, рс2, рс3.

В производственной среде не следует создавать наборы реплик с одним членом, если вас не волнует доступность. Обычно вы создаете еще 3 узла сегмента, после чего каждый сегмент также реплицируется.

Возможно, следуйте этому руководству Разверните сегментированный кластер

Какая польза от сегмента в конфигурации с 1 повторением? Там так шардинг возможен там. Вам нужен хотя бы один узел из набора реплик. Это была моя точка зрения...

Minsky 15.12.2020 11:58
Ответ принят как подходящий

Наборы реплик и шардинг служат разным целям:

  • наборы реплик обеспечивают избыточность (при выходе из строя одного узла данные остаются и на других узлах)
  • шардирование обеспечивает масштабируемость (если у вас слишком много данных для одного сервера, вы можете распределить их по нескольким серверам)

Когда вы настраиваете сегментированный кластер, каждый сегмент может (теоретически) поддерживаться одним узлом или набором реплик. В настоящее время MongoDB требует, чтобы осколки поддерживались наборами реплик, в более старых версиях также разрешались отдельные узлы.

Поэтому:

  • Разделенный кластер с отдельными узлами = отсутствие избыточности. Каждый документ сохраняется один раз, если какой-либо отдельный узел выходит из строя, вы теряете данные. Но вы можете получить масштабируемость в зависимости от количества развернутых сегментов.
  • Разделенный кластер с резервными наборами реплик = масштабируемость и избыточность.

Другие вопросы по теме