ProCloud Yandex
02.10.2023
читать 14 минут

Как настроить кластер MongoDB?

/upload/iblock/b4f/owjethm1blcgglygrrfgr0t4g9d5r772/is1400467161_database_stacks_lead_1_.jpg

MongoDB - это нереляционная система управления базами данных, используемая в ряде веб-приложений для хранения данных. Она классифицируется как комплексная база данных, поскольку легко масштабируется путем добавления дополнительных ресурсов на сервер (вертикальное масштабирование) или добавления дополнительных серверов (горизонтальное масштабирование) в распределенную систему.

MongoDB хранит данные в виде JSON-подобных документов с динамическими схемами. Каждая база данных MongoDB включает в себя коллекции различных документов, причем каждая коллекция и документ имеют уникальный ObjectID, предоставляемый MongoDB или создаваемый программистом. В результате чего кластер отказывается от фиксированных схем и таблиц, используемых в реляционных системах управления базами данных.

Используя MongoDB можно дублировать данные, и обеспечивать более высокую скорость доступа пользователей к данным. Она доступна в версиях community (бесплатная для использования), enterprise (платные тарифные планы) и Atlas (облачная). MongoDB Atlas - это облачный сервис, позволяющий разработчикам создавать современные приложения. Разработчики могут развертывать управляемые облачные базы данных на различных публичных облачных платформах.

Как установить MongoDB

Вы можете установить MongoDB на Windows, Mac OS или Ubuntu. Поскольку она потребляет много оперативной памяти, лучше запускать ее на Ubuntu или Mac OS. Операционная система Windows может перегружать с оперативную память и, следовательно, замедлять работу БД.

Установка MongoDB на Ubuntu 22.04

Для установки MongoDB на Ubuntu 22.04 необходимы сервер с ОС, пользователь, не имеющий права root и настроенный файервол с UFW. Вы можете найти одну из версий MongoDB в официальных репозиториях Ubuntu, Однако она может быть устаревшей. Для получения последней версии необходимо включить специальный репозиторий пакетов MongoDB в исходные тексты APT. Это позволит установить MongoDB-org, пакет, который содержит последнюю версию.

MongoDB 7.0 - это последняя версия, в которой появились такие интересные возможности, как Cluster-to-Cluster Sync (mongosync), усиление безопасности благодаря общедоступной функции Queryable Encryption, обновления в Query API (добавление побитовых операторов, операторов процентилей и пользовательских ролевых переменных в Aggregation Framework) и многое другое.

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

sudo apt update
sudo apt install wget curl gnupg2 software-properties-common apt-transport-https ca-certificates lsb-release

Загрузите и импортируйте открытый GPG-ключ для последней версии MongoDB с помощью следующей команды:

wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo apt-key add -

В качестве альтернативы можно использовать:

curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc|sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/mongodb.gpg

Эта команда вернет OK, если ключ был добавлен успешно.

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

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu $( lsb_release -cs)/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

После выполнения этой команды следующим шагом будет установка пакетов обновления MongoDB.

sudo apt update
sudo apt install mongodb-org

Нажмите клавиши 'Y' и 'ENTER', чтобы принять приглашение на установку. В результате MongoDB будет установлена на вашу систему. Однако она еще не готова к использованию. Необходимо запустить Mongo с помощью следующей команды:

sudo systemctl start mongod.service

Проверьте состояние MongoDB, чтобы убедиться, что она запущена

sudo systemctl status mongod

После этого включите запуск MongoDB при загрузке с помощью следующей команды:

sudo systemctl enable mongod

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

Что такое кластер MongoDB?

Под кластером понимается совокупность совместно работающих серверов MongoDB. Кластер может представлять собой replica set или sharded cluster.

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

Если первичный узел выходит из строя, MongoDB автоматически назначает на его место вторичный узел, который становится новым первичным узлом, отвечающим за операции чтения и записи.

Наборы реплик гарантируют высокую доступность, поскольку один и тот же набор данных всегда доступен.

Несколько серверов в шардированном кластер хранят фрагменты всех данных, что позволяет повысить эффективность работы и увеличить объем хранимых данных. По сути, шардированный кластер представляет собой набор реплик, каждая из которых называется шардом. Когда клиентское приложение выполняет операцию чтения/записи, запрос проходит через распределитель, который проверяет, в каком шарде хранятся необходимые данные. Затем запрос отправляется на этот шард.

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

MongoDB настройка

Здесь мы рассмотрим настройку шардированного кластера MongoDB. Sharded архитектура выглядит следующим образом:

Как настроить кластер MongoDB?

Архитектура кластера Shard состоит из трех компонентов:

  1. Shard: Shard - это сервер базы данных, состоящий из различных наборов реплик, в каждом из которых хранится часть ваших данных. Каждый набор реплик или шард отвечает за некоторое индексированное значение в вашей базе данных.
  2. Маршрутизатор запросов (mongos): Mongos - это процесс, выполняемый в клиентском приложении, взаимодействующем с MongoDB. Поскольку данные распределены между различными шардами, запрос должен быть направлен на тот шард, который содержит запрашиваемые данные. Стандартной практикой является наличие различных маршрутизаторов запросов для каждого сервера.
  3. Конфигурационный сервер: Конфигурационный сервер хранит метаданные для шард. Mongos взаимодействует с сервером конфигурации, чтобы определить, какие наборы реплик следует запрашивать для получения данных. Как правило, конфигурационные серверы должны состоять не менее чем из трех серверов. Они не обладают функцией автоматического переключения при сбое, если один сервер выходит из строя, весь ваш процесс останавливается.

