Redis從入門到高可用,分散式實踐 四(Redis Cluster)
阿新 • • 發佈:2018-12-25
Redis Cluster
呼喚叢集
- redis最高可以達到10萬/s,如果業務需要100萬/s呢?
- 單機器記憶體太小,無法滿足需求
資料分佈
- 順序分割槽的資料量不可確定性導致傾斜,不支援批量操作
雜湊分佈
節點取餘分割槽 hash(key)%nodes
如果要增加分割槽,資料遷移量在80%左右
資料遷移第一次是無法從資料中取到的,資料庫需要進行回寫到新節點
一致性雜湊分割槽
比較適合節點多的情況
虛擬槽分割槽
共享訊息模式
搭建叢集
- 複製,高可用,切片
- 節點之間通過meet來相互通訊
- 給節點指派槽,這樣節點可以正常的讀寫
- 每個主節點有複製一個從節點
安裝
- 原生命令安裝
- 配置開啟節點
- meet
- 指派槽
- 主從
- cluster replicate node-id
- 官方工具安裝
Ruby環境
- 下載,編譯,安裝Ruby
- 安裝rubygem redis
- 安裝redis-trib.rb
叢集伸縮
伸縮原理
擴容叢集
- 準備新節點
- 加入叢集
- 作用
- 為其遷移槽和資料實現擴容
- 作為從節點負責故障轉移 - 遷移槽和資料
客戶端實現
第二種方式
優點:會做一個孤立節點的檢測
叢集擴容
pipeline
收縮叢集
客戶端路由
moved重定向
客戶端不會自己找到異常節點,需要自己寫邏輯
ask重定向
smart客戶端工作原理
JedisCluster基本使用
整合spring
多節點命令實現
四種批量操作實現(mget,mset必須在一個槽)
故障轉移
故障發現
故障恢復
常見問題
叢集完整性
頻寬消耗
Pub/Sub廣播(釋出一條訊息,每個節點都會接收到,加重頻寬消耗)
資料傾斜
分兩種,資料傾斜和請求傾斜
讀寫分離
資料遷移
叢集VS單機
快取設計與優化(知識點)
快取收益與成本
收益
成本
使用場景
快取更新策略
快取粒度控制
快取穿透優化(大量請求不命中)
無底洞問題
熱地key重建優化
Redis雲平臺cachecloud
Redis規模化運維
- 釋出構建繁瑣,私搭亂建
- 節點&機器運維成本
- 監控報警初級