Установка и настройка MongoDB — различия между версиями
Admin (обсуждение | вклад) (Новая страница: «= Установка и настройка MongoDB = == 1. Подготовка системы == * Войдите в систему под учетной за…») |
Admin (обсуждение | вклад) |
||
Строка 6: | Строка 6: | ||
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль. | * Убедитесь, что у вас есть доступ к серверу через SSH или консоль. | ||
− | == 2. Установка MongoDB | + | == 2. Установка MongoDB == |
=== Обновление системы === | === Обновление системы === | ||
1. Обновите систему: | 1. Обновите систему: | ||
− | < | + | <pre>sudo apt update</pre> |
2. Установите необходимые пакеты: | 2. Установите необходимые пакеты: | ||
− | < | + | <pre>sudo apt install -y wget curl gnupg2 software-properties-common</pre> |
=== Установка MongoDB Community Edition === | === Установка MongoDB Community Edition === | ||
1. Импортируйте публичный ключ MongoDB: | 1. Импортируйте публичный ключ MongoDB: | ||
− | < | + | <pre>wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -</pre> |
2. Добавьте репозиторий MongoDB: | 2. Добавьте репозиторий MongoDB: | ||
− | < | + | <pre>echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list</pre> |
3. Обновите список пакетов: | 3. Обновите список пакетов: | ||
− | < | + | <pre>sudo apt update</pre> |
4. Установите MongoDB: | 4. Установите MongoDB: | ||
− | < | + | <pre>sudo apt install -y mongodb-org</pre> |
5. Проверьте версию: | 5. Проверьте версию: | ||
− | < | + | <pre>mongod --version</pre> |
=== Запуск MongoDB === | === Запуск MongoDB === | ||
1. Запустите и включите автозапуск: | 1. Запустите и включите автозапуск: | ||
− | < | + | <pre>sudo systemctl start mongod</pre> |
− | < | + | <pre>sudo systemctl enable mongod</pre> |
2. Проверьте статус: | 2. Проверьте статус: | ||
− | < | + | <pre>sudo systemctl status mongod</pre> |
3. Проверьте подключение: | 3. Проверьте подключение: | ||
− | < | + | <pre>mongosh</pre> |
− | == 3. Базовая конфигурация | + | == 3. Базовая конфигурация == |
=== Создание резервной копии === | === Создание резервной копии === | ||
1. Создайте резервную копию оригинального файла: | 1. Создайте резервную копию оригинального файла: | ||
− | < | + | <pre>sudo cp /etc/mongod.conf /etc/mongod.conf.backup</pre> |
=== Основная конфигурация === | === Основная конфигурация === | ||
1. Отредактируйте конфигурационный файл: | 1. Отредактируйте конфигурационный файл: | ||
− | < | + | <pre>sudo nano /etc/mongod.conf</pre> |
2. Настройте основные параметры: | 2. Настройте основные параметры: | ||
− | < | + | <pre>\# Где хранить данные |
storage: | storage: | ||
dbPath: /var/lib/mongodb | dbPath: /var/lib/mongodb | ||
Строка 64: | Строка 64: | ||
enabled: true | enabled: true | ||
− | # Где записывать логи | + | \# Где записывать логи |
systemLog: | systemLog: | ||
destination: file | destination: file | ||
Строка 70: | Строка 70: | ||
path: /var/log/mongodb/mongod.log | path: /var/log/mongodb/mongod.log | ||
− | # Сетевые интерфейсы | + | \# Сетевые интерфейсы |
net: | net: | ||
port: 27017 | port: 27017 | ||
bindIp: 127.0.0.1 | bindIp: 127.0.0.1 | ||
− | # Процесс | + | \# Процесс |
processManagement: | processManagement: | ||
timeZoneInfo: /usr/share/zoneinfo | timeZoneInfo: /usr/share/zoneinfo | ||
− | # Операционная система | + | \# Операционная система |
operationProfiling: | operationProfiling: | ||
slowOpThresholdMs: 100 | slowOpThresholdMs: 100 | ||
mode: slowOp | mode: slowOp | ||
− | </ | + | </pre> |
=== Настройка безопасности === | === Настройка безопасности === | ||
1. Создайте администратора: | 1. Создайте администратора: | ||
− | < | + | <pre>mongosh</pre> |
2. В MongoDB shell выполните: | 2. В MongoDB shell выполните: | ||
− | < | + | <pre>use admin |
db.createUser({ | db.createUser({ | ||
user: "admin", | user: "admin", | ||
Строка 97: | Строка 97: | ||
roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"] | roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"] | ||
}) | }) | ||
− | </ | + | </pre> |
3. Включите аутентификацию в конфигурации: | 3. Включите аутентификацию в конфигурации: | ||
− | < | + | <pre>security: |
authorization: enabled | authorization: enabled | ||
− | </ | + | </pre> |
4. Перезапустите MongoDB: | 4. Перезапустите MongoDB: | ||
− | < | + | <pre>sudo systemctl restart mongod</pre> |
− | == 4. Управление MongoDB | + | == 4. Управление MongoDB == |
=== Основные команды === | === Основные команды === | ||
1. '''Запуск MongoDB''': | 1. '''Запуск MongoDB''': | ||
− | < | + | <pre>sudo systemctl start mongod</pre> |
2. '''Остановка MongoDB''': | 2. '''Остановка MongoDB''': | ||
− | < | + | <pre>sudo systemctl stop mongod</pre> |
3. '''Перезапуск MongoDB''': | 3. '''Перезапуск MongoDB''': | ||
− | < | + | <pre>sudo systemctl restart mongod</pre> |
4. '''Проверка статуса''': | 4. '''Проверка статуса''': | ||
− | < | + | <pre>sudo systemctl status mongod</pre> |
5. '''Подключение к MongoDB''': | 5. '''Подключение к MongoDB''': | ||
− | < | + | <pre>mongosh</pre> |
=== Управление базами данных === | === Управление базами данных === | ||
1. '''Создание базы данных''': | 1. '''Создание базы данных''': | ||
− | < | + | <pre>use mydatabase</pre> |
2. '''Просмотр баз данных''': | 2. '''Просмотр баз данных''': | ||
− | < | + | <pre>show dbs</pre> |
3. '''Переключение на базу данных''': | 3. '''Переключение на базу данных''': | ||
− | < | + | <pre>use mydatabase</pre> |
4. '''Удаление базы данных''': | 4. '''Удаление базы данных''': | ||
− | < | + | <pre>db.dropDatabase()</pre> |
− | == 5. Работа с коллекциями | + | == 5. Работа с коллекциями == |
=== Создание и управление коллекциями === | === Создание и управление коллекциями === | ||
1. '''Создание коллекции''': | 1. '''Создание коллекции''': | ||
− | < | + | <pre>db.createCollection("users")</pre> |
2. '''Просмотр коллекций''': | 2. '''Просмотр коллекций''': | ||
− | < | + | <pre>show collections</pre> |
3. '''Вставка документов''': | 3. '''Вставка документов''': | ||
− | < | + | <pre>db.users.insertOne({ |
name: "John Doe", | name: "John Doe", | ||
email: "john@example.com", | email: "john@example.com", | ||
age: 30 | age: 30 | ||
− | })</ | + | })</pre> |
4. '''Вставка нескольких документов''': | 4. '''Вставка нескольких документов''': | ||
− | < | + | <pre>db.users.insertMany([ |
{ name: "Jane Smith", email: "jane@example.com", age: 25 }, | { name: "Jane Smith", email: "jane@example.com", age: 25 }, | ||
{ name: "Bob Johnson", email: "bob@example.com", age: 35 } | { name: "Bob Johnson", email: "bob@example.com", age: 35 } | ||
− | ])</ | + | ])</pre> |
=== Поиск и обновление данных === | === Поиск и обновление данных === | ||
1. '''Поиск всех документов''': | 1. '''Поиск всех документов''': | ||
− | < | + | <pre>db.users.find()</pre> |
2. '''Поиск с условием''': | 2. '''Поиск с условием''': | ||
− | < | + | <pre>db.users.find({ age: { $gt: 30 } })</pre> |
3. '''Обновление документа''': | 3. '''Обновление документа''': | ||
− | < | + | <pre>db.users.updateOne( |
{ name: "John Doe" }, | { name: "John Doe" }, | ||
{ $set: { age: 31 } } | { $set: { age: 31 } } | ||
− | )</ | + | )</pre> |
4. '''Удаление документа''': | 4. '''Удаление документа''': | ||
− | < | + | <pre>db.users.deleteOne({ name: "John Doe" })</pre> |
− | == 6. Настройка репликации | + | == 6. Настройка репликации == |
=== Создание реплика-сета === | === Создание реплика-сета === | ||
1. Остановите MongoDB: | 1. Остановите MongoDB: | ||
− | < | + | <pre>sudo systemctl stop mongod</pre> |
2. Обновите конфигурацию для реплика-сета: | 2. Обновите конфигурацию для реплика-сета: | ||
− | < | + | <pre>sudo nano /etc/mongod.conf</pre> |
3. Добавьте настройки репликации: | 3. Добавьте настройки репликации: | ||
− | < | + | <pre>replication: |
replSetName: "rs0" | replSetName: "rs0" | ||
− | </ | + | </pre> |
4. Запустите MongoDB: | 4. Запустите MongoDB: | ||
− | < | + | <pre>sudo systemctl start mongod</pre> |
5. Инициализируйте реплика-сет: | 5. Инициализируйте реплика-сет: | ||
− | < | + | <pre>mongosh</pre> |
6. В MongoDB shell выполните: | 6. В MongoDB shell выполните: | ||
− | < | + | <pre>rs.initiate()</pre> |
7. Добавьте вторичные серверы: | 7. Добавьте вторичные серверы: | ||
− | < | + | <pre>rs.add("secondary-server:27017")</pre> |
=== Настройка вторичного сервера === | === Настройка вторичного сервера === | ||
1. На вторичном сервере настройте конфигурацию: | 1. На вторичном сервере настройте конфигурацию: | ||
− | < | + | <pre>replication: |
replSetName: "rs0" | replSetName: "rs0" | ||
− | </ | + | </pre> |
2. Запустите MongoDB: | 2. Запустите MongoDB: | ||
− | < | + | <pre>sudo systemctl start mongod</pre> |
− | == 7. Настройка шардинга | + | == 7. Настройка шардинга == |
=== Настройка конфиг-серверов === | === Настройка конфиг-серверов === | ||
1. Создайте конфигурацию для конфиг-сервера: | 1. Создайте конфигурацию для конфиг-сервера: | ||
− | < | + | <pre>sudo nano /etc/mongod.conf</pre> |
2. Добавьте настройки: | 2. Добавьте настройки: | ||
− | < | + | <pre>sharding: |
clusterRole: configsvr | clusterRole: configsvr | ||
replication: | replication: | ||
replSetName: "configReplSet" | replSetName: "configReplSet" | ||
− | </ | + | </pre> |
=== Настройка шард-серверов === | === Настройка шард-серверов === | ||
1. Настройте шард-сервер: | 1. Настройте шард-сервер: | ||
− | < | + | <pre>sharding: |
clusterRole: shardsvr | clusterRole: shardsvr | ||
replication: | replication: | ||
replSetName: "shardReplSet" | replSetName: "shardReplSet" | ||
− | </ | + | </pre> |
=== Настройка mongos === | === Настройка mongos === | ||
1. Установите mongos: | 1. Установите mongos: | ||
− | < | + | <pre>sudo apt install -y mongodb-mongosh</pre> |
2. Создайте конфигурацию mongos: | 2. Создайте конфигурацию mongos: | ||
− | < | + | <pre>sudo nano /etc/mongos.conf</pre> |
3. Добавьте настройки: | 3. Добавьте настройки: | ||
− | < | + | <pre>sharding: |
configDB: configReplSet/config1:27017,config2:27017,config3:27017 | configDB: configReplSet/config1:27017,config2:27017,config3:27017 | ||
net: | net: | ||
port: 27017 | port: 27017 | ||
bindIp: 0.0.0.0 | bindIp: 0.0.0.0 | ||
− | </ | + | </pre> |
4. Запустите mongos: | 4. Запустите mongos: | ||
− | < | + | <pre>sudo mongos --config /etc/mongos.conf</pre> |
− | == 8. Мониторинг и оптимизация | + | == 8. Мониторинг и оптимизация == |
=== Настройка мониторинга === | === Настройка мониторинга === | ||
1. '''Просмотр статистики''': | 1. '''Просмотр статистики''': | ||
− | < | + | <pre>db.serverStatus()</pre> |
2. '''Просмотр статистики базы данных''': | 2. '''Просмотр статистики базы данных''': | ||
− | < | + | <pre>db.stats()</pre> |
3. '''Просмотр статистики коллекции''': | 3. '''Просмотр статистики коллекции''': | ||
− | < | + | <pre>db.users.stats()</pre> |
4. '''Просмотр активных операций''': | 4. '''Просмотр активных операций''': | ||
− | < | + | <pre>db.currentOp()</pre> |
=== Настройка индексов === | === Настройка индексов === | ||
1. '''Создание индекса''': | 1. '''Создание индекса''': | ||
− | < | + | <pre>db.users.createIndex({ email: 1 })</pre> |
2. '''Создание составного индекса''': | 2. '''Создание составного индекса''': | ||
− | < | + | <pre>db.users.createIndex({ name: 1, age: -1 })</pre> |
3. '''Просмотр индексов''': | 3. '''Просмотр индексов''': | ||
− | < | + | <pre>db.users.getIndexes()</pre> |
4. '''Удаление индекса''': | 4. '''Удаление индекса''': | ||
− | < | + | <pre>db.users.dropIndex({ email: 1 })</pre> |
=== Оптимизация производительности === | === Оптимизация производительности === | ||
1. '''Анализ медленных запросов''': | 1. '''Анализ медленных запросов''': | ||
− | < | + | <pre>db.setProfilingLevel(2, { slowms: 100 }) |
− | db.system.profile.find().sort({ ts: -1 }).limit(5)</ | + | db.system.profile.find().sort({ ts: -1 }).limit(5)</pre> |
2. '''Настройка кэша''': | 2. '''Настройка кэша''': | ||
− | < | + | <pre>\# В конфигурации MongoDB |
storage: | storage: | ||
wiredTiger: | wiredTiger: | ||
engineConfig: | engineConfig: | ||
cacheSizeGB: 2 | cacheSizeGB: 2 | ||
− | </ | + | </pre> |
− | == 9. Резервное копирование | + | == 9. Резервное копирование == |
=== Создание резервной копии === | === Создание резервной копии === | ||
1. '''Полное резервное копирование''': | 1. '''Полное резервное копирование''': | ||
− | < | + | <pre>mongodump --host localhost:27017 --db mydatabase --out /backup/mongodb/</pre> |
2. '''Резервное копирование всех баз данных''': | 2. '''Резервное копирование всех баз данных''': | ||
− | < | + | <pre>mongodump --host localhost:27017 --out /backup/mongodb/</pre> |
3. '''Сжатое резервное копирование''': | 3. '''Сжатое резервное копирование''': | ||
− | < | + | <pre>mongodump --host localhost:27017 --db mydatabase --gzip --archive=/backup/mongodb/mydatabase.gz</pre> |
4. '''Резервное копирование с аутентификацией''': | 4. '''Резервное копирование с аутентификацией''': | ||
− | < | + | <pre>mongodump --host localhost:27017 --username admin --password your_password --authenticationDatabase admin --db mydatabase --out /backup/mongodb/</pre> |
=== Восстановление из резервной копии === | === Восстановление из резервной копии === | ||
1. '''Восстановление базы данных''': | 1. '''Восстановление базы данных''': | ||
− | < | + | <pre>mongorestore --host localhost:27017 --db mydatabase /backup/mongodb/mydatabase/</pre> |
2. '''Восстановление из сжатого архива''': | 2. '''Восстановление из сжатого архива''': | ||
− | < | + | <pre>mongorestore --host localhost:27017 --gzip --archive=/backup/mongodb/mydatabase.gz</pre> |
3. '''Восстановление с заменой''': | 3. '''Восстановление с заменой''': | ||
− | < | + | <pre>mongorestore --host localhost:27017 --db mydatabase --drop /backup/mongodb/mydatabase/</pre> |
=== Автоматическое резервное копирование === | === Автоматическое резервное копирование === | ||
1. Создайте скрипт резервного копирования: | 1. Создайте скрипт резервного копирования: | ||
− | < | + | <pre>sudo nano /usr/local/bin/mongodb-backup.sh</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>\#!/bin/bash |
BACKUP_DIR="/backup/mongodb" | BACKUP_DIR="/backup/mongodb" | ||
DATE=$(date +%Y%m%d_%H%M%S) | DATE=$(date +%Y%m%d_%H%M%S) | ||
− | # Создание директории для бэкапа | + | \# Создание директории для бэкапа |
mkdir -p $BACKUP_DIR | mkdir -p $BACKUP_DIR | ||
− | # Резервное копирование всех баз данных | + | \# Резервное копирование всех баз данных |
mongodump --host localhost:27017 --out $BACKUP_DIR/mongodb-$DATE | mongodump --host localhost:27017 --out $BACKUP_DIR/mongodb-$DATE | ||
− | # Сжатие архива | + | \# Сжатие архива |
tar -czf $BACKUP_DIR/mongodb-$DATE.tar.gz -C $BACKUP_DIR mongodb-$DATE | tar -czf $BACKUP_DIR/mongodb-$DATE.tar.gz -C $BACKUP_DIR mongodb-$DATE | ||
− | # Удаление несжатой директории | + | \# Удаление несжатой директории |
rm -rf $BACKUP_DIR/mongodb-$DATE | rm -rf $BACKUP_DIR/mongodb-$DATE | ||
− | # Удаление старых бэкапов (старше 7 дней) | + | \# Удаление старых бэкапов (старше 7 дней) |
find $BACKUP_DIR -name "mongodb-*.tar.gz" -mtime +7 -delete | find $BACKUP_DIR -name "mongodb-*.tar.gz" -mtime +7 -delete | ||
echo "MongoDB backup completed: $DATE" | echo "MongoDB backup completed: $DATE" | ||
− | </ | + | </pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/mongodb-backup.sh</pre> |
4. Добавьте в crontab: | 4. Добавьте в crontab: | ||
− | < | + | <pre>sudo crontab -e</pre> |
5. Добавьте задачу: | 5. Добавьте задачу: | ||
− | < | + | <pre>0 2 * * * /usr/local/bin/mongodb-backup.sh</pre> |
− | == 10. Настройка файрвола | + | == 10. Настройка файрвола == |
=== Настройка UFW === | === Настройка UFW === | ||
1. Разрешите порт MongoDB: | 1. Разрешите порт MongoDB: | ||
− | < | + | <pre>sudo ufw allow 27017/tcp</pre> |
2. Проверьте статус: | 2. Проверьте статус: | ||
− | < | + | <pre>sudo ufw status</pre> |
=== Настройка iptables === | === Настройка iptables === | ||
1. Разрешите порт через iptables: | 1. Разрешите порт через iptables: | ||
− | < | + | <pre>sudo iptables -A INPUT -p tcp --dport 27017 -j ACCEPT</pre> |
2. Сохраните правила: | 2. Сохраните правила: | ||
− | < | + | <pre>sudo iptables-save > /etc/iptables/rules.v4</pre> |
− | == 11. Безопасность | + | == 11. Безопасность == |
=== Настройка SSL/TLS === | === Настройка SSL/TLS === | ||
1. Создайте SSL сертификаты: | 1. Создайте SSL сертификаты: | ||
− | < | + | <pre>sudo mkdir -p /etc/mongodb/ssl |
− | sudo openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/mongodb/ssl/mongodb.key -out /etc/mongodb/ssl/mongodb.crt -subj "/CN=mongodb-server"</ | + | sudo openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/mongodb/ssl/mongodb.key -out /etc/mongodb/ssl/mongodb.crt -subj "/CN=mongodb-server"</pre> |
2. Настройте SSL в конфигурации: | 2. Настройте SSL в конфигурации: | ||
− | < | + | <pre>net: |
port: 27017 | port: 27017 | ||
bindIp: 0.0.0.0 | bindIp: 0.0.0.0 | ||
Строка 402: | Строка 402: | ||
PEMKeyFile: /etc/mongodb/ssl/mongodb.crt | PEMKeyFile: /etc/mongodb/ssl/mongodb.crt | ||
PEMKeyFile: /etc/mongodb/ssl/mongodb.key | PEMKeyFile: /etc/mongodb/ssl/mongodb.key | ||
− | </ | + | </pre> |
=== Настройка аутентификации === | === Настройка аутентификации === | ||
1. Создайте пользователей с ограниченными правами: | 1. Создайте пользователей с ограниченными правами: | ||
− | < | + | <pre>use mydatabase |
db.createUser({ | db.createUser({ | ||
user: "readonly", | user: "readonly", | ||
Строка 419: | Строка 419: | ||
roles: ["readWrite"] | roles: ["readWrite"] | ||
}) | }) | ||
− | </ | + | </pre> |
− | == 12. Устранение неполадок | + | == 12. Устранение неполадок == |
=== Частые проблемы === | === Частые проблемы === | ||
1. '''MongoDB не запускается''': | 1. '''MongoDB не запускается''': | ||
− | * Проверьте логи: < | + | * Проверьте логи: <pre>sudo journalctl -u mongod</pre> |
* Проверьте права доступа к директориям | * Проверьте права доступа к директориям | ||
− | * Проверьте конфигурацию: < | + | * Проверьте конфигурацию: <pre>mongod --config /etc/mongod.conf --configExpand rest</pre> |
2. '''Проблемы с подключением''': | 2. '''Проблемы с подключением''': | ||
Строка 443: | Строка 443: | ||
1. '''Проверка статуса''': | 1. '''Проверка статуса''': | ||
− | < | + | <pre>sudo systemctl status mongod</pre> |
2. '''Проверка портов''': | 2. '''Проверка портов''': | ||
− | < | + | <pre>sudo netstat -tlnp | grep :27017</pre> |
3. '''Проверка логов''': | 3. '''Проверка логов''': | ||
− | < | + | <pre>sudo tail -f /var/log/mongodb/mongod.log</pre> |
4. '''Проверка подключения''': | 4. '''Проверка подключения''': | ||
− | < | + | <pre>mongosh --host localhost:27017</pre> |
== Заключение == | == Заключение == |
Текущая версия на 10:43, 15 октября 2025
Содержание
- 1 Установка и настройка MongoDB
- 1.1 1. Подготовка системы
- 1.2 2. Установка MongoDB
- 1.3 3. Базовая конфигурация
- 1.4 4. Управление MongoDB
- 1.5 5. Работа с коллекциями
- 1.6 6. Настройка репликации
- 1.7 7. Настройка шардинга
- 1.8 8. Мониторинг и оптимизация
- 1.9 9. Резервное копирование
- 1.10 10. Настройка файрвола
- 1.11 11. Безопасность
- 1.12 12. Устранение неполадок
- 1.13 Заключение
Установка и настройка MongoDB
1. Подготовка системы
- Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
- Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
2. Установка MongoDB
Обновление системы
1. Обновите систему:
sudo apt update
2. Установите необходимые пакеты:
sudo apt install -y wget curl gnupg2 software-properties-common
Установка MongoDB Community Edition
1. Импортируйте публичный ключ MongoDB:
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
2. Добавьте репозиторий MongoDB:
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
3. Обновите список пакетов:
sudo apt update
4. Установите MongoDB:
sudo apt install -y mongodb-org
5. Проверьте версию:
mongod --version
Запуск MongoDB
1. Запустите и включите автозапуск:
sudo systemctl start mongod
sudo systemctl enable mongod
2. Проверьте статус:
sudo systemctl status mongod
3. Проверьте подключение:
mongosh
3. Базовая конфигурация
Создание резервной копии
1. Создайте резервную копию оригинального файла:
sudo cp /etc/mongod.conf /etc/mongod.conf.backup
Основная конфигурация
1. Отредактируйте конфигурационный файл:
sudo nano /etc/mongod.conf
2. Настройте основные параметры:
\# Где хранить данные storage: dbPath: /var/lib/mongodb journal: enabled: true \# Где записывать логи systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log \# Сетевые интерфейсы net: port: 27017 bindIp: 127.0.0.1 \# Процесс processManagement: timeZoneInfo: /usr/share/zoneinfo \# Операционная система operationProfiling: slowOpThresholdMs: 100 mode: slowOp
Настройка безопасности
1. Создайте администратора:
mongosh
2. В MongoDB shell выполните:
use admin db.createUser({ user: "admin", pwd: "your_password", roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"] })
3. Включите аутентификацию в конфигурации:
security: authorization: enabled
4. Перезапустите MongoDB:
sudo systemctl restart mongod
4. Управление MongoDB
Основные команды
1. Запуск MongoDB:
sudo systemctl start mongod
2. Остановка MongoDB:
sudo systemctl stop mongod
3. Перезапуск MongoDB:
sudo systemctl restart mongod
4. Проверка статуса:
sudo systemctl status mongod
5. Подключение к MongoDB:
mongosh
Управление базами данных
1. Создание базы данных:
use mydatabase
2. Просмотр баз данных:
show dbs
3. Переключение на базу данных:
use mydatabase
4. Удаление базы данных:
db.dropDatabase()
5. Работа с коллекциями
Создание и управление коллекциями
1. Создание коллекции:
db.createCollection("users")
2. Просмотр коллекций:
show collections
3. Вставка документов:
db.users.insertOne({ name: "John Doe", email: "john@example.com", age: 30 })
4. Вставка нескольких документов:
db.users.insertMany([ { name: "Jane Smith", email: "jane@example.com", age: 25 }, { name: "Bob Johnson", email: "bob@example.com", age: 35 } ])
Поиск и обновление данных
1. Поиск всех документов:
db.users.find()
2. Поиск с условием:
db.users.find({ age: { $gt: 30 } })
3. Обновление документа:
db.users.updateOne( { name: "John Doe" }, { $set: { age: 31 } } )
4. Удаление документа:
db.users.deleteOne({ name: "John Doe" })
6. Настройка репликации
Создание реплика-сета
1. Остановите MongoDB:
sudo systemctl stop mongod
2. Обновите конфигурацию для реплика-сета:
sudo nano /etc/mongod.conf
3. Добавьте настройки репликации:
replication: replSetName: "rs0"
4. Запустите MongoDB:
sudo systemctl start mongod
5. Инициализируйте реплика-сет:
mongosh
6. В MongoDB shell выполните:
rs.initiate()
7. Добавьте вторичные серверы:
rs.add("secondary-server:27017")
Настройка вторичного сервера
1. На вторичном сервере настройте конфигурацию:
replication: replSetName: "rs0"
2. Запустите MongoDB:
sudo systemctl start mongod
7. Настройка шардинга
Настройка конфиг-серверов
1. Создайте конфигурацию для конфиг-сервера:
sudo nano /etc/mongod.conf
2. Добавьте настройки:
sharding: clusterRole: configsvr replication: replSetName: "configReplSet"
Настройка шард-серверов
1. Настройте шард-сервер:
sharding: clusterRole: shardsvr replication: replSetName: "shardReplSet"
Настройка mongos
1. Установите mongos:
sudo apt install -y mongodb-mongosh
2. Создайте конфигурацию mongos:
sudo nano /etc/mongos.conf
3. Добавьте настройки:
sharding: configDB: configReplSet/config1:27017,config2:27017,config3:27017 net: port: 27017 bindIp: 0.0.0.0
4. Запустите mongos:
sudo mongos --config /etc/mongos.conf
8. Мониторинг и оптимизация
Настройка мониторинга
1. Просмотр статистики:
db.serverStatus()
2. Просмотр статистики базы данных:
db.stats()
3. Просмотр статистики коллекции:
db.users.stats()
4. Просмотр активных операций:
db.currentOp()
Настройка индексов
1. Создание индекса:
db.users.createIndex({ email: 1 })
2. Создание составного индекса:
db.users.createIndex({ name: 1, age: -1 })
3. Просмотр индексов:
db.users.getIndexes()
4. Удаление индекса:
db.users.dropIndex({ email: 1 })
Оптимизация производительности
1. Анализ медленных запросов:
db.setProfilingLevel(2, { slowms: 100 }) db.system.profile.find().sort({ ts: -1 }).limit(5)
2. Настройка кэша:
\# В конфигурации MongoDB storage: wiredTiger: engineConfig: cacheSizeGB: 2
9. Резервное копирование
Создание резервной копии
1. Полное резервное копирование:
mongodump --host localhost:27017 --db mydatabase --out /backup/mongodb/
2. Резервное копирование всех баз данных:
mongodump --host localhost:27017 --out /backup/mongodb/
3. Сжатое резервное копирование:
mongodump --host localhost:27017 --db mydatabase --gzip --archive=/backup/mongodb/mydatabase.gz
4. Резервное копирование с аутентификацией:
mongodump --host localhost:27017 --username admin --password your_password --authenticationDatabase admin --db mydatabase --out /backup/mongodb/
Восстановление из резервной копии
1. Восстановление базы данных:
mongorestore --host localhost:27017 --db mydatabase /backup/mongodb/mydatabase/
2. Восстановление из сжатого архива:
mongorestore --host localhost:27017 --gzip --archive=/backup/mongodb/mydatabase.gz
3. Восстановление с заменой:
mongorestore --host localhost:27017 --db mydatabase --drop /backup/mongodb/mydatabase/
Автоматическое резервное копирование
1. Создайте скрипт резервного копирования:
sudo nano /usr/local/bin/mongodb-backup.sh
2. Добавьте содержимое:
\#!/bin/bash BACKUP_DIR="/backup/mongodb" DATE=$(date +%Y%m%d_%H%M%S) \# Создание директории для бэкапа mkdir -p $BACKUP_DIR \# Резервное копирование всех баз данных mongodump --host localhost:27017 --out $BACKUP_DIR/mongodb-$DATE \# Сжатие архива tar -czf $BACKUP_DIR/mongodb-$DATE.tar.gz -C $BACKUP_DIR mongodb-$DATE \# Удаление несжатой директории rm -rf $BACKUP_DIR/mongodb-$DATE \# Удаление старых бэкапов (старше 7 дней) find $BACKUP_DIR -name "mongodb-*.tar.gz" -mtime +7 -delete echo "MongoDB backup completed: $DATE"
3. Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/mongodb-backup.sh
4. Добавьте в crontab:
sudo crontab -e
5. Добавьте задачу:
0 2 * * * /usr/local/bin/mongodb-backup.sh
10. Настройка файрвола
Настройка UFW
1. Разрешите порт MongoDB:
sudo ufw allow 27017/tcp
2. Проверьте статус:
sudo ufw status
Настройка iptables
1. Разрешите порт через iptables:
sudo iptables -A INPUT -p tcp --dport 27017 -j ACCEPT
2. Сохраните правила:
sudo iptables-save > /etc/iptables/rules.v4
11. Безопасность
Настройка SSL/TLS
1. Создайте SSL сертификаты:
sudo mkdir -p /etc/mongodb/ssl sudo openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/mongodb/ssl/mongodb.key -out /etc/mongodb/ssl/mongodb.crt -subj "/CN=mongodb-server"
2. Настройте SSL в конфигурации:
net: port: 27017 bindIp: 0.0.0.0 ssl: mode: requireSSL PEMKeyFile: /etc/mongodb/ssl/mongodb.crt PEMKeyFile: /etc/mongodb/ssl/mongodb.key
Настройка аутентификации
1. Создайте пользователей с ограниченными правами:
use mydatabase db.createUser({ user: "readonly", pwd: "password", roles: ["read"] }) db.createUser({ user: "readwrite", pwd: "password", roles: ["readWrite"] })
12. Устранение неполадок
Частые проблемы
1. MongoDB не запускается:
- Проверьте логи:
sudo journalctl -u mongod
- Проверьте права доступа к директориям
- Проверьте конфигурацию:
mongod --config /etc/mongod.conf --configExpand rest
2. Проблемы с подключением:
- Проверьте файрвол
- Проверьте настройки bindIp
- Проверьте аутентификацию
3. Проблемы с производительностью:
- Проверьте индексы
- Проверьте настройки кэша
- Проанализируйте медленные запросы
Диагностика
1. Проверка статуса:
sudo systemctl status mongod
2. Проверка портов:
sudo netstat -tlnp | grep :27017
3. Проверка логов:
sudo tail -f /var/log/mongodb/mongod.log
4. Проверка подключения:
mongosh --host localhost:27017
Заключение
MongoDB успешно установлен и настроен! Теперь у вас есть мощная NoSQL база данных с возможностями репликации, шардинга и мониторинга.
Для размещения ваших MongoDB баз данных на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):
- [Выделенные серверы](https://ark-hoster.ru/dedicated/) - для высоконагруженных MongoDB кластеров
- [VPS/VDS серверы](https://ark-hoster.ru/vpsgame/) - для небольших и средних проектов
Наши специалисты помогут с настройкой MongoDB и оптимизацией производительности ваших баз данных!