跨数据中心的碳中继复制
carbon-relay Replication across Datacenters
我最近 "inherited" 一个同事的 Carbon/Graphite 设置,我必须重新设计。当前设置是:
- 数据中心 1 (DC1):2 台服务器(server-DC1-1 和 server-DC1-2),带有 1 个碳中继和 4 个碳缓存
- 数据中心 2 (DC2):2 台服务器(server-DC2-1 和 server-DC2-2),带有 1 个碳中继和 4 个碳缓存
所有 4 个碳中继都配置了 REPLICATION_FACTOR 2、一致性哈希和 所有 碳缓存(2(DC)* 2(服务器)* 4(缓存))。这导致一些指标只存在于一台服务器上(它们可能被散列到同一台服务器上的不同缓存中)。这个问题影响了超过 100 万个指标,约占所有指标的 8%。
我想做的是具有冗余的多层设置,以便我跨数据中心和数据中心内部镜像所有指标,我使用一致的哈希将指标平均分布在 2 个服务器上。
为此,我需要帮助(主要是)继电器的配置。这是我脑海中的图片:
客户端会将他们的数据发送到各自数据中心中的 tier1relay("loadbalancing" 将发生在客户端,因此例如所有具有偶数的客户端主机名中的数字将发送到 tier1relay-DC1-1 并且具有奇数的客户端将发送到 tier1relay-DC1-2).
tier2relays 使用一致性哈希将数据中心中的数据均匀分布在 2 个服务器上。例如 tier2relay-DC1-1 的 "pseudo" 配置如下所示:
- RELAY_METHOD = 一致性哈希
- DESTINATIONS = server-DC1-1:cache-DC1-1-a, server-DC1-1:cache-DC1-1-b, (...), server-DC1-2:cache-DC1 -2-d
我想知道的:我如何告诉 tier1relay-DC1-1 和 tier1relay-DC1-2 他们应该将所有指标发送到 DC1 和 DC2 中的 tier2relay(跨 DC 复制指标)和 在两者之间做某种 "loadbalancing" tier2relay-DC1-1 和 tier2relay-DC1-2.
另一个注意事项:我还想知道如果我使用一致的散列,但一个或多个目的地无法到达(服务器关闭),碳中继内部会发生什么 - 是否再次对指标进行散列(针对可访问的缓存)还是暂时删除它们? (或者从不同的角度问同样的问题:当中继接收到一个指标时,它是根据所有配置目的地的列表还是根据当前可用的目的地对指标进行哈希处理?)
https://github.com/grobian/carbon-c-relay
这正是您所需要的。它还可以大大提高性能。
我最近 "inherited" 一个同事的 Carbon/Graphite 设置,我必须重新设计。当前设置是:
- 数据中心 1 (DC1):2 台服务器(server-DC1-1 和 server-DC1-2),带有 1 个碳中继和 4 个碳缓存
- 数据中心 2 (DC2):2 台服务器(server-DC2-1 和 server-DC2-2),带有 1 个碳中继和 4 个碳缓存
所有 4 个碳中继都配置了 REPLICATION_FACTOR 2、一致性哈希和 所有 碳缓存(2(DC)* 2(服务器)* 4(缓存))。这导致一些指标只存在于一台服务器上(它们可能被散列到同一台服务器上的不同缓存中)。这个问题影响了超过 100 万个指标,约占所有指标的 8%。
我想做的是具有冗余的多层设置,以便我跨数据中心和数据中心内部镜像所有指标,我使用一致的哈希将指标平均分布在 2 个服务器上。
为此,我需要帮助(主要是)继电器的配置。这是我脑海中的图片:
客户端会将他们的数据发送到各自数据中心中的 tier1relay("loadbalancing" 将发生在客户端,因此例如所有具有偶数的客户端主机名中的数字将发送到 tier1relay-DC1-1 并且具有奇数的客户端将发送到 tier1relay-DC1-2).
tier2relays 使用一致性哈希将数据中心中的数据均匀分布在 2 个服务器上。例如 tier2relay-DC1-1 的 "pseudo" 配置如下所示:
- RELAY_METHOD = 一致性哈希
- DESTINATIONS = server-DC1-1:cache-DC1-1-a, server-DC1-1:cache-DC1-1-b, (...), server-DC1-2:cache-DC1 -2-d
我想知道的:我如何告诉 tier1relay-DC1-1 和 tier1relay-DC1-2 他们应该将所有指标发送到 DC1 和 DC2 中的 tier2relay(跨 DC 复制指标)和 在两者之间做某种 "loadbalancing" tier2relay-DC1-1 和 tier2relay-DC1-2.
另一个注意事项:我还想知道如果我使用一致的散列,但一个或多个目的地无法到达(服务器关闭),碳中继内部会发生什么 - 是否再次对指标进行散列(针对可访问的缓存)还是暂时删除它们? (或者从不同的角度问同样的问题:当中继接收到一个指标时,它是根据所有配置目的地的列表还是根据当前可用的目的地对指标进行哈希处理?)
https://github.com/grobian/carbon-c-relay
这正是您所需要的。它还可以大大提高性能。