Леонид, а подскажите такой практический вопрос.
С репликой все хорошо, она живая и не разваливается на огромных объемах.
Но обнаружили другой момент.
Юзаем ее для базы в размере 2590000 записей (два с половиной миллиона). В одиночную базу записывается достаточно быстро (там у нас импортируется скриптом) за 22-24 часа.
А вот потом дальнейшая синхронизация с другим сервером - первые миллиона полтора идут быстро.
А потом начинает скорость падать и падать до 400 записей за 5 минут.
И очень сильно растет нагрузка на жесткие диски.
Несмотря на виртуализацию, ресурсы выделены достаточные. Проц практически не нагружается.
Что бы вы могли посоветовать в данном вопросе?
Во-первых, советую включить limit-concurrent-refresh. Посмотрите описание этой опции в man-страницах.
Во-вторых, у MDBX/LMDB нет WAL и из-за этого относительно большой WAF (эта особенность является плюсом одних ситуациях и минусом в других).
Проще говоря, любое обновление одной записи породит Olog(N) обновлений в файле БД на диске.
Поэтому "направление выхода" одно - не фиксировать на диске каждое изменение отдельно, а делать пакетную или "ленивую" запись.
С практической точки зрения вам нужно для mdb-бэкенда использовать опции: utterly-nosync (не описана в man), nosync, writemap, nometasync и расширенный вариант checkpoint, что позволит сбрасывать данные на диск с задаваемым периодом и/или по объему накопившихся изменений.
В третьих, если у вас система хранения (дисковый контроллер) с write-back кэшем "на батарейке", то может сильно помочь опция "lifo" mdb-бэкенда.
В четвертых, вы можете менять режим работы БД в некоторых пределах "на лету" (без перезагрузки сервере через config-бэкенд).
Т.е. выключать синхронную фиксацию на диске на время заливки данных и первоначальной синхронизации, а потом включать обычный "безопасный" режим.
Такое переключение достаточно штатный подход, тем не менее в коде было очень много изменений, после того как такое переключение тестировали под нагрузкой в мегафоновских масштабах.
Поэтому лучше сначала проверить на стенде.
---
Для понимания терминов WAL, WAF и особенностей MDBX/LMDB советую пару раз прочесть
https://github.com/leo-yuriev/libmdbx/blob/master/README-RU.md, там есть ссылки и пояснения относительно nosync-опций.
Кроме этого есть можно глянуть записи моих докладов затрагивающих тему MDBX/LMDB/libmdbx.
Если не ошибаюсь на youtube доступна запись 2015 c Highload++, а у Стаса Фомина на
http://0x1.tv есть записи с Alt-овых конференций.