Установка и настройка MongoDB: различия между версиями

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к навигации Перейти к поиску
Новая страница: «= Установка и настройка MongoDB = == 1. Подготовка системы == * Войдите в систему под учетной за…»
 
Нет описания правки
 
Строка 6: Строка 6:
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.


== 2. Установка MongoDB ===
== 2. Установка MongoDB ==


=== Обновление системы ===
=== Обновление системы ===


1. Обновите систему:
1. Обновите систему:
<code>sudo apt update</code>
<pre>sudo apt update</pre>


2. Установите необходимые пакеты:
2. Установите необходимые пакеты:
<code>sudo apt install -y wget curl gnupg2 software-properties-common</code>
<pre>sudo apt install -y wget curl gnupg2 software-properties-common</pre>


=== Установка MongoDB Community Edition ===
=== Установка MongoDB Community Edition ===


1. Импортируйте публичный ключ MongoDB:
1. Импортируйте публичный ключ MongoDB:
<code>wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -</code>
<pre>wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -</pre>


2. Добавьте репозиторий MongoDB:
2. Добавьте репозиторий MongoDB:
<code>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</code>
<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. Обновите список пакетов:
<code>sudo apt update</code>
<pre>sudo apt update</pre>


4. Установите MongoDB:
4. Установите MongoDB:
<code>sudo apt install -y mongodb-org</code>
<pre>sudo apt install -y mongodb-org</pre>


5. Проверьте версию:
5. Проверьте версию:
<code>mongod --version</code>
<pre>mongod --version</pre>


=== Запуск MongoDB ===
=== Запуск MongoDB ===


1. Запустите и включите автозапуск:
1. Запустите и включите автозапуск:
<code>sudo systemctl start mongod</code>
<pre>sudo systemctl start mongod</pre>
<code>sudo systemctl enable mongod</code>
<pre>sudo systemctl enable mongod</pre>


2. Проверьте статус:
2. Проверьте статус:
<code>sudo systemctl status mongod</code>
<pre>sudo systemctl status mongod</pre>


3. Проверьте подключение:
3. Проверьте подключение:
<code>mongosh</code>
<pre>mongosh</pre>


== 3. Базовая конфигурация ===
== 3. Базовая конфигурация ==


=== Создание резервной копии ===
=== Создание резервной копии ===


1. Создайте резервную копию оригинального файла:
1. Создайте резервную копию оригинального файла:
<code>sudo cp /etc/mongod.conf /etc/mongod.conf.backup</code>
<pre>sudo cp /etc/mongod.conf /etc/mongod.conf.backup</pre>


=== Основная конфигурация ===
=== Основная конфигурация ===


1. Отредактируйте конфигурационный файл:
1. Отредактируйте конфигурационный файл:
<code>sudo nano /etc/mongod.conf</code>
<pre>sudo nano /etc/mongod.conf</pre>


2. Настройте основные параметры:
2. Настройте основные параметры:
<code># Где хранить данные
<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
</code>
</pre>


=== Настройка безопасности ===
=== Настройка безопасности ===


1. Создайте администратора:
1. Создайте администратора:
<code>mongosh</code>
<pre>mongosh</pre>


2. В MongoDB shell выполните:
2. В MongoDB shell выполните:
<code>use admin
<pre>use admin
db.createUser({
db.createUser({
   user: "admin",
   user: "admin",
Строка 97: Строка 97:
   roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]
   roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]
})
})
</code>
</pre>


3. Включите аутентификацию в конфигурации:
3. Включите аутентификацию в конфигурации:
<code>security:
<pre>security:
   authorization: enabled
   authorization: enabled
</code>
</pre>


4. Перезапустите MongoDB:
4. Перезапустите MongoDB:
<code>sudo systemctl restart mongod</code>
<pre>sudo systemctl restart mongod</pre>


== 4. Управление MongoDB ===
== 4. Управление MongoDB ==


=== Основные команды ===
=== Основные команды ===


1. '''Запуск MongoDB''':
1. '''Запуск MongoDB''':
<code>sudo systemctl start mongod</code>
<pre>sudo systemctl start mongod</pre>


