Mongo DB — разница между автономным набором реплик и набором реплик с 1 узлом

Мне нужно было использовать транзакции Mongo DB, и недавно я понял, что транзакции не работают для автономного режима Mongo, а только для наборов реплик. (Mongo DB с C# — документ добавляется независимо от транзакции).
Кроме того, я читал, что автономный режим не рекомендуется для производства.

Итак, я обнаружил, что простого определения имени набора реплик в mongod.cfg достаточно, чтобы запустить Mongo DB как набор реплик, а не как автономный.
После этого транзакции Mongo начали работать. Однако использование его в качестве набора реплик кажется немного странным, хотя на самом деле я не использую функции репликации и хочу убедиться, что использую действительную конфигурацию.

Итак, мои вопросы:

  1. Есть ли какие-либо проблемы/недостатки при запуске Mongo в качестве набора реплик с 1 узлом, предполагая, что мне действительно не нужна репликация, балансировка нагрузки или любые другие масштабируемые функции? (как сказано, мне это нужно для разрешения транзакций)
  2. Каковы различия в функциональности и производительности, если таковые имеются, между работой в автономном режиме и работой в качестве набора реплик с 1 узлом?
  3. Я читал, что автономный режим не рекомендуется для производства, хотя звучит так, будто это самая базовая конфигурация. Я понимаю, что эта конфигурация не используется в большинстве сценариев, но иногда вы можете захотеть использовать ее как стандартную БД на локальной машине. Так почему же не рекомендуется автономный режим? Это недостаточно стабильно, или другие причины?

Спасибо Вам за Ваш вопрос. У меня тоже были такие же проблемы, и ваш вопрос и ответы на него помогли мне.

Dinindu Kanchana 07.11.2020 10:04
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
35
1
7 801
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Is there any problem/disadvantage with running Mongo as a 1-node replica set, assuming I don't really need the replication, load balancing or any other scalable functionality?

У вас нет высокой доступности, обеспечиваемой правильным набором реплик. Таким образом, это не рекомендуется для производственного развертывания. Хотя для развития это нормально.

Обратите внимание, что функция набора реплик в первую очередь связана с высокой доступностью, а не с масштабированием.

What are the functionality and performance differences, if any, between running as standalone vs. running as a 1-node replica set?

Набор реплик с одним узлом будет иметь файл oplog. Это означает, что вы будете использовать больше дискового пространства для хранения оплога, а также любая операция вставки/обновления также будет записываться в оплог (усиление записи).

So why is standalone mode not recommended? Is it not stable enough, or other reasons?

MongoDB в рабочей среде был разработан с учетом развертывания набора реплик для:

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

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

Я получаю преимущество масштабируемости и высокой доступности, но что, если мне просто нужна база данных документов вместо реляционной? Мой сценарий заключается в том, что каждой машине нужна локальная база данных, поскольку она должна работать, когда автономный режим/сеть не работает, поэтому я не могу зависеть от сетевого подключения для доступа к данным. Вот почему на каждой машине должен быть установлен автономный набор реплик с одним узлом. Вопрос будет работать или эти настройки глючат?

Metheny 30.05.2019 09:37

Это будет работать. Ни в коем случае не глючит. Однако, поскольку MongoDB изначально предназначался для установки на серверное оборудование, вам может потребоваться настроить параметры по умолчанию, чтобы они лучше соответствовали вашему варианту использования.

kevinadi 30.05.2019 23:54

Преимущество наборов реплик с 1 узлом заключается в использовании транзакций.

Gregory Pakosz 01.12.2020 13:10

Думаю, Кевинади хорошо ответил, но все же хочу добавить.

Автономный экземпляр — это экземпляр mongod, который работает на одном сервере, но не является частью набора реплик. Автономные экземпляры, используемые для тестирования и разработки, но всегда рекомендуется использовать наборы реплик в рабочей среде.

Набор реплик с одним узлом будет иметь oplog, который записывает все изменения в своих наборах данных. Это означает, что вы будете использовать больше дискового пространства для хранения оплога, а также любая операция вставки/обновления также будет записываться в оплог (усиление записи). Он также поддерживает восстановление на определенный момент времени.

Пожалуйста, следуйте Преобразование автономной базы данных в набор реплик, если вы хотите преобразовать автономную базу данных в набор реплик.

Транзакции были представлены в MongoDB версии 4.0. Начиная с версии 4.0, для ситуаций, требующих атомарности для обновлений нескольких документов или согласованности между операциями чтения нескольких документов, MongoDB предоставляет транзакции с несколькими документами для наборов реплик. Транзакция недоступна в автономном режиме, поскольку для поддержания строгой согласованности в кластере требуется oplog.

Поскольку нам нужна транзакция, в этом случае набор реплик с одним узлом не будет проблемой, просто дополнительный oplog, не так ли?

John 07.05.2020 10:25

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