Как настроить mongodb conf

Большой туториал по MongoDB

Конфигурационный файл

Jan 24, 2018 · 2 min read

Мы можем конфигурировать работу mongod с помощью конфигурационного файла. Mongod экземпляр смотрит конфигурационный файл перед стартом, который в свою очередь содержит настройки для работы базы. MongoDB для конфигурационного файла использует YAML формат.

YAML не поддерживает вложенность через табуляцию, используйте пробелы

Стандартный конфигурационный файл лежит на пути etc/mongod.conf мы можем запустить mongod с использованием любого конфигурационного файла с помощью следующего флага:

Запустит с конфигурационным файлом, давайте рассмотрим простейшую конфигурацию.

MongoDB пакет для линукса включает в себя инициализирующий пакет для старта базы, потому что зависит от нескольких значений: path dbpath fork при изменении которых MongoDB может и не запуститься.

systemLog

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

processManagement

Управление процессом в котором работает MongoDB.

  • fork — Запускает демона в фоновом режиме для работы базы. Подефолту false .
  • pidFilePath — Путь к файлу который будет хранить process ID или PID.
  • timeZoneInfo — Указывает путь к файлу для загрузки временных зон, если не указан то используются внутренние механизмы.

Для управления работы с сетью. Мы также рассмотрим не все пункты, а только самые необходимые.

  • port — обозначает номер порта на котором будет запущена прослушка сокета. По дефолту это порт 27017.
  • bindIp — ip адрес с которого можно обращаться в базу. Эта настройка сделана для безопасности, MongoDB работает как сервер и чтобы избежать доступа извне можно указать 127.0.0.1 и к этой базе смогут обращаться только те процессы, которые запущены на данной машине, там же где и mongoDB.
  • bindIpAll — если равно true , то база принимает все запросы независимо от их ip адреса. По дефолту false .
  • maxIncomingConnections — Количество одновременных подключений которые может обрабатывать MongoDB, этот параметр не будет работать, если он превышает установленный операционной системой максимум. По дефолту равно 65536.

Остальные свойства можно посмотреть в документации к MongoDB.

security

Отвечает за безопасность доступа к базе.

  • authorization — если enabled , то требует авторизации юзера, без логина и пароля не устанавливает соединение с процессом, который его запрашивает. По дефолту disabled .
  • javascriptEnabled — включает или отключает исполнение JavaScript на стороне сервера. Когда отключен, вы не можете использовать операции, выполняющие JavaScript на стороне сервера, такие как операторы запроса $where , метод db.collection.mapReduce() , метод группировки db.collection.group().

Остальные параметры можно посмотреть в документации к MongoDB.

storage

Отвечает за параметры базы данных.

  • dbPath — строка которая указывает место где будет храниться база или инициализироваться из файлов, которые там хранятся. По дефолту /data/db
  • journal — В свою очередь имеет свойство enabled , которое отвечает за включения журнала долговечности, чтобы файлы в базе оставались действительными и восстанавливались. Возможно указать только в том случае если мы указали dbPath .

Остальные настройки можно почитать в документации к MongoDB.

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

Источник

Установка и подключение к MongoDB

В данной инструкции мы рассмотрим процесс установки MongoDB на Linux Ubuntu (Debian). Также будут приведены примеры настройки подключения по сети, защита соединения с помощью шифрования и аутентификации.

Установка

На странице MongoDB Community Downloads смотрим стабильные версии программного продукта. На момент обновления инструкции это была 4.4.

Обратите внимание, установка MongoDB возможна на большое число популярных операционных систем — Amazon, Debian, Ubuntu, macOS, CentOS, Red Hat, Windows и другие.

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

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

С помощью скопированной ссылки скачиваем и устанавливаем ключ:

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

Создаем файл для настройки репозитория Ubuntu:

deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse

* focal — название релиза Ubuntu. В данном примере, версия 20.04. На данный момент возможны варианты:

  • focal: 20.04.
  • bionic: 18.04.
  • xenial: 16.04.

Обновляем список пакетов:

apt-get install mongodb-org

Стартуем сервис и разрешаем его автозапуск:

systemctl start mongod

systemctl enable mongod

Для подключения к СУБД вводим команду:

Можно для проверки ввести команду, которая покажет созданные базы данных:

После первой установки мы должны увидеть следующее:

admin 0.000GB
config 0.000GB
local 0.000GB

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

Для создания базы просто обращается к ней:

* в данном примере будут создана база newDB.

Для создания коллекции, выполняем команду на вставку данных:

Выходим из оболочки SQL:

Доступ по сети

По умолчанию к установленной базе можно подключиться только с локального компьютера. Рассмотрим процесс настройки сетевого доступа.

Для начала, откроем порт в брандмауэре:

iptables -I INPUT -p tcp —dport 27017 -j ACCEPT

* по умолчанию, MongoDB работает на TCP-порту 27017.

В системах на базе Ubuntu и Debian брандмауэр работает по принципу разрешения. Если мы не меняли данной настройки, то нам не обязательно создавать разрешающее правило для Mongo.

Открываем конфигурационный файл СУБД:

