Как настроить репликацию MongoDB в Ubuntu 18.04 LTS
В этом руководстве я покажу, как настроить набор реплик MongoDB на сервере Ubuntu 18.04. MongoDB — это система баз данных NoSQL корпоративного класса с автоматическим масштабированием, высокой доступностью и высокой производительностью. В базе данных NoSQL данные хранятся в структуре документа в формате MongoDB BSON. Операторы SQL не могут использоваться в MongoDB для вставки или извлечения данных.
Что такое репликация / реплика MongoDB?
В MongoDB набор реплик — это группа процессов mongod, которые поддерживают один и тот же набор данных. Наборы реплик являются основой для всех производственных развертываний, поскольку они обеспечивают избыточность данных и высокую доступность.
В этом руководстве будут описаны шаги, необходимые для создания рабочего набора реплик из трех узлов без настроенного управления доступом для ограничения доступа. Это руководство основано на следующих системных IP-адресах:
Node1: 10.10.5.2 Node2: 10.10.5.3 Node3: 10.10.5.4
Шаг 1: Требования к настройке
Прежде чем вы сможете настроить набор реплик, вы должны установить MongoDB в каждой системе, которая будет частью набора реплик. Установите правильные имена хостов для всех серверов. Если у вас есть активный DNS-сервер, добавьте записи A для всех серверов или измените файл / etc / hosts . Добавьте их на всех узлах.
$ sudo vim /etc/hosts 10.10.5.2 mongodb-01 10.10.5.3 mongodb-02 10.10.5.4 mongodb-03
К вашему сведению: мои настройки лаборатории основаны на Vagrantfile
использовании KVM ниже.
Затем я побежал, vagrant up
чтобы запустить все виртуальные машины
Шаг 2: Установите MongoDB на все узлы Ubuntu 18.04
Если вы еще не установили MongoDB, ознакомьтесь с нашим руководством по установке Как установить последнюю версию MongoDB на Ubuntu 18.04 / Ubuntu 16.04. Я буду включать руководство по установке здесь для удобства.
Обновление системы:
sudo apt-get update sudo apt-get upgrade
Импортировать открытый ключ GPG MongoDB:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
После того, как ключ был импортирован, добавьте репозиторий:
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
Для моей установки у меня есть 10 ГБ вторичного хранилища, выделенного для данных MongoDB. Я разделю его и подключу к /data/mongodb.
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 32G 0 disk |-sda1 8:1 0 487M 0 part /boot |-sda2 8:2 0 1.9G 0 part [SWAP] `-sda3 8:3 0 29.6G 0 part / vda 252:0 0 10G 0 disk
Создайте таблицу разделов GPT для дополнительного диска, это может быть несколько дисков
parted -s -a optimal -- /dev/vda mklabel gpt parted -s -a optimal -- /dev/vda mkpart primary 0% 100% parted -s -- /dev/vda align-check optimal 1
Затем создайте том LVM, это позволит легко расширить раздел
# pvcreate /dev/vda1 Physical volume "/dev/vda1" successfully created. # vgcreate vg11 /dev/vda1 Volume group "vg11" successfully created # lvcreate -n data -l 100%FREE vg11 Logical volume "data" created
Создайте ext4
файловую систему на созданном логическом томе.
# mkfs.ext4 /dev/mapper/vg11-data mke2fs 1.44.1 (24-Mar-2018) Creating filesystem with 2620416 4k blocks and 655360 inodes Filesystem UUID: b98e07e5-1b04-4282-a9db-fa5b73c74d2f Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done
Создайте точку монтирования и смонтируйте раздел
echo "/dev/mapper/vg11-data /data ext4 defaults 0 0" >> /etc/fstab mkdir /data mount -a
Убедитесь, что монтирование раздела прошло успешно:
# df -hT | grep /data /dev/mapper/vg11-data ext4 9.8G 37M 9.3G 1% /data
Установить пакеты MongoDB
sudo apt-get update sudo apt-get install -y openssl libcurl3 mongodb-org
Создать папку для данных MongoDB
mkdir /data/mongodb chown -R mongodb:mongodb /data/mongodb chmod -R 775 /data/mongodb
Шаг 3: Настройте набор реплик MongoDB
Теперь, когда у нас есть все необходимое, давайте приступим к настройке набора реплик MongoDB.
Изменить адрес прослушивания MongoDB с локального IP-адреса на всех узлах
sudo vim /etc/mongod.conf
# node 1 # network interfaces net: port: 27017 bindIp: 10.10.5.2 # Listen to local interface only, comment to listen on all interfaces. # node 2 # network interfaces net: port: 27017 bindIp: 10.10.5.3 # Listen to local interface only, comment to listen on all interfaces. # node 3 # network interfaces net: port: 27017 bindIp: 10.10.5.4 # Listen to local interface only, comment to listen on all interfaces.
Настройте путь хранения к тому, который был создан ранее на всех узлах
# Where and how to store data. storage: dbPath: /data/mongodb journal: enabled: true
Настройка набора реплик MongoDB
Один из узлов MongoDB работает как PRIMARY
, а все остальные узлы будут работать как SECONDARY
. Данные всегда находятся на PRIMARY
узле, а затем наборы данных реплицируются на все остальные SECONDARY
узлы.
Отредактируйте файл конфигурации MongoDB mongod.conf и включите набор реплик на всех узлах
replication: replSetName: "replica01"
Откройте порт 27017/tcp
на брандмауэре:
sudo ufw enable sudo ufw allow ssh sudo ufw allow 27017/tcp
Настройте MongoDB для запуска во время загрузки операционной системы
sudo systemctl enable mongod.service sudo systemctl restart mongod.service
Проверьте адрес прослушивания сервиса MongoDB:
# ss -tunelp | grep -i mongo tcp LISTEN 0 128 10.10.5.2:27017 0.0.0.0:* users:(("mongod",pid=15288,fd=11)) uid:111 ino:46927 sk:4 <->
Инициировать набор реплик MongoDB
Наш MongoDB Node1 ( mongodb-01 ) будет таким, PRIMARY
а два других будут действовать как SECONDARY
Войдите на сервер mongodb-01 и запустите оболочку mongo.
$ mongo 10.10.5.2 MongoDB shell version v4.0.1 connecting to: mongodb://10.10.5.2:27017/test MongoDB server version: 4.0.1 Welcome to the MongoDB shell. For interactive help, type "help". ... >
Инициализируйте реплику, включенную с node1
помощью следующей команды:
> rs.initiate() { "info2" : "no configuration specified. Using a default configuration for the set", "me" : "10.10.5.2:27017", "ok" : 1, "operationTime" : Timestamp(1534797235, 1), "$clusterTime" : { "clusterTime" : Timestamp(1534797235, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } }
Убедитесь, что вы получите 1
для ok
государства
Добавить вторичные узлы
replica01:PRIMARY> rs.add("mongodb-02") { "ok" : 1, "operationTime" : Timestamp(1534797580, 1), "$clusterTime" : { "clusterTime" : Timestamp(1534797580, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } } replica01:PRIMARY> rs.add("mongodb-03") { "ok" : 1, "operationTime" : Timestamp(1534797614, 1), "$clusterTime" : { "clusterTime" : Timestamp(1534797614, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } }
Проверьте состояние набора реплик, используя:
replica01:PRIMARY> rs.status()
Проверьте статус мастера
replica01:PRIMARY> rs.isMaster()
Тестирование репликации MongoDB
Создать тестовую базу данных на mongodb-01
replica01:PRIMARY> use test_db switched to db test_db
Добавить некоторые данные
> db.test.save( { "desc": "My Test Database", "apps": ["Test1", "Test2", "Test3", "Test4"], }) replica01:PRIMARY> show dbs admin 0.000GB config 0.000GB local 0.000GB test_db 0.000GB replica01:PRIMARY> use test_db switched to db test_db replica01:PRIMARY> show collections test
Вывод
Теперь у вас есть рабочая репликация MongoDB. Вы можете увеличить размер кластера с трех узлов до пяти узлов, семи узлов или более. Это число рассчитывается по формуле: [ Основные подходящие узлы) / 2 + 1 ], что означает, что для высокой доступности требуется нечетное количество узлов, минимальное число — три .
Ссылки:
https://docs.mongodb.com/master/replication/
https://docs.mongodb.com/manual/tutorial/deploy-replica-set/
Уведомление: Как установить MongoDB 4 на Ubuntu 18.04 / Ubuntu 16.04 - Блог от молодого системного администратора