(官網指令集) 此篇將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 (查看各節點狀態)