Redis Cluster集羣部署方案

什麼是 Redis 集羣

    

    Redis 集羣是一個分佈式(distributed)、容錯(fault-tolerant)的 Redis 實現,集羣可使用的功能是普通單機 Redis 所能使用的功能的一個子集(subset)。node

Redis 集羣中不存在中心(central)節點或者代理(proxy)節點,集羣的其中一個主要設計目標是達到線性可擴展性(linear scalability)。python

Redis 集羣爲了保證一致性(consistency)而犧牲了一部分容錯性:系統會在保證對網絡斷線(net split)和節點失效(node failure)具備有限(limited)抵抗力的前提下,儘量地保持數據的一致性。redis

請注意,本教程使用於Redis3.0(包括3.0)以上版本

若是你計劃部署集羣,那麼咱們建議你從閱讀這個文檔開始。
算法

Redis集羣介紹

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

    Redis集羣並不支持處理多個keys的命令,由於這須要在不一樣的節點間移動數據,從而達不到像Redis那樣的性能,在高負載的狀況下可能會致使不可預料的錯誤.

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

    自動分割數據到不一樣的節點上。
    整個集羣的部分節點失敗或者不可達的狀況下可以繼續處理命令。

Redis 集羣的數據分片
Redis 集羣沒有使用一致性hash, 而是引入了 哈希槽的概念.

Redis 集羣有16384個哈希槽,每一個key經過CRC16校驗後對16384取模來決定放置哪一個槽.集羣的每一個節點負責一部分hash槽,舉個例子,好比當前集羣有3個節點,那麼:

    節點 A 包含 0 到 5500號哈希槽.
    節點 B 包含5501 到 11000 號哈希槽.
    節點 C 包含11001 到 16384號哈希槽.

    這種結構很容易添加或者刪除節點. 好比若是我想新添加個節點D, 我須要從節點 A, B, C中得部分槽到D上. 若是我像移除節點A,須要將A中得槽移到B和C節點上,而後將沒有任何槽的A節點從集羣中移除便可. 因爲從一個節點將哈希槽移動到另外一個節點並不會中止服務,因此不管添加刪除或者改變某個節點的哈希槽的數量都不會形成集羣不可用的狀態.
Redis 集羣的主從複製模型

    爲了使在部分節點失敗或者大部分節點沒法通訊的狀況下集羣仍然可用,因此集羣使用了主從複製模型,每一個節點都會有N-1個複製品.

    在咱們例子中具備A,B,C三個節點的集羣,在沒有複製模型的狀況下,若是節點B失敗了,那麼整個集羣就會覺得缺乏5501-11000這個範圍的槽而不可用.

    然而若是在集羣建立的時候(或者過一段時間)咱們爲每一個節點添加一個從節點A1,B1,C1,那麼整個集羣便有三個master節點和三個slave節點組成,這樣在節點B失敗後,集羣便會選舉B1爲新的主節點繼續服務,整個集羣便不會由於槽找不到而不可用了

不過當B和B1 都失敗後,集羣是不可用的.
vim


    Redis 一致性保證
    Redis 並不能保證數據的強一致性. 這意味這在實際中集羣在特定的條件下可能會丟失寫操做.

