Как мне настроить кластер mongodb для одновременной обработки 20K +

Мое приложение использует MongoDB в качестве базы данных. Мы ожидаем 20K + одновременных подключений к кластеру mongodb.Как мне настроить сервер, если я хочу запустить mongodb на 20 серверах и разделить кластер на 20 способов?

Вот что я сделал на данный момент: На каждом из моих 20 серверов у меня есть один mongo (маршрутизатор) работает на порту 30000, и на 3 серверах я запускаю серверы конфигурации mongo на порту 20000. Затем на каждом сервере я запускаю 3 экземпляра mongod. Один из них - первичный. Другими словами, у меня есть 20 серверов mongo, 3 mongo-config, 60 серверов mongod (20 основных и 40 реплик).

Затем в моем приложении (которое также запускается на каждом сервере и подключается к localhost: 30000 mongos) я устанавливаю mongoOptions таким образом, что connectionsPerHost = 1000.

Через 10-15 минут после запуска всех служб, некоторые из них стал больше не ssh-способным. Эти серверы по-прежнему доступны для проверки связи. Я подозреваю, что было слишком много подключений, и это привело к зависанию сервера.

Мой собственный анализ таков: 1 Кбайт соединений на пул соединений означает, что для каждого первичного шарда будет открыто 1 КБ * 20 (шардов) = 20 К одновременных соединений. На некоторых серверах, вероятно, будет работать более одного основного, что удвоит или утроит количество подключений до 60 КБ. Почему-то mongod не может обрабатывать такое количество подключений, хотя я изменил свои системные настройки, чтобы каждый процесс мог открывать больше файлов.

Вот что показывает 'ulimit -a':

core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64000000
max memory size (kbytes, -m) unlimited
open files (-n) 320000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

Кстати, я не указывал --maxConns при запуске mongod / mongos, я также не менял MONGO.POOLSIZE.

Дополнительный вопрос: если мои рассуждения верны, общее количество одновременных требований к подключению будет предъявлено к каждому первичному серверу, что мне не кажется правильным, это почти означает, что кластер mongodb вообще не масштабируется. Кто-нибудь скажет мне, что я ошибаюсь, пожалуйста?

10
задан Amro 2 July 2012 в 08:41
поделиться