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

Исключения сокета MongoDB при перемещении фрагментов

У меня есть 2 шарда в моем кластере mongodb db с 1 сервером mongos. У меня всего 8 серверов, из которых один набор реплик имеет 5, а другой 3. У меня есть одна коллекция, которая сегментирована по кластеру, но недавно, когда я пытаюсь переместить фрагмент, я получаю исключения сокетов.

Все серверы работают на EC2, большинство из них находится в одной зоне доступности. Отправляющий сервер и получающий сервер находятся в разных зонах доступности.

Вот несколько выдержек из журналов:

Отправляющий сервер:

Пт 20 мая, 07:53:28 [conn6158] moveChunk Процесс передачи данных: {active: false, ns: "social_advantage_analytics.edges", от: "slytherin / draco: 27018", мин: {_id: "100000007993210_116269473289"}, макс. : {_id: "100000012316922_167580256615048"}, состояние: "fail", errmsg: "socket exception", counts: {cloned: 0, clonedBytes: 0, catchup: 0, stable: 0}, ok: 1.0} моя память использовала: 0

Пт 20 мая, 07:53:28 [conn6158] предупреждение: ошибка moveChunk при переносе данных привела к прерыванию миграции: {active: false, ns: "social_advantage_analytics.edges", from: "slytherin / draco: 27018", min: {_id: " 100000007993210_116269473289 "}, max: {_id:" 100000012316922_167580256615048 "}, состояние:" fail ", errmsg:" socket exception ", counts: {cloned: 0, clonedBytes: 0, catchup: 0, stable: 0}, ok: 1.0 }

Принимающий сервер:

Пт 20 мая, 14:51:10 [migrateThread] собирается записать событие метаданных: {_id: "george-2011-05-20T14: 51: 10-293", сервер: "george", clientAddr: "(NONE)", time: new Date (1305903070637), what: "moveChunk.to", ns: "social_advantage_analytics.edges", детали: {min: {_id: "100000007993210_116269473289"}, max: {_id: "100000012316922_167580256615048"}, примечание: прервано "}}

Пт 20 мая, 14:51:10 [migrateThread] ОШИБКА: сбой миграции: исключение сокета

Сервер Shard:

Пт 20 мая, 07:53:05 Не удалось переместить балансировщик [Balancer]: {причина: {active: false, ns: "social_advantage_analytics.edges", from: "slytherin / draco: 27018", мин .: {_id: "100000007993210_116269473289"} , макс .: {_id: "100000012316922_167580256615048"}, состояние: "сбой", errmsg: "исключение сокета", подсчитывает: {cloned: 0, clonedBytes: 0, catchup: 0, устойчиво: 0}, ok: 1.0}, errmsg : "ошибка передачи данных", ок: 0.0} от: pansy до: percy chunk: {_id: "social_advantage_analytics.edges-мне бы"100000007993210_116269473289" ", lastmod: Отметка времени 90000 | 354, нс:" social_advantage_analytics.edges ", мин .: {_id:" 100000007993210_116269473289 "}, макс: {_id:" 100000012316922_167580256615048 "," pans "

Это старый вопрос, но необходимо указать несколько важных моментов:

  • Какая версия MongoDB у вас установлена?
  • Может ли каждый сервер в кластере связываться с каждым другим сервером в кластере через назначенный порт (27018)? Сюда входят шарды базы данных и монго (балансировщик).

  • Осколки должны взаимодействовать между собой для репликации данных, и, поскольку узлы отправки и получения находятся в разных зонах, входят ли они в одну группу безопасности? Существуют ли локальные брандмауэры, препятствующие обмену данными?

  • Рассмотрите возможность проверки количества открытых файловых дескрипторов для процесса mongod на каждом сервере. В коде сервера установлено жесткое ограничение в 20 КБ, но обычно существует другое ограничение. Вот несколько полезных команд:

    lsof -p <pid of mongod> | wc -l
    
    su - mongod # or whatever user mongod is running as
    ulimit -n # => some systems default to 1024