從redis官網下載(http://download.redis.io/releases/redis-5.0.5.tar.gz)最新版本的redis的源碼包redis-5.0.5.tar.gz。
安裝redis
創建目錄/home/test/redis,上傳redis包并解壓縮
[root@test local]#mkdir -p /home/test/redis
將redis-5.0.5.tar.gz上傳到服務器的/home/test/redis目錄下
[root@test local]#cd /home/test/redis
[root@test local]#tar -xzf redis-5.0.5.tar.gz
編譯安裝
執行命令make && make install
[root@test redis]# cd redis-5.0.5
[root@test redis]# make && make install
創建集群目錄
在/home/test/redis目錄下創建集群目錄
[root@test redis]# mkdir redis-cluster
[root@test redis]# cd redis-cluster/
在集群目錄下創建節點目錄
小編的示例中是在單臺服務器安裝9個節點,所以下面創建9個目錄
[root@test redis-cluster]# mkdir 7000 7001 7002 7003 7004 7005 7006 7007 7008
[root@test redis-cluster]# ls
7000 7001 7002 7003 7004 7005 7006 7007 7008
集群中的節點配置文件修改
把如下redis.conf 配置內容粘貼進去
[root@test local]#vi 7000/redis.conf
[root@test local]#vi 7001/redis.conf
[root@test local]#vi 7002/redis.conf
[root@test local]#vi 7003/redis.conf
[root@test local]#vi 7004/redis.conf
[root@test local]#vi 7005/redis.conf
[root@test local]#vi 7006/redis.conf
[root@test local]#vi 7007/redis.conf
[root@test local]#vi 7008/redis.conf
redis.conf 配置
#端口7000,7001,7002
port 7000
#默認ip為127.0.0.1,需要改為其他節點機器可訪問的ip,否則創建集群時無法訪問對應的端口,無法創建集群
bind 172.30.14.240
#redis后臺運行
daemonize yes
#pidfile文件對應7000,7001,7002…
pidfile /var/run/redis_7000.pid
#開啟集群,把注釋#去掉
cluster-enabled yes
#集群的配置,配置文件首次啟動自動生成 7000,7001,7002
cluster-config-file nodes_7000.conf
#請求超時,默認15秒,可自行設置
cluster-node-timeout 10100
Eof日志開啟,有需要就開啟,它會每次寫操作都記錄一條日志
appendonly yes
集群中的節點啟動
/home/test/redis/redis-5.0.5/src/redis-server /home/test/redis/redis-cluster/7000/redis.conf
/home/test/redis/redis-5.0.5/src/redis-server /home/test/redis/redis-cluster/7001/redis.conf
/home/test/redis/redis-5.0.5/src/redis-server /home/test/redis/redis-cluster/7002/redis.conf
/home/test/redis/redis-5.0.5/src/redis-server /home/test/redis/redis-cluster/7003/redis.conf
/home/test/redis/redis-5.0.5/src/redis-server /home/test/redis/redis-cluster/7004/redis.conf
/home/test/redis/redis-5.0.5/src/redis-server /home/test/redis/redis-cluster/7005/redis.conf
/home/test/redis/redis-5.0.5/src/redis-server /home/test/redis/redis-cluster/7006/redis.conf
/home/test/redis/redis-5.0.5/src/redis-server /home/test/redis/redis-cluster/7007/redis.conf
/home/test/redis/redis-5.0.5/src/redis-server /home/test/redis/redis-cluster/7008/redis.conf
出現以下信息,表示啟動成功:
41846:C 24 Oct 10:51:47.070 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
41846:C 24 Oct 10:51:47.070 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=41846, just started
41846:C 24 Oct 10:51:47.070 # Configuration loaded
檢查服務
[root@test redis-cluster]# ps -ef | grep redis
root 41396 1 0 10:51 ? 00:00:00 /home/test/redis/redis-5.0.5/src/redis-server 172.30.14.240:7000 [cluster]
root 41601 1 0 10:51 ? 00:00:00 /home/test/redis/redis-5.0.5/src/redis-server 172.30.14.240:7001 [cluster]
root 41645 1 0 10:51 ? 00:00:00 /home/test/redis/redis-5.0.5/src/redis-server 172.30.14.240:7002 [cluster]
root 41779 1 0 10:51 ? 00:00:00 /home/test/redis/redis-5.0.5/src/redis-server 172.30.14.240:7003 [cluster]
root 41818 1 0 10:51 ? 00:00:00 /home/test/redis/redis-5.0.5/src/redis-server 172.30.14.240:7004 [cluster]
root 41826 1 0 10:51 ? 00:00:00 /home/test/redis/redis-5.0.5/src/redis-server 172.30.14.240:7005 [cluster]
root 41834 1 0 10:51 ? 00:00:00 /home/test/redis/redis-5.0.5/src/redis-server 172.30.14.240:7006 [cluster]
root 41839 1 0 10:51 ? 00:00:00 /home/test/redis/redis-5.0.5/src/redis-server 172.30.14.240:7007 [cluster]
root 41847 1 0 10:51 ? 00:00:00 /home/test/redis/redis-5.0.5/src/redis-server 172.30.14.240:7008 [cluster]
監聽redis端口
$ netstat -tnlp | grep redis //監聽redis端口
[root@test redis-cluster]# netstat -tnlp | grep redis
tcp 0 0 172.30.14.240:17000 0.0.0.0:* LISTEN 41396/redis-server
tcp 0 0 172.30.14.240:17001 0.0.0.0:* LISTEN 41601/redis-server
tcp 0 0 172.30.14.240:17002 0.0.0.0:* LISTEN 41645/redis-server
tcp 0 0 172.30.14.240:17003 0.0.0.0:* LISTEN 41779/redis-server
tcp 0 0 172.30.14.240:17004 0.0.0.0:* LISTEN 41818/redis-server
tcp 0 0 172.30.14.240:17005 0.0.0.0:* LISTEN 41826/redis-server
tcp 0 0 172.30.14.240:17006 0.0.0.0:* LISTEN 41834/redis-server
tcp 0 0 172.30.14.240:17007 0.0.0.0:* LISTEN 41839/redis-server
tcp 0 0 172.30.14.240:17008 0.0.0.0:* LISTEN 41847/redis-server
tcp 0 0 172.30.14.240:7000 0.0.0.0:* LISTEN 41396/redis-server
tcp 0 0 172.30.14.240:7001 0.0.0.0:* LISTEN 41601/redis-server
tcp 0 0 172.30.14.240:7002 0.0.0.0:* LISTEN 41645/redis-server
tcp 0 0 172.30.14.240:7003 0.0.0.0:* LISTEN 41779/redis-server
tcp 0 0 172.30.14.240:7004 0.0.0.0:* LISTEN 41818/redis-server
tcp 0 0 172.30.14.240:7005 0.0.0.0:* LISTEN 41826/redis-server
tcp 0 0 172.30.14.240:7006 0.0.0.0:* LISTEN 41834/redis-server
tcp 0 0 172.30.14.240:7007 0.0.0.0:* LISTEN 41839/redis-server
tcp 0 0 172.30.14.240:7008 0.0.0.0:* LISTEN 41847/redis-server
創建集群
注意:在任意一臺上運行 不要在每臺機器上都運行,一臺就夠了
/home/test/redis/redis-5.0.5/src/redis-cli --cluster create 172.30.14.240:7000 172.30.14.240:7001 172.30.14.240:7002 172.30.14.240:7003 172.30.14.240:7004 172.30.14.240:7005 172.30.14.240:7006 172.30.14.240:7007 172.30.14.240:7008 --cluster-replicas 1
需要將其中的IP和端口改為實際安裝的的IP地址和端口
注意:此步驟中需要手動敲入yes
[root@test redis-cluster]# /home/test/redis/redis-5.0.5/src/redis-cli --cluster create --replicas 1 172.30.14.240:7000 172.30.14.240:7001 172.30.14.240:7002 172.30.14.240:7003 172.30.14.240:7004 172.30.14.240:7005 172.30.14.240:7006 172.30.14.240:7007 172.30.14.240:7008
Creating cluster
Performing hash slots allocation on 9 nodes…
Using 4 masters:
172.30.14.240:7000
172.30.14.240:7001
172.30.14.240:7002
172.30.14.240:7003
Adding replica 172.30.14.240:7004 to 172.30.14.240:7000
Adding replica 172.30.14.240:7005 to 172.30.14.240:7001
Adding replica 172.30.14.240:7006 to 172.30.14.240:7002
Adding replica 172.30.14.240:7007 to 172.30.14.240:7003
Adding replica 172.30.14.240:7008 to 172.30.14.240:7000
M: 5992c09409c106b566f7876935d39df2ced31d63 172.30.14.240:7000
slots:0-4095 (4096 slots) master
M: 8e842f0cf0cd2569effa8170834618a6fceb144c 172.30.14.240:7001
slots:4096-8191 (4096 slots) master
M: d5d363c4c7d0855e245a0121c098918d9a2d9f54 172.30.14.240:7002
slots:8192-12287 (4096 slots) master
M: c6422e581cface110c30d302db796e88dca49d8d 172.30.14.240:7003
slots:12288-16383 (4096 slots) master
S: 008aab9504f9afac5be41aea92d995d4d1f94c0c 172.30.14.240:7004
replicates 5992c09409c106b566f7876935d39df2ced31d63
S: 7304749ee131927a21d48fb7d4cb360dacf3b7ac 172.30.14.240:7005
replicates 8e842f0cf0cd2569effa8170834618a6fceb144c
S: bf809bd10b59b16daa4169f950891c0839bfa649 172.30.14.240:7006
replicates d5d363c4c7d0855e245a0121c098918d9a2d9f54
S: 0e93a0a1c627cc84572798b78142f9e73407ec72 172.30.14.240:7007
replicates c6422e581cface110c30d302db796e88dca49d8d
S: de666ccd190e9a7b826b558d89ee2cddf75f43e7 172.30.14.240:7008
replicates 5992c09409c106b566f7876935d39df2ced31d63
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 172.30.14.240:7000)
M: 5992c09409c106b566f7876935d39df2ced31d63 172.30.14.240:7000
slots:0-4095 (4096 slots) master
2 additional replica(s)
M: c6422e581cface110c30d302db796e88dca49d8d 172.30.14.240:7003
slots:12288-16383 (4096 slots) master
1 additional replica(s)
S: de666ccd190e9a7b826b558d89ee2cddf75f43e7 172.30.14.240:7008
slots: (0 slots) slave
replicates 5992c09409c106b566f7876935d39df2ced31d63
S: 7304749ee131927a21d48fb7d4cb360dacf3b7ac 172.30.14.240:7005
slots: (0 slots) slave
replicates 8e842f0cf0cd2569effa8170834618a6fceb144c
S: bf809bd10b59b16daa4169f950891c0839bfa649 172.30.14.240:7006
slots: (0 slots) slave
replicates d5d363c4c7d0855e245a0121c098918d9a2d9f54
M: d5d363c4c7d0855e245a0121c098918d9a2d9f54 172.30.14.240:7002
slots:8192-12287 (4096 slots) master
1 additional replica(s)
M: 8e842f0cf0cd2569effa8170834618a6fceb144c 172.30.14.240:7001
slots:4096-8191 (4096 slots) master
1 additional replica(s)
S: 0e93a0a1c627cc84572798b78142f9e73407ec72 172.30.14.240:7007
slots: (0 slots) slave
replicates c6422e581cface110c30d302db796e88dca49d8d
S: 008aab9504f9afac5be41aea92d995d4d1f94c0c 172.30.14.240:7004
slots: (0 slots) slave
replicates 5992c09409c106b566f7876935d39df2ced31d63
[OK] All nodes agree about slots configuration.
Check for open slots…
Check slots coverage…
[OK] All 16384 slots covered.
關閉集群
批量關閉
pkill redis
逐個關閉
/home/test/redis/redis-5.0.5/src/redis-cli -c -h 172.30.14.240 -p 7000 shutdown
/home/test/redis/redis-5.0.5/src/redis-cli -c -h 172.30.14.240 -p 7000 shutdown
/home/test/redis/redis-5.0.5/src/redis-cli -c -h 172.30.14.240 -p 7000 shutdown
/home/test/redis/redis-5.0.5/src/redis-cli -c -h 172.30.14.240 -p 7000 shutdown
/home/test/redis/redis-5.0.5/src/redis-cli -c -h 172.30.14.240 -p 7000 shutdown
/home/test/redis/redis-5.0.5/src/redis-cli -c -h 172.30.14.240 -p 7000 shutdown
集群驗證
連接集群測試
參數 -C 可連接到集群,因為 redis.conf 將 bind 改為了ip地址,所以 -h 參數不可以省略,-p 參數為端口號
我們在172.30.14.240機器redis 7000 的節點set 一個key
[root@test redis-cluster]# /home/test/redis/redis-5.0.5/src/redis-cli -h 172.30.14.240 -c -p 7000
172.30.14.240:7000> set name test
-> Redirected to slot [5798] located at 172.30.14.240:7001
OK
172.30.14.240:7001> get name
“test”
172.30.14.240:7001>
發現redis set name 之后重定向到172.30.14.240機器 redis 7001 這個節點
檢查集群狀態
$ /home/test/redis/redis-5.0.5/src/ redis-cli --cluster check 172.30.14.240:7000
[root@test redis-cluster]# /home/test/redis/redis-5.0.5/src/redis-cli --cluster check 172.30.14.240:7000
Performing Cluster Check (using node 172.30.14.240:7000)
M: 5992c09409c106b566f7876935d39df2ced31d63 172.30.14.240:7000
slots:0-4095 (4096 slots) master
2 additional replica(s)
M: c6422e581cface110c30d302db796e88dca49d8d 172.30.14.240:7003
slots:12288-16383 (4096 slots) master
1 additional replica(s)
S: de666ccd190e9a7b826b558d89ee2cddf75f43e7 172.30.14.240:7008
slots: (0 slots) slave
replicates 5992c09409c106b566f7876935d39df2ced31d63
S: 7304749ee131927a21d48fb7d4cb360dacf3b7ac 172.30.14.240:7005
slots: (0 slots) slave
replicates 8e842f0cf0cd2569effa8170834618a6fceb144c
S: bf809bd10b59b16daa4169f950891c0839bfa649 172.30.14.240:7006
slots: (0 slots) slave
replicates d5d363c4c7d0855e245a0121c098918d9a2d9f54
M: d5d363c4c7d0855e245a0121c098918d9a2d9f54 172.30.14.240:7002
slots:8192-12287 (4096 slots) master
1 additional replica(s)
M: 8e842f0cf0cd2569effa8170834618a6fceb144c 172.30.14.240:7001
slots:4096-8191 (4096 slots) master
1 additional replica(s)
S: 0e93a0a1c627cc84572798b78142f9e73407ec72 172.30.14.240:7007
slots: (0 slots) slave
replicates c6422e581cface110c30d302db796e88dca49d8d
S: 008aab9504f9afac5be41aea92d995d4d1f94c0c 172.30.14.240:7004
slots: (0 slots) slave
replicates 5992c09409c106b566f7876935d39df2ced31d63
[OK] All nodes agree about slots configuration.
Check for open slots…
Check slots coverage…
[OK] All 16384 slots covered.
列出集群節點
列出集群當前已知的所有節點(node),以及這些節點的相關信息
[root@test redis-cluster]# /home/test/redis/redis-5.0.5/src/redis-cli -h 172.30.14.240 -c -p 7000
172.30.14.240:7000> cluster nodes
c6422e581cface110c30d302db796e88dca49d8d 172.30.14.240:7003@17003 master - 0 1508814078128 4 connected 12288-16383
de666ccd190e9a7b826b558d89ee2cddf75f43e7 172.30.14.240:7008@17008 slave 5992c09409c106b566f7876935d39df2ced31d63 0 1508814078000 9 connected
7304749ee131927a21d48fb7d4cb360dacf3b7ac 172.30.14.240:7005@17005 slave 8e842f0cf0cd2569effa8170834618a6fceb144c 0 1508814077125 6 connected
bf809bd10b59b16daa4169f950891c0839bfa649 172.30.14.240:7006@17006 slave d5d363c4c7d0855e245a0121c098918d9a2d9f54 0 1508814077000 7 connected
d5d363c4c7d0855e245a0121c098918d9a2d9f54 172.30.14.240:7002@17002 master - 0 1508814079130 3 connected 8192-12287
8e842f0cf0cd2569effa8170834618a6fceb144c 172.30.14.240:7001@17001 master - 0 1508814078128 2 connected 4096-8191
0e93a0a1c627cc84572798b78142f9e73407ec72 172.30.14.240:7007@17007 slave c6422e581cface110c30d302db796e88dca49d8d 0 1508814080131 8 connected
008aab9504f9afac5be41aea92d995d4d1f94c0c 172.30.14.240:7004@17004 slave 5992c09409c106b566f7876935d39df2ced31d63 0 1508814076000 5 connected
5992c09409c106b566f7876935d39df2ced31d63 172.30.14.240:7000@17000 myself,master - 0 1508814077000 1 connected 0-4095
打印集群信息
172.30.14.240: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:9
cluster_size:4
cluster_current_epoch:9
cluster_my_epoch:1
cluster_stats_messages_ping_sent:523
cluster_stats_messages_pong_sent:546
cluster_stats_messages_sent:1069
cluster_stats_messages_ping_received:538
cluster_stats_messages_pong_received:523
cluster_stats_messages_meet_received:8
cluster_stats_messages_received:1069
集群命令
語法格式
redis-cli -c -p port
集群
cluster info :打印集群的信息
cluster nodes :列出集群當前已知的所有節點( node),以及這些節點的相關信息。
節點
cluster meet :將 ip 和 port 所指定的節點添加到集群當中,讓它成為集群的一份子。
cluster forget
:從集群中移除 node_id 指定的節點,node_id通過cluster nodes查詢
cluster replicate :將當前節點設置為 node_id 指定的節點的從節點。
cluster saveconfig :將節點的配置文件保存到硬盤里面。
槽(slot)
cluster addslots [slot …] :將一個或多個槽( slot)指派( assign)給當前節點。
cluster delslots [slot …] :移除一個或多個槽對當前節點的指派。
cluster flushslots :移除指派給當前節點的所有槽,讓當前節點變成一個沒有指派任何槽的節點。
cluster setslot node :將槽 slot 指派給 node_id 指定的節點,如果槽已經指派給另一個節點,那么先讓另一個節點刪除該槽>,然后再進行指派。
cluster setslot migrating :將本節點的槽 slot 遷移到 node_id 指定的節點中。
cluster setslot importing :從 node_id 指定的節點中導入槽 slot 到本節點。
cluster setslot stable :取消對槽 slot 的導入( import)或者遷移( migrate)。
鍵
cluster keyslot :計算鍵 key 應該被放置在哪個槽上。
cluster countkeysinslot :返回槽 slot 目前包含的鍵值對數量。
cluster getkeysinslot :返回 count 個 slot 槽中的鍵