Redis Cluster(Redis 集羣)詳解

1、基礎概念及原理說明:
    1.一、Redis常見幾種集羣簡介
        Redis組建集羣共有三種方式,每種方法都有本身的有缺點,下面對每種方法進行概述:
            第一種:Redis主從模式,搭建該集羣有點就是很是簡單而且每一個數據保存在多個Redis中,這樣保障Redis中的數據安全,缺點是當集羣中的主服務器(Master)宕機後從服務器(Slave)不會自動接管主服務器的工做,須要人工干預
            第二種:Redis哨兵模式,Redis哨兵主要採用單獨開一個進程進行監控Redis集羣運行狀態,在Redis編譯安裝完成後,源文件能夠看到一個sentinel.conf文件這個就是哨兵的配置文件,Redis哨兵也相似於Redis主從,在集羣中選舉一個主服務器(Master),全部寫入的數據由主服務器接收,而後同步到集羣中的從服務器(Slave)上,可是哨兵比Redis主從更加智能的,在哨兵集羣中,當主服務器(Master)出現故障,集羣會自動從新選舉一臺主服務器,這樣不須要人工干預,系統運行更加穩定
            第三種:Redis cluster,這個是本文主要講解的類型,不管是Redis主從或者Redis哨兵,他們都有一個共同的問題,就是全部請求都是由一臺服務器進行響應,既:主服務器(Master),若是請求/併發量太大,這臺服務器將會成爲瓶頸。而Redis 3.0之後提供了一個Redis cluster模式,它使用哈希槽分片,將全部數據分佈在不一樣的服務器上。

html

    1.二、Redis Cluster原理說明
        1.2.一、Redis集羣基礎說明
            在Redis 3.0版本之後,Redis發佈了Redis Cluster。該集羣主要支持搞併發和海量數據處理等優點,具體:①、自動分割數據到不一樣的節點上,②整個集羣的部分節點失敗或者不可達的狀況下可以繼續處理命令。具體解釋以下:
            Redis沒有使用一致性hash,而是引入哈希槽的概念。Redis集羣由16384個哈希槽,每一個key經過CRC16校驗後對16384取模來決定放置那個槽,集羣的每一個節點負責一部分hash槽,也就是說數據存放在hash槽裏,而每一個節點只負責部分hash槽(這樣數據就存放在不一樣的節點)。
            例如:A、B、C三個節點,
                A節點負責0到5500號hash槽,
                B節點負責5501到11000號hash槽,
                C節點負責11001到16384號hash槽
                這種結構很容易添加或者刪除節點. 好比若是我想新添加個節點D, 我須要從節點 A, B, C中得部分槽到D上. 若是我想移除節點A,須要將A中的槽移到B和C節點上,而後將沒有任何槽的A節點從集羣中移除便可. 因爲從一個節點將哈希槽移動到另外一個節點並不會中止服務,因此不管添加刪除或者改變某個節點的哈希槽的數量都不會形成集羣不可用的狀態

        1.2.二、Redis 集羣的主從複製模型
            爲了使在部分節點失敗或者大部分節點沒法通訊的狀況下集羣仍然可用,因此集羣使用了主從複製模型,每一個節點都會有N-1個複製品.
            在咱們例子中具備A,B,C三個節點的集羣,在沒有複製模型的狀況下,若是節點B失敗了,那麼整個集羣就會覺得缺乏5501-11000這個範圍的槽而不可用.
            然而若是在集羣建立的時候(或者過一段時間)咱們爲每一個節點添加一個從節點A1,B1,C1,那麼整個集羣便有三個master節點和三個slave節點組成,這樣在節點B失敗後,集羣便會選舉B1爲新的主節點繼續服務,整個集羣便不會由於槽找不到而不可用了
            不過當B和B1 都失敗後,集羣是不可用的.

