Репликация в MongoDB (набор реплик)

Репликация MongoDB — это процесс синхронизации данных между несколькими серверами.

Репликация обеспечивает избыточное резервное копирование данных и хранит копии данных на нескольких серверах, повышая доступность данных и обеспечивая безопасность данных.

Репликация также позволяет восстанавливать данные после аппаратных сбоев и перерывов в обслуживании.


Что такое репликация?

  • Обеспечение безопасности данных
  • Высокая доступность данных (24*7)
  • Аварийное восстановление
  • Отсутствие простоев при обслуживании (например, резервное копирование, перестроение индексов, компактификация)
  • Распределённое чтение данных

Принцип репликации MongoDB

Репликация MongoDB требует как минимум двух узлов. Один из них — первичный узел, отвечающий за обработку клиентских запросов, а остальные — вторичные узлы, отвечающие за репликацию данных на первичном узле.

Распространённые конфигурации узлов в MongoDB: один первичный и один вторичный, один первичный и несколько вторичных.

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

Схема структуры репликации MongoDB выглядит следующим образом:

MongoDB复制结构图

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

Особенности набора реплик:

  • Кластер из N узлов
  • Любой узел может выступать в роли первичного узла
  • Все операции записи выполняются на первичном узле
  • Автоматическое переключение при сбое
  • Автоматическое восстановление

Настройка набора реплик MongoDB

В этом руководстве мы используем тот же MongoDB для выполнения эксперимента с первичным и вторичным узлами MongoDB. Шаги следующие:

1. Остановите работающий сервер MongoDB.

Теперь мы запускаем MongoDB, указывая параметр --replSet. Базовый синтаксис --replSet выглядит следующим образом:

mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"

Пример

mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0

В приведенном выше примере запускается экземпляр MongoDB с именем rs0 и номером порта 27017.

После запуска откройте командную строку и подключитесь к службе MongoDB.

В клиенте MongoDB используйте команду rs.initiate() для запуска нового набора реплик.

Мы можем использовать rs.conf() для просмотра конфигурации набора реплик.

Используйте команду rs.status() для просмотра состояния набора реплик.


Добавление членов в набор реплик

Чтобы добавить членов в набор реплик, нам нужно использовать несколько серверов для запуска службы MongoDB. Войдите в клиент MongoDB и используйте метод rs.add() для добавления членов в набор реплик.

Синтаксис

Базовый синтаксис команды rs.add() выглядит следующим образом:
>rs.add(HOST_NAME:PORT)

Пример

Предположим, вы запустили службу MongoDB с именем mongod1.net и номером порта 27017. Используйте команду rs.add() в окне команд клиента, чтобы добавить её в набор реплик, как показано ниже:

>rs.add("mongod1.net:27017")
>

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

Набор реплик MongoDB отличается от обычной схемы первичный-вторичный. При схеме первичный-вторичный все службы останавливаются, когда первичный хост выходит из строя. В наборе реплик, когда первичный хост выходит из строя, вторичный узел займёт роль первичного узла, поэтому простоев не будет.

Другие расширения