Redis 客户端未通过 HAProxy 连接到 Redis 服务器

Redis 客户端未通过 HAProxy 连接到 Redis 服务器

我在使用 Jedis 作为 redis 客户端通过 HAProxy 连接到 Redis 服务器时遇到问题。当直接连接到 Redis 服务器时,一切都正常,但通过 HAProxy 则不行。HAProxy 和 Redis 服务都在其特定端口上运行,HAProxy 在端口 80 上,Redis 服务器在端口 6379 上。我们在 EC2 实例上运行此设置,所有必要的端口都已打开。

HAProxy 配置是

frontend redis-in
bind *:80
default_backend redis-server

backend redis-server
    stats   enable
    server redis-server1 x.x.x.x:6379 check inter 1000 fall 3 rise 2
    server redis-server2 x.x.x.x:6379 check inter 1000 fall 3 rise 2

Jedis Clinet 代码为:

 try {
    Jedis jedis = new Jedis(hostname, port);
    jedis.set("key", "Redis-Test-Value");
    System.out.println("value from redis node is: " + jedis.get("key"));
} catch (Exception e) {
    System.out.println("exception is " + e);
}

引发的异常消息是 -redis.clients.jedis.exceptions.JedisConnectionException: Unknown reply: H

有人能指出我遗漏了什么并指出正确的方向吗?

答案1

您已在后端设置了 stats 选项,似乎由于此原因,您会收到 HTTP 响应(可能是 502 错误),其中的第一个字符显示在 jedis 输出中。因此,删除它并创建一个单独的 listen 指令来提供统计数据,如下所示:

listen stats # Define a listen section called "stats"
  bind :9988 # Listen on localhost:9000
  mode http
  stats enable  # Enable stats page
  stats hide-version  # Hide HAProxy version
  stats uri /stats  # Stats URI

相关内容