Redis-Client stellt keine Verbindung zum Redis-Server über HAProxy her

Redis-Client stellt keine Verbindung zum Redis-Server über HAProxy her

Ich habe ein Problem, wenn ich mich über HAProxy mit Jedis als Redis-Client mit dem Redis-Server verbinde. Bei direkter Verbindung zum Redis-Server funktioniert alles einwandfrei, aber über HAProxy funktioniert das nicht. Sowohl HAProxy- als auch Redis-Dienste laufen auf ihren jeweiligen Ports, HAProxy auf Port 80 und der Redis-Server auf 6379. Wir führen dieses Setup auf EC2-Instanzen aus und alle erforderlichen Ports sind geöffnet.

HAProxy-Konfiguration ist

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

Der Jedis Clinet-Code lautet:

 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);
}

Die folgende Ausnahmemeldung wird ausgegeben:redis.clients.jedis.exceptions.JedisConnectionException: Unknown reply: H

Kann mir jemand sagen, was ich übersehe und in die richtige Richtung weisen?

Antwort1

Sie haben die Statistikoption in Ihrem Backend eingestellt. Es scheint, dass Sie dadurch eine HTTP-Antwort erhalten (wahrscheinlich ein 502-Fehler), deren erstes Zeichen in der Jedis-Ausgabe zu sehen ist. Entfernen Sie diese also und erstellen Sie eine separate Listen-Direktive zum Bereitstellen von Statistiken, etwa so:

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

verwandte Informationen