2012-08-18 125 views
7

我知道Redis集羣仍然不穩定,但它已經通過了所有的單元測試,因爲相當長的時間,所以我開始使用它。如何保護Redis集羣?

我想知道如果需要認證節點Redis的集羣將工作做好。我傾向於認爲是,因爲他們通過不同的端口連接並使用不同的協議,但我不確定並且無法找到任何文檔或spec上的任何內容來確認此事。

此外,如果redis的集羣協議飛過認證屏障,是不是在安全的孔?外部世界可以訪問我的數據庫嗎? (端口至少必須訪問,所以它可以跟其他節點)

+0

該端口應該只能訪問可能位於同一本地網絡上的其他節點。你不應該向外界開放。 – seppo0010 2012-08-18 08:01:05

+0

@ seppo0010它必須如果你想跨數據中心複製節點.. – 2012-08-18 08:36:12

+1

@JoãoPintoJerónimo,如果你不能這樣做,例如, AWS工具,您只能從某些IP地址打開端口。 – 2012-08-18 10:24:22

回答

3

如果任何協議飛過,你將需要加密的互聯網(「SSL」)e.g跨數據 - 中心。這通常會影響性能。在Redis的當前的安全規範 -

http://redis.io/topics/security

是表示,SSL不支持,你將需要一個SSL代理服務器。這通常應該導致系統性能下降,例如你必須考慮的延遲。

所以理想的集羣節點都應處於同一位置。如果他們不能這麼做,那麼應該設計集羣,以便限制跨站點數據傳輸或在沒有任何實時限制的情況下離線。

我還選擇禁用/啓用上需要的命令只對每個節點的基礎上(見在安全規格細節上文)。我不確定這是否在羣集模式下受支持。

+0

你有沒有關於性能打擊的想法?這真的很糟嗎?在羣集模式下,只有傳統Redis服務器可用的命令的子集,只有使用單個密鑰的命令。我認爲羣集之間的最多溝通是針對pub/sub,並且會通過SSL代理傳遞...... – 2012-09-25 22:58:06

+0

perf命中通常對於有多少數據流入ssl代理非常主觀,ssl代理的結實程度如何等等,最好的方法是建立一個集羣並做一些性能測試和容量測試。 – NiladriBose 2012-09-26 02:39:44

6

SSH隧道可以是簡單的解決方案:

  1. 你不需要Redis的端口暴露給外界。只有ssh一個。
  2. SSH支持數據壓縮,可以減少數據中心之間的傳輸。

快速示例: ssh -f -L 1234:localhost:6379 server.com -NC

這將路線任何傳入連接到本地主機:1234到遠程server.com:6379。所以,你可以用你的redis配置文件中的localhost:1234替換server.com:6379。

你可以檢查man ssh以獲取更多信息。

+0

這隻適用於單節點Redis,不適用於Cluster。從截至2016年的Redis文檔中可以看出:「目前,Redis集羣不支持NAT地址環境,以及IP地址或TCP端口重映射的一般環境。」隧道將破壞它在端口10000上使用的節點間協議。 – Ivan 2016-06-24 17:13:55