(官網指令集) 此篇將Redis由三台主機做一主二從的叢集,設備部分我使用GCP的VM,先建立一台並安裝好redis之後再複製出兩台即可,主機列表如下

----------------------------------------
 Master 1:IP:10.140.0.3 Port:6001
 Slave 1:IP:10.140.0.3 Port:6002
 Slave 2:IP:10.140.0.3 Port:6003
 Master 2:IP:10.140.0.4 Port:7001
 Slave 1:IP:10.140.0.4 Port:7002
 Slave 2:IP:10.140.0.4 Port:7003
 Master 3:IP:10.140.0.5 Port:8001
 Slave 1:IP:10.140.0.5 Port:8002
 Slave 2:IP:10.140.0.5 Port:8003
 ----------------------------------------
# yum -y install gcc wget psmisc
 (psmic:可用killall -i -15 redis-server 一次刪除redis所有程序,-i:互動式詢問,-15:正常結束程序,-9:強制結束程序)

# cd /usr/local/;mkdir redis;cd redis;wget https://download.redis.io/releases/redis-5.0.4.tar.gz

# tar zxvf redis-5.0.4.tar.gz;cd redis-5.0.4

# make MALLOC=libc && make install (好像因為gcc版本關係,所以make & make install都會有錯誤產生)
--------------------------------------------------------------
 Hint: It's a good idea to run 'make test' 😉
 make[1]: Leaving directory `/home/xshh_/redis-5.0.2/src'
  (看到此訊息代表完成,然後按Enter)
--------------------------------------------------------------

# vim redis.conf 
(Line 136: deamonize yes) 改成背景啟動

# src/redis-server redis.conf

# ps -ef | grep redis (查看是否已啟動)
--------------------------------------------------------------
 root     26092     1  0 03:01 ?        00:00:00 src/redis-server 127.0.0.1:6379
 root     26265  7618  0 03:01 pts/1    00:00:00 grep --color=auto redis
 要關閉程序使用指令:kill -15 26092 (如果關不掉就用-9)
--------------------------------------------------------------

# cp src/redis-cli /usr/local/bin/

# /usr/local/bin/redis-cli (測試ping pong,成功表示安裝並執行成功)

# cd /usr/local/

# mkdir redis-cluster;cd redis-cluster

# mkdir node600{1,2,3} (三台主機都需設定各自的節點資料夾)

# cp ../redis/redis-5.0.4/redis.conf node6001 (複製設定檔到節點資料夾)

# cd node6001

# vim redis.conf
--------------------------------------------------------------
 Line:69 bind 0.0.0.0 (IP設定0.0.0.0,讓別台機器也可以連線進來) 或註解#bind 127.0.0.1
 Line:88 protected-mode no
 Line:92 port 6001 
 Line 136: deamonize yes (改成背景啟動)
 Line:263 dir /usr/local/redis/redis-cluster/node6001 (資料存放的位置,要分開來避免資料遺失)
 Line:293 masterauth e23s5 (設定叢集節點的密碼)
 Line:507 requirepass e23s5 (設定密碼)
 Line:699 appendonly yes (持久化的設定)
 Line:838 cluster-enabled yes
 Line:846 cluster-config-file nodes-{port號碼}.conf (這部分是由redis管理的文件,將port改成自身使用的即可,在叢集節點每次更新時會自動保留叢集的設定)
 Line:852 cluster-node-timeout 5000
--------------------------------------------------------------

# cp redis.conf ../node6002; cp redis.conf ../node6003

# sed -i 's/6001/6002/g' redis.conf
--------------------------------------------------------------
或是
 進入vim後按冒號(:)進入指令模式
 輸入:%s/6001/6002/g   (%s/找字串/改自定義字串/g:全域修改)
 其它設定檔也是以此類推操作

其它的資料夾也要修改redis.conf的port
--------------------------------------------------------------
# cd /usr/local/redis-5.0.4

# src/redis-server ../redis-cluster/node6001/redis.conf
# src/redis-server ../redis-cluster/node6002/redis.conf
# src/redis-server ../redis-cluster/node6003/redis.conf
 (將三台主機的redis服務啟動)

# src/redis-cli --cluster help (查看指令用法)

# src/redis-cli -a e23s5 --cluster create --cluster-replicas 2 10.140.0.3:6001 10.140.0.4:7001 10.140.0.5:8001 10.140.0.3:6002 10.140.0.3:6003 10.140.0.4:7002 10.140.0.4:7003 10.140.0.5:8002 10.140.0.5:8003
 (--cluster-replicas 2:代表一個Master有兩個Slave)
--------------------------------------------------------------
開始建立會有以下訊息
 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
               Performing hash slots allocation on 9 nodes…
       Master[0] -> Slots 0 - 5460
       Master[1] -> Slots 5461 - 10922
       Master[2] -> Slots 10923 - 16383
       Adding replica 10.140.0.4:7002 to 10.140.0.3:6001
       Adding replica 10.140.0.5:8002 to 10.140.0.3:6001
       Adding replica 10.140.0.3:6003 to 10.140.0.4:7001
       Adding replica 10.140.0.5:8003 to 10.140.0.4:7001
       Adding replica 10.140.0.4:7003 to 10.140.0.5:8001
       Adding replica 10.140.0.3:6002 to 10.140.0.5:8001
       M: 58df7dab31efa10ff24b914039032a3d9c0dd0b4 10.140.0.3:6001
          slots:[0-5460] (5461 slots) master
       M: 70461d8636d4bdd6895272c9987ffa1f49618fe8 10.140.0.4:7001
          slots:[5461-10922] (5462 slots) master
       M: 890bce8c4fa41e3adf6d6860196546108ac47bcd 10.140.0.5:8001
          slots:[10923-16383] (5461 slots) master
       S: 375054c2325e1c7f943a3464dc7967f2bd4bbf4a 10.140.0.3:6002
          replicates 890bce8c4fa41e3adf6d6860196546108ac47bcd
       S: f91caec733b2adebbfdbd068e289d20299da03c2 10.140.0.3:6003
          replicates 70461d8636d4bdd6895272c9987ffa1f49618fe8
       S: 6dd79643707e849993d74891635fe21265241611 10.140.0.4:7002
          replicates 58df7dab31efa10ff24b914039032a3d9c0dd0b4
       S: 9185f75e423d0910e71960318eb8afb1f1b37cfc 10.140.0.4:7003
          replicates 890bce8c4fa41e3adf6d6860196546108ac47bcd
       S: e36838ada9c8b508225b8a093066b72069269bd6 10.140.0.5:8002
          replicates 58df7dab31efa10ff24b914039032a3d9c0dd0b4
       S: 28f17c866fce7c912d3f319972e1f45f4627205a 10.140.0.5:8003
          replicates 70461d8636d4bdd6895272c9987ffa1f49618fe8
       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
       ….
       Performing Cluster Check (using node 10.140.0.3:6001)
       M: 58df7dab31efa10ff24b914039032a3d9c0dd0b4 10.140.0.3:6001
          slots:[0-5460] (5461 slots) master
          2 additional replica(s)
       S: 6dd79643707e849993d74891635fe21265241611 10.140.0.4:7002
          slots: (0 slots) slave
          replicates 58df7dab31efa10ff24b914039032a3d9c0dd0b4
       S: 28f17c866fce7c912d3f319972e1f45f4627205a 10.140.0.5:8003
          slots: (0 slots) slave
          replicates 70461d8636d4bdd6895272c9987ffa1f49618fe8
       S: f91caec733b2adebbfdbd068e289d20299da03c2 10.140.0.3:6003
          slots: (0 slots) slave
          replicates 70461d8636d4bdd6895272c9987ffa1f49618fe8
       S: 375054c2325e1c7f943a3464dc7967f2bd4bbf4a 10.140.0.3:6002
          slots: (0 slots) slave
          replicates 890bce8c4fa41e3adf6d6860196546108ac47bcd
       M: 890bce8c4fa41e3adf6d6860196546108ac47bcd 10.140.0.5:8001
          slots:[10923-16383] (5461 slots) master
          2 additional replica(s)
       S: 9185f75e423d0910e71960318eb8afb1f1b37cfc 10.140.0.4:7003
          slots: (0 slots) slave
          replicates 890bce8c4fa41e3adf6d6860196546108ac47bcd
       M: 70461d8636d4bdd6895272c9987ffa1f49618fe8 10.140.0.4:7001
          slots:[5461-10922] (5462 slots) master
          2 additional replica(s)
       S: e36838ada9c8b508225b8a093066b72069269bd6 10.140.0.5:8002
          slots: (0 slots) slave
          replicates 58df7dab31efa10ff24b914039032a3d9c0dd0b4
       [OK] All nodes agree about slots configuration.
       Check for open slots…
       Check slots coverage…
       [OK] All 16384 slots covered.       
--------------------------------------------------------------
 /如果用同一台主機的指令/
# src/redis-cli -a e23s5 --cluster create 10.140.0.3:8001 10.140.0.3:8002 10.140.0.3:8003 10.140.0.3:8004 10.140.0.3:8005 10.140.0.3:8006 --cluster-replicas 1
 (--cluster-replicas 1:代表一個Masger有一個Slave)
 (這裡會有警告,因為全部都集中在同一台主機,只要故障就全毀,但如果只是嘗試做,就先輸入yes)
 建立完成後會有以下訊息
 [OK] All 16384 slots covered.
# ./src/redis-cli -a e23s5 -p 8001 (因為連的是本機,所以不用加上參數-h,如果是連線遠端的話就要寫redis-cli -h [ip] -p 8001)
 /如果用同一台主機的指令/

# /usr/local/bin/redis-cli -c -a e23s5 -h 10.140.0.5 -p 8001 (參數-c:防止moved和ask異常,moved:在set的時候如果算出的slot是屬於別台的,就會出現error)
  
/如果參數沒加上 -c/
# set k v
 (error) MOVED 15495 10.140.0.3:8003 
(這的意思是必須連線到8003這裡設值,但因這樣很不方便,所以要用另外模式去連線)
/如果參數沒加上 -c/

# set k v
 -> Redirected to slot [7629] located at 10.140.0.3:8002
 OK
 10.140.0.3:8002>
 (可以看到直接切換到8002且已經設值完成,就算重新連線8001取值也可以自動切換)
 127.0.0.1:8001> get k
 -> Redirected to slot [7629] located at 10.140.0.3:8002
 "v"

/以下是進入redis下的指令/
10.140.0.5:8005> cluster slots (查看叢集的slots範圍)
10.140.0.5:8005> cluster info (查看叢集的資訊)
10.140.0.5:8005> cluster nodes (查看各節點狀態)