我試圖建立一個谷歌的TCP內部負載平衡器檢測Redis的主人。在這個lb後面的實例組由在端口6379上偵聽的redis-server進程組成。在這些redis實例中,只有其中一個是master。健康檢查從谷歌TCP負載平衡器
問題:添加TCP運行狀況檢查以檢測redis主設備,並使lb僅將所有流量轉移到redis主設備。
方法: 增加了TCP健康檢查端口6379. 爲了發送命令role
到Redis的服務器進程和解析響應,我正在使用的健康檢查提供的可選PARAMS。請檢查截圖here。
結果:健康檢查失敗的所有。如果我刪除可選的請求/響應參數,健康檢查開始傳遞所有參數。
調試:
- 連送到LB使用netcat的和發出的命令
role
,將其作爲預期開始*3
(對主)和*5
(用於從站)的響應。 - 登錄到實例並停止redis-server進程。使用
nc -l -p 6379
開始在端口6379上進行偵聽,以檢查實例端在健康檢查中究竟收到了什麼。它確實收到role\r\n
。 - 步驟2中,重新啓動redis的服務器之後和在redis的-CLI跑
MONITOR
命令,觀看由該方法接收的命令的日誌。這裏沒有日誌role
。 這意味着,例如在接收通過TCP的數據(role\r\n
),但不被處理redis的-CLI接收到的(按照MONITOR
命令)或別的東西正在發生。請幫忙。
你有沒有設法弄清楚? – shaharmor
你的redis服務器在哪個IP上監聽?僅限外部IP或僅限內部IP或0.0.0.0? – Dagang
作爲一種變通方法,您可以嘗試在實例中運行的6380代理收聽並轉發流量到Redis的服務器上127.0.0.1:6379? – Dagang