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