Как настроить репликацию MongoDB в Ubuntu 18.04 LTS

Как установить MongoDB 4 на Debian 10 (Buster)

Как настроить репликацию MongoDB в Ubuntu 18.04 LTS

 

В этом руководстве я покажу, как настроить набор реплик MongoDB на сервере Ubuntu 18.04. MongoDB — это система баз данных NoSQL корпоративного класса с автоматическим масштабированием, высокой доступностью и высокой производительностью. В базе данных NoSQL данные хранятся в структуре документа в формате MongoDB BSON. Операторы SQL не могут использоваться в MongoDB для вставки или извлечения данных.

Что такое репликация / реплика MongoDB?

В MongoDB набор реплик — это группа процессов mongod, которые поддерживают один и тот же набор данных. Наборы реплик являются основой для всех производственных развертываний, поскольку они обеспечивают избыточность данных и высокую доступность.

Как настроить репликацию MongoDB в Ubuntu 18.04 LTSВ этом руководстве будут описаны шаги, необходимые для создания рабочего набора реплик из трех узлов без настроенного управления доступом для ограничения доступа. Это руководство основано на следующих системных 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 ниже.

# -*- mode: ruby -*-
# vim: set ft=ruby :

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'libvirt'

# Check required plugins
REQUIRED_PLUGINS_LIBVIRT = %w(vagrant-libvirt)
exit unless REQUIRED_PLUGINS_LIBVIRT.all? do |plugin|
  Vagrant.has_plugin?(plugin) || (
    puts "The #{plugin} plugin is required. Please install it with:"
    puts "$ vagrant plugin install #{plugin}"
    false
  )
end

Vagrant.configure("2") do |config|
  config.vm.define "mongodb-01" do |node|
    node.vm.hostname = "mongodb-01"
    node.vm.box = "generic/ubuntu1804"
    node.vm.box_check_update = false
    #node.vm.synced_folder '.', '/vagrant', :disabled => true
    node.vm.network "private_network", ip: "10.10.5.2"
    node.vm.provider :libvirt do |domain|
      domain.memory = 512
      domain.storage :file, :size => '10G'
    end
  end
  config.vm.define "mongodb-02" do |node|
    node.vm.hostname = "mongodb-02"
    node.vm.box = "generic/ubuntu1804"
    node.vm.box_check_update = false
    #node.vm.synced_folder '.', '/vagrant', :disabled => true
    node.vm.network "private_network", ip: "10.10.5.3"
    node.vm.provider :libvirt do |domain|
      domain.memory = 512
      domain.storage :file, :size => '10G'
    end
  end
  config.vm.define "mongodb-03" do |node|
    node.vm.hostname = "mongodb-03"
    node.vm.box = "generic/ubuntu1804"
    node.vm.box_check_update = false
    #node.vm.synced_folder '.', '/vagrant', :disabled => true
    node.vm.network "private_network", ip: "10.10.5.4"
    node.vm.provider :libvirt do |domain|
      domain.memory = 512
      domain.storage :file, :size => '10G'
    end
  end
end

Затем я побежал, 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/

Author: forgero

1 thought on “Как настроить репликацию MongoDB в Ubuntu 18.04 LTS

  1. Уведомление: Как установить MongoDB 4 на Ubuntu 18.04 / Ubuntu 16.04 - Блог от молодого системного администратора

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

5 × 3 =