2. '''Остановка MongoDB''':
2. '''Остановка MongoDB''':
<code>sudo systemctl stop mongod</code>
<pre>sudo systemctl stop mongod</pre>


3. '''Перезапуск MongoDB''':
3. '''Перезапуск MongoDB''':
<code>sudo systemctl restart mongod</code>
<pre>sudo systemctl restart mongod</pre>


4. '''Проверка статуса''':
4. '''Проверка статуса''':
<code>sudo systemctl status mongod</code>
<pre>sudo systemctl status mongod</pre>


5. '''Подключение к MongoDB''':
5. '''Подключение к MongoDB''':
<code>mongosh</code>
<pre>mongosh</pre>


=== Управление базами данных ===
=== Управление базами данных ===


1. '''Создание базы данных''':
1. '''Создание базы данных''':
<code>use mydatabase</code>
<pre>use mydatabase</pre>


2. '''Просмотр баз данных''':
2. '''Просмотр баз данных''':
<code>show dbs</code>
<pre>show dbs</pre>


3. '''Переключение на базу данных''':
3. '''Переключение на базу данных''':
<code>use mydatabase</code>
<pre>use mydatabase</pre>


4. '''Удаление базы данных''':
4. '''Удаление базы данных''':
<code>db.dropDatabase()</code>
<pre>db.dropDatabase()</pre>


== 5. Работа с коллекциями ===
== 5. Работа с коллекциями ==


=== Создание и управление коллекциями ===
=== Создание и управление коллекциями ===


1. '''Создание коллекции''':
1. '''Создание коллекции''':
<code>db.createCollection("users")</code>
<pre>db.createCollection("users")</pre>


2. '''Просмотр коллекций''':
2. '''Просмотр коллекций''':
<code>show collections</code>
<pre>show collections</pre>


3. '''Вставка документов''':
3. '''Вставка документов''':
<code>db.users.insertOne({
<pre>db.users.insertOne({
   name: "John Doe",
   name: "John Doe",
   email: "john@example.com",
   email: "john@example.com",
   age: 30
   age: 30
})</code>
})</pre>


4. '''Вставка нескольких документов''':
4. '''Вставка нескольких документов''':
<code>db.users.insertMany([
<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 }
])</code>
])</pre>


=== Поиск и обновление данных ===
=== Поиск и обновление данных ===


1. '''Поиск всех документов''':
1. '''Поиск всех документов''':
<code>db.users.find()</code>
<pre>db.users.find()</pre>


2. '''Поиск с условием''':
2. '''Поиск с условием''':
<code>db.users.find({ age: { $gt: 30 } })</code>
<pre>db.users.find({ age: { $gt: 30 } })</pre>


3. '''Обновление документа''':
3. '''Обновление документа''':
<code>db.users.updateOne(
<pre>db.users.updateOne(
   { name: "John Doe" },
   { name: "John Doe" },
   { $set: { age: 31 } }
   { $set: { age: 31 } }
)</code>
)</pre>


4. '''Удаление документа''':
4. '''Удаление документа''':
<code>db.users.deleteOne({ name: "John Doe" })</code>
<pre>db.users.deleteOne({ name: "John Doe" })</pre>


== 6. Настройка репликации ===
== 6. Настройка репликации ==


=== Создание реплика-сета ===
=== Создание реплика-сета ===


1. Остановите MongoDB:
1. Остановите MongoDB:
<code>sudo systemctl stop mongod</code>
<pre>sudo systemctl stop mongod</pre>


2. Обновите конфигурацию для реплика-сета:
2. Обновите конфигурацию для реплика-сета:
<code>sudo nano /etc/mongod.conf</code>
<pre>sudo nano /etc/mongod.conf</pre>


3. Добавьте настройки репликации:
3. Добавьте настройки репликации:
<code>replication:
<pre>replication:
   replSetName: "rs0"
   replSetName: "rs0"
</code>
</pre>


4. Запустите MongoDB:
4. Запустите MongoDB:
<code>sudo systemctl start mongod</code>
<pre>sudo systemctl start mongod</pre>


