Назад | Перейти на главную страницу

Заставить MongoDB работать в производственной среде

Я провел простой тест MongoDB в среде Windows. Единая коллекция объектов с идентификатором (int32) и буфером (байт [4096]) заполнялась последовательно. После достижения почти 15 ГБ (из всего 16 ГБ) ОЗУ среда стала давать сбои. Некоторые приложения были убиты, рабочий стол поменял разрешение, потом полностью зависает. После жесткой перезагрузки в журнале mongo обнаружил много таких записей:

Ошибка VirtualProtect (mcw) e: /Databases/+MongoDB/TestFS/TestFS.7 256400000000 4000000 errno: 1455 Файл подкачки слишком мал для завершения этой операции.

Ошибка MapViewOfFile e: /Databases/+MongoDB/TestFS/TestFS.26 errno: 1450 Недостаточно системных ресурсов для выполнения запрошенной службы.

Кроме того, MongoDB больше не может подключиться (к любой базе данных). Ведение журнала включено. Никаких ошибок в журнале нет. Я смог вылечить его, только удалив журнал и поврежденную базу данных. Это далеко не то поведение, которое я хотел бы видеть в продакшене, но я знаю, что существует множество производственных установок. Поэтому я пытаюсь понять, что я упустил или делаю не так.

Правильно. Давайте посмотрим, как я бы запустил производственный кластер MongoDB (да, кластер. Вам не нужен только один сервер)

1) Используйте Linux. Шутки в сторону. Это намного более предсказуемо для управления памятью и так далее, чем Windows. Вы также с большей вероятностью найдете людей, которые помогут вам настроить сервер Mongo в Linux.

2) Дайте ему много оперативной памяти. Оперативная память стоит дешево. Я только что заказал несколько серверов производственного уровня за $ работу, и это 36 ГБ быстрой ECC DDR3.

3) Дайте ему быстрые диски. SAS хорош, я подозреваю, что SSD может быть даже лучше, но специально это не тестировал.

4) Осколок. Выберите приличный ключ осколка, и на основе этого сегментировать несколько узлов MongoDB.

5) Главное. Убедитесь, что у вас есть кластер серверов, которые все еще могут выполнять консенсусное количество голосов.

6) Действительно главное. Защити это. Измените имя пользователя и пароль администратора по умолчанию и поместите их за брандмауэр.

Шутки в сторону. Я думаю, вам стоит взглянуть на пункты выше, а также прочитать некоторые из них. Развертывание производства. 10gen изо всех сил стараются сделать много документации доступной для MongoDB, и я подозреваю, что вы не прочитали ее полностью.