Мое приложение использует MongoDB как базу данных. Мы ожидаем одновременного подключения 20K + к кластеру mongodb. Как мне настроить сервер, если я хочу запустить mongodb на 20 серверах и очертить кластер 20 способами?
Вот что я сделал до сих пор: На каждом из моих 20 серверов у меня есть один монгос (маршрутизатор), работающий на порте 30000, а на 3 серверах я запускаю серверы конфигурации mongo на порту 20000. Затем на каждом сервере я запускаю 3 экземпляра mongod. Один из них является основным. Для слов у меня 20 монго, 3 mongo-config, 60 серверов mongod (20 первичных и 40 реплик).
Затем в моем приложении (которое также запускается на каждом сервере и подключается к localhost: 30000 mongos), я устанавливаю mongoOptions таким образом, что соединенияPerHost = 1000.
Через 10-15 минут после начала всех сервисов некоторые из них перестали быть ssh -способными. Эти серверы по-прежнему работают в режиме ping. Я подозреваю, что слишком много соединений, и это заставило сервер умереть.
Мой собственный анализ выглядит следующим образом: 1K соединений для каждого пула соединений для каждого первичного осколка, он будет иметь 1K * 20 (осколки) = 20K одновременных подключений. На нескольких серверах, вероятно, будет работать более одного первичного запуска, что удвоит или утроит количество подключений до 60K. Так или иначе, 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 вообще не масштабируется. Кто-нибудь скажет мне, что я не прав, пожалуйста?