Я пытаюсь настроить аварийное восстановление для своих приложений. И у нас есть Consul с отслеживанием состояния, что означает, что на consul kv будут выполняться операции записи, которые должны быть согласованы во всех центрах обработки данных. Другими словами, если я выполняю операцию записи в dc1, а операция чтения происходит на dc2, я должен получить последнее значение этого ключа. Вот мой мыслительный процесс: я собираюсь присоединиться к двум центрам обработки данных через WAN JOIN. Обратите внимание: в каждом центре обработки данных есть 4 сервера. И любая операция записи на dc1 будет реплицирована на dc2 с помощью инструмента consul-replicate. Я пробовал репликацию ACL, но это кажется сложным. Я также искал в Интернете пример конфигурации consul-replicate, но не нашел ничего полезного. Может ли кто-нибудь направить меня к тому же? Заранее спасибо.
Как настроить consul-replicate в 2 датацентрах для аварийного восстановления?
Ответы (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"
}
consul snapshot
, либо специально создавать резервные копии только хранилища KV. используя consul kv export
. Резервные копии не будут такими же актуальными, как реплицированные данные, но должны помочь защитить данные от потери в случае полного сбоя репликации.
- person Blake Covarrubias; 17.01.2021