gpt4 book ai didi

redis - 使用不同的 Auth key 为 Redis 配置 HAproxy

转载 作者:可可西里 更新时间:2023-11-01 11:37:25 25 4
gpt4 key购买 nike

我有三个实例的 Redis 集群,该集群由 Redis Sentinel 提供支持,它们以 [master,slave,slave] 运行。

此外,HAproxy 实例正在运行以将流量传输到主节点,而那些拖曳从属是只读的,由其他应用程序使用。

当所有实例使用相同的 auth key 时,配置 HAproxy 以选择 Master Node 非常容易,但现在我们对每个实例都有不同的 auth key 。

#listen redis-16    
bind ip_address:6379 name redis
mode tcp
default_backend bk_redis_16

backend bk_redis_16
# mode tcp
option tcp-check
tcp-check connect
tcp-check send AUTH\ auth_key\r\n
tcp-check send PING\r\n
tcp-check expect string +PONG
tcp-check send info\ replication\r\n
tcp-check expect string role:master
tcp-check send QUIT\r\n
tcp-check expect string +OK
server R1 ip_address:6379 check inter 1s
server R2 ip_address:6380 check inter 1s
server R3 ip_address:6381 check inter 1s

所以上面的代码只有当我们在 {R1,R2,R3} 上有一个密码时才有效,如何为不同的密码配置 HAproxy。

我的意思是如何让 HAproxy 使用其服务器的每个授权 key ,如下所示:

R1 : abc

R2 : 民航

R3 : xyz

最佳答案

您有两个主要选择:

  1. 为每组具有不同密码的服务器设置 HA 代理配置。
  2. 将 HA 代理设置为不使用身份验证,而是透明地传递所有连接。

您列出的设置还有其他问题。您的只读奴隶将没有“主人”的角色。因此,即使您可以为每个人分配不同的密码,您的支票也会拒绝连接。此外,在分区的情况下,您的检查将允许裂脑情况。

在 Sentinel 管理的 Redis pod 前使用 HA Proxy 时[1],如果您尝试让 HA Proxy 确定将连接路由到哪里,您必须让 HA Proxy 检查所有 Sentinels 以确保大多数 Sentinels 已确定的 Redis 实例确实是 master。否则,您可能会遭受脑裂的困扰,其中两个或多个实例将自己报告为 Master。实际上,在故障转移后的某个时刻,您会看到这种情况发生。

如果您的主服务器宕机而一个从服务器被提升,当主服务器恢复时它将报告自己是主服务器,直到 Sentinel 检测到主服务器并将其重新配置为从服务器。在此期间,您的 HA 代理检查将向原始主服务器发送写入。当 Sentinel 将其重新配置为从站时,这些写入将丢失。

对于选项 1 的情况:您可以运行单独配置的 HA 代理实例,也可以设置前端和多个后端(配对)。就个人而言,我会选择 HA Proxy 的多个实例,因为它允许您管理它们而不会相互干扰。

对于选项 2 的情况:您需要将 Sentinel 的通知机制粘合到正在重新配置的 HA 代理。这可以使用在 Sentinel 上触发的脚本轻松完成,以在 switch-master 事件上联系并重新配置 HA 代理。有关执行此操作的详细信息,请参阅 http://redis.io/topics/sentinel。更直接地在 http://download.redis.io/redis-stable/sentinel.conf 中找到的示例文件的底部

在具有直接连接的 Redis Pod + Sentinel 设置中,客户端能够收集确定连接位置所需的信息。当您在它们之间放置一个非透明代理时,您的代理需要能够代表客户端做出这些决定 - 或者在拓扑发生变化时让它们做出决定。

  1. 注意:您描述的不是 Redis 集群,而是复制设置。 Redis 集群则完全不同。我使用术语“pod”来表示基于复制的设置。

关于redis - 使用不同的 Auth key 为 Redis 配置 HAproxy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30507775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com