第一個緣由是由於集羣是用了異步複製. 寫操做過程:

    客戶端向主節點B寫入一條命令.
    主節點B向客戶端回覆命令狀態.
    主節點將寫操做複製給他得從節點 B1, B2 和 B3.

    主節點對命令的複製工做發生在返回命令回覆以後, 由於若是每次處理命令請求都須要等待複製操做完成的話, 那麼主節點處理命令請求的速度將極大地下降 —— 咱們必須在性能和一致性之間作出權衡。 注意:Redis 集羣可能會在未來提供同步寫的方法。 Redis 集羣另一種可能會丟失命令的狀況是集羣出現了網絡分區, 而且一個客戶端與至少包括一個主節點在內的少數實例被孤立。

    舉個例子 假設集羣包含 A 、 B 、 C 、 A1 、 B1 、 C1 六個節點, 其中 A 、B 、C 爲主節點, A1 、B1 、C1 爲A,B,C的從節點, 還有一個客戶端 Z1 假設集羣中發生網絡分區,那麼集羣可能會分爲兩方,大部分的一方包含節點 A 、C 、A1 、B1 和 C1 ,小部分的一方則包含節點 B 和客戶端 Z1 .

    Z1仍然可以向主節點B中寫入, 若是網絡分區發生時間較短,那麼集羣將會繼續正常運做,若是分區的時間足夠讓大部分的一方將B1選舉爲新的master,那麼Z1寫入B中得數據便丟失了.

    注意, 在網絡分裂出現期間, 客戶端 Z1 能夠向主節點 B 發送寫命令的最大時間是有限制的, 這一時間限制稱爲節點超時時間(node timeout), 是 Redis 集羣的一個重要的配置選項:
搭建並使用Redis集羣

    搭建集羣的第一件事情咱們須要一些運行在 集羣模式的Redis實例. 這意味這集羣並非由一些普通的Redis實例組成的,集羣模式須要經過配置啓用,開啓集羣模式後的Redis實例即可以使用集羣特有的命令和特性了.

目前redis支持的cluster特性

1):節點自動發現
2):slave->master 選舉,集羣容錯
3):Hot resharding:在線分片
4):進羣管理:cluster xxx
5):基於配置(nodes-port.conf)的集羣管理
6):ASK 轉向/MOVED 轉向機制.

1)redis-cluster架構圖centos

wKiom1k2OVWwvt9oAACuTf5unH8803.jpg-wh_50

架構細節:

(1)全部的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬.
(2)節點的fail是經過集羣中超過半數的節點檢測失效時才生效.
(3)客戶端與redis節點直連,不須要中間proxy層.客戶端不須要鏈接集羣全部節點,鏈接集羣中任何一個可用節點便可
(4)redis-cluster把全部的物理節點映射到[0-16383]slot上,cluster 負責維護node<->slot<->value2) redis-cluster選舉:容錯數組

wKiom1k2OXfBBhVNAAB2MexUeWk129.jpg-wh_50


(1)領着選舉過程是集羣中全部master參與,若是半數以上master節點與master節點通訊超過(cluster-  node-timeout),認爲當前master節點掛掉.
(2):何時整個集羣不可用(cluster_state:fail),當集羣不可用時,全部對集羣的操做作都不可用,收到      ((error) CLUSTERDOWN The cluster is down)錯誤
    a:若是集羣任意master掛掉,且當前master沒有slave.集羣進入fail狀態,也能夠理解成進羣的slot映射          [0-16383]不完成時進入fail狀態.
    b:若是進羣超過半數以上master掛掉,不管是否有slave集羣進入fail狀態.ruby


1、環境

bash

os:centos7
    ip:192.168.19.132
    redis:3.2.9
    gem-redis:3.2.2

2、搭建集羣

一、本機下載redis-3.2.9.tar.gz
網絡

[root@zookeeper ~]# cd /usr/local/src/
[root@zookeeper src]# wget http://download.redis.io/releases/redis-3.2.9.tar.gz

二、安裝

root@zookeeper ~]# yum -y install tcl-8.5* 
[root@zookeeper src]# tar zxf redis-3.2.9.tar.gz -C /usr/local/
[root@zookeeper src]# ln -s /usr/local/redis-3.2.9 /usr/local/redis
[root@zookeeper src]# cd /usr/local/redis
第一種:
[root@zookeeper redis]# make MALLOC=libc && make install
[root@zookeeper redis]# make test(可選,等待時間長)
......
\o/ All tests passed without errors!

