Redis 클라이언트가 HAProxy를 통해 Redis 서버에 연결되지 않음

Redis 클라이언트가 HAProxy를 통해 Redis 서버에 연결되지 않음

Jedis를 Redis 클라이언트로 사용하여 HAProxy를 통해 Redis 서버에 연결하는 동안 문제가 발생했습니다. Redis 서버가 직접 연결되어 있으면 모든 것이 잘 작동하지만 HAProxy를 통해서는 작동하지 않습니다. HAProxy와 Redis 서비스는 모두 특정 포트(포트 80의 HAProxy 및 6379의 Redis 서버)에서 실행됩니다. 이 설정을 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

백엔드에서 통계 옵션을 설정했는데 그로 인해 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

관련 정보