Настройка High Availability MongoDB Replica Set

Replica Set – это набор/группа серверов, которые обслуживают один и тот же набор данных
В такой группе содержится один мастер(первичный) и несколько слейв(вторичный) серверов.
Также в Replica Set может использоваться арбитр. Это сервер, на котором нет базы данных, а его назначение – участвовать в голосовании при выборе нового мастера, создавать кворум необходимый для голосования.

Первичный/мастер сервер обслуживает все запросы на запись, а также записывает эти запросы в свой лог-файл(oplog).
Вторичные/слейв сервера реплицируют oplog первичного сервера и применяют операции к своим наборам данных. Репликация является асинхронной.
Если первичный сервер не общается с другими членами реплики в течение времени ,определенного параметром electionTimeoutMillis (по умолчанию 10 секунд), то в результате голосования выбирается новый первичный сервер из состава текущих вторичных серверов.
Replica set не может обслуживать запросы на запись, до тех пор, пока выборы и назначение нового мастера не закончатся успешно.
С настройками по умолчанию среднее время на выбор нового мастера составляет 12 секунд
Это включает обнаружение недоступности мастера(10 секунд по умолчанию) и выбор нового мастера.
При необходимости можно изменить значение параметра electionTimeoutMillis.

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

В схеме один мастер(первичный), один слейв (вторичный) и один арбитр
Master db01.mydomain.com 192.168.100.1
Slave db02.mydomain.com 192.168.100.2
Арбитр advisor.mydomain.com 192.168.100.3

Настройка мастера db01

Имя реплики — rs0

Настройка Mongodb на прослушивание запросов на всех интерфейсах

Конфигурационный файл mongodb на сервере db01

Настройка слейв db02

Настройка арбитра

Запускаем MongoDB и добавляем в автозагрузку на всех серверах

На мастере db01 выполняем

1.Инициируем создание реплики

2.Добавляем Slave-сервер

3.Проверяем конфигурацию Replica Set

4.Проверяем статус Replica Set

5.Добавляем арбитра

6. Проверяем конфигурацию Replica Set

Начиная с версии MongoDB 3.6 арбитр всегда имеет приоритет 0

7. Проверяем статус Replica Set
Выполняем команду на мастере db01

 

Тестируем репликацию
На mongo Master вставляем тестовые данные в тестовую базу

На Mongo Slave(Secondary) проверяем

По умолчанию запросы на чтение не разрешены на Secondary(для избежания проблем с получением клиентами устаревших данных)
Разрешим Secondary-реплике обрабатывать запросы на чтение.
Это разрешение будет действовать до окончания текущей mongo-shell-сессии(т.е. после отключения/выхода с mongo-сеанса значение снова станет дефолтным — запрещающим)

Останавливаем mongodb на мастере db01 и проверяем статус Replica Set на db02-сервере, который автоматически стал мастером(Primary)

В логах db02-сервера

После запуска mongod на db01
Нода db01 становится слейвом(Secondary) проходя через такие состояния

Синхронизируясь/реплицируя данные с текущего мастера db02-сервера
Содержание лога ноды db01 в этот момент

Проверка состояния Replica Set с выполнением команды на слейве – сервере db01

Проверка отставания репликации на Slave(db01)

 

Обновление MongoDB на нодах,которые находятся в Replica Set

Обновление Secondary-нод
1.На одной из Secondary-нод останавливаем mongodb-службу

2. Обновляем пакеты Mongodb

3.Запускаем mongodb-службу

Провеярем корректность запуска

4. На Primary-ноде проверяем,что обновленная Secondary-нода добавлена в Replica Set

Аналогично обновляем все остальные Secondary-ноды

 

Обновление Primary Node
На Primary-ноде выполняем
1.Принудительный перевод Primary-ноды в Secondary

2.Проверяем,что была выбрана новая Primary-нода и все Secondary-ноды сейчас реплицируются с новой Primary-нодой.
Дождаться окончания процесса синхронизации всех Secondary-нод с новой Primary-нодой

3.Выполняем на бывшей Primary-ноде(сейчас она уже Secondary-нода) те же команды,что выполнялись для обновления Secondary-нод
4. На Primary-ноде проверяем,что обновленная Secondary-нода добавлена в Replica Set

Таким образом все ноды в Replica Set были обновлены

 

Полезные команды Репликация/Replica Set в MongoDB

Просмотр конфигурации репликации

Просмотр состояния репликации

Просмотр членов репликации

Keep an eye on the configVersion key of each member. Every
change in the replica set’s configuration increments the value of
configVersion by one. This can be handy for a members’s current
configuration state.

Проверка,выступает ли нода мастером репликации

 

Принудительный перевод роли мастера между нодами, например, перевести роль мастера с 1-й ноды на 3-ю ноду
Например, есть 3 ноды

Алгоритм работы

1. На второй ноде(secondary) выполняем команду, которая вынуждает эту ноду
принудительно оставаться в статусе secondary и не принимать участие в выборе нового мастера в течение 120 секунд

2. На текущем мастере(нода 1) выполняем команду, переводя ее принудительно в статус secondary

Проверем,что нода-1 стала сейчас secondary

3.Проверить на ноде-3,что она стала primary

 

Изменение параметров репликации(все команды должны выполнятся на текущем мастере)

Сохраняем состояние репликации в переменную cfg

Изменяем интересующий нас параметр

Загружаем параметры репликации из переменной cfg

Проверяем состояние репликации

 

Как работает репликация MongoDB?
Primary записывает все свои операции(только по добавлению/удалению/изменению) в Oplog,который представляет собой коллекцию(таблицу) в базе данных с именем local и эта коллекция реплицируется на все Secondary-ноды, и применяется на этих Secondary-нодах

Отчет о состоянии репликации с точки зрения Primary-сервера

Отчет о состоянии репликации с точки зрения Secondary-сервера

Как определяется отставание/ между первичной и вторичной нодами?
MongoDВ знает временную метку последней записи в oplog на мастере

и сверяет ее с временной меткой oplog на вторичном сервере

 

Источник:
https://docs.mongodb.com/manual/replication
https://www.linode.com/docs/databases/mongodb/create-a-mongodb-replica-set
http://www.linux-admins.net/2016/05/deploying-mongodb.html

Комментирование и размещение ссылок запрещено.

Комментарии закрыты.

Яндекс.Метрика