Установка и настройка MongoDB на Debian, а также ReplicaSet и пара других мелочей

Установка и настройка MongoDB на Debian, а также ReplicaSet и пара других мелочей

Это руководство описывает пошаговую установку и настройку реплики из 3 узлов mongoDB на базе движка WiredTiger. А также несколько полезных мелочей для людей, впервые столкнувшихся с MongoDB. Важное уточнение:

  1. До начала установки необходимо понимание конечной архитектуры.
  2. Некоторые приятности требуют Enterprise лицензию.
Немного о движке WiredTiger

Engine WiredTiger — новый движок mongoDB, использующийся по умолчанию вместо MMAP, начиная с версии 3.4. Хорош тем, что работает с данными на уровне коллекций и отдельных документов, а не полностью базой. Также устраняет проблему Global lock по вышеуказанной причине, из-за чего и был выбран в продакшен.

Установка OS и компонентов

Ставим Debian любой удобной вам версии, у меня использовался 8.6.0. Для упрощения масштабирования узлов и баз данных, рекомендую использовать lvm. Из компонентов понадобится только ssh для более удобного доступа к серверу.

Установка MongoDB.

У меня используется бесплатная Community Edition, руководство будет на её основе. По необходимости допишу Enterpise версию, т.к. она тоже крутилась и разбиралась. Данное руководство описывается для варианта 3-х серверов (master, slave, arbiter).

    Для начала нам необходимо импортировать публичный GPG ключ.

Копируем репозиторий и сохраняем изменения.

Обновляем список доступных пакетов

Настройка и добавление серверов в Replica Set

В начале было слово Давайте для начала разберемся, что такое replica set. Replica Set — это кластер серверов MongoDB, реализующий механизм репликации master-slave и автоматическое переключение между ними. Это рекомендуемый механизм репликации от разработчиков MongoDB. ссылка на офф. документацию.

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

Теперь по порядку:

Primary — основной сервер mongoDB. Secondary — точные копии баз(ы) данных с real-time синхронизацией. Arbiter — сервер выбора вторичной реплики с высшим приоритетом, которая станет главной в случае падения сервера.

ОЧЕНЬ ВАЖНО: Arbiter отвечает только за выборы преемника, сам стать преемником он не может, поэтому рекомендуется отдавать под арбитра минимальные ресурсы.

ЕЩЁ БОЛЕЕ ВАЖНО: Технически можно вообще жить без арбитра, однако с ним выборы будут происходить в разы быстрее, соответственно время простоя будет минимизировано. Плюс есть ненулевая вероятность потерять ReplicaSet целиком.

Primary Настройки пишем в файл /etc/mongod.conf У меня файл выглядит следующим образом:

Указываемые значения переменных: dbPath — путь к базе данных. При указании на пустое место, создаст там базы. При разворачивании бэкапа подцепит существующую. journal — включает журналирование. replSetName — название реплики. Должно быть идентичным у всех узлов внутри реплики. bindIp — список адресов, с которых можно принимать соединения по порту 27017.

Далее для конфигурирования я использовал саму mongoDB:

попадаем внутрь и первым делом проверяем статус:

Начальный статус должен быть 0 — startup. Означает что узел не является членом ни одной реплики.

Инициализируем реплику. Выполняем в MongoShell на первичном узле

Сразу после добавления в реплику узел будет в статусе 5 — Startup2, это означает что он присоединился к реплике и в данный момент синхронизируется. Может занять продолжительное время.

Добавляем следующие узлы:

Статусы в rs.status() будут: 1 — Primary 2 — Secondary 7 — Arbiter

Приоритеты

Варианты исполнения

Первый: Необходимо проставить приоритеты (цифры member id берем из статуса):

Чем выше цифра приоритета, тем ниже сам приоритет при выборе Primary узла.

Второй: Добавляем узлы с заранее прописанным приоритетом:

Проверяем что все узлы доступны и выставлены с правильными приоритетами:

В моем случае конфиги и статусы приобрели следующий вид:

При добавлении узла в уже существующую реплику она какое-то время будет недоступна в связи с синхронизацией.

На этом установка и настройка MongoDB в режиме ReplicaSet завершена и можно с чистой совестью наполнять базу данными.

Другие полезные команды

Сбрасывание PRIMARY. Смена первичного узла и переназначение приоритетов

60 секунд — время, в течение которого сервер, с которого запущено выполнение команды, не может стать Primary; 40 секунд — время перевыборов нового Primary.

30 секунд — время отключения Primary и перевыборы. Выполнение команды допустимо с любого из серверов mongoDB.

Узел, с которого запущена команда, в течение 60 секунд не сможет стать Primary.

/var/lib/mongodb/ — Тут лежат файлы баз.

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

Восстановление отдельной таблицы(коллекции):

Создание дампа создание бэкапа всех баз в папку Backup:

создание бэкапа отдельной базы:

создание бэкапа отдельной таблицы:

Запуск от имени root, создание бэкапа указанной базы в указанный каталог + текущая дата:

📎📎📎📎📎📎📎📎📎📎