redis-cluster特點

redis-cluster研究和使用

rediscluster分佈式存儲

最近研搭建redis-cluster,正好搭建了一個環境,遇到了很多坑,系統的總結下,

一:關於redis cluster

1:redis cluster的現狀

reids-cluster計劃在redis3.0中推出,

目前的最新版本見: http://www.redis.cn/

目前redis支持的cluster特性(已測試):

1):節點自動發現

2):slave->master 選舉,集羣容錯

3):Hot resharding:在線分片

4):集羣管理:cluster xxx

5):基於配置(nodes-port.conf)的集羣管理

6):ASK 轉向/MOVED 轉向機制.

2:redis cluster 架構

1)redis-cluster架構圖

                         

架構細節:

(1)所有的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬.

(2)節點的fail是通過集羣中超過半數的master節點檢測失效時才生效.

(3)客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連接集羣所有節點,連接集羣中任何一個可用節點即可

(4)redis-cluster把所有的物理節點映射到[0-16383]slot上,cluster 負責維護node<->slot<->key

2) redis-cluster選舉:容錯

 

(1)領着選舉過程是集羣中所有master參與,如果半數以上master節點與故障節點通信超過(cluster-node-timeout),認爲該節點故障,自動觸發故障轉移操作.

(2):什麼時候整個集羣不可用(cluster_state:fail)? 

    a:如果集羣任意master掛掉,且當前master沒有slave.集羣進入fail狀態,也可以理解成集羣的slot映射[0-16383]不完成時進入fail狀態. ps : redis-3.2.1.rc1加入cluster-require-full-coverage參數,默認關閉,打開集羣兼容部分失敗.

    b:如果集羣超過半數以上master掛掉,無論是否有slave集羣進入fail狀態.

  ps:當集羣不可用時,所有對集羣的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)錯誤

內存中對象是否可以設置失效時間

 

一般String使用setex()命令進行插入有時效的value;

 

頻繁添加、修改、刪除對象對Redis性能是否有影響()

 

作爲NOSQL的代表,redis性能還是很不錯的,

讀寫同時處理10000次/秒不在話下,測試20萬條寫僅用了0.8秒;

針對同一對象併發修改是否有限制

有限制,redis地層時單線程操作,所以用的時候儘量對這種操作進行加鎖處理。

 

redis 主從複製,把主的數據刪掉,從的怎麼辦

從的數據也會被刪掉,

 

當主節點fail時,數據持久化在哪

Redis支持數據的持久化,可以將內存中的數據保持在磁盤中,重啓的時候可以再次加載進行使用(PS:持久化在rdb、aof)

。Redis藉助了fork命令的copy on write機制。在生成快照時,將當前進程fork出一個子進程,然後在子進程中循環所有的數據,

將數據寫成爲RDB文件。  AOF日誌的全稱是append only file,從名字上我們就能看出來,它是一個追加寫入的日誌文件。與一般數據庫的binlog不同的是,

AOF文件是可識別的純文本,它的內容就是一個個 的Redis標準命令。當然,並不是發送發Redis的所有命令都要記錄到AOF日誌裏面,

只有那些會導致數據發生修改的命令纔會追加到AOF文件。那麼每一條修改數據的命令都生成一條日誌。

 

redis數據庫中的所有數據都儲存在內存中,爲防止程序退出後內存中的數據丟失,redis提供了對持久化的支持,就是把內存中的數據異步寫入到硬盤中,同時不影響繼續提供服務

(也有數據丟失情況,即在剛寫入到內存的數據,還沒來的及持久化到硬盤,就fail,)

不適合儲存不允許丟失的數據

基本上也就是數據已經存到內存還沒有進行持久化。這個持久化需要一定的策略的,比如說100分鐘持久化一次,或者200分鐘

 

這個是持久化設置在redis.conf進行設置

 

save 900 1
# 900秒有一個key變化,就做一次保存
save 300 10
# 300秒有十個key變化,就做一次保存
save 60 10000
# 60秒有10000個key變化,就做一次保存

Redis使用的是單線程模型,保證了數據按順序提交

複製

Redis集羣的每個節點都有兩種角色可選:主節點(master node)和從節點(slave node),其中主節點用於存儲數據,而從節點則是某個主節點的複製品;

當用戶需要處理更多的請求時,添加從節點可以擴展系統的讀性能。因爲Redis集羣重用了單機Redis複製特性,所以集羣的複製行爲和單機複製行爲是完全一樣的;

下圖展示了爲每個主節點各添加一個從節點:

 

節點故障檢測和自動故障轉移

Redis集羣的主節點內置了類似Redis Sentinel的節點故障檢測和自動故障轉移功能,當集羣中的某個主節點下線時,集羣中的其他在線主節點會注意到這一點,並對已下線的主節點進行故障轉移;

集羣進行故障轉移的方法和Redis Sentinel進行故障轉移的方法基本一樣,不同的是,在集羣裏面,故障轉移是由集羣中其他在線的主節點負責進行的,所以集羣不必另外使用Redis Sentinel。

舉個栗子:當7000下線時,7001和7002會覺察到這一點,並對7000進行故障轉移。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章