微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 2 个数据中心配置 consul-replicate 进行灾难恢复?

如何解决如何在 2 个数据中心配置 consul-replicate 进行灾难恢复?

我正在尝试为我的应用程序配置灾难恢复。而且我们有一个有状态的 Consul,这意味着在 consul kv 上会有写操作,这应该在数据中心之间保持一致。换句话说,如果我在 dc1 中进行写操作,而在 dc2 上进行读操作,我必须获取该键的最新值。 这是我的思考过程:我将通过 wan join 加入两个数据中心。请注意,每个数据中心有 4 台服务器。并且 dc1 上的任何写操作都将通过 consul-replicate 工具复制到 dc2。我试过ACL复制,但是好像很复杂。 我还在线搜索了 consul-replicate configs 示例,但找不到任何有用的信息。有人可以指导我做同样的事情吗? 提前致谢。

解决方法

您可以使用 consul-replicate 在 Consul 数据中心之间保持 KV 数据同步,但您需要牢记有关设置的一些注意事项。

Consul replication 使用 blocking queries 来监视配置的 KV 前缀下的变化。今天阻塞查询的工作方式是,如果在您监视的前缀下更新了一个键,阻塞查询将返回该前缀下所有键的数据——即使只更新了一个键——导致 Consul复制到 PUT/更新远程 DC 中的所有监视密钥。根据您复制的密钥数量以及这些密钥的更新频率,您可能会看到更高的带宽利用率并遇到性能问题。

为了减轻性能问题,您可以运行多个 consul-replicate 进程,每个进程负责从 KV 树中复制特定的范围前缀(例如,/env/prod/env/dev ) 而不是整个树。 https://github.com/hashicorp/consul/issues/2791 是一项改进 watch 行为的功能请求,因此它只返回更改的键的数据,而不是所有被监视的键​​。

此外,Consul 复制不提供与 Consul 集群中的 Raft 相同的数据保证。我的意思是,由于复制在 Consul 外部,当用户/服务写入 DC1 中的 KV 时,如果该 KV 尚未成功复制到 DC2,则 Consul 无法返回错误。 Consul 完全不知道数据正在被复制。 consul-replicate 执行的复制是异步的,并且基本上是尽力而为。

就所有设置而言,README for Consul replicate 相当详细,并提供了每个可用配置选项的说明。我想在 DC2 中运行的 consul-replicate 守护进程的最小配置可能看起来像这样。

# 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"
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。