Если оба ваших узла 1.6.x синхронизируют сегменты с использованием стандартной репликации, отключение одного узла не должно быть проблемой. На узле вверх он получает все обновления без конфликтов - потому что не было никакого способа сделать их, узел был недоступен.
Если у вас возникают конфликты во время нормальной работы, к сожалению, не существует общего общего способа их разрешения автоматически. Однако в большинстве случаев вы можете найти стратегию маркировки затронутых поддеревьев документов таким образом, чтобы можно было определить, какая из подверсий является самой последней (или более важной).
Для обнаружения документов, имеющих конфликты, вы можете использовать стандартные представления: документ, полученный функцией представления, имеет свойство _conflicts
, если существуют конфликтующие редакции. Используя соответствующий вид, вы можете обнаружить конфликты и объединить документы. В любом случае, независимо от того, как вы обнаруживаете конфликты, вам нужен внешний код для их разрешения.
Если ваши противоречивые данные по своей природе являются числовыми, рассмотрите возможность использования структур CRDT и стандартной карты / сокращения, чтобы получить окончательное значение. Если ваши данные имеют текстовый характер, вы также можете попытаться использовать CRDT, но для достижения разумной производительности вам необходимо использовать редукторы, написанные на языке Erlang.
Что касается 2.x. Я не рекомендую использовать 2.x для вашего случая (фактически, для любого реального случая, кроме экспериментов). Во-первых, использование 2.x не устранит конфликты, поэтому не решит вашу проблему. Кроме того, принимая во внимание, что 2.x требует большого количества плохо документированных ручных операций между узлами и неспособен перебалансировать, вы получите больше боли, чем пользы.
Кстати, использование любого кластерного решения не имеет большого смысла для двух узлов.
Что касается вышеупомянутых CVE 12635 и CouchDB 1.6.x: вы можете использовать этот патч https://markmail.org/message/kunbxk7ppzoehih6 для покрытия уязвимости.