Haproxy

Redis 客戶端未通過 HAProxy 連接到 Redis 伺服器

  • March 2, 2018

我在使用 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

有人能指出我錯過了什麼並指出正確的方向嗎?

您已經在後端設置了 stats 選項,因此您似乎收到了 HTTP 響應(可能是 502 錯誤),其中第一個字元出現在 jedis 輸出中。所以刪除它並創建一個單獨的監聽指令來提供統計資訊,如下所示:

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

引用自:https://serverfault.com/questions/898333