Как настроить consul-replicate в 2 датацентрах для аварийного восстановления?

Я пытаюсь настроить аварийное восстановление для своих приложений. И у нас есть Consul с отслеживанием состояния, что означает, что на consul kv будут выполняться операции записи, которые должны быть согласованы во всех центрах обработки данных. Другими словами, если я выполняю операцию записи в dc1, а операция чтения происходит на dc2, я должен получить последнее значение этого ключа. Вот мой мыслительный процесс: я собираюсь присоединиться к двум центрам обработки данных через WAN JOIN. Обратите внимание: в каждом центре обработки данных есть 4 сервера. И любая операция записи на dc1 будет реплицирована на dc2 с помощью инструмента consul-replicate. Я пробовал репликацию ACL, но это кажется сложным. Я также искал в Интернете пример конфигурации consul-replicate, но не нашел ничего полезного. Может ли кто-нибудь направить меня к тому же? Заранее спасибо.


person Nikhil Gupta    schedule 13.01.2021    source источник


Ответы (1)


Вы можете использовать consul-replicate для синхронизации данных KV между центрами обработки данных Consul, но при настройке следует помнить о нескольких моментах.

Consul replicate использует блокирующие запросы для отслеживания изменений в настроенном префиксе KV. Сегодня блокирующие запросы работают так: если один ключ обновляется под вашим наблюдаемым префиксом, блокирующий запрос вернет данные для всех ключей под этим префиксом, даже если был обновлен только один ключ, в результате чего Consul реплицировать в PUT / обновить все наблюдаемые ключи на удаленном контроллере домена. В зависимости от того, сколько ключей вы реплицируете и как часто эти ключи обновляются, вы можете увидеть более высокую загрузку полосы пропускания и столкнуться с проблемами производительности.

Чтобы уменьшить проблемы с производительностью, вы можете запускать несколько consul-replicate процессов, каждый из которых отвечает за репликацию определенного префикса с заданной областью действия из дерева KV (например, /env/prod и /env/dev) вместо всего дерева. https://github.com/hashicorp/consul/issues/2791 - это функция запрос на улучшение поведения часов, чтобы он возвращал данные только для измененных ключей, а не для всех отслеживаемых ключей.

Кроме того, Consul replicate не обеспечивает тех же гарантий данных, что и Raft в кластере Consul. Под этим я подразумеваю, поскольку репликация является внешней по отношению к Consul, когда пользователь / служба записывает в KV в DC1, Consul не может вернуть ошибку, если этот KV не был успешно реплицирован в DC2. Консул совершенно не знает, что данные вообще реплицируются. Репликация, выполняемая consul-replicate, является асинхронной и, по сути, является наилучшей.

Что касается настройки всего этого, README for Consul реплицируется довольно подробно и содержит объяснение каждого из доступных вариантов конфигурации. Я предполагаю, что минимальная конфигурация демона консула-репликации, работающего в DC2, который реплицируется с DC1, вероятно, будет выглядеть так.

# This denotes the start of the configuration section for Consul. All values
# contained in this section pertain to Consul.
consul {
  address = "127.0.0.1:8500"
  token = "<token>"
}

# This is the path to store a PID file which will contain the process ID of the
# Consul Replicate process. This is useful if you plan to send custom signals
# to the process.
pid_file = "/var/run/consul-replicate/pid"

# This is the prefix and datacenter to replicate and the resulting destination.
prefix {
  source      = "env/prod"
  datacenter  = "dc1"
  destination = "env/prod"
}
person Blake Covarrubias    schedule 15.01.2021
comment
Спасибо, Блейк, за ответ. У меня есть вопрос по этому поводу. Какой метод репликации, по вашему мнению, более надежен, так как он не вызывает ошибки / исключения, если репликация ключа не удалась. Или любое предложение добавить исключения в java? Спасибо! - person Nikhil Gupta; 16.01.2021
comment
Мне не известны какие-либо другие методы репликации, которые предлагают лучшие гарантии репликации. Мое намерение состояло в том, чтобы сообщить вам о текущем поведении репликации консула, чтобы вы могли соответствующим образом спланировать аварийное восстановление. Я также рекомендую либо делать периодические резервные копии Consul с помощью consul snapshot, либо специально создавать резервные копии только хранилища KV. используя consul kv export. Резервные копии не будут такими же актуальными, как реплицированные данные, но должны помочь защитить данные от потери в случае полного сбоя репликации. - person Blake Covarrubias; 17.01.2021