單機的 redis,可以承載的 QPS 大概就在上萬到幾萬不等。對於緩存來講,通常都是用來支撐讀高併發的。所以架構作成主從(master-slave)架構,一主多從,主負責寫,而且將數據複製到其它的 slave 節點,從節點負責讀。全部的讀請求所有走從節點。這樣也能夠很輕鬆實現水平擴容,支撐讀高併發。node
實現主從複製如何操做面試
Redis集羣主從複製(一主兩從)搭建配置教程【Windows環境】redis
當啓動一個 slave node 的時候,它會發送一個 PSYNC
命令給 master node。算法
若是這是 slave node 初次鏈接到 master node,那麼會觸發一次 full resynchronization
全量複製。此時 master 會啓動一個後臺線程,開始生成一份 RDB
快照文件,數據庫
同時還會將從客戶端 client 新收到的全部寫命令緩存在內存中。RDB
文件生成完畢後, master 會將這個 RDB
發送給 slave,slave 會先寫入本地磁盤,而後再從本地磁盤加載到內存中,緩存
接着 master 會將內存中緩存的寫命令發送到 slave,slave 也會同步這些數據。網絡
slave node 若是跟 master node 有網絡故障,斷開了鏈接,會自動重連,鏈接以後 master node 僅會複製給 slave 部分缺乏的數據。架構
Redis cluster,10 臺機器,5 臺機器部署了 redis 主實例,另外 5 臺機器部署了 redis 的從實例,每一個主實例掛了一個從實例,5 個節點對外提供讀寫服務,每一個節點的讀寫高峯qps可能能夠達到每秒 5 萬,5 臺機器最可能是 25 萬讀寫請求/s。併發
32G 內存+ 8 核 CPU + 1T 磁盤,可是分配給 redis 進程的是10g內存,通常線上生產環境,redis 的內存儘可能不要超過 10g,超過 10g 可能會有問題。負載均衡
5 臺機器對外提供讀寫,一共有 50g 內存。由於每一個主實例都掛了一個從實例,因此是高可用的,任何一個主實例宕機,都會自動故障遷移,redis 從實例會自動變成主實例繼續提供讀寫服務。
人員數據,每條數據是 10kb。100 條數據是 1mb,10 萬條數據是 1g。常駐內存的是 300 萬條人員數據,佔用內存是 30g,僅僅不到總內存的 60%。目前高峯期每秒就是 3500 左右的請求量。
其實大型的公司,會有基礎架構的 team 負責緩存集羣的運維。
Redis 集羣模式的工做原理能說一下麼?在集羣模式下,redis 的 key 是如何尋址的?分佈式尋址都有哪些算法?瞭解一致性 hash 算法嗎?
簡介
Redis Cluster是一種服務端Sharding技術,3.0版本開始正式提供。Redis Cluster並無使用一致性hash,而是採用slot(槽)的概念,一共分紅16384個槽。將請求發送到任意節點,接收到請求的節點會將查詢請求發送到正確的節點上執行
方案說明
在 Redis cluster 架構下,每一個 redis 要放開兩個端口號,好比一個是 6379,另一個就是 加1w 的端口號,好比 16379。
16379 端口號是用來進行節點間通訊的,也就是 cluster bus 的東西,cluster bus 的通訊,用來進行故障檢測、配置更新、故障轉移受權。cluster bus 用了另一種二進制的協議,gossip
協議,用於節點間進行高效的數據交換,佔用更少的網絡帶寬和處理時間。
節點間的內部通訊機制
基本通訊原理
集羣元數據的維護有兩種方式:集中式、Gossip 協議。redis cluster 節點間採用 gossip 協議進行通訊。
分佈式尋址算法
優勢
缺點