MongoDB. Шардированный кластер и Replica Set.

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

Более универсальной схемой будет считаться следующая, она предполагает отказоустойчивость:

Начнем с установки mongodb демонов на сервера, будем использовать для этого официальную документацию

https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/

config первого CFG реплика сет сервера для mongo

Для остальных двух cfg серверов все по аналогии, меняем только bindIP.

Также стоит обратить внимание, что все ноды были описаны предварительно в /etc/hosts и файл hosts разлит на все ноды.

Подключаемся к нашему первому серверу mongos-cfg1 и делаем репликасет

выполняем:

В выводе «ок»: 1 — означает успешное выполнение нашей предыдущей команды.

Проверяем состояние всех трех серверов, должен быть 1 Primary и 2 Secondary, команды для проверки состояния:

Сконфигурируем наши сторейджи для монги, конфиг такой

Для каталога хранения данных mongo указанной dbPath проверим/установим верного владельца:

Запускаем сервисы, проверяем, что порт 27017 слушают нужные нам демоны.

Последние и самое интересное, настройка mongos — роутера всех запросов в наш будущий кластер.

После того, как на будущий роутер установлен пакет mongod, создадим service файл для того, чтобы mongos запускался автоматически

!!! Непосредственно mongod сервис должен быть остановлен и исключен из автозапуска !!!

Выполним команду для обновление списка сервисов

Наш конфигурационный файл для mongos /etc/mongos.conf будет следующим:

Запускаем mongos сервис

Проверяем, что работает

Также в логе /var/log/mongodb/mongos.log должны быть строки с успешным подключением к нашему config replicaset mongo

Последний штрих, регистрация наших mongo shard серверов в mongos роутере

На сервере mongos, подключаемся к нашему кластеру:

и добавляем наши shard сервера

Перейдем к практике. Сгенерируем данные и сделаем им шардированние.

Сгенерировать данные можно следующем способом

Создаем базу данных в mongo (на сервере mongos) и заходим в нее, далее выполним несколько команд чтобы сгенерировать 1 000 000 документов.

После того как данные сгенерированны, надо сделать индекс шардирорвания.

Например, коллекция lemp уже содержит сгенерированные данные по примеру чуть выше.

Для начала включаем шардирование для определенной коллекции

Проверем, что шардинг включился, команда sh.status() должна отоброзить в переменных статуса коллекции «partitioned» : true

Визуальное представление наших документов в коллекции

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

Создаем индекс

Выполняем шардирование

После данной команды должен запуститься балансировщик и чанки (chunks — части данных распределяющиеся между шардами) будут перемещаться по шардам

На скрине ниже, видно наличие 11 чанков распределенных по 3 шардам, 5 6 и 5 соответственно шардам 0000, 0001 и 0002

В данном примере в lemp содержится 5 000 000 документов распределенных между 3 шардами

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

Для mongo рекомендуется выбирать XFS

Настройки sysctl следующие

Не забываем синхронизировать время — устанавливаем ntp

А также изменить /sys/kernel/mm/transparent_hugepage/enabled с always на never

transparent_hugepage=never

в centos7 сделал делаем через tuned

Устанавливаем tuned

И активируем данные профайл

Ссылки

https://docs.mongodb.com/manual/tutorial/transparent-huge-pages/#using-tuned-and-ktune

https://www.percona.com/blog/2016/08/12/tuning-linux-for-mongodb/

https://docs.mongodb.com/manual/reference/limits/#sharded-clusters

https://dbversity.com/mongodb-sharding-best-practices/

https://dzone.com/articles/reclaiming-disk-space-from-mongodb

http://farenda.com/mongodb/how-to-generate-random-test-data-in-mongodb/

https://www.howtoforge.com/tutorial/deploying-mongodb-sharded-cluster-on-centos-7/

https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/

https://docs.mongodb.com/manual/core/sharding-shard-key/

авторизация для шардированного кластера:
https://docs.mongodb.com/manual/tutorial/enforce-keyfile-access-control-in-existing-sharded-cluster-no-downtime/

5 thoughts on “MongoDB. Шардированный кластер и Replica Set.

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

  2. Добрый день ! Помогите пожалуйста! Я попытался сделать шардирования на MongoDB. Все шагов верно, только при тестировании была проблемой: база данных только видит на одном шарде, а на другом не видит. Подскажите пожалуйста, где это я не правильно сделать ?

      1. Спасибо вам за информации! Система уже работала как у вас. Проблема заключается в том что у меня мало количество документов, поэтому данные не разпределены. Я уже добавил еще и получается на двух шадрах. Теперь у меня такой вопрос: Могу ли я шардировать одном шадре под контролем. Например: У меня база данных Test с 3 коллекциями: T1, T2 и T3, в том коллекция T1 только шардирована на шадре 1, а коллекция T2 на на шадре 2, и T3 будет распределить на обах шардах.
        Спасибо, с уважением.

Добавить комментарий

Ваш адрес email не будет опубликован.