web-dev-qa-db-ja.com

RedisクライアントがHAProxy経由でRedisサーバーに接続していません

JedisをRedisクライアントとして使用してHAProxy経由で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

JedisClinetのコードは次のとおりです。

 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
Sandeep Singh

バックエンドで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
0
Gothrek