5. Инициализируйте реплика-сет:
5. Инициализируйте реплика-сет:
<code>mongosh</code>
<pre>mongosh</pre>


6. В MongoDB shell выполните:
6. В MongoDB shell выполните:
<code>rs.initiate()</code>
<pre>rs.initiate()</pre>


7. Добавьте вторичные серверы:
7. Добавьте вторичные серверы:
<code>rs.add("secondary-server:27017")</code>
<pre>rs.add("secondary-server:27017")</pre>


=== Настройка вторичного сервера ===
=== Настройка вторичного сервера ===


1. На вторичном сервере настройте конфигурацию:
1. На вторичном сервере настройте конфигурацию:
<code>replication:
<pre>replication:
   replSetName: "rs0"
   replSetName: "rs0"
</code>
</pre>


2. Запустите MongoDB:
2. Запустите MongoDB:
<code>sudo systemctl start mongod</code>
<pre>sudo systemctl start mongod</pre>


== 7. Настройка шардинга ===
== 7. Настройка шардинга ==


=== Настройка конфиг-серверов ===
=== Настройка конфиг-серверов ===


1. Создайте конфигурацию для конфиг-сервера:
1. Создайте конфигурацию для конфиг-сервера:
<code>sudo nano /etc/mongod.conf</code>
<pre>sudo nano /etc/mongod.conf</pre>


2. Добавьте настройки:
2. Добавьте настройки:
<code>sharding:
<pre>sharding:
   clusterRole: configsvr
   clusterRole: configsvr
replication:
replication:
   replSetName: "configReplSet"
   replSetName: "configReplSet"
</code>
</pre>


=== Настройка шард-серверов ===
=== Настройка шард-серверов ===


1. Настройте шард-сервер:
1. Настройте шард-сервер:
<code>sharding:
<pre>sharding:
   clusterRole: shardsvr
   clusterRole: shardsvr
replication:
replication:
   replSetName: "shardReplSet"
   replSetName: "shardReplSet"
</code>
</pre>


=== Настройка mongos ===
=== Настройка mongos ===


1. Установите mongos:
1. Установите mongos:
<code>sudo apt install -y mongodb-mongosh</code>
<pre>sudo apt install -y mongodb-mongosh</pre>


2. Создайте конфигурацию mongos:
2. Создайте конфигурацию mongos:
<code>sudo nano /etc/mongos.conf</code>
<pre>sudo nano /etc/mongos.conf</pre>


3. Добавьте настройки:
3. Добавьте настройки:
<code>sharding:
<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
</code>
</pre>


4. Запустите mongos:
4. Запустите mongos:
<code>sudo mongos --config /etc/mongos.conf</code>
<pre>sudo mongos --config /etc/mongos.conf</pre>


== 8. Мониторинг и оптимизация ===
== 8. Мониторинг и оптимизация ==


=== Настройка мониторинга ===
=== Настройка мониторинга ===


1. '''Просмотр статистики''':
1. '''Просмотр статистики''':
<code>db.serverStatus()</code>
<pre>db.serverStatus()</pre>


2. '''Просмотр статистики базы данных''':
2. '''Просмотр статистики базы данных''':
<code>db.stats()</code>
<pre>db.stats()</pre>


3. '''Просмотр статистики коллекции''':
3. '''Просмотр статистики коллекции''':
<code>db.users.stats()</code>
<pre>db.users.stats()</pre>


4. '''Просмотр активных операций''':
4. '''Просмотр активных операций''':
<code>db.currentOp()</code>
<pre>db.currentOp()</pre>


=== Настройка индексов ===
=== Настройка индексов ===


1. '''Создание индекса''':
1. '''Создание индекса''':
<code>db.users.createIndex({ email: 1 })</code>
<pre>db.users.createIndex({ email: 1 })</pre>


2. '''Создание составного индекса''':
2. '''Создание составного индекса''':
<code>db.users.createIndex({ name: 1, age: -1 })</code>
<pre>db.users.createIndex({ name: 1, age: -1 })</pre>