java

        1.2.三、關於Redis數據一致性(異步寫)
            Redis集羣不能保證數據的強一致性。緣由:
            ①、Redis集羣採用異步寫的方法,既:當客戶端向Master寫入一條數據後,Master給客戶端返回一個執行結果,而後在操做Master和Slave之間的數據同步,這樣當客戶端完成寫入並拿到Master返回的結果時(但Master還將來得及執行主從同步),Master出現宕機或網絡不可達,就出現了數據不一致的狀況。這也就是Redis的異步寫。可是若是Redis集羣採用同步寫,那麼整個集羣的性能將大大降低(既:客戶端寫入數據後,Master先執行主從同步,而後在返回給客戶端寫入結果)node

                        

          異步寫                              同步寫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集羣的一個重要的配置選項)

vim

 

2、Redis Cluster搭建
    2.一、基礎環境介紹
        Redis版本:3.2.8
        Redis應用:在一臺服務器上開啓六個Redis實例,每一個實例對應一個端口分別是:11000 12000 13000 14000 15000 16000,其中11000 12000 13000做爲主服務器,14000 15000 16000做爲從服務器
   Redis關係架構圖:安全

                        

 

    2.二、編譯安裝Redis 3.2.8ruby

mkdir /app/src
cd /app/src
wget http://download.redis.io/releases/redis-3.2.8.tar.gz
tar xf redis-3.2.8.tar.gz && cd redis-3.2.8
make && make install
mkdir -p /usr/local/redis/bin
mkdir -p /usr/local/redis/etc
cp -rf /usr/local/bin/redis-* /usr/local/redis/bin/
find ./src/* -perm 775 | xargs -I '{}' cp {} /usr/local/redis/bin/ #拷貝相關命令到redis的bin目錄
cp redis.conf /usr/local/redis/etc/11000.conf
mkdir -p /app/redis/11000

 

    2.三、修改redis相關配置文件
        爲了方便起見,Redis全部配置文件都是安裝實例端口命名,數據目錄也是以端口數爲目錄,例如:端口爲11000的實例,配置文件爲:11000.conf,數據目錄:/app/redis/11000服務器

vim /usr/local/redis/etc/11000.conf
    #因爲配置文件內容比較多,因此本文只顯示幾個被修改了的參數
    bind 127.0.0.1                          #監聽的IP地址,在實際生產環境中建議採用防火牆配置指定IP訪問,或者修改Redis默認端口,由於Redis很容易被「挖礦」
    port 11000                              #Redis使用端口,默認是6379
    pidfile /app/redis/11000/11000.pid      #Redis PID文件存放位置
    loglevel notice                         #Redis 日誌級別
    logfile "/app/redis/11000/11000.log"    #Redis 日誌文件位置及日誌文件名
    #save 900 1                             #禁用Redis 的rdb持久化改而使用aof持久化
    #save 300 10
    #save 60 10000 
    cluster-enabled yes                     #開啓Redis集羣,默認禁用
    cluster-config-file nodes-11000.conf    #Redis集羣配置文件名,默認是沒有的,在配置好集羣后會自動建立,該文件位於數據目錄下
    cluster-node-timeout 5000               #這個就是上面基礎部分介紹中提到的Redis集羣中判斷某個節點不可用的超時時間
    appendonly yes                          #啓用aof持久化方式,Redis默認支持兩種持久化分別爲:rdb、aof
    appendfilename "appendonly.aof"         #aof持久化文件名

  其餘實例配置請參照上述配置文件,修改對應的數據網絡

    2.四、啓動Redis實例
        改完因此配置文件後,就能夠啓動相關Redis實例。命令以下:架構

/usr/local/redis/bin/redis-server /usr/local/redis/etc/11000.conf 
/usr/local/redis/bin/redis-server /usr/local/redis/etc/12000.conf 
/usr/local/redis/bin/redis-server /usr/local/redis/etc/13000.conf 
/usr/local/redis/bin/redis-server /usr/local/redis/etc/14000.conf 
/usr/local/redis/bin/redis-server /usr/local/redis/etc/15000.conf 
/usr/local/redis/bin/redis-server /usr/local/redis/etc/16000.conf

  查看redis運行狀況

ps aux | grep redis
root      7473  0.0  0.0 133540  7572 ?        Ssl  17:11   0:00 /usr/local/redis/bin/redis-server 127.0.0.1:11000 [cluster]      
root      7477  0.0  0.0 133540  7568 ?        Ssl  17:11   0:00 /usr/local/redis/bin/redis-server 127.0.0.1:12000 [cluster]      
root      7481  0.0  0.0 133540  7568 ?        Ssl  17:11   0:00 /usr/local/redis/bin/redis-server 127.0.0.1:13000 [cluster]      
root      7485  0.0  0.0 133540  7572 ?        Ssl  17:11   0:00 /usr/local/redis/bin/redis-server 127.0.0.1:14000 [cluster]      
root      7489  0.0  0.0 133540  7572 ?        Ssl  17:12   0:00 /usr/local/redis/bin/redis-server 127.0.0.1:15000 [cluster]      
root      7493  0.0  0.0 133540  7568 ?        Ssl  17:12   0:00 /usr/local/redis/bin/redis-server 127.0.0.1:16000 [cluster]      
root      7497  0.0  0.0 103264   880 pts/0    S+   17:13   0:00 grep redis

  參考Redis日誌

cat /app/redis/11000/11000.log
7473:M 13 Nov 17:11:41.435 * No cluster configuration found, I'm c53d065ad1ea2be86dcf6cd44cbff7e7d4b480b4
#實例打印的日誌顯示,由於nodes.conf文件不存在,因此每一個節點都爲它自身指定了一個新的ID,實例會一直使用同一個ID,從而在集羣中保持一個獨一無二(unique)的名字。

 

    2.五、初始化Redis Cluster

/usr/local/redis/bin/redis-trib.rb create --replicas 1 127.0.0.1:11000 127.0.0.1:12000 127.0.0.1:13000 127.0.0.1:14000 127.0.0.1:15000 127.0.0.1:16000
    #注意:
      #1、在執行該命令初始化時,若是報錯,請參考本文中的錯誤解決方案
      #2、在Redis集羣初始化時,默認會把前一半的實例做爲Master(例如:127.0.0.1:11000127.0.0.1:12000127.0.0.1:13000)後一半的做爲Slave,若是服務器有性能差距,請必定注意該細節
      #3、create參數:是建立Redis Cluster
      #4、--replicas 1參數:是爲每一個Master配置一個Slave
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:                                               #Redis自動配置三個Master節點
127.0.0.1:11000
127.0.0.1:12000
127.0.0.1:13000
Adding replica 127.0.0.1:14000 to 127.0.0.1:11000              #Redis自動配置三個Slave節點
Adding replica 127.0.0.1:15000 to 127.0.0.1:12000
Adding replica 127.0.0.1:16000 to 127.0.0.1:13000
M: c53d065ad1ea2be86dcf6cd44cbff7e7d4b480b4 127.0.0.1:11000    #表示該實例的狀態M即Master,S即Slave
   slots:0-5460 (5461 slots) master
M: 195689fe7fc0909170d20d5e9e918dee35694563 127.0.0.1:12000
   slots:5461-10922 (5462 slots) master
M: 221ab66bb8b03a11ae5abcf85c88adb6a33e2f08 127.0.0.1:13000
   slots:10923-16383 (5461 slots) master
S: 676c42d75c033ff82d0a14259b752e096c4c349c 127.0.0.1:14000
   replicates c53d065ad1ea2be86dcf6cd44cbff7e7d4b480b4
S: 041ce2b79047d0b27242eb6f4cdffe469dd1423f 127.0.0.1:15000
   replicates 195689fe7fc0909170d20d5e9e918dee35694563
S: ba58b6e88d258dcdfe3d3e1f4ec63f862a8b9595 127.0.0.1:16000
   replicates 221ab66bb8b03a11ae5abcf85c88adb6a33e2f08
Can I set the above configuration? (type 'yes' to accept): yes   #肯定沒有問題輸入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...                               #Redis集羣配置,同時分配主從節點關係
>>> Performing Cluster Check (using node 127.0.0.1:11000)
M: c53d065ad1ea2be86dcf6cd44cbff7e7d4b480b4 127.0.0.1:11000      #本節點是主節點,它的從節點是127.0.0.1:14000,主要經過S(Slave)節點的replicates來肯定。另外該主節點分配到的hash槽是0-5460
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: ba58b6e88d258dcdfe3d3e1f4ec63f862a8b9595 127.0.0.1:16000
   slots: (0 slots) slave
   replicates 221ab66bb8b03a11ae5abcf85c88adb6a33e2f08
M: 221ab66bb8b03a11ae5abcf85c88adb6a33e2f08 127.0.0.1:13000
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: 041ce2b79047d0b27242eb6f4cdffe469dd1423f 127.0.0.1:15000
   slots: (0 slots) slave
   replicates 195689fe7fc0909170d20d5e9e918dee35694563
M: 195689fe7fc0909170d20d5e9e918dee35694563 127.0.0.1:12000
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 676c42d75c033ff82d0a14259b752e096c4c349c 127.0.0.1:14000
   slots: (0 slots) slave
   replicates c53d065ad1ea2be86dcf6cd44cbff7e7d4b480b4
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.                                     #Redis Cluster創建完成

  在查看Redis cluster中的主從節點關係時,除了上述方法,還能夠查看Redis的日誌。或者查看在配置文件參考cluster-config-file 的文件中,也能夠看到相關信息

cat /app/redis/11000/11000.log
    7473:M 13 Nov 17:43:32.437 # configEpoch set to 1 via CLUSTER SET-CONFIG-EPOCH
    7473:M 13 Nov 17:43:32.462 # IP address for this node updated to 127.0.0.1
    7473:M 13 Nov 17:43:36.669 * Slave 127.0.0.1:14000 asks for synchronization         #表示該節點的從節點是127.0.0.1:14000
    7473:M 13 Nov 17:43:36.669 * Full resync requested by slave 127.0.0.1:14000
    7473:M 13 Nov 17:43:36.669 * Starting BGSAVE for SYNC with target: disk
    7473:M 13 Nov 17:43:36.670 * Background saving started by pid 7793
    7793:C 13 Nov 17:43:36.679 * DB saved on disk
    7793:C 13 Nov 17:43:36.679 * RDB: 6 MB of memory used by copy-on-write
    7473:M 13 Nov 17:43:36.770 * Background saving terminated with success
    7473:M 13 Nov 17:43:36.770 * Synchronization with slave 127.0.0.1:14000 succeeded    #表示主節點向從節點同步數據成功
    7473:M 13 Nov 17:43:37.371 # Cluster state changed: ok                               #Redis集羣的狀態

 

    2.六、客戶工具說明
        Redis 集羣現階段的一個問題是客戶端實現不多。如下是一些我知道的實現:
          redis-rb-cluster:是編寫的Ruby實現, 用於做爲是對redis-rb的一個簡單包裝,高效地實現了與集羣進行通信所需的最少語義(semantic)
          redis-py-cluster:看上去是一個Python版本,這個項目有一段時間沒有更新了,不過能夠將這個項目用做學習集羣的起點
          Predis:曾經對早期的 Redis 集羣有過必定的支持,但不肯定它對集羣的支持是否完整, 也不清楚它是否和最新版本的 Redis 集羣兼容(由於新版的Redis集羣將槽的數量從4k改成16k了)
          Jedis:使用最多的時java客戶端,Jedis最近添加了對集羣的支持,詳細請查看項目README中Jedis Cluster部分
          StackExchange.Redis:提供對C#的支持(而且包括大部分.NET下面的語言,好比:VB,C#等等)
          thunk-redis:提供對Node.js和io.js的支持
          redis-cli:Redis unstable分支中的redis-cli程序實現了很是基本的集羣支持,可使用命令redis-cli -c來啓動

    2.七、客戶端測試

/usr/local/redis/bin/redis-cli -c -p 11000
127.0.0.1:11000> SET name ray
-> Redirected to slot [5798] located at 127.0.0.1:12000 #返回的結果,結果包含數據的執行結果、數據存放的槽、數據存放的Master節點
OK
127.0.0.1:12000> GET name
"ray"
127.0.0.1:12000> KEYS *
1) "name"

 

 

3、Redis Cluster某臺主節點故障

    3.一、模擬災難主服務器宕機
    因爲剛剛寫入的數據位於127.0.0.1:12000主節點上,因此本次災難就模擬127.0.0.1:12000主節點故障

ps aux | grep redis
root      7473  0.0  0.1 135588  9776 ?        Ssl  17:11   0:02 /usr/local/redis/bin/redis-server 127.0.0.1:11000 [cluster]      
root      7477  0.0  0.1 135588  9792 ?        Ssl  17:11   0:02 /usr/local/redis/bin/redis-server 127.0.0.1:12000 [cluster]      
root      7481  0.0  0.1 135588  9768 ?        Ssl  17:11   0:02 /usr/local/redis/bin/redis-server 127.0.0.1:13000 [cluster]      
root      7485  0.0  0.0 133540  7748 ?        Ssl  17:11   0:03 /usr/local/redis/bin/redis-server 127.0.0.1:14000 [cluster]      
root      7489  0.0  0.0 133540  7756 ?        Ssl  17:12   0:02 /usr/local/redis/bin/redis-server 127.0.0.1:15000 [cluster]      
root      7493  0.0  0.0 133540  7740 ?        Ssl  17:12   0:02 /usr/local/redis/bin/redis-server 127.0.0.1:16000 [cluster]      
root      7534  0.0  0.0 100960   656 pts/1    S+   17:33   0:00 tail -f /app/redis/11000/11000.log
root      7873  0.0  0.0 100960   660 pts/2    S+   18:35   0:00 tail -f /app/redis/12000/12000.log
root      7893  0.0  0.0 100960   656 pts/3    S+   18:35   0:00 tail -f /app/redis/15000/15000.log
root      7895  0.0  0.0 103264   880 pts/0    S+   18:35   0:00 grep redis
kill -9 7477 #結束127.0.0.1:12000的進程

 

  而後分別查看127.0.0.1:11000和127.0.0.1:15000(127.0.0.1:12000的從節點)的日誌
  查看127.0.0.1:11000節點日誌

cat /app/redis/11000/11000.log
7473:M 13 Nov 18:36:05.795 * FAIL message received from 221ab66bb8b03a11ae5abcf85c88adb6a33e2f08 about 195689fe7fc0909170d20d5e9e918dee35694563 #標識221ab66bb8b03a11ae5abcf85c88adb6a33e2f08節點檢查出195689fe7fc0909170d20d5e9e918dee35694563節點故障
7473:M 13 Nov 18:36:05.795 # Cluster state changed: fail  #Redis集羣失效
7473:M 13 Nov 18:36:06.799 # Failover auth granted to 041ce2b79047d0b27242eb6f4cdffe469dd1423f for epoch 7  #041ce2b79047d0b27242eb6f4cdffe469dd1423f升級爲主節點
7473:M 13 Nov 18:36:06.838 # Cluster state changed: ok    #Redis集羣恢復

  看127.0.0.1:15000節點日誌

cat /app/redis/15000/15000.log
7489:S 13 Nov 18:35:59.894 # Connection with master lost. #標識主節點丟失/故障斷開/不可達
7489:S 13 Nov 18:35:59.894 * Caching the disconnected master state. #判斷15000的主節點(既12000)故障斷開/不可達
7489:S 13 Nov 18:36:00.482 * Connecting to MASTER 127.0.0.1:12000 #從新嘗試屢次鏈接
7489:S 13 Nov 18:36:00.482 * MASTER <-> SLAVE sync started
7489:S 13 Nov 18:36:00.482 # Error condition on socket for SYNC: Connection refused  #主從同步失敗
7489:S 13 Nov 18:36:01.484 * Connecting to MASTER 127.0.0.1:12000
7489:S 13 Nov 18:36:01.484 * MASTER <-> SLAVE sync started
7489:S 13 Nov 18:36:01.484 # Error condition on socket for SYNC: Connection refused
7489:S 13 Nov 18:36:02.486 * Connecting to MASTER 127.0.0.1:12000
7489:S 13 Nov 18:36:02.486 * MASTER <-> SLAVE sync started
7489:S 13 Nov 18:36:02.486 # Error condition on socket for SYNC: Connection refused
7489:S 13 Nov 18:36:03.488 * Connecting to MASTER 127.0.0.1:12000
7489:S 13 Nov 18:36:03.489 * MASTER <-> SLAVE sync started
7489:S 13 Nov 18:36:03.489 # Error condition on socket for SYNC: Connection refused
7489:S 13 Nov 18:36:04.491 * Connecting to MASTER 127.0.0.1:12000
7489:S 13 Nov 18:36:04.491 * MASTER <-> SLAVE sync started
7489:S 13 Nov 18:36:04.492 # Error condition on socket for SYNC: Connection refused
7489:S 13 Nov 18:36:05.493 * Connecting to MASTER 127.0.0.1:12000
7489:S 13 Nov 18:36:05.493 * MASTER <-> SLAVE sync started
7489:S 13 Nov 18:36:05.494 # Error condition on socket for SYNC: Connection refused
7489:S 13 Nov 18:36:05.794 * FAIL message received from 221ab66bb8b03a11ae5abcf85c88adb6a33e2f08 about 195689fe7fc0909170d20d5e9e918dee35694563 #標識221ab66bb8b03a11ae5abcf85c88adb6a33e2f08節點檢查出195689fe7fc0909170d20d5e9e918dee35694563節點故障
7489:S 13 Nov 18:36:05.795 # Cluster state changed: fail
7489:S 13 Nov 18:36:05.895 # Start of election delayed for 819 milliseconds (rank #0, offset 4507). #準備從新選舉主節點
7489:S 13 Nov 18:36:06.496 * Connecting to MASTER 127.0.0.1:12000
7489:S 13 Nov 18:36:06.496 * MASTER <-> SLAVE sync started
7489:S 13 Nov 18:36:06.496 # Error condition on socket for SYNC: Connection refused
7489:S 13 Nov 18:36:06.797 # Starting a failover election for epoch 7.  #啓動故障遷移
7489:S 13 Nov 18:36:06.799 # Failover election won: I'm the new master.  #從新選舉,本節點(15000原從節點)變爲新的主節點
7489:S 13 Nov 18:36:06.799 # configEpoch set to 7 after successful failover #故障遷移
7489:M 13 Nov 18:36:06.799 * Discarding previously cached master state.  #放棄原來丟失的數據
7489:M 13 Nov 18:36:06.799 # Cluster state changed: ok  #Redis集羣恢復

 

  使用redis-cli測試集羣

/usr/local/redis/bin/redis-cli -c -p 11000
127.0.0.1:11000> keys *
(empty list or set)
127.0.0.1:11000> get name
-> Redirected to slot [5798] located at 127.0.0.1:15000
"ray"

  首先在查看Redis中全部key時,表示沒有key,這是由於我使用redis-cli鏈接的11000節點,可是使用get獲取剛剛存放的name key時,獲取成功
  若是在配置Redis集羣時沒有啓動從節點,當一個主節點宕機後,整個集羣環境將變爲不可用

    3.二、故障恢復
  在完成上述災難後,咱們再次啓動12000節點,而後redis-cli -c -p 12000 登錄該節點查看相關信

/usr/local/redis/bin/redis-cli -c -p 12000
......
# Replication
role:slave
master_host:127.0.0.1
master_port:15000
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_repl_offset:99
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
.....

  能夠看到該節點已恢復,可是變爲了15000的從節點,於以前的主從關係恰好相反,這也是爲了Redis集羣更加穩定,由於當原來的主節點恢復後若是在從新進行選舉,那麼Redis集羣會反覆一段時間不可用

 

4、錯誤

    錯誤一:

/usr/bin/env: ruby: No such file or directory

    解決方案:
    該錯誤是由於節點沒有安裝ruby,執行:

yum install -y ruby


    錯誤二:

/usr/local/redis/bin/redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)
from /usr/local/redis/bin/redis-trib.rb:24

    解決方案:

yum  install  rubygems  -y

   
    錯誤三:

/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /usr/local/redis/bin/redis-trib.rb:2

    解決方案(redis-3.2.1.gem本地下載):

gem install  redis –version 3.0.0
#或:
wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem
gem install -l ./redis-3.2.1.gem

 


5、說明

  至此,Redis整個集羣搭建完成,稍後會更新關於Redis Cluster操做方法以及相關節點添加刪除

 

  參考連接(致謝):

  http://www.redis.cn/topics/cluster-tutorial.html

相關文章
相關標籤/搜索