天天看點

【Azure Redis 緩存】Azure Cache for Redis服務中,除開放端口6379,6380外

問題描述

在使用安全檢測工具對Azure Redis服務端口進行掃描時,發現Redis對外開放了13001, 13000,15000,15001端口。非常不了解的是,在門戶上隻開放了6379,6380這兩個端口。那是為什麼導緻 1300N 和 1500N 端口會是開放的呢?并且是對公網開放?

通過 ​​tcpping​​ Redis hostname  13000/13001/15000/15001 測試,均可以ping通。

【Azure Redis 緩存】Azure Cache for Redis服務中,除開放端口6379,6380外

對6379,6380也是開放的

【Azure Redis 緩存】Azure Cache for Redis服務中,除開放端口6379,6380外

那麼,這是為什麼呢?

問題分析

其實需要從Redis的架構說起,因為Redis需要實作高可用性(“标準”或“進階”層級中),是以Azure Cache for Redis 在一對 Redis 伺服器上運作。 這兩個伺服器托管在專用 VM 上, 被稱為Master/Slave,也稱為主/從節點(Primay Node / Replica Node)。

Redis 隻允許一台伺服器處理資料寫入請求,這一台伺服器是主要節點,而另一伺服器是副本。 預配伺服器節點後,Azure Cache for Redis 可向其配置設定主要角色和副本角色。 

  • 主要節點:通常負責為來自 Redis 用戶端的寫入和讀取請求提供服務。 在執行寫入操作時,它會向其内部記憶體送出一個新密鑰和密鑰更新,并立即回複用戶端。 它以異步方式将操作轉發給副本。
【Azure Redis 緩存】Azure Cache for Redis服務中,除開放端口6379,6380外

當主節點發生故障不可用是,副本節點會自動更新為新的主節點。而通過Redis的Host name連接配接時,都是經過前端的Load Balancer來對請求配置設定到主節點。是以在後端的VM(不管時主節點,或者副本節點)都會開啟TLS Port或者非TLS端口。

  • 而13000,13001端口對應于VM的非TLS端口(兩個機器),對應Redis服務的6379端口
  • 而15000,15001端口則是對應的TLS端口,對應Redis的6380端口

雖然可以通過13000或者時15000端口連接配接到Azure Redis服務,但由于Redis所預設的,也是被大衆所推崇的連接配接端口為6379(非SSL) / 6380(SSL)。是以,1300N,1500N端口是Azure Redis的設計使然。 由因為6379端口可以在設定中關閉。是以1300N端口也是可以關閉的。如:

【Azure Redis 緩存】Azure Cache for Redis服務中,除開放端口6379,6380外

另外,由于Azure Redis可以啟用叢集功能。而叢集中需要連接配接到各個分片就是使用的1300N端口和1500N端口。

啟用群集功能後,如何連接配接到緩存?

連接配接到緩存時,可以使用的終結點、端口和密鑰與連接配接到未啟用群集功能的緩存時使用的相同。 Redis 在後端管理群集功能,是以不需要你通過用戶端來管理它。

可以直接連接配接到緩存的各個分片嗎?

群集協定要求用戶端建立正确的分片連接配接。 是以用戶端應正确執行此操作。 話雖如此,但每個分片都是由主/副緩存對組成的,該緩存對統稱為緩存執行個體。 可以在 GitHub 上通過 Redis 存儲庫的 不穩定 分支使用 redis-cli 實用程式連接配接到這些緩存執行個體。 使用 ​

​-c​

​​ 開關啟動後,此版本可實作基本的支援。 有關詳細資訊,請參閱 ​​https://redis.io​​​ 上 ​​Redis cluster tutorial​​​(Redis 群集教程)中的​​操作群集​​。

對于非 TLS,請使用以下指令。

Redis-cli.exe -h <<cachename>> -p 13000 (to connect to instance 0)

Redis-cli.exe -h <<cachename>> -p 13001 (to connect to instance 1)

Redis-cli.exe -h <<cachename>> -p 13002 (to connect to instance 2)

...

Redis-cli.exe -h <<cachename>> -p 1300N (to connect to instance N)

對于 TLS,請将 ​

​1300N​

​​ 替換為 ​

​1500N​

​。

注意:雖然Redis用戶端預設連接配接的是主節點,但如果想要連接配接到副本節點,也是可以的。隻是這會引起一些不可預期的潛在問題,如資料丢失,監控圖示上的名額不對等情況。

參考文檔

tcping 下載下傳:​​https://www.elifulkerson.com/projects/tcping.php​​

Azure Cache for Redis 的高可用性 : ​​https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-high-availability#standard-replication​​

可以直接連接配接到緩存的各個分片嗎?​​https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-premium-clustering#how-do-i-connect-to-my-cache-when-clustering-is-enabled​​