Настройка кластера MongoDB требует запуска каждого из этих компонентов в виде отдельных процессов.

Процедура настройки кластера

Для настройки каждого компонента потребуется отдельная система. Однако в этой статье мы установим все компоненты на одном сервере.

Шаг 1: Создайте папки для представления шардов и серверов конфигурации.

На первом этапе необходимо создать различные папки. Сначала создадим три папки config для конфигурационных серверов, затем три папки шард для отдельных реплик. Код будет выглядеть примерно так:

mkdir cfg0 cfg1 cfg2
mkdir a0 a1 a2 b0 b1 b2 c0 c1 c2 d0 d1 d2

(каждая буква обозначает отдельный шард)

После ввода появится курсор запроса; введите Is-1, чтобы завершить настройку папки.

Шаг 2: Запуск серверов конфигурации

Используйте следующую команду:

mongod -- configsvr --dbpath --cfg0 --port 26050 --fork --logpath log.cfg0 --replSet cfg

Поскольку мы запускаем все процессы на одном и том же сервере, важно указать разные порты для компонентов. После настройки первого сервера конфигурации введите аналогичный код для остальных серверов конфигурации, изменяя port, dbpath и logpath в каждом экземпляре.

После запуска всех серверов конфигурации войдите в первый сервер по порту 26050:

mongo --port 26050

Затем инициируйте репликацию для сервера с помощью:

rs.initiate

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

> rs.add("localhost:26051")
> rs.add("localhost:26052")

Мы использовали последовательные адреса портов для разных серверов. Состояние серверов конфигурации можно проверить в оболочке mongo, используя;

> rs.status()

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

cfg:PRIMARY> exit

Шаг 3: Инициирование шардов


Запустите первый экземпляр шарда с помощью следующей команды:

mongod -- shardsvr --replSet a --dbpath a --port 26000 --fork --logpath log.a0

После этого запустите другие экземпляры на другом порту с правильными logpath и dbpath. Повторите аналогичный процесс для других шардов.

Когда все экземпляры будут запущены, запустите шард и инициируйте репликацию shardsvr.

Сначала войдите в экземпляр a0, а затем инициируйте репликацию:

mongo --port 26000
> rs.initiate()

Затем добавьте два других сервера:

a:SECONDARY> rs.add(:localhost:26001)
a:SECONDARY> rs.add(:localhost:26002)

Повторите ту же процедуру для экземпляров b0, c0 и d0 и добавьте реплики.

Шаг 4: Запуск Mongos

Следующий шаг - запуск mongos. Mongo служит прослойкой между клиентом и шардами. Запустите mongos с помощью следующей строки:

mongos --configdb "cfg/localhost:26050,localhost:26051,localhost:26052" --fork --logpath log.mongos1 --port 26500.

Мы можем запустить несколько экземпляров mongos, чтобы увеличить отказоустойчивость mongos для клиента. Для этого будет использована аналогичная команда, но с изменением logpath и порта:

mongos --configdb "cfg/localhost:26050,localhost:26051,localhost:26052" --fork --logpath log.mongos2 --port 26501.

Затем войдите в систему mongos:

mongos --port 26500

Из этого mongos сервера можно добавить различные реплики (a, b, c, d) в качестве шардов с помощью команды:

mongos> sh.addShard("a/localhost:26000")

Затем добавьте реплики, используя тот же код, но заменяя порт а на b, затем c и d.

Чтобы проверить состояние шардов, можно выполнить команду:

mongos> sh.status()

В результате будут показаны различные шарды a, b, c и d и реплики внутри каждого из них.

Добавление баз данных и коллекций к шардам

mongos> show dbs

Показывает доступные базы данных, включая базы данных config, mydb и admin. Результат может выглядеть следующим образом:

admin 0.000GB
config 0.002GB
mydb 0.000GB

Чтобы разделить любую из этих баз данных. Например, чтобы разделить mydb, введите код:

mongos> sh.enableSharding("mydb")

Эта команда добавит администратора в шардированные базы данных, что можно будет увидеть при вводе команды sh.status().

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

mongos> show collections
product
sales
mongos> sh.shardCollection(“mydb.saled”), (_id:1)

В выводе команды sh.status значение chunks показывает разбиение данных на фрагменты. Сначала данные размещаются только на самом маленьком шарде. Однако по мере роста данных они будут делиться на куски и размещаться на разных шардах.

Заключение

Здесь мы рассмотрели, как создать кластер MongoDB на одном сервере. В жизни каждый шард будет располагаться на отдельной машине, а сервер конфигурации и mongos - на других машинах, что обеспечивает усиленную отказоустойчивость.


Новости
18 апреля 202418.04.2024
читать 2 минутычитать 2 мин
Дайджест обновлений продуктов Q1
5 апреля 202405.04.2024
читать 1 минутучитать 1 мин
ProCloud CPO Диана Беда в рейтинге ИТ-лидеров от Global CIO
28 марта 202428.03.2024
читать 1 минутучитать 1 мин
Запуск новой локации: Казахстан