2015-12-09 2 views
2

Я использую довольно стандартную версию MongoDB (3.0.5) с 1 начальным и 2 вторичными. Мое предпочтение чтения PHP-приложений является первичным, поэтому никаких чтений не происходит на вторичных серверах - они предназначены только для перехода на другой ресурс. Я запускаю тест нагрузки в своем приложении, который создает около 600 запросов/обновлений в секунду. Все операции выполняются против коллекции, содержащей ~ 500 000 документов. Однако запросы оптимизируются и поддерживаются индексами. Любой запрос не займет больше 40 мс.MongoDB Replica Set CPU load

Моя проблема заключается в том, что я получаю довольно высокую нагрузку на процессор на всех трех узлах (200% - 300%) - иногда нагрузка на вторичные устройства даже выше, чем на первичной. Использование дискового ввода-вывода и RAM, похоже, все в порядке - по крайней мере, они не нажимают никаких ограничений.

Файл журнала первичного пользователя содержит огромное количество запросов getmore oplog - я бы предположил, что любая операция на первичной основе создает запрос oplog. Мне кажется, что это слишком много накладных расходов, но у меня нет опыта работы с MongoDB под нагрузкой, и у меня нет никаких показателей.

Поскольку установка должна выдерживать еще большую нагрузку на производство, мой вопрос заключается в том, следует ли ожидать накладные расходы на репликацию и нормально ли, что загрузка ЦП повышается, даже на вторичных устройствах, или есть что-то такое Не хватает?

ответ

1

Подумайте об этом таким образом. Независимо от того, какая операция изменения данных происходит на первичном, она также должна выполняться на каждой вторичной основе. Если таких операций много, и они создают высокую нагрузку на основной процессор, то такая же ситуация повторится на вторичных.

Конечно, в вашем случае вы ожидаете, что основной процессор будет более напряженным, потому что в дополнение к записи он также обрабатывает все чтения. Вероятно, в вашем сценарии чтение является относительно легким и их не так много по сравнению с количеством записей. Это объясняет, почему нагрузка на первичный объект примерно такая же, как у второстепенных.

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

Что вы называете головой репликации, я вижу, как характер репликации. Первичный стресс, который пишет, приводит к тому, что все второстепенные участники подчеркивают также записи.

и будет ли это нормально, что нагрузка CPU идет вверх, что высокая, даже на второстепенных маховых

У вас есть 600 запросов на запись в секунду и оперативная память и диск не подчеркнул, что для меня это означает, что вы правильно настроили свои индексы. Ожидается высокая загрузка ЦП с таким количеством операций записи в секунду, потому что индексы интенсивно используются.

Пожалуйста, имейте в виду, что после того, как вы собрали больше данных, индексы и данные с отображением памяти могут больше не вписываться в память, а затем и ОЗУ, и диск будут подвергаться стрессу, в то время как CPU вряд ли будет находиться под большая нагрузка больше. В этой ситуации вы, вероятно, захотите либо добавить больше ОЗУ, либо посмотреть на sharding.

Смежные вопросы