3. '''Просмотр индексов''':
3. '''Просмотр индексов''':
<code>db.users.getIndexes()</code>
<pre>db.users.getIndexes()</pre>


4. '''Удаление индекса''':
4. '''Удаление индекса''':
<code>db.users.dropIndex({ email: 1 })</code>
<pre>db.users.dropIndex({ email: 1 })</pre>


=== Оптимизация производительности ===
=== Оптимизация производительности ===


1. '''Анализ медленных запросов''':
1. '''Анализ медленных запросов''':
<code>db.setProfilingLevel(2, { slowms: 100 })
<pre>db.setProfilingLevel(2, { slowms: 100 })
db.system.profile.find().sort({ ts: -1 }).limit(5)</code>
db.system.profile.find().sort({ ts: -1 }).limit(5)</pre>


2. '''Настройка кэша''':
2. '''Настройка кэша''':
<code># В конфигурации MongoDB
<pre>\# В конфигурации MongoDB
storage:
storage:
   wiredTiger:
   wiredTiger:
     engineConfig:
     engineConfig:
       cacheSizeGB: 2
       cacheSizeGB: 2
</code>
</pre>


== 9. Резервное копирование ===
== 9. Резервное копирование ==


=== Создание резервной копии ===
=== Создание резервной копии ===


1. '''Полное резервное копирование''':
1. '''Полное резервное копирование''':
<code>mongodump --host localhost:27017 --db mydatabase --out /backup/mongodb/</code>
<pre>mongodump --host localhost:27017 --db mydatabase --out /backup/mongodb/</pre>


2. '''Резервное копирование всех баз данных''':
2. '''Резервное копирование всех баз данных''':
<code>mongodump --host localhost:27017 --out /backup/mongodb/</code>
<pre>mongodump --host localhost:27017 --out /backup/mongodb/</pre>


3. '''Сжатое резервное копирование''':
3. '''Сжатое резервное копирование''':
<code>mongodump --host localhost:27017 --db mydatabase --gzip --archive=/backup/mongodb/mydatabase.gz</code>
<pre>mongodump --host localhost:27017 --db mydatabase --gzip --archive=/backup/mongodb/mydatabase.gz</pre>


4. '''Резервное копирование с аутентификацией''':
4. '''Резервное копирование с аутентификацией''':
<code>mongodump --host localhost:27017 --username admin --password your_password --authenticationDatabase admin --db mydatabase --out /backup/mongodb/</code>
<pre>mongodump --host localhost:27017 --username admin --password your_password --authenticationDatabase admin --db mydatabase --out /backup/mongodb/</pre>


=== Восстановление из резервной копии ===
=== Восстановление из резервной копии ===


1. '''Восстановление базы данных''':
1. '''Восстановление базы данных''':
<code>mongorestore --host localhost:27017 --db mydatabase /backup/mongodb/mydatabase/</code>
<pre>mongorestore --host localhost:27017 --db mydatabase /backup/mongodb/mydatabase/</pre>


2. '''Восстановление из сжатого архива''':
2. '''Восстановление из сжатого архива''':
<code>mongorestore --host localhost:27017 --gzip --archive=/backup/mongodb/mydatabase.gz</code>
<pre>mongorestore --host localhost:27017 --gzip --archive=/backup/mongodb/mydatabase.gz</pre>


3. '''Восстановление с заменой''':
3. '''Восстановление с заменой''':
<code>mongorestore --host localhost:27017 --db mydatabase --drop /backup/mongodb/mydatabase/</code>
<pre>mongorestore --host localhost:27017 --db mydatabase --drop /backup/mongodb/mydatabase/</pre>


=== Автоматическое резервное копирование ===
=== Автоматическое резервное копирование ===


1. Создайте скрипт резервного копирования:
1. Создайте скрипт резервного копирования:
<code>sudo nano /usr/local/bin/mongodb-backup.sh</code>
<pre>sudo nano /usr/local/bin/mongodb-backup.sh</pre>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>#!/bin/bash
<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"
</code>
</pre>


