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

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

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

関連情報