我正在使用 haproxy 提供对 redis 集群的访问。但是我在 haproxy 启动时遇到了问题,因为在运行第一次检查之前,所有服务器都已启动。
有没有办法强制 haproxy 在接受连接之前运行初始检查?
这是我的配置:
global
max-spread-checks 1
defaults
mode tcp
timeout connect 4s
timeout server 10s
timeout client 60s
frontend ft_redis
mode tcp
bind *:6379
default_backend bk_redis
resolvers docker_resolver
nameserver dns 127.0.0.11:53
backend bk_redis
mode tcp
option tcp-check
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 redis-backend-1 redis_node1:6379 maxconn 1024 check inter 1s downinter 2s rise 1 fall 1 resolvers docker_resolver resolve-prefer ipv4 on-marked-down shutdown-sessions
server redis-backend-2 redis_node2:6379 maxconn 1024 check inter 1s downinter 2s rise 1 fall 1 resolvers docker_resolver resolve-prefer ipv4 on-marked-down shutdown-sessions
server redis-backend-3 redis_node3:6379 maxconn 1024 check inter 1s downinter 2s rise 1 fall 1 resolvers docker_resolver resolve-prefer ipv4 on-marked-down shutdown-sessions
它通常工作正常并且只连接到当前的 redis 主服务器。
但是当启动/重新启动 haproxy 时,我最终会收到类似“READONLY 您无法对只读从属服务器进行写入”之类的错误。因为所有服务器最初都标记为启动,并且连接转到从属 redis 服务器。