1、安裝前看下redis5.0版本的新特性
先看一下 Redis 5 帶來的更新內容:html
redis-cli --cluster help
命令以瞭解更多信息將 Lua 腳本更好地傳播到 replicas / AOFnode
Lua 腳本如今能夠超時並在副本中進入 -BUSY 狀態linux
Redis 5 是 Redis 引入流數據類型(Stream data type)的第一個版本。按照官方的說法,不使用該特性的用戶在生產環境中使用 Redis 5 會有更好的體驗 —— 雖然開發團隊還沒有發現關於這項特性的關鍵錯誤。git
此外,由於許多內部結構與 Redis 4 共享,所以在內部工做方式方面,變化不會很大。github
詳細更新內容請查看:redis
https://raw.githubusercontent.com/antirez/redis/5.0/00-RELEASENOTEScentos
2、安裝redis部分
一、環境
linux系統 centos 7.6版本
redis: redis5.0.5的 statble版本(redis-stable.tar.gz)
二、下載解壓安裝
#下載
wget http://download.redis.io/releases/redis-stable.tar.gzbash
#解壓
tar xzf redis-stable.tar.gz網絡
#進入解壓文件
cd redis-stableapp
#編譯源碼
make install
#測試是否安裝成功
啓動成功表示安裝成功
上面只是一個臨時的啓動文件,須要一直鏈接須要改配置文件,順便集羣的配置也一塊兒設置了。
二、配置redis cluster集羣
redis集羣能夠參考官網給出的教程https://redis.io/topics/cluster-tutorial
首先要複製多分redis.conf文件,修改如下配置,注意將端口號區分開
cat /data/redis-cluster/cluster-conf/7000/redis.conf | grep -v '#'
只貼出部分差別配置,其餘的都用系統默認的,有須要自行更改。
配置裏有不一樣目錄的自行建立, 也能夠根據你本身想要求更改不一樣路徑下的。
bind 127.0.0.1
port 7000
pidfile /var/run/redis_7000.pid
logfile "/data/redis-cluster/redis-log/redis_7000.log"
dbfilename dump_7000.rdb
dir /data/redis-cluster/rdb/
appendonly yes
appendfilename "appendonly_7000.aof"
appendfsync everysec
mkdir -p /data/redis-cluster/cluster-conf
cd /data/redis-cluster/cluster-conf
mkdir 7000 7001 7002 7003 7004 7005
#先根據上面的配置修改一份7000/redis.conf的配置,初始的文件從redis-stable/src/redis.conf複製一份來作修改。
而後/data/redis-cluster/cluster-conf/7000/redis.conf的配置複製一份並替換不一樣端口目錄下的配置文件
cp /data/redis-cluster/cluster-conf/7000/redis.conf /data/redis-cluster/cluster-conf/7001/redis.conf
cp /data/redis-cluster/cluster-conf/7000/redis.conf /data/redis-cluster/cluster-conf/7002/redis.conf
cp /data/redis-cluster/cluster-conf/7000/redis.conf /data/redis-cluster/cluster-conf/7003/redis.conf
cp /data/redis-cluster/cluster-conf/7000/redis.conf /data/redis-cluster/cluster-conf/7004/redis.conf
cp /data/redis-cluster/cluster-conf/7000/redis.conf /data/redis-cluster/cluster-conf/7005/redis.conf
而後再將對應的配置文件放入進去後 啓動每一個服務
/usr/local/bin/redis-server /data/redis-cluster/cluster-conf/7000/redis.conf
/usr/local/bin/redis-server /data/redis-cluster/cluster-conf/7001/redis.conf
/usr/local/bin/redis-server /data/redis-cluster/cluster-conf/7002/redis.conf
/usr/local/bin/redis-server /data/redis-cluster/cluster-conf/7003/redis.conf
/usr/local/bin/redis-server /data/redis-cluster/cluster-conf/7004/redis.conf
/usr/local/bin/redis-server /data/redis-cluster/cluster-conf/7005/redis.conf
#7000-7005服務啓動成功後,使用5.0特有的redis-cli功能開啓集羣
/usr/local/bin/redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
這樣集羣就起來了。
爲了方便啓動,能夠放一個腳本里啓動。以下腳本
[root@VM_0_6_centos src]# cat /data/redis-cluster/cluster-conf/start_all.sh
#!/bin/bash
/usr/local/bin/redis-server /data/redis-cluster/cluster-conf/7000/redis.conf
/usr/local/bin/redis-server /data/redis-cluster/cluster-conf/7001/redis.conf
/usr/local/bin/redis-server /data/redis-cluster/cluster-conf/7002/redis.conf
/usr/local/bin/redis-server /data/redis-cluster/cluster-conf/7003/redis.conf
/usr/local/bin/redis-server /data/redis-cluster/cluster-conf/7004/redis.conf
/usr/local/bin/redis-server /data/redis-cluster/cluster-conf/7005/redis.conf
/usr/local/bin/redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
到這裏就啓動了redis集羣
3、查看且添加新集羣
相關命令參考:https://redis.io/topics/cluster-tutorial
一、查看集羣裏的master是哪些
redis-cli -p 7000 cluster nodes | grep master
二、查看集羣哪些是slave
redis-cli -p 7000 cluster nodes | grep slave
三、查看哪些對應connected
redis-cli -p 7000 cluster nodes | grep myself
redis-cli -p 7001 cluster nodes | grep myself
redis-cli -p 7002 cluster nodes | grep myself
四、添加新的master和slave
先建立兩個服務7006 7007的, 具體文件配置參考上面的7000-7005的
配置好對應的文件後用命令啓動
/usr/local/bin/redis-server /data/redis-cluster/cluster-conf/7006/redis.conf
/usr/local/bin/redis-server /data/redis-cluster/cluster-conf/7007/redis.conf
由於上面啓動沒有加入到集羣裏,須要經過集羣命令進行加入
加入集羣命令
redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000
另一個新添加的slave也要加入對應的master上
#自動匹配空閒的 加入到對應的master上
redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000 --cluster-slave
或者根據指定的master ID 匹配上
#set master
#redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000 --cluster-slave --cluster-master-id e508a26956ca359d1917cfd1f3dbb9a9fdd8c28f
---e508a26956ca359d1917cfd1f3dbb9a9fdd8c28f 經過redis-cli -p 7000 cluster nodes | grep master 可查看到對應7006的master id.
4、重啓集羣和重建集羣
重啓:
(保留原有集羣的)重啓:
不須要再執行(如/usr/local/bin/redis-cli -a 'Good' --cluster create 172.17.0.6:7000 172.17.0.6:7001 172.17.0.6:7002 172.17.0.6:7003 172.17.0.6:7004 172.17.0.6:7005 172.17.0.6:7006 172.17.0.6:7007 --cluster-replicas 1這樣的)集羣生成指令。
第一步:先關閉各個Redis節點。
第二步:再啓動各個Redis節點便可。
(刪除原有集羣的)重啓:
須要執行(如/usr/local/bin/redis-cli -a 'Good' --cluster create 172.17.0.6:7000 172.17.0.6:7001 172.17.0.6:7002 172.17.0.6:7003 172.17.0.6:7004 172.17.0.6:7005 172.17.0.6:7006 172.17.0.6:7007 --cluster-replicas 1這樣的)集羣生成指令。
第一步:先關閉各個Redis節點。
第二步:刪除各個Redis安裝目錄下的節點配置文件nodes.conf、數據文件dump.rdb。
說明:此方式至關於重置到剛剛建立集羣的時候了,因此須要刪除節點配置文件nodes.conf、還需
要刪除數據存儲文件dump.rdb。
5、Cluster相關的命令,如今對全部的命令因此下說明。
CLUSTER info:打印集羣的信息。
CLUSTER nodes:列出集羣當前已知的全部節點(node)的相關信息。
CLUSTER meet <ip> <port>:將ip和port所指定的節點添加到集羣當中。
CLUSTER addslots <slot> [slot ...]:將一個或多個槽(slot)指派(assign)給當前節點。
CLUSTER delslots <slot> [slot ...]:移除一個或多個槽對當前節點的指派。
CLUSTER slots:列出槽位、節點信息。
CLUSTER slaves <node_id>:列出指定節點下面的從節點信息。
CLUSTER replicate <node_id>:將當前節點設置爲指定節點的從節點。
CLUSTER saveconfig:手動執行命令保存保存集羣的配置文件,集羣默認在配置修改的時候會自動保存配置文件。
CLUSTER keyslot <key>:列出key被放置在哪一個槽上。
CLUSTER flushslots:移除指派給當前節點的全部槽,讓當前節點變成一個沒有指派任何槽的節點。
CLUSTER countkeysinslot <slot>:返回槽目前包含的鍵值對數量。
CLUSTER getkeysinslot <slot> <count>:返回count個槽中的鍵。
CLUSTER setslot <slot> node <node_id> 將槽指派給指定的節點,若是槽已經指派給另外一個節點,那麼先讓另外一個節點刪除該槽,而後再進行指派。
CLUSTER setslot <slot> migrating <node_id> 將本節點的槽遷移到指定的節點中。
CLUSTER setslot <slot> importing <node_id> 從 node_id 指定的節點中導入槽 slot 到本節點。
CLUSTER setslot <slot> stable 取消對槽 slot 的導入(import)或者遷移(migrate)。
CLUSTER failover:手動進行故障轉移。
CLUSTER forget <node_id>:從集羣中移除指定的節點,這樣就沒法完成握手,過時時爲60s,60s後兩節點又會繼續完成握手。
CLUSTER reset [HARD|SOFT]:重置集羣信息,soft是清空其餘節點的信息,但不修改本身的id,hard還會修改本身的id,不傳該參數則使用soft方式。
CLUSTER count-failure-reports <node_id>:列出某個節點的故障報告的長度。
CLUSTER SET-CONFIG-EPOCH:設置節點epoch,只有在節點加入集羣前才能設置。
其餘參考文章連接:
Redis-5.0.0集羣配置
http://www.javashuo.com/article/p-bpzxftcd-w.html
redis學習之集羣報錯Node is not empty
https://blog.csdn.net/wudalang_gd/article/details/52153571
redis初試Not all 16384 slots are covered by nodes
https://www.cnblogs.com/dupang/p/5631007.html
Redis Cluster部署、管理和測試
http://www.javashuo.com/article/p-pcczwcbl-bv.html
參考:https://blog.csdn.net/justry_deng/article/details/89205155