Cleanup: may take some time... OK
make[1]: Leaving directory `/usr/local/redis-3.2.9/src'


第二種make:

make完成以後,進行install,默認安裝路徑爲/usr/local/bin下,這裏咱們把他安裝目錄放到/usr/local/redis下,使用PREFIX指定目錄:
[root@zookeeper redis]# make && make PREFIX=/usr/local/redis install

將redis可執行目錄添加到環境變量中,編輯~/.bash_profile添加redis環境變量:

[root@zookeeper ~]# vim ~/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:/usr/local/redis/bin

export PATH

[root@zookeeper ~]# source ~/.bash_profile

三、建立文件夾

[root@zookeeper redis]#    mkdir -p /data/cluster
[root@zookeeper redis]# cd /data/cluster/
[root@zookeeper cluster]# mkdir 7000 7001 7002 7003 7004 7005

四、拷貝修改配置文件

[root@zookeeper cluster]# mkdir /var/log/redis/

[root@zookeeper cluster]# cp /usr/local/redis/redis.conf 7000/redis-7000.conf

vim 7000/redis-7000.conf
......
    bind 192.168.19.132
    port 7000
    daemonize yes
    cluster-enabled yes
    cluster-config-file nodes-7000.conf
    cluster-node-timeout 15000
    pidfile /var/run/redis_7000.pid
    logfile "/var/log/redis/redis-7000.log"


改完以後將此配置文件cp到全部節點上,而且修改端口號和cluster-config-file項。
[root@zookeeper cluster]# cp 7000/redis-7000.conf 7001/redis-7001.conf 
[root@zookeeper cluster]# cp 7000/redis-7000.conf 7002/redis-7002.conf 
[root@zookeeper cluster]# cp 7000/redis-7000.conf 7003/redis-7003.conf 
[root@zookeeper cluster]# cp 7000/redis-7000.conf 7004/redis-7004.conf 
[root@zookeeper cluster]# cp 7000/redis-7000.conf 7005/redis-7005.conf 
......(修改配置文件請參考redis-7000.conf)
    [root@zookeeper cluster]# vim 7001/redis-7001.conf 
    [root@zookeeper cluster]# vim 7002/redis-7002.conf 
    [root@zookeeper cluster]# vim 7003/redis-7003.conf 
    [root@zookeeper cluster]# vim 7004/redis-7004.conf 
    [root@zookeeper cluster]# vim 7005/redis-7005.conf

五、啓動6個實例

[root@zookeeper cluster]# redis-server 7000/redis-7000.conf
[root@zookeeper cluster]# redis-server 7001/redis-7001.conf 
[root@zookeeper cluster]# redis-server 7002/redis-7002.conf 
[root@zookeeper cluster]# redis-server 7003/redis-7003.conf 
[root@zookeeper cluster]# redis-server 7004/redis-7004.conf 
[root@zookeeper cluster]# redis-server 7005/redis-7005.conf 
[root@zookeeper cluster]# 
關閉命令:[root@zookeeper cluster]# redis-cli -p 端口號 shutdown

用redis-cli -c -h -p命令登陸
-c是以集羣方式登陸;
-h後跟主機號 ;
-p後跟端口號。
綁定了127.0.0.1則能夠省略-h參數。不加-c則客戶端不自動切換。

例如:客戶端登陸7000端口的,設置的數據應該存放在7001上則會報錯請轉到7001。而加上-c啓動則會自動切換到7001客戶端保存。

六、查看redis進程啓動狀態

[root@zookeeper cluster]# ps -ef| grep redis
root      18839      1  0 22:58 ?        00:00:00 redis-server 192.168.19.132:7000 [cluster]
root      18843      1  0 22:58 ?        00:00:00 redis-server 192.168.19.132:7001 [cluster]
root      18847      1  0 22:58 ?        00:00:00 redis-server 192.168.19.132:7002 [cluster]
root      18851      1  0 22:59 ?        00:00:00 redis-server 192.168.19.132:7003 [cluster]
root      18855      1  0 22:59 ?        00:00:00 redis-server 192.168.19.132:7004 [cluster]
root      18859      1  0 22:59 ?        00:00:00 redis-server 192.168.19.132:7005 [cluster]
root      18865   2891  0 22:59 pts/1    00:00:00 grep --color=auto redis
[root@zookeeper cluster]#

七、部署集羣

    7.一、安裝ruby依賴,返回安裝軟件目錄

root@zookeeper src]# yum install ruby rubygems -y
[root@zookeeper src]# wget https://rubygems.org/downloads/redis-3.2.2.gem
安裝集羣管理工具
Redis做者應該是個Ruby愛好者,Ruby客戶端就是他開發的。此次集羣的管理功能沒有嵌入到Redis代碼中,因而做者又順手寫了個叫作redis-trib的管理腳本。redis-trib依賴Ruby和RubyGems,以及redis擴展。能夠先用which命令查看是否已安裝ruby和rubygems,用gem list –local查看本地是否已安裝redis擴展。
[root@zookeeper src]# gem install -l redis-3.2.2.gem 
Successfully installed redis-3.2.2
Parsing documentation for redis-3.2.2
Installing ri documentation for redis-3.2.2
1 gem installed

    7.二、將集羣管理程序複製到/usr/local/bin/

 [root@zookeeper src]# cp /usr/local/redis/src/redis-trib.rb /usr/local/bin/redis-trib

        能夠看到redis-trib.rb具備如下功能:
        一、create:建立集羣
        二、check:檢查集羣
        三、info:查看集羣信息
        四、fix:修復集羣
        五、reshard:在線遷移slot
        六、rebalance:平衡集羣節點slot數量
        七、add-node:將新節點加入集羣
        八、del-node:從集羣中刪除節點
        九、set-timeout:設置集羣節點間心跳鏈接的超時時間
        十、call:在集羣所有節點上執行命令
        十一、import:將外部redis數據導入集羣


八、建立集羣

[root@zookeeper cluster]# redis-trib create --replicas 1 192.168.19.132:7000 192.168.19.132:7001 192.168.19.132:7002 192.168.19.132:7003 192.168.19.132:7004 192.168.19.132:7005

>>> Creating cluster
>>> Performing hash slots allocation on 7 nodes...
Using 3 masters:
192.168.19.132:7000
192.168.19.132:7001
192.168.19.132:7002
Adding replica 192.168.19.132:7003 to 192.168.19.132:7000
Adding replica 192.168.19.132:7004 to 192.168.19.132:7001
Adding replica 192.168.19.132:7005 to 192.168.19.132:7002
M: 3546a9930ce08543731c4d49ae8609d75b0b8193 192.168.19.132:7000
   slots:0-16383 (16384 slots) master
M: 1dd532b0f41b98574b6cd355fa58a2773c9da8fe 192.168.19.132:7001
   slots:5461-10922 (5462 slots) master
M: 2900e315a4a01df8609eafe0f9fd2a1d779ecc69 192.168.19.132:7002
   slots:10923-16383 (5461 slots) master
S: 71c8cea8e3e9c913eb7c09bd3f95c03985938eca 192.168.19.132:7003
   replicates 3546a9930ce08543731c4d49ae8609d75b0b8193
S: 046a02ea253d8912b87c13e98b28f81e6c54c0b1 192.168.19.132:7004
   replicates 1dd532b0f41b98574b6cd355fa58a2773c9da8fe
S: 8a666ed58930673b7dfc6d005c2a937751350f77 192.168.19.132:7005
   replicates 2900e315a4a01df8609eafe0f9fd2a1d779ecc69
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.
>>> Performing Cluster Check (using node 192.168.19.132:7000)
M: 3da69162cde5884f21cec07f6f812ffbdda0cfc4 192.168.19.132:7000
   slots:0-10922 (10923 slots) master
   3 additional replica(s)
M: d30be1d1232e55f3cc69d8d11e9eb9a870160ac1 192.168.19.132:7001
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: 6bd6589a69ce37da5335ffd10b042ce0b02e3247 192.168.19.132:7004
   slots: (0 slots) slave
   replicates d30be1d1232e55f3cc69d8d11e9eb9a870160ac1
S: 12d7db519133b96bac51b79204f69eabdfe75627 192.168.19.132:7002
   slots: (0 slots) slave
   replicates 3da69162cde5884f21cec07f6f812ffbdda0cfc4
S: 8a9d6189b42bef127ab388e221d8225938c3f038 192.168.19.132:7003
   slots: (0 slots) slave
   replicates 3da69162cde5884f21cec07f6f812ffbdda0cfc4
S: 2cfb927fc17988be6fee6b5eb1249e2789a76f82 192.168.19.132:7005
   slots: (0 slots) slave
   replicates 3da69162cde5884f21cec07f6f812ffbdda0cfc4
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.


    當咱們贊成這份計劃以後輸入yes,,Can I set the above configuration? (type 'yes' to accept): yes,開始執行節點握手和槽分配操做。
最後輸出報告說明,16384個槽所有被分配,集羣建立成功。這裏須要注意給redis-trib.rb的節點地址必須是不包含任何槽/數據的節點,不然會拒絕建立集羣。

    --replicascas參數制定集羣中每一個主節點配置幾個從節點,這裏設置爲1.節點列表順序用於肯定主從角色,先主節點以後是從節點。

建立流程以下:

一、首先爲每一個節點建立ClusterNode對象,包括鏈接每一個節點。檢查每一個節點是否爲獨立且db爲空的節點。執行load_info方法導入節點信息。

二、檢查傳入的master節點數量是否大於等於3個。只有大於3個節點才能組成集羣。

三、計算每一個master須要分配的slot數量,以及給master分配slave。分配的算法大體以下:
先把節點按照host分類,這樣保證master節點能分配到更多的主機中。
不停遍歷遍歷host列表,從每一個host列表中彈出一個節點,放入interleaved數組。直到全部的節點都彈出爲止。
master節點列表就是interleaved前面的master數量的節點列表。保存在masters數組。
計算每一個master節點負責的slot數量,保存在slots_per_node對象,用slot總數除以master數量取整便可。
遍歷masters數組,每一個master分配slots_per_node個slot,最後一個master,分配到16384個slot爲止。
接下來爲master分配slave,分配算法會盡可能保證master和slave節點不在同一臺主機上。對於分配完指定slave數量的節點,還有多餘的節點,也會爲這些節點尋找master。分配算法會遍歷兩次masters數組。
第一次遍歷masters數組,在餘下的節點列表找到replicas數量個slave。每一個slave爲第一個和master節點host不同的節點,若是沒有不同的節點,則直接取出餘下列表的第一個節點。
第二次遍歷是在對於節點數除以replicas不爲整數,則會多餘一部分節點。遍歷的方式跟第一次同樣,只是第一次會一次性給master分配replicas數量個slave,而第二次遍歷只分配一個,直到餘下的節點被所有分配出去。

四、打印出分配信息,並提示用戶輸入「yes」確認是否按照打印出來的分配方式建立集羣。

五、輸入「yes」後,會執行flush_nodes_config操做,該操做執行前面的分配結果,給master分配slot,讓slave複製master,對於尚未握手(cluster meet)的節點,slave複製操做沒法完成,不過不要緊,flush_nodes_config操做出現異常會很快返回,後續握手後會再次執行flush_nodes_config。

六、給每一個節點分配epoch,遍歷節點,每一個節點分配的epoch比以前節點大1。

七、節點間開始相互握手,握手的方式爲節點列表的其餘節點跟第一個節點握手。

八、而後每隔1秒檢查一次各個節點是否已經消息同步完成,使用ClusterNode的get_config_signature方法,檢查的算法爲獲取每一個節點cluster nodes信息,排序每一個節點,組裝成node_id1:slots|node_id2:slot2|...的字符串。若是每一個節點得到字符串都相同,即認爲握手成功。

九、此後會再執行一次flush_nodes_config,此次主要是爲了完成slave複製操做。

十、最後再執行check_cluster,全面檢查一次集羣狀態。包括和前面握手時檢查同樣的方式再檢查一遍。確認沒有遷移的節點。確認全部的slot都被分配出去了。

十一、至此完成了整個建立流程,返回[OK] All 16384 slots covered.。

九、集羣完整性檢查

[root@zookeeper ~]# redis-trib check 192.168.19.132:7000
>>> Performing Cluster Check (using node 192.168.19.132:7000)
M: 8a628ee2e98c70a404be020cba3dfc1172a38335 192.168.19.132:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: 154e2f4f3fad75a564f9fe2efcde7820284116c6 192.168.19.132:7003
   slots: (0 slots) slave
   replicates 8a628ee2e98c70a404be020cba3dfc1172a38335
S: f2707a3052d3dc91358b73b4786e4c8e20662a79 192.168.19.132:7004
   slots: (0 slots) slave
   replicates 0e4d1ee05b090c45ce979bc9e8ad4c027d5332ef
M: 0e4d1ee05b090c45ce979bc9e8ad4c027d5332ef 192.168.19.132:7001
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
M: 08d3663dc9e0f5f02e2bff07640d67e406211e49 192.168.19.132:7002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: a44237119e6b2129e457d2f48a584b94b1b815f5 192.168.19.132:7005
   slots: (0 slots) slave
   replicates 08d3663dc9e0f5f02e2bff07640d67e406211e49
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.


[root@zookeeper ~]# redis-trib check 192.168.19.132:7004
>>> Performing Cluster Check (using node 192.168.19.132:7004)
S: f2707a3052d3dc91358b73b4786e4c8e20662a79 192.168.19.132:7004
   slots: (0 slots) slave
   replicates 0e4d1ee05b090c45ce979bc9e8ad4c027d5332ef
M: 0e4d1ee05b090c45ce979bc9e8ad4c027d5332ef 192.168.19.132:7001
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 154e2f4f3fad75a564f9fe2efcde7820284116c6 192.168.19.132:7003
   slots: (0 slots) slave
   replicates 8a628ee2e98c70a404be020cba3dfc1172a38335
M: 08d3663dc9e0f5f02e2bff07640d67e406211e49 192.168.19.132:7002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
M: 8a628ee2e98c70a404be020cba3dfc1172a38335 192.168.19.132:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: a44237119e6b2129e457d2f48a584b94b1b815f5 192.168.19.132:7005
   slots: (0 slots) slave
   replicates 08d3663dc9e0f5f02e2bff07640d67e406211e49
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

10 測試

[root@zookeeper ~]# redis-cli -h 192.168.19.132 -p 7000
192.168.19.132:7000> CLUSTER INFO
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_sent:414
cluster_stats_messages_received:414


3192.168.19.132:7000> CLUSTER NODES
154e2f4f3fad75a564f9fe2efcde7820284116c6 192.168.19.132:7003 slave 8a628ee2e98c70a404be020cba3dfc1172a38335 0 1496720263710 4 connected
f2707a3052d3dc91358b73b4786e4c8e20662a79 192.168.19.132:7004 slave 0e4d1ee05b090c45ce979bc9e8ad4c027d5332ef 0 1496720264715 5 connected
0e4d1ee05b090c45ce979bc9e8ad4c027d5332ef 192.168.19.132:7001 master - 0 1496720262702 2 connected 5461-10922
08d3663dc9e0f5f02e2bff07640d67e406211e49 192.168.19.132:7002 master - 0 1496720265722 3 connected 10923-16383
a44237119e6b2129e457d2f48a584b94b1b815f5 192.168.19.132:7005 slave 08d3663dc9e0f5f02e2bff07640d67e406211e49 0 1496720266730 6 connected
8a628ee2e98c70a404be020cba3dfc1172a38335 192.168.19.132:7000 myself,master - 0 0 1 connected 0-5460

當前集羣狀態是OK,集羣進入在線狀態。cluster nodes能夠看到節點和槽的分配關係,目前還有三個及誒按沒有使用,做爲一個完整的集羣,每一個負責處理槽的節點都應該具備從節點,保證當它出現故障時能夠自動進行故障轉移。集羣模式下,Redis節點角色分爲主節點和從節點。首次啓動的節點和被分配槽的節點都是主節點,從節點負責複製主節點槽信息和相關數據。

相關文章
相關標籤/搜索