К сожалению, ни одна из двух конфигураций не может пережить два отказа узлов.Причина этого заключается в том, что никакая конфигурация, которая благоприятствует согласованности по сравнению с доступностью, никогда не сможет продолжить работу только с одним узлом из 3. Это связано с тем, что этот один узел может быть меньшей половиной разделения сети.Если бы мы продолжили работу с одним узлом, мы могли бы столкнуться со сценариями разделения мозга, в которых продолжалась бы и другая половина с двумя узлами, и в результате мы получили бы несовместимое состояние.
В ArangoDB мы выбралисогласованность по доступности.Следовательно, в любом ансамбле из 3 узлов, в котором 2 узла выходят из строя, оставшийся в живых узел не будет продолжать обслуживание, а скорее будет ждать его, пока не вернется хотя бы один из них.
Теперь давайте сравним две конфигурации для случая одного узла.сбой: конфигурация ActiveFailover продолжит работать, потому что по крайней мере один из двух узлов данных (Лидер и Последователь) выживет, и вместе с третьим, на котором работает только Агент, они могут выбрать лидера и сделать оставшийся в живых узел данных Лидером.,Если происходит сбой узла «единственный агент», выбор лидера все еще работает, поскольку два других узла фактически также запускают агента.Тем не менее, обратите внимание, что в случае сбоя текущего Лидера происходит аварийное переключение, но поскольку репликация является только асинхронной, некоторые зафиксированные данные могут быть потеряны!
Кластер в основном ведет себя так же, за исключением того, что он имеет более симметричныйнастроить.Если какой-либо узел отказывает, два других могут продолжитьПри условии, что все коллекции имеют как минимум replicationFactor 2, аварийное переключение может переместить лидерство для каждого сегмента в выживающий узел.Поскольку репликация является синхронной, никакие зафиксированные данные не теряются.Это преимущество кластера перед настройкой ActiveFailover.Однако обратите внимание, что задержка операций может быть выше из-за синхронной репликации, и, поскольку не все данные сосредоточены на одном узле, производительность некоторых операций может быть хуже, поскольку у нас меньше локальности данных.В любом случае, такого понятия, как бесплатный обед, не существует, в конце концов нужно платить.