當前位置:
首頁 > 最新 > 如何搭建 Redis 集群

如何搭建 Redis 集群

「文末高能」

編輯 | 哈比

1. Redis 簡介

Redis 是一個 key-value 存儲系統。和 Memcached 類似,它支持存儲的 value 類型相對更多,包括 string(字元串)、list(鏈表)、set(集合)、zset(sorted set —有序集合) 和 hash(哈希類型)。

這些數據類型都支持 push/pop、add/remove 及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。

在此基礎上,redis 支持各種不同方式的排序。與 memcached 一樣,為了保證效率,數據都是緩存在內存中。

區別的是 redis 會周期性的把更新的數據寫入磁碟或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了 master-slave(主從) 同步。

Redis 是一個高性能的 key-value 資料庫。

redis 的出現,很大程度補償了 memcached 這類 key/value 存儲的不足,在部 分場合可以對關係資料庫起到很好的補充作用。

它提供了 Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang 等客戶端,使用很方便。


Redis 集群是一個提供在多個 Redis 間節點間共享數據的程序集。

Redis 集群並不支持處理多個 keys 的命令 , 因為這需要在不同的節點間移動數據 , 從而達不到像 Redis 那樣的性能 , 在高負載的情況下可能會導致不可預料的錯誤。

Redis 集群通過分區來提供一定程度的可用性 , 在實際環境中當某個節點宕機或者不可達的情況下繼續處理命令,Redis 集群的優勢:

自動分割數據到不同的節點上。

整個集群的部分節點失敗或者不可達的情況下能夠繼續處理命令。


3.1 主從複製的簡單流程介紹:

Master 可以擁有多個 slave;

多個 slave 可以連接同一個 Master 外,還可以連接到其他的 slave;

主從複製不會阻塞 Master 在主從複製時,Master 可以處理 client 請求;

提供系統的伸縮性。

3.2 主從複製簡單原理的過程

(1)slave 與 Master 建立連接,發送 sync 同步命令;

也就是說當用戶在 Master 寫入一條命令後,他們之間會通過一些演算法把數據同步到每一個 slave 上;

(2)Msater 會開啟一個後台進程,將資料庫快照保存到文件中。同時 Master 主進程會開始收集新的寫命令並緩存;

(3)後台完成保存後,就將文件發送給 slave;

(4)slave 將此文件保存在硬碟上。


4.1 Sentinel 工作方式

每個 Sentinel 以每秒鐘一次的頻率向它所知的 Master,Slave 以及其他 Sentinel 實例發送一個 PING 命令;

如果一個實例(instance)距離最後一次有效回復 PING 命令的時間超過 down-after-milliseconds 選項所指定的值, 則這個實例會被 Sentinel 標記為主觀下線;

如果一個 Master 被標記為主觀下線,則正在監視這個 Master 的所有 Sentinel 要以每秒一次的頻率確認 Master 的確進入了主觀下線狀態;

當有足夠數量的 Sentinel(大於等於配置文件指定的值)在指定的時間範圍內確認 Master 的確進入了主觀下線狀態, 則 Master 會被標記為客觀下線;

在一般情況下, 每個 Sentinel 會以每 10 秒一次的頻率向它已知的所有 Master,Slave 發送 INFO 命令;

當 Master 被 Sentinel 標記為客觀下線時,Sentinel 向下線的 Master 的所有 Slave 發送 INFO 命令的頻率會從 10 秒一次改為每秒一次;

若沒有足夠數量的 Sentinel 同意 Master 已經下線, Master 的客觀下線狀態就會被移除。

若 Master 重新向 Sentinel 的 PING 命令返回有效回復, Master 的主觀下線狀態就會被移除。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 GitChat技術雜談 的精彩文章:

境外業務性能優化實踐
如何快速成長為圖形學工程師

TAG:GitChat技術雜談 |