官網(wǎng):https://redis.io/documentation
中文官網(wǎng):http://www.redis.cn/documentation.html
redis redis-trib.rb工具的使用
1押框、create:創(chuàng)建集群
2垒拢、check:檢查集群
3厌蔽、info:查看集群信息
4蹲蒲、fix:修復(fù)集群
5、reshard:在線遷移slot
6、rebalance:平衡集群節(jié)點(diǎn)slot數(shù)量
7、add-node:將新節(jié)點(diǎn)加入集群
8卷拘、del-node:從集群中刪除節(jié)點(diǎn)
9、set-timeout:設(shè)置集群節(jié)點(diǎn)間心跳連接的超時(shí)時(shí)間
10祝高、call:在集群全部節(jié)點(diǎn)上執(zhí)行命令
11栗弟、import:將外部redis數(shù)據(jù)導(dǎo)入集群
創(chuàng)建集群
用戶無需指定哪臺(tái)節(jié)點(diǎn)為master,哪臺(tái)節(jié)點(diǎn)為slave工闺,因?yàn)閞edis內(nèi)部算法幫我們實(shí)現(xiàn)了
- create
- --replicas # 可選參數(shù)悠鞍,replicas表示每個(gè)master需要有幾個(gè)slave咒程。
# 只有master節(jié)點(diǎn)的創(chuàng)建方式
./redis-trib.rb create 192.168.66.2:7000 192.168.66.2:7001 192.168.66.2:7002 192.168.66.3:7003 192.168.66.3:7004 192.168.66.3:7005
使用 --replicas 1 創(chuàng)建 每個(gè)master帶一個(gè) slave 指令
./redis-trib.rb create --replicas 1 192.168.66.2:7000 192.168.66.2:7001 192.168.66.2:7002 192.168.66.3:7003 192.168.66.3:7004 192.168.66.3:7005
檢查集群情況
- check
./redis-trib.rb check 192.168.66.2:7000 #后面的IP與端口,隨便指定集群中的一個(gè)就行了。
查看集群信息
- info
./redis-trib.rb info 192.168.66.2:7000
輸出:
[OK] 1 keys in 4 masters.
0.00 keys per slot on average.
在線遷移slot
- reshard
- host:port:這個(gè)是必傳參數(shù)吃警,用來從一個(gè)節(jié)點(diǎn)獲取整個(gè)集群信息檐迟,相當(dāng)于獲取集群信息的入口古胆。
- --from <arg>:需要從哪些源節(jié)點(diǎn)上遷移slot甩骏,可從多個(gè)源節(jié)點(diǎn)完成遷移清笨,以逗號(hào)隔開,傳遞的是節(jié)點(diǎn)的node id溪猿,還可以直接傳遞--from all,這樣源節(jié)點(diǎn)就是集群的所有節(jié)點(diǎn)纫塌,不傳遞該參數(shù)的話诊县,則會(huì)在遷移過程中提示用戶輸入。
- --to <arg>:slot需要遷移的目的節(jié)點(diǎn)的node id措左,目的節(jié)點(diǎn)只能填寫一個(gè)依痊,不傳遞該參數(shù)的話,則會(huì)在遷移過程中提示用戶輸入怎披。
- --slots <arg>:需要遷移的slot數(shù)量胸嘁,不傳遞該參數(shù)的話,則會(huì)在遷移過程中提示用戶輸入凉逛。
- --yes:設(shè)置該參數(shù)性宏,可以在打印執(zhí)行reshard計(jì)劃的時(shí)候,提示用戶輸入yes確認(rèn)后再執(zhí)行reshard状飞。
- --timeout <arg>:設(shè)置migrate命令的超時(shí)時(shí)間毫胜。
- --pipeline <arg>:定義cluster getkeysinslot命令一次取出的key數(shù)量书斜,不傳的話使用默認(rèn)值為10。
./redis-trib.rb reshard --from all --to 80b661ecca260c89e3d8ea9b98f77edaeef43dcd --slots 11
平衡集群節(jié)點(diǎn)slot數(shù)量
- rebalance
- host:port:這個(gè)是必傳參數(shù)酵使,用來從一個(gè)節(jié)點(diǎn)獲取整個(gè)集群信息荐吉,相當(dāng)于獲取集群信息的入口。
- --weight <arg>:節(jié)點(diǎn)的權(quán)重口渔,格式為node_id=weight样屠,如果需要為多個(gè)節(jié)點(diǎn)分配權(quán)重的話,需要添加多個(gè)--weight <arg>參數(shù)缺脉,即--weight b31e3a2e=5 --weight 60b8e3a1=5痪欲,node_id可為節(jié)點(diǎn)名稱的前綴,只要保證前綴位數(shù)能唯一區(qū)分該節(jié)點(diǎn)即可枪向。沒有傳遞–weight的節(jié)點(diǎn)的權(quán)重默認(rèn)為1勤揩。
- --auto-weights:這個(gè)參數(shù)在rebalance流程中并未用到。
- --threshold <arg>:只有節(jié)點(diǎn)需要遷移的slot閾值超過threshold秘蛔,才會(huì)執(zhí)行rebalance操作陨亡。具體計(jì)算方法可以參考下面的rebalance命令流程的第四步。
- --use-empty-masters:rebalance是否考慮沒有節(jié)點(diǎn)的master深员,默認(rèn)沒有分配slot節(jié)點(diǎn)的master是不參與rebalance的负蠕,設(shè)置--use-empty-masters可以讓沒有分配slot的節(jié)點(diǎn)參與rebalance。
- --timeout <arg>:設(shè)置migrate命令的超時(shí)時(shí)間倦畅。
- --simulate:設(shè)置該參數(shù)遮糖,可以模擬rebalance操作,提示用戶會(huì)遷移哪些slots叠赐,而不會(huì)真正執(zhí)行遷移操作欲账。
- --pipeline <arg>:與reshar的pipeline參數(shù)一樣,定義cluster getkeysinslot命令一次取出的key數(shù)量芭概,不傳的話使用默認(rèn)值為10赛不。
增加一個(gè)主節(jié)點(diǎn)
./redis-trib.rb add-node 192.168.66.3:7006 192.168.66.2:7000
# 添加成功,但是并沒有指定 slot ,所以必須 遷移slot節(jié)點(diǎn)
./redis-trib.rb reshard 192.168.66.2:7000
# 提示一 :How many slots do you want to move (from 1 to 16384)?
為了平衡每個(gè)master管理的slot的個(gè)數(shù)罢洲,所以輸入 16384/master 的數(shù)量踢故。如這里為4 那么就是 16384/4 = 4096個(gè)。
輸入 4096
# 提示二:What is the receiving node ID?(接受的node ID是多少)
890d2c8d989cce50e5fa48e37cd35738887f3f7d # 7006的ID
# 提示三: Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
(要從哪個(gè)節(jié)點(diǎn)中獲取lost 惹苗?)
不打算從特定的節(jié)點(diǎn)上取出指定數(shù)量的哈希槽殿较, 那么可以輸入 all
否則輸入某個(gè)節(jié)點(diǎn)的 node ID
# 檢查是否成功
./redis-trib.rb check 192.168.66.2:7000
增加一個(gè)從節(jié)點(diǎn)
# 這樣創(chuàng)建從節(jié)點(diǎn)會(huì)自動(dòng)匹配主節(jié)點(diǎn)
./redis-trib.rb add-node --slave 127.0.0.1:7007 127.0.0.1:7000
# 增加從節(jié)點(diǎn)的時(shí)候指定主節(jié)點(diǎn)。
./redis-trib.rb add-node --slave --master-id 890d2c8d989cce50e5fa48e37cd35738887f3f7d 192.168.66.3:7008 192.168.66.2:7000
從集群中刪除節(jié)點(diǎn)
- del-node
- host:port:從該節(jié)點(diǎn)獲取集群信息桩蓉。
- node_id:需要?jiǎng)h除的節(jié)點(diǎn)id淋纲。
./redis-trib.rb del-node 192.168.66.2:7000 d5f6d1d17426bd564a6e309f32d0f5b96962fe53
宕機(jī)情況
- 當(dāng)某個(gè)從節(jié)點(diǎn)掛掉之后,對(duì)于redis集群來說幾乎沒有什么影響院究,相當(dāng)于這個(gè)從節(jié)點(diǎn)對(duì)應(yīng)的 主節(jié)點(diǎn)少了一個(gè)備份而已帚戳。
- 當(dāng)某一個(gè)主節(jié)點(diǎn)掛掉之后玷或,redis 會(huì)從這個(gè) 主節(jié)點(diǎn) 的 多個(gè)從節(jié)點(diǎn) 中推選一個(gè)出來,擔(dān)當(dāng)master的工作片任,并且把之前依附在
- 主節(jié)點(diǎn)的從節(jié)點(diǎn)調(diào)整依附到新的master上偏友。如果新任的master也掛掉并且他沒有從節(jié)點(diǎn)了,那么這個(gè)集群也真正的掛掉了对供。
集群創(chuàng)建時(shí) replicas 參數(shù) 指定情況位他。
- 使用 --replicas 1 參數(shù)時(shí),如果節(jié)點(diǎn)數(shù)量少于六個(gè)产场。
報(bào)錯(cuò)
*** ERROR: Invalid configuration for cluster creation.
*** Redis Cluster requires at least 3 master nodes.
*** This is not possible with 5 nodes and 1 replicas per node.
*** At least 6 nodes are required.
- 使用 --replicas 1 參數(shù)時(shí)鹅髓,如果節(jié)點(diǎn)數(shù)量 大于六個(gè),且為單數(shù)時(shí)京景。
這樣會(huì)造成某個(gè)master擁有兩個(gè)salve