Находим директиву net и в ней опцию bindIp — добавляем IP-адрес, на котором наш сервер должен принимать запросы для MongoDB:

net:
port: 27017
bindIp: 127.0.0.1, 192.168.1.15

* в нашем примере мы добавили к 127.0.0.1 адрес 192.168.1.15 — это сетевой адрес нашего сервера, на котором он должен принимать запросы.

Перезапускаем сервис mongod:

systemctl restart mongod

Чтобы проверить подключение, на другом компьютере должен быть установлен клиент для подключения к Mongo. Процесс его установки схож с установкой сервера. Рассмотрим пример для Ubuntu.

Устанавливаем ключ для репозитория:

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

deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse

* как в случае с сервером, focal — название релиза Ubuntu. В данном примере, версия 20.04. Другие варианты: bionic: 18.04, xenial: 16.04.

Обновляем список пакетов:

Устанавливаем клиентскую часть:

apt-get install mongodb-org-shell

Теперь можно подключиться к нашему серверу:

* в данном примере мы подключаемся к серверу MongoDB 192.168.1.15.

Также мы можем использовать MongoDB Compass — это приложение под Windows, Linux и macOS для работы с базой Mongo в графическом интерфейсе. Скачать его можно на странице официального сайта.

Аутентификация

По умолчанию, мы можем подключиться к СУБД без авторизации. Если нам необходимо повысить безопасность работы с базой, можно требовать ввода логина и пароля.

Заходим в командную оболочку Mongo:

Подключаемся к базе admin:

Создаем пользователя, под которым будем авторизовываться:

* в данном примере мы создадим пользователя с правами доступа на все базы. Логин root, пароль будет запрошен после ввода.

Придумываем и вводим пароль

После создания пользователя мы должны увидеть, примерно, следующую картину:

Successfully added user: <
«user» : «root»,
«roles» : [
<
«role» : «userAdminAnyDatabase»,
«db» : «admin»
>,
«readWriteAnyDatabase»
]
>

Выходим из командной оболочки:

Открываем конфигурационный файл:

Находим директиву security и задаем параметр authorization:

security:
authorization: enabled

Перезапускаем сервис mongod:

systemctl restart mongod

Теперь пробуем подключиться к mongo. Мы можем авторизоваться несколькими способами.

а) Авторизация при подключении:

mongo —authenticationDatabase «admin» -u «root» -p

* в данном примере мы подключимся к базе под пользователем root. Пароль будет запрошен системой после ввода команды.

б) Авторизация после подключения:

Теперь усилим безопасность, зашифровав передачу данных. Для этого нам понадобиться сертификат. В нашем примере, мы будем использовать самоподписанный сертификат, но в продуктивной среде, лучше его купить или запросить у Let’s Encrypt.

Создаем каталог, в котором разместим наши сертификаты:

mkdir -p /etc/ssl/mongodb

Сгенерируем самоподписанный сертификат:

openssl req -new -x509 -days 1461 -nodes -out /etc/ssl/mongodb/cert.pem -keyout /etc/ssl/mongodb/cert.pem -subj «/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=mongo.dmosk.local/CN=mongo»

Выставим в качестве владельца на файлы сертификата пользователя mongodb:

chown mongodb:mongodb /etc/ssl/mongodb/cert.pem

Открываем конфигурационный файл СУБД:

В директиву net дописываем опции TLS:

net:
.
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb/cert.pem

* в данном примере мы указали необходимость шифрования данных при передаче, а также путь до сгенерированного нами сертификата.

Перезапускаем сервис mongod:

systemctl restart mongod

Для подключения к базе с использованием шифрования используем команду:

mongo —tls —tlsAllowInvalidCertificates

* в данном примере мы указываем при подключении использовать шифрование с использованием TLS. Опция tlsAllowInvalidCertificates говорит, что клиент должен принять неправильный сертификат (так как у нас он самоподписанный).

Так как у нас еще настроена аутентификация, для подключения введем такую команду:

mongo —tls —tlsAllowInvalidCertificates —authenticationDatabase «admin» -u «root» -p

Для подключения к нашему серверу по сети, полная команда будет такой:

mongo «mongodb://192.168.1.15:27017» —tls —tlsAllowInvalidCertificates —authenticationDatabase «admin» -u «root» -p

Примеры подключения из языков программирования

Рассмотрим небольшие примеры для подключения к MongoDB из языков программирования PHP и Python.

Для возможности работы PHP с Mongo необходимо установить соответствующее расширение. Выполняем пошагово следующие действия:

apt-get install php-pear php-dev

pecl channel-update pecl.php.net

pecl install mongodb

Для каждого возможного варианта использования PHP необходимо создать отдельный конфигурационной файл. В данном примере, под php 7.4 для cli, php-fpm, apache.

Источник

Установка и настройка MongoDB на Debian, а также ReplicaSet и пара других мелочей

Это руководство описывает пошаговую установку и настройку реплики из 3 узлов mongoDB на базе движка WiredTiger. А также несколько полезных мелочей для людей, впервые столкнувшихся с MongoDB.

