Redis集羣方案總結

Redis集羣方案總結

目前,Redis中目前集羣有如下幾種方案:node

  • 主從複製git

  • 哨兵模式github

  • redis clusterweb

  • 代理redis

  • codis算法

  • 客戶端分片數據庫

由於目前使用大範圍使用就是Codis方案,所以重點會放在理解Codis方案,其他方案只會簡單介紹。瀏覽器

Codis

Codis是豌豆莢公司開發的一個分佈式Redis服務,對於上層調用方來講是沒有感知的,能夠將它是無限內存的Redis服務,有動態擴容和縮容的能力,增減Redis實例對調用方徹底透明,不須要重啓服務,不須要擔憂內存的問題;架構

Codis是基於proxy-base,也就是會以一個代理的身份接收請求而且使用一致性哈希算法,將請求轉發到具體的redis實例,而且一個codis-group採用主從方式,包含一個master節點和多個slave節點,若是master節點出現了問題,那麼一個group中的slave節點會經過選舉算法推選出新的master節點,而且通知到proxy。

Codis由幾個部分組成:

  • Codis Proxy (codis-proxy),處理客戶端請求,支持Redis協議,所以客戶端訪問Codis Proxy跟訪問原生Redis沒有什麼區別;

  • Codis Dashboard (codis-config),Codis 的管理工具,支持添加/刪除 Redis 節點、添加/刪除 Proxy 節點,發起數據遷移等操做。codis-config 自己還自帶了一個 http server,會啓動一個 dashboard,用戶能夠直接在瀏覽器上觀察 Codis 集羣的運行狀態;

  • Codis Redis (codis-server),Codis 項目維護的一個 Redis 分支,基於 2.8.21 開發,加入了 slot 的支持和原子的數據遷移指令;

  • ZooKeeper/Etcd,Codis 依賴 ZooKeeper 來存放數據路由表和 codis-proxy 節點的元信息,codis-config 發起的命令都會經過 ZooKeeper 同步到各個存活的 codis-proxy;

  • Codis FE,集羣管理界面;

  • Storage,爲集羣狀態提供外部存儲;

其他方案

Redis cluster

這是Redis官方提供的分佈式Redis解決方案,cluster使用一致性哈希算法,每一個槽對應一個node節點,將請求轉發到具體的redis實例,一樣的,爲了集羣的可訪問性,每一個node節點配置成主從結構,一樣會利用選舉算法推出一個主節點;

cluster不足點在於:

  • 沒有提供圖像管理工具,對於運維來講比較複雜;

  • 命令支持不夠完整,好比批量命令mget不完整,不支持事務,不支持數據庫切換;

  • 集羣管理和數據存儲耦合,也就是說若是集羣有bug,須要升級整個Redis版本;

github

細說分佈式Redis架構設計和那些踩過的坑

相關文章
相關標籤/搜索