Redis Client не подключается к серверу Redis через HAProxy
Я столкнулся с проблемой при подключении к серверу Redis через HAProxy с использованием Jedis в качестве клиента 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