Estou enfrentando um problema ao conectar-me ao servidor Redis via HAProxy usando Jedis como cliente Redis. Tudo funciona bem quando o servidor Redis está conectado diretamente, mas o mesmo não funciona via HAProxy. Os serviços HAProxy e Redis estão sendo executados em suas portas específicas, HAProxy na porta 80 e servidor Redis em 6379. Estamos executando esta configuração em instâncias EC2 e todas as portas necessárias estão abertas.
A configuração do 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
O código do 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);
}
A mensagem de exceção lançada é -redis.clients.jedis.exceptions.JedisConnectionException: Unknown reply: H
Alguém pode apontar o que estou perdendo e apontar a direção certa?
Responder1
Você definiu a opção de estatísticas em seu back-end, parece que devido a isso você recebe uma resposta HTTP (provavelmente um erro 502), cujo primeiro caractere é visto na saída do jedis. Então remova isso e crie uma diretiva listen separada para servir estatísticas, assim:
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