Итак, это происходит после двух разочаровывающих дней чтения документации и, наконец, приведения приложения в рабочее состояние.

Что такое набор реплик?

Как вы могли догадаться по названию, это копия набора данных. Время от времени мы страдаем от потери данных, и это может иметь решающее значение, когда речь идет об огромных данных, которые необходимы компании для того, чтобы даже существовать. Предположим, на следующий день вы просыпаетесь и открываете Amazon, чтобы что-то купить, и не находите ни одного продукта 😆. Теперь это очень маловероятно, потому что у нас есть набор реплик. (Примечание: Amazon не использует mongodb для хранения данных, это был пример, хотя они используют базу данных NoSQL, поэтому она должна быть похожей).

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

Как это работает?

По сути, набор реплик - это несколько наборов экземпляров mongod, на которых размещены одни и те же данные (это может быть сложно сказать, поскольку в любом случае некоторые данные могут быть помещены с некоторой задержкой, но на данный момент давайте предположим, что они есть).

Теперь предположим, что у нас есть первичный узел с несколькими вторичными узлами (максимум 50), в данном случае - 2. Когда когда-либо клиент пишет или читает с первичного узла, первичный узел регистрирует это в своем журнале операций. Теперь два вторичных узла реплицируют операции oplog и, в свою очередь, имеют те же данные, что и первичный. Теперь эти узлы связаны с первичным узлом со структурой типа «сердцебиение», если первичный узел не отвечает на их сердцебиение в течение 10 секунд. Вторичные узлы делают что-то вроде выборов, чтобы заменить первичный узел (😢 Так грубо). Теперь, если вторичных узлов меньше 7 и общее количество вторичных узлов ровно, тогда есть дополнительный узел под названием Арбитр, он не копирует его, просто участвует в выборах, так что на выборах ничья среди узлов никогда не происходит, и если есть 7 или более узлов, тогда любые 7 будут участвовать в зависимости от их значения приоритета (подробности будут позже).

Вторичные узлы также имеют значение приоритета, которое помогает при выборе. Выдержка из этого утверждения может быть следующей: Если узел имеет значение приоритета 0, то он никогда не будет выбран, и с ним всегда будут данные, поэтому он обеспечивает дополнительный уровень защиты от потери данных (Amazon безопасен 😆).

Как теперь настроить набор реплик в MongoDB?

  • По умолчанию MongoDB привязывается только к локальному интерфейсу, он ограничивает удаленные подключения. Таким образом, опция bind_ip указывает MongoDB принимать соединения, от которых локальные сетевые интерфейсы. Команда ниже указывает имя набора реплик и привязку IP с помощью параметров командной строки --replSet и --bind_ip.
mongod --replSet "rs0" --bind_ip localhost,<hostname or ip address of mongod host>
  • Подключите оболочку mongo к одному из экземпляров mongod. В оболочке используйте команду rs.initiate(). Он инициирует набор реплик, используя конфигурацию набора реплик по умолчанию.
  • Используйте rs.conf() для отображения объекта конфигурации набора реплик.
  • Используйте rs.status() для идентификации первичного в наборе реплик.

Теперь вы выполнили необходимую часть репликации - это настроить MongoDB Oplog Tailing.

Oplog Tailing означает, что сервер приложений будет уведомляться в реальном времени обо всех изменениях, происходящих во всей базе данных.

В приложениях Meteor, когда мы говорим об «хвосте oplog», это означает, что приложение Meteor знает об этом oplog и следит за его изменениями, отражая эти изменения в Meteor, когда эти изменения происходят. В приложении Meteor хвостовая запись oplog включена по умолчанию в нашей среде разработки, но требует небольшой дополнительной работы для настройки в наших производственных средах.

MONGO_URL='mongodb://app_user:[email protected]:27017/app_db'
MONGO_OPLOG_URL=mongodb://oplog_user:[email protected]:27017/local?authSource=admin

Примечание. Перед предыдущим шагом необходимо создать app_user и oplog_user и назначить роли.

  • Чтобы создать пользователя Oplog:
use app_db
db.createUser({user: "oplog_user", pwd: "oplog_passwd", roles: [{role: "read", db: "local"}]})
  • Чтобы создать пользователя приложения:
use app_db
db.createUser({ user: "app_user", pwd: "app_passwd", roles: [{ role: "dbOwner", db: "app_db" }] });

Ладно, вот оно что, если вы сочтете это полезным или вам понравилось, хлопайте в ладоши.

Обновление: наконец-то я получил доменное имя: https://chaitanyagiri.com, и теперь я пытаюсь перенести весь свой контент с носителя на свой блог, где я буду регулярно публиковать потрясающий контент. Пожалуйста, поддержите меня, подписавшись на мою рассылку, чтобы, когда я публикую что-нибудь новое, вы получали уведомление.

✉️ Подпишитесь на рассылку еженедельно Email Blast от CodeBurst 🐦 Подпишитесь на CodeBurst на Twitter , просмотрите 🗺️ Дорожная карта веб-разработчиков на 2018 год и 🕸️ Изучите веб-разработку с полным стеком .