3. Сделайте скрипт исполняемым:
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/mongodb-backup.sh</code>
<pre>sudo chmod +x /usr/local/bin/mongodb-backup.sh</pre>


4. Добавьте в crontab:
4. Добавьте в crontab:
<code>sudo crontab -e</code>
<pre>sudo crontab -e</pre>


5. Добавьте задачу:
5. Добавьте задачу:
<code>0 2 * * * /usr/local/bin/mongodb-backup.sh</code>
<pre>0 2 * * * /usr/local/bin/mongodb-backup.sh</pre>


== 10. Настройка файрвола ===
== 10. Настройка файрвола ==


=== Настройка UFW ===
=== Настройка UFW ===


1. Разрешите порт MongoDB:
1. Разрешите порт MongoDB:
<code>sudo ufw allow 27017/tcp</code>
<pre>sudo ufw allow 27017/tcp</pre>


2. Проверьте статус:
2. Проверьте статус:
<code>sudo ufw status</code>
<pre>sudo ufw status</pre>


=== Настройка iptables ===
=== Настройка iptables ===


1. Разрешите порт через iptables:
1. Разрешите порт через iptables:
<code>sudo iptables -A INPUT -p tcp --dport 27017 -j ACCEPT</code>
<pre>sudo iptables -A INPUT -p tcp --dport 27017 -j ACCEPT</pre>


2. Сохраните правила:
2. Сохраните правила:
<code>sudo iptables-save > /etc/iptables/rules.v4</code>
<pre>sudo iptables-save > /etc/iptables/rules.v4</pre>


== 11. Безопасность ===
== 11. Безопасность ==


=== Настройка SSL/TLS ===
=== Настройка SSL/TLS ===


1. Создайте SSL сертификаты:
1. Создайте SSL сертификаты:
<code>sudo mkdir -p /etc/mongodb/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"</code>
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 в конфигурации:
<code>net:
<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
</code>
</pre>


=== Настройка аутентификации ===
=== Настройка аутентификации ===


1. Создайте пользователей с ограниченными правами:
1. Создайте пользователей с ограниченными правами:
<code>use mydatabase
<pre>use mydatabase
db.createUser({
db.createUser({
   user: "readonly",
   user: "readonly",
Строка 419: Строка 419:
   roles: ["readWrite"]
   roles: ["readWrite"]
})
})
</code>
</pre>


== 12. Устранение неполадок ===
== 12. Устранение неполадок ==


=== Частые проблемы ===
=== Частые проблемы ===


1. '''MongoDB не запускается''':
1. '''MongoDB не запускается''':
* Проверьте логи: <code>sudo journalctl -u mongod</code>
* Проверьте логи: <pre>sudo journalctl -u mongod</pre>
* Проверьте права доступа к директориям
* Проверьте права доступа к директориям
* Проверьте конфигурацию: <code>mongod --config /etc/mongod.conf --configExpand rest</code>
* Проверьте конфигурацию: <pre>mongod --config /etc/mongod.conf --configExpand rest</pre>


2. '''Проблемы с подключением''':
2. '''Проблемы с подключением''':
Строка 443: Строка 443:


1. '''Проверка статуса''':
1. '''Проверка статуса''':
<code>sudo systemctl status mongod</code>
<pre>sudo systemctl status mongod</pre>


2. '''Проверка портов''':
2. '''Проверка портов''':
<code>sudo netstat -tlnp | grep :27017</code>
<pre>sudo netstat -tlnp | grep :27017</pre>


3. '''Проверка логов''':
3. '''Проверка логов''':
<code>sudo tail -f /var/log/mongodb/mongod.log</code>
<pre>sudo tail -f /var/log/mongodb/mongod.log</pre>


4. '''Проверка подключения''':
4. '''Проверка подключения''':
<code>mongosh --host localhost:27017</code>
<pre>mongosh --host localhost:27017</pre>


== Заключение ==
== Заключение ==

Текущая версия от 10:43, 15 октября 2025

Установка и настройка 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):

Наши специалисты помогут с настройкой MongoDB и оптимизацией производительности ваших баз данных!