В этом руководстве вы узнаете, как проверить статус набора реплик в MongoDB.

MongoDB — это документно-ориентированная база данных NoSQL, которая упрощает начало работы с документно-ориентированными базами данных.

Статус MongoDB replica set покажет вам состояние вашего набора реплик, количество реплик в каждом члене, размер набора реплик и их количество. доступны члены набора реплик.

В этом руководстве вы узнаете, как периодически проверять состояние набора реплик в MongoDB.

Монго Шелл

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

  • rs.status() : проверяет статус набора реплик.
  • rs.initiate() : инициирует набор с настройками по умолчанию
  • rs.conf() : получить текущий объект конфигурации
  • rs.add(hostportstr) : добавить нового члена в набор
  • rs.remove(hostportstr) : удалить хост из набора реплик
  • rs.printReplicationInfo() : проверить oplog размер и временной диапазон
  • rs.printSecondaryReplicationInfo() : проверить участников набора реплик и задержку репликации
  • db.isMaster() : проверить, кто является основным
  • db.hello() : проверить, кто является основным

Среди них наиболее полезным является rs.status(). Он возвращает адекватную информацию о наборе реплик и легко запоминается. Еще одна важная функция — rs.printSecondaryReplicationInfo().

Вот пример результата этой функции.

source: ctbx-dbup.cc:27017
 syncedTo: Fri Jan 07 2022 05:34:38 GMT+0000 (UTC)
 411 secs (0.11 hrs) behind the primary
source: ctbx-db-i1.cc:27017
 syncedTo: Fri Jan 07 2022 05:41:28 GMT+0000 (UTC)
 1 secs (0 hrs) behind the primary
source: ctbx-db-i2.cc:27017
 syncedTo: Fri Jan 07 2022 05:41:25 GMT+0000 (UTC)
 4 secs (0 hrs) behind the primary

Мы видим, что он дает нам отформатированный отчет с информацией о задержке репликации между главным и вторичным узлами.

Как периодически проверять информацию о задержке репликации?

Выполнение функции вручную в клиенте Mongo Shell невозможно. Давайте напишем простую программу Go в следующем разделе.

Программа Go

Структура данных

Теперь давайте сначала определим основные структуры данных для хранения данных.

  • OpTime : объект временной метки Mongo
  • ReplSetMember: информация о члене узла реплики
  • ReplSetGetStatus: результат функции rs.status()

GetReplSetStatus

Функция GetReplSetStatus возвращает структуру ReplSetGetStatus.

Внутри своей реализации он сначала запускает команду replSetGetStatus в базе данных администратора, затем разбирает результат в структуру ReplSetGetStatus и возвращает ее.

PrintSecondaryLags

Учитывая структуру ReplSetGetStatus, функция PrintSecondaryLags печатает отставание каждого вторичного члена.

Сначала он выполняет итерацию по массиву элементов структуры ReplSetGetStatus, чтобы найти оптимальное время основного члена. Затем он снова выполняет итерацию по массиву элементов, чтобы вывести задержку каждого вторичного элемента.

Основная функция

Основная функция — точка входа в программу.

  • Сначала он создает mongo.Clienttype и подключается к базе данных MongoDB.
  • Каждые 5 секунд он выполняет функцию GetReplSetStatus для получения структуры ReplSetGetStatus. Затем он вызывает функцию PrintSecondaryLags для вывода отставания каждого вторичного члена.
  • Наконец, он закрывает соединение с базой данных.

Основная функция также обрабатывает сигнал Ctrl+C. Он закрывает соединение с базой данных перед выходом.

Полный код здесь.

Если вам понравилась эта статья, пожалуйста, хлопните в ладоши, чтобы другие могли ее увидеть. 💚