Как установить разделенный кластер MongoDB на CentOS 7
На этой странице
- Разделение и репликация
- Три компонента сегментирования
- Шаг 1. Отключите SELinux и настройте хосты
- Шаг 2. Установите MongoDB на все экземпляры
- Шаг 3. Создание набора реплик сервера конфигурации
- Шаг 4. Создание наборов реплик сегментов
- Шаг 5. Настройка mongos/маршрутизатора запросов
- Шаг 6. Добавьте сегменты в mongos/Query Router
- Шаг 7. Тестирование
- Справочник
Разделение — это процесс MongoDB для хранения набора данных на разных машинах. Он позволяет выполнять горизонтальное масштабирование данных, разбивать данные по независимым экземплярам, и это могут быть наборы реплик. Разделение набора данных на шардинге использует ключ сегмента. Разделение позволяет вам добавлять больше машин в зависимости от роста данных в вашем стеке.
Шардинг и репликация
Давайте сделаем это просто. Если у вас есть музыкальные коллекции, Sharding сохранит их в другой папке. С другой стороны, репликация — это просто синхронизация ваших музыкальных коллекций с другими экземплярами.
Три компонента шардинга
Осколок — используется для хранения всех данных, а в производственной среде каждый осколок представляет собой наборы реплик. Обеспечивает высокую доступность и согласованность данных.
Сервер конфигурации — используется для хранения метаданных кластера, содержит сопоставление набора данных кластера и сегментов. Эти данные используются сервером mongos/query для выполнения операций. Рекомендуется использовать более 3 экземпляров в производстве.
Mongos/Query Router — это просто экземпляры mongo, работающие как интерфейсы приложений. Приложение будет делать запросы к экземплярам mongos, а затем mongos будет доставлять запросы, используя ключ осколка, к наборам реплик осколков.
Предпосылки
- 2 сервера CentOS 7 в качестве наборов реплик конфигурации
- 10.0.15.31 configsvr1
- 10.0.15.32 configsvr2
- 10.0.15.21 shardsvr1
- 10.0.15.22 shardsvr2
- 10.0.15.23 shardsvr3
- 10.0.15.24 shardsvr4
- 10.0.15.11 монго
Шаг 1. Отключите SELinux и настройте хосты.
В этом уроке мы отключим SELinux. Измените конфигурацию SELinux с принудительной на отключенную.
Подключайтесь ко всем узлам через OpenSSH.
ssh
Отключите SELinux, отредактировав файл конфигурации.
vim /etc/sysconfig/selinux
Измените значение SELinux на отключенное.
SELINUX=disabled
Сохранить и выйти.
Затем отредактируйте файл hosts на каждом сервере.
vim /etc/hosts
Вставьте следующую конфигурацию хостов:
10.0.15.31 configsvr1
10.0.15.32 configsvr2
10.0.15.11 mongos
10.0.15.21 shardsvr1
10.0.15.22 shardsvr2
10.0.15.23 shardsvr3
10.0.15.24 shardsvr4Сохранить и выйти.
Теперь перезапустите все серверы:
reboot
Шаг 2 — Установите MongoDB на все экземпляры
Мы будем использовать последнюю версию MongoDB (MongoDB 3.4) для всех экземпляров. Добавьте новый репозиторий MongoDB, выполнив следующие команды:
cat <<'EOF' >> /etc/yum.repos.d/mongodb.repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
EOFТеперь установите mongodb 3.4 из репозитория mongodb, используя приведенную ниже команду yum.
sudo yum -y install mongodb-org
После установки mongodb используйте команду mongo или mongod следующим образом, чтобы проверить сведения о версии.
mongod --version
Шаг 3. Создайте набор реплик сервера конфигурации
В разделе предварительных условий мы уже определили сервер конфигурации с двумя машинами configsvr1 и configsvr2. И на этом этапе мы настроим его как набор реплик.
Если на сервере запущена служба mongod, остановите ее с помощью следующей команды systemctl.
systemctl stop mongod
Отредактируйте конфигурацию mongodb по умолчанию mongod.conf.
vim /etc/mongod.conf
Измените путь к хранилищу БД на свой собственный каталог. Мы будем использовать каталог /data/db1 для первого сервера и каталог /data/db2 для второго сервера конфигурации.
storage:
dbPath: /data/db1Измените значение строки bindIP на адрес вашей внутренней сети. configsvr1 с IP-адресом 10.0.15.31, а второй сервер с 10.0.15.32.
bindIP: 10.0.15.31
В разделе репликации задайте имя репликации.
replication:
replSetName: "replconfig01"И в разделе сегментирования определите роль экземпляров. Мы будем использовать эти два экземпляра как configsvr.
sharding:
clusterRole: configsvrСохранить и выйти.
Затем мы должны создать новый каталог для данных MongoDB, а затем изменить права владения этим каталогом на пользователя mongod.
mkdir -p /data/db1
chown -R mongod:mongod /data/db1Затем запустите службу mongod с помощью следующей команды.
mongod --config /etc/mongod.conf
Вы можете проверить, работает ли служба mongod на порту 27017, с помощью команды netstat.
netstat -plntu
Configsvr1 и Configsvr2 готовы для набора реплик. Подключитесь к серверу configsvr1 и получите доступ к оболочке mongo.
ssh
mongo --host configsvr1 --port 27017Инициируйте имя набора реплик со всеми членами configsvr, используя приведенный ниже запрос.
rs.initiate(
{
_id: "replconfig01",
configsvr: true,
members: [
{ _id : 0, host : "configsvr1:27017" },
{ _id : 1, host : "configsvr2:27017" }
]
}
)Если вы получите результат { \ok\ : 1 }, это означает, что configsvr уже настроен с набором реплик.
и вы сможете увидеть, какой узел является главным, а какой вторичным.
rs.isMaster()
rs.status()Настройка набора реплик сервера конфигурации завершена.
Шаг 4. Создание наборов реплик осколков
На этом этапе мы настроим 4 сервера Centos 7 в качестве сервера Shard с 2 наборами реплик.
- 2 сервер — shardsvr1 и shardsvr2 с именем набора реплик: shardreplica01
- Сервер 2 — shardsvr3 и shardsvr4 с именем набора реплик: shardreplica02
Подключитесь к каждому серверу и остановите службу mongod (если служба запущена) и отредактируйте файл конфигурации MongoDB.
systemctl stop mongod
vim /etc/mongod.confИзмените хранилище по умолчанию на ваш конкретный каталог.
storage:
dbPath: /data/db1В строке bindIP измените значение на адрес вашей внутренней сети.
bindIP: 10.0.15.21
В разделе репликации вы можете использовать shardreplica01 для первого и второго экземпляров. И используйте shardreplica02 для третьего и четвертого сервера шардов.
replication:
replSetName: "shardreplica01"Далее определите роль сервера. Все это мы будем использовать как экземпляры shardsvr.
sharding:
clusterRole: shardsvrСохранить и выйти.
Теперь создайте новый каталог для данных MongoDB.
mkdir -p /data/db1
chown -R mongod:mongod /data/db1Запустите службу монгод.
mongod --config /etc/mongod.conf
Проверьте, работает ли MongoDB, с помощью следующей команды:
netstat -plntu
Вы увидите, что MongoDB работает по локальному сетевому адресу.
Затем создайте новый набор реплик для этих двух экземпляров сегментов. Подключитесь к shardsvr1 и получите доступ к оболочке mongo.
ssh
mongo --host shardsvr1 --port 27017Инициируйте набор реплик с именем shardreplica01, членами которого являются shardsvr1 и shardsvr2.
rs.initiate(
{
_id : "shardreplica01",
members: [
{ _id : 0, host : "shardsvr1:27017" },
{ _id : 1, host : "shardsvr2:27017" }
]
}
)Если ошибки нет, вы увидите результаты, как показано ниже.
Результаты shardsvr3 и shardsvr4 с именем набора реплик shardreplica02.
Повторите этот шаг на серверах shardsvr3 и shardsvr4 с другим именем набора реплик shardreplica02.
Теперь мы создали 2 набора реплик в качестве шарда — shardreplica01 и shardreplica02.
Шаг 5. Настройте mongos/маршрутизатор запросов
Query Router или mongos — это просто экземпляры, на которых работает mongos. Вы можете запустить mongos с файлом конфигурации или запустить его только с помощью командной строки.
Войдите на сервер mongos и остановите службу MongoDB.
ssh
systemctl stop mongodЗапустите mongos с помощью команды ниже.
mongos --configdb "replconfig01/configsvr1:27017,configsvr2:27017"
используйте параметр --configdb для определения сервера конфигурации. Если вы работаете в производственной среде, используйте как минимум 3 сервера конфигурации.
Результаты вы увидите ниже.
Successfully connected to configsvr1:27017
Successfully connected to configsvr2:27017экземпляры mongos запущены.
Шаг 6 — Добавьте осколки в mongos/Query Router
Откройте другую оболочку из шага 5, снова подключитесь к серверу mongos и получите доступ к оболочке mongo.
ssh
mongo --host mongos --port 27017Добавьте сервер шарда с запросом sh mongodb.
Для экземпляров shardreplica01.
sh.addShard( "shardreplica01/shardsvr1:27017")
sh.addShard( "shardreplica01/shardsvr2:27017")Для экземпляров shardreplica02.
sh.addShard( "shardreplica02/shardsvr3:27017")
sh.addShard( "shardreplica02/shardsvr4:27017")Убедитесь, что ошибки нет, и проверьте статус шарда.
sh.status()
Вы получите статус шардинга, как показано на скриншоте ниже.
У нас есть 2 набора реплик осколков и 1 экземпляр mongos, работающий в нашем стеке.
Шаг 7 — Тестирование
Теперь хорошо протестируйте сервер MongoDB, включив сегментирование, а затем добавьте документы.
Получите доступ к оболочке mongo сервера mongos.
ssh
mongo --host mongos --port 27017Включить сегментирование для базы данных
Создайте новую базу данных и включите сегментирование для новой базы данных.
use lemp
sh.enableSharding("lemp")
sh.status()Теперь посмотрите состояние базы данных — она была разделена на набор реплик shardreplica01.
Включить шардинг для коллекций
Далее добавляем в базу новые коллекции с поддержкой шардинга. Мы добавим новую коллекцию с именем stack с именем коллекции осколков, а затем увидим статус базы данных и коллекций.
sh.shardCollection("lemp.stack", {"name":1})
sh.status()Добавлен новый стек коллекций с именем коллекции осколков.
Добавляйте документы в стопку коллекций.
Теперь вставьте документы в коллекции. Когда мы добавляем документы в коллекцию в сегментированном кластере, мы должны включать ключ сегмента.
Вы можете использовать пример ниже. Мы используем имя ключа сегмента, как мы добавили при включении сегментирования для коллекций.
db.stack.save({
"name": "LEMP Stack",
"apps": ["Linux", "Nginx", "MySQL", "PHP"],
})Документы успешно добавлены в коллекцию, как показано на следующем снимке экрана.
Если вы хотите протестировать базу данных, вы можете подключиться к набору реплик shardreplica01 PRIMARY server и открыть оболочку mongo. Я захожу на ГЛАВНЫЙ сервер shardsvr2.
ssh
mongo --host shardsvr2 --port 27017Проверьте базу данных, доступную в наборе реплик.
show dbs
use lemp
db.stack.find()Вы увидите, что база данных, коллекции и документы доступны в наборе реплик.
Разделенный кластер MongoDB на CentOS 7 успешно установлен и развернут.
Ссылка
- https://docs.mongodb.com/manual/tutorial/deploy-shard-cluster/