Важное уточнение:

  1. До начала установки необходимо понимание конечной архитектуры.
  2. Некоторые приятности требуют Enterprise лицензию.

В моем случае это коснулось In-Memory Storage Engine, который я хотел добавить для тестирования производительности базы, находящейся в RAM.

Немного о движке WiredTiger

Engine WiredTiger — новый движок mongoDB, использующийся по умолчанию вместо MMAP, начиная с версии 3.4. Хорош тем, что работает с данными на уровне коллекций и отдельных документов, а не полностью базой. Также устраняет проблему Global lock по вышеуказанной причине, из-за чего и был выбран в продакшен.

Установка OS и компонентов

Ставим Debian любой удобной вам версии, у меня использовался 8.6.0.
Для упрощения масштабирования узлов и баз данных, рекомендую использовать lvm.
Из компонентов понадобится только ssh для более удобного доступа к серверу.

Установка MongoDB.

У меня используется бесплатная Community Edition, руководство будет на её основе.
По необходимости допишу Enterpise версию, т.к. она тоже крутилась и разбиралась.

Данное руководство описывается для варианта 3-х серверов (master, slave, arbiter).

    Для начала нам необходимо импортировать публичный GPG ключ.

Далее добавляем репозиторий MongoDB.
Открываем файл со списком репозиториев

Копируем репозиторий и сохраняем изменения.

Обновляем список доступных пакетов

Устанавливаем MongoDB и зависимые пакеты.

Повторяем процедуру для 3(трех) серверов,
На этом первоначальная настройка завершена.
Теперь переходим к настройке mongoDB.

Настройка и добавление серверов в Replica Set

В начале было слово
Давайте для начала разберемся, что такое replica set.
Replica Set — это кластер серверов MongoDB, реализующий механизм репликации master-slave и автоматическое переключение между ними. Это рекомендуемый механизм репликации от разработчиков MongoDB. ссылка на офф. документацию.

Мы используем механизм репликации, приведенный на картинке:
мастер, два вторичных и арбитр.

Теперь по порядку:

Primary — основной сервер mongoDB.
Secondary — точные копии баз(ы) данных с real-time синхронизацией.
Arbiter — сервер выбора вторичной реплики с высшим приоритетом, которая станет главной в случае падения сервера.

ОЧЕНЬ ВАЖНО:
Arbiter отвечает только за выборы преемника, сам стать преемником он не может, поэтому рекомендуется отдавать под арбитра минимальные ресурсы.

ЕЩЁ БОЛЕЕ ВАЖНО:
Технически можно вообще жить без арбитра, однако с ним выборы будут происходить в разы быстрее, соответственно время простоя будет минимизировано. Плюс есть ненулевая вероятность потерять ReplicaSet целиком.

Primary
Настройки пишем в файл /etc/mongod.conf У меня файл выглядит следующим образом:

Указываемые значения переменных:
dbPath — путь к базе данных. При указании на пустое место, создаст там базы. При разворачивании бэкапа подцепит существующую.
journal — включает журналирование.
replSetName — название реплики. Должно быть идентичным у всех узлов внутри реплики.
bindIp — список адресов, с которых можно принимать соединения по порту 27017.

Далее для конфигурирования я использовал саму mongoDB:

попадаем внутрь и первым делом проверяем статус:

Начальный статус должен быть 0 — startup. Означает что узел не является членом ни одной реплики.

Инициализируем реплику.
Выполняем в MongoShell на первичном узле

Сразу после добавления в реплику узел будет в статусе 5 — Startup2, это означает что он присоединился к реплике и в данный момент синхронизируется. Может занять продолжительное время.

Добавляем следующие узлы:

Статусы в rs.status() будут:
1 — Primary
2 — Secondary
7 — Arbiter

Приоритеты

Первый:
Необходимо проставить приоритеты (цифры member id берем из статуса):

Чем выше цифра приоритета, тем ниже сам приоритет при выборе Primary узла.

Второй:
Добавляем узлы с заранее прописанным приоритетом:

Проверяем что все узлы доступны и выставлены с правильными приоритетами:

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

При добавлении узла в уже существующую реплику она какое-то время будет недоступна в связи с синхронизацией.

На этом установка и настройка MongoDB в режиме ReplicaSet завершена и можно с чистой совестью наполнять базу данными.

Другие полезные команды

Сбрасывание PRIMARY. Смена первичного узла и переназначение приоритетов

60 секунд — время, в течение которого сервер, с которого запущено выполнение команды, не может стать Primary; 40 секунд — время перевыборов нового Primary.

30 секунд — время отключения Primary и перевыборы. Выполнение команды допустимо с любого из серверов mongoDB.

Узел, с которого запущена команда, в течение 60 секунд не сможет стать Primary.

/var/lib/mongodb/ — Тут лежат файлы баз.

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

Восстановление отдельной таблицы(коллекции):

Создание дампа
создание бэкапа всех баз в папку Backup:

создание бэкапа отдельной базы:

создание бэкапа отдельной таблицы:

Запуск от имени root, создание бэкапа указанной базы в указанный каталог + текущая дата:

Источник

Читайте также:  Не работает задний кондиционер паджеро 4
Оцените статью