高可用Redis(十一):使用redis-trib.rb工具搭建叢集
環境說明:
兩臺虛擬機器,IP地址分別為:192.168.81.100和192.168.81.101 虛擬機器系統為:CentOS 7.5 Redis為yum安裝,版本為3.2 系統環境:關閉firewalld Redis Cluster叢集節點包括:192.168.81.101機器的9000.9001,9002埠執行的redis-server以及192.168.81.100機器的9000.9001,9002埠執行的redis-server
步驟:
1.Ruby環境準備
官網下載Ruby原始碼包,解壓,編譯,安裝,進行軟連結
2.Ruby環境安裝redis模組
[root@mysql ruby_package]# ruby -v# ruby安裝完成,檢視版本 ruby 2.3.7p456 (2018-03-28 revision 63024) [x86_64-linux] [root@mysql ruby_package]# gem install redis# 安裝ruby操作redis模組 Successfully installed redis-4.0.2 Parsing documentation for redis-4.0.2 Done installing documentation for redis after 0 seconds 1 gem installed [root@mysql ruby_package]# gem list -- check# 檢視ruby環境已經安裝的模組 *** LOCAL GEMS *** bigdecimal (1.2.8) did_you_mean (1.0.0) io-console (0.4.5) json (1.8.3.1) minitest (5.8.5) net-telnet (0.1.1) power_assert (0.2.6) psych (2.1.0.1) rake (10.4.2) rdoc (4.2.1) redis (4.0.2, 3.3.0) test-unit (3.1.5)
3.獲取redis-trib.rb工具
[root@mysql ruby_package]# rz# 從Redis官網下載Redis安裝包,並上傳到虛擬機器中 rz waiting to receive. Starting zmodem transfer.Press Ctrl+C to cancel. Transferring redis-3.2.12.tar.gz... 100%1515 KB1515 KB/sec00:00:010 Errors [root@mysql ruby_package]# ls redis-3.2.12.tar.gzruby-2.3.7ruby-2.3.7.tar.gzrubygems-2.7.7.zip [root@mysql ruby_package]# tar xf redis-3.2.12.tar.gz# 對Redis安裝包進行解壓 [root@mysql ruby_package]# ls [root@mysql ruby_package]# cd redis-3.2.12/src# 進入Redis目錄的src目錄下 [root@mysql src]# ls adlist.casciilogo.hcrc64.hhelp.hMakefile.depquicklist.hrelease.csetproctitle.ct_hash.czipmap.c adlist.hbio.cdb.chyperloglog.cmemtest.crand.creplication.csha1.ct_list.czipmap.h ae.cbio.hdebug.cintset.cmkreleasehdr.shrand.hrio.csha1.ht_set.czmalloc.c ae_epoll.cbitops.cdebugmacro.hintset.hmulti.crdb.crio.hslowlog.ct_string.czmalloc.h ae_evport.cblocked.cdict.clatency.cnetworking.crdb.hscripting.cslowlog.ht_zset.c ae.hcluster.cdict.hlatency.hnotify.credisassert.hsdsalloc.hsolarisfixes.hutil.c ae_kqueue.ccluster.hendianconv.clzf_c.cobject.credis-benchmark.csds.csort.cutil.h ae_select.cconfig.cendianconv.hlzf_d.cpqsort.credis-check-aof.csds.hsparkline.cvalgrind.sup anet.cconfig.hfmacros.hlzf.hpqsort.hredis-check-rdb.csentinel.csparkline.hversion.h anet.hcrc16.cgeo.clzfP.hpubsub.credis-cli.cserver.csyncio.cziplist.c aof.ccrc64.cgeo.hMakefilequicklist.credis-trib.rbserver.htesthelp.hziplist.h [root@mysql src]# cp redis-trib.rb /usr/bin# 把redis-trib.rb拷貝到/usr/bin目錄下 [root@mysql src]# redis-trib.rb# 檢視redis-trib.rb的幫助文件 Usage: redis-trib <command> <options> <arguments ...> createmysql:port1 ... hostN:portN --replicas <arg> checkhost:port infohost:port fixhost:port --timeout <arg> reshardhost:port --from <arg> --to <arg> --slots <arg> --yes --timeout <arg> --pipeline <arg> rebalancehost:port --weight <arg> --auto-weights --use-empty-masters --timeout <arg> --simulate --pipeline <arg> --threshold <arg> add-nodenew_host:new_port existing_host:existing_port --slave --master-id <arg> del-nodehost:port node_id set-timeouthost:port milliseconds callhost:port command arg arg .. arg importhost:port --from <arg> --copy --replace help(show this help) For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.
4.在192.168.81.101虛擬機器上建立配置檔案,並非常用啟動Redis server
[root@mysql ~]# ps aux | grep redis-server root16840.00.0 112664972 pts/0R+11:440:00 grep --color=auto redis-server [root@mysql ~]# cd /opt/config/ [root@mysql config]# ls redis_7000.confredis_7001.confredis_7002.conf [root@mysql config]# sed 's/7000/9000/g' redis_7000.conf > redis_9000.conf# 建立redis_9000.conf配置檔案 [root@mysql config]# sed 's/7000/9001/g' redis_7000.conf > redis_9001.conf# 建立redis_9001.conf配置檔案 [root@mysql config]# sed 's/7000/9002/g' redis_7000.conf > redis_9002.conf# 建立redis_9002.conf配置檔案 [root@mysql config]# redis-server /opt/config/redis_9000.conf# 指定配置檔案,啟動redis-server [root@mysql config]# redis-server /opt/config/redis_9001.conf# 指定配置檔案,啟動redis-server [root@mysql config]# redis-server /opt/config/redis_9002.conf# 指定配置檔案,啟動redis-server [root@mysql config]# ps aux | grep redis-server# 檢視已經啟動的redis-server root19480.20.3 1429167572 ?Ssl12:210:02 redis-server 0.0.0.0:9002 [cluster] root19520.20.3 1429167560 ?Ssl12:210:02 redis-server 0.0.0.0:9001 [cluster] root19640.20.3 1429167356 ?Ssl12:210:02 redis-server 0.0.0.0:9000 [cluster] root66400.00.0 112664972 pts/1R+12:420:00 grep --color=auto redis-server [root@mysql config]# cat redis_9000.conf# redis_9000.conf配置檔案內容 port 9000 bind 0.0.0.0 daemonize yes dir '/var/lib/redis' logfile '/var/log/redis/redis_9000.log' dbfilename 'redis_9000.data' cluster-enabled yes cluster-config-file nodes-9000.conf cluster-require-full-coverage no [root@mysql config]# redis-cli -p 9000 cluster nodes# 檢視叢集中節點的資訊,都只顯示自身節點 5eba129e4f4a4be2ffe630fe9fac19ba30f5b419 :9000 myself,master - 0 0 0 connected [root@mysql config]# redis-cli -p 9001 cluster nodes# 檢視叢集中節點的資訊,都只顯示自身節點 32d2d969c41f4af646b1052f10d69fd29510f3e4 :9001 myself,master - 0 0 0 connected [root@mysql config]# redis-cli -p 9002 cluster nodes# 檢視叢集中節點的資訊,都只顯示自身節點 6c43b4ddfeaeb3030af397e7469bb0d0b7673979 :9002 myself,master - 0 0 0 connected 使用同樣的步驟,在192.168.81.100虛擬機器上生成配置檔案:redis_9000.conf,redis_9001.conf,redis_9002.conf
5.在192.168.81.101虛擬機器上使用redis-trib.rb工具構建叢集
[root@mysql config]# redis-trib.rb create --replicas 1 127.0.0.1:9000 127.0.0.1:9001 127.0.0.1:9002 192.168.81.100:9000 192.168.81.100:9001 192.168.81.100:9002# 構建叢集,replicas後的引數為叢集的節點 >>> Creating cluster >>> Performing hash slots allocation on 6 nodes... Using 3 masters:# 指定master 127.0.0.1:9000 192.168.81.100:9000 127.0.0.1:9001 Adding replica 192.168.81.100:9001 to 127.0.0.1:9000# 為master新增slave Adding replica 127.0.0.1:9002 to 192.168.81.100:9000 Adding replica 192.168.81.100:9002 to 127.0.0.1:9001 M: cf74b2d9570665b74525802462c74cf2e072ef99 127.0.0.1:9000 slots:0-5460 (5461 slots) master M: fceba6001b95e2169ddd6622436b213324fe8f77 127.0.0.1:9001 slots:10923-16383 (5461 slots) master S: 6f369311b0ca4c503f337c4bb23424eed3eeb188 127.0.0.1:9002 replicates cb8c114d44d289687798508232d31e0a065fdab5 M: cb8c114d44d289687798508232d31e0a065fdab5 192.168.81.100:9000 slots:5461-10922 (5462 slots) master S: 71f5695dc1f4322c8ea9066d1b3cd8bb0ab7a329 192.168.81.100:9001 replicates cf74b2d9570665b74525802462c74cf2e072ef99 S: ac153a3c1fb10d9d502b153c32dec65c85b2f97c 192.168.81.100:9002 replicates fceba6001b95e2169ddd6622436b213324fe8f77 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 127.0.0.1:9000) M: cf74b2d9570665b74525802462c74cf2e072ef99 127.0.0.1:9000 slots:0-5460 (5461 slots) master 1 additional replica(s) M: cb8c114d44d289687798508232d31e0a065fdab5 192.168.81.100:9000 slots:5461-10922 (5462 slots) master 1 additional replica(s) S: 6f369311b0ca4c503f337c4bb23424eed3eeb188 127.0.0.1:9002 slots: (0 slots) slave replicates cb8c114d44d289687798508232d31e0a065fdab5 M: fceba6001b95e2169ddd6622436b213324fe8f77 127.0.0.1:9001 slots:10923-16383 (5461 slots) master 1 additional replica(s) S: ac153a3c1fb10d9d502b153c32dec65c85b2f97c 192.168.81.100:9002 slots: (0 slots) slave replicates fceba6001b95e2169ddd6622436b213324fe8f77 S: 71f5695dc1f4322c8ea9066d1b3cd8bb0ab7a329 192.168.81.100:9001 slots: (0 slots) slave replicates cf74b2d9570665b74525802462c74cf2e072ef99 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
需要注意的是:如果上面的操作中,一直阻塞在'Waiting for the cluster to join',則是因為meet操作阻塞,可以手動進行meet操作
具體步驟為:在當前虛擬機器上另開啟一個命令提示符,進行meet操作
[root@mysql ~]# redis-cli -p 9000 cluster meet 127.0.0.1 9001# 192.168.81.101:9000埠執行的redis-server向192.168.81.101:9001埠執行的redis-server傳送meet請求 OK [root@mysql ~]# redis-cli -p 9000 cluster meet 127.0.0.1 9002# 192.168.81.101:9000埠執行的redis-server向192.168.81.101:9001埠執行的redis-server傳送meet請求 OK [root@mysql ~]# redis-cli -p 9000 cluster meet 192.168.81.100 9002# 192.168.81.101:9000埠執行的redis-server向192.168.81.100:9002埠執行的redis-server傳送meet請求 OK [root@mysql ~]# redis-cli -p 9000 cluster meet 192.168.81.100 9001# 192.168.81.101:9000埠執行的redis-server向192.168.81.100:9001埠執行的redis-server傳送meet請求 OK [root@mysql ~]# redis-cli -p 9000 cluster meet 192.168.81.100 9000# 192.168.81.101:9000埠執行的redis-server向192.168.81.100:9000埠執行的redis-server傳送meet請求 OK [root@mysql ~]# redis-cli -p 9000 cluster info# 檢視叢集的資訊 cluster_state:ok# 狀態為ok cluster_slots_assigned:16384# 標記的slot共有16384個 cluster_slots_ok:16384# 已分配的slot有16384個 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6# 當前叢集共有6個節點 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_sent:1890 cluster_stats_messages_received:1890 [root@mysql ~]# redis-cli -p 9000 cluster nodes# 檢視當前叢集節點資訊 cb8c114d44d289687798508232d31e0a065fdab5 192.168.81.100:9000 master - 0 1539751180759 4 connected 5461-10922 6f369311b0ca4c503f337c4bb23424eed3eeb188 127.0.0.1:9002 slave cb8c114d44d289687798508232d31e0a065fdab5 0 1539751183277 4 connected fceba6001b95e2169ddd6622436b213324fe8f77 127.0.0.1:9001 master - 0 1539751181266 2 connected 10923-16383 ac153a3c1fb10d9d502b153c32dec65c85b2f97c 192.168.81.100:9002 slave fceba6001b95e2169ddd6622436b213324fe8f77 0 1539751182272 6 connected 71f5695dc1f4322c8ea9066d1b3cd8bb0ab7a329 192.168.81.100:9001 slave cf74b2d9570665b74525802462c74cf2e072ef99 0 1539751180255 5 connected cf74b2d9570665b74525802462c74cf2e072ef99 127.0.0.1:9000 myself,master - 0 0 1 connected 0-5460
6.Redis Cluster擴容叢集
6.1 在192.168.81.100虛擬機器上準備新節點
[root@host1 config]# ls add_slots.shredis_9000.confredis_9001.confredis_9002.conf [root@host1 config]# sed 's/9000/9003/g' redis_9000.conf > redis_9003.conf# 生成配置檔案 [root@host1 config]# redis-server /opt/config/redis_9003.conf# 指定配置檔案啟動redis-server [root@host1 config]# ps aux | grep redis-server# 檢視redis-server的程序 root25530.20.7 1429047552 ?Ssl12:230:12 redis-server 0.0.0.0:9000 [cluster] root25570.20.7 1429047548 ?Ssl12:230:13 redis-server 0.0.0.0:9001 [cluster] root25610.20.7 1429047556 ?Ssl12:230:13 redis-server 0.0.0.0:9002 [cluster] root25960.10.5 1429045336 ?Ssl13:530:00 redis-server 0.0.0.0:9003 [cluster] root26000.00.0 112648964 pts/0R+13:530:00 grep --color=auto redis-server
6.2 在192.168.81.101虛擬機器上生成配置檔案,手動擴容叢集
[root@mysql config]# redis-cli -p 9000 cluster meet 127.0.0.1 9003# 對新新增節點執行meet操作 OK [root@mysql config]# redis-cli -p 9000 cluster meet 192.168.81.100 9003# 對新新增節點執行meet操作 OK [root@mysql config]# redis-cli -p 9000 cluster nodes# 檢視叢集節點資訊 6f369311b0ca4c503f337c4bb23424eed3eeb188 127.0.0.1:9002 slave cb8c114d44d289687798508232d31e0a065fdab5 0 1539755696566 4 connected ac153a3c1fb10d9d502b153c32dec65c85b2f97c 192.168.81.100:9002 slave fceba6001b95e2169ddd6622436b213324fe8f77 0 1539755699589 6 connected 71f5695dc1f4322c8ea9066d1b3cd8bb0ab7a329 192.168.81.100:9001 slave cf74b2d9570665b74525802462c74cf2e072ef99 0 1539755694553 5 connected 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 192.168.81.100:9003 master - 0 1539755697570 7 connected cb8c114d44d289687798508232d31e0a065fdab5 192.168.81.100:9000 master - 0 1539755694553 4 connected 5461-10922 fceba6001b95e2169ddd6622436b213324fe8f77 127.0.0.1:9001 master - 0 1539755698572 2 connected 10923-16383 cf74b2d9570665b74525802462c74cf2e072ef99 192.168.81.101:9000 myself,master - 0 0 1 connected 0-5460 2ff22acb1e006b9881abc80238e15b4e3fcefbef 127.0.0.1:9003 master - 0 1539755695560 0 connected [root@mysql config]# redis-cli -p 9000 cluster info# 檢視叢集資訊 cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:8 cluster_size:3 cluster_current_epoch:7 cluster_my_epoch:1 cluster_stats_messages_sent:11829 cluster_stats_messages_received:11829 [root@mysql config]# redis-cli -p 9003 cluster replicate 27266dcfd098dfe2a42361d6ab59edf8fb9f5413# 新新增節點設定主從關係 OK [root@mysql config]# redis-cli -p 9003 cluster nodes# 檢視叢集中節點資訊 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 192.168.81.100:9003 master - 0 1539756040013 7 connected 2ff22acb1e006b9881abc80238e15b4e3fcefbef 192.168.81.101:9003 myself,slave 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 0 0 0 connected cb8c114d44d289687798508232d31e0a065fdab5 192.168.81.100:9000 master - 0 1539756035980 4 connected 5461-10922 ac153a3c1fb10d9d502b153c32dec65c85b2f97c 192.168.81.100:9002 slave fceba6001b95e2169ddd6622436b213324fe8f77 0 1539756037488 2 connected cf74b2d9570665b74525802462c74cf2e072ef99 127.0.0.1:9000 master - 0 1539756040516 1 connected 0-5460 6f369311b0ca4c503f337c4bb23424eed3eeb188 127.0.0.1:9002 slave cb8c114d44d289687798508232d31e0a065fdab5 0 1539756038998 4 connected fceba6001b95e2169ddd6622436b213324fe8f77 127.0.0.1:9001 master - 0 1539756041017 2 connected 10923-16383 71f5695dc1f4322c8ea9066d1b3cd8bb0ab7a329 192.168.81.100:9001 slave cf74b2d9570665b74525802462c74cf2e072ef99 1539756042024 1539756037992 1 connected
6.3 在192.168.81.101虛擬機器上生成配置檔案,使用redis-trib.rb工具擴容叢集
說明:
向叢集中新增192.168.81.100:9003和192.168.81.101:9003節點
建議使用redis-trib.rb工具,避免新節點已經加入了其他叢集,造成故障
[root@mysql config]# ls dump.rdbredis_9000.confredis_9001.confredis_9002.conf [root@mysql config]# sed 's/9000/9003/g' redis_9000.conf > redis_9003.conf# 生成配置檔案 [root@mysql config]# ls dump.rdbredis_9000.confredis_9001.confredis_9002.confredis_9003.conf [root@mysql config]# redis-server /opt/config/redis_9003.conf# 指定配置檔案執行redis-server [root@mysql config]# ps aux | grep redis-server# 檢視redis-server的程序資訊 root19480.20.3 1429167560 ?Ssl12:210:13 redis-server 0.0.0.0:9002 [cluster] root19520.20.3 1429167560 ?Ssl12:210:12 redis-server 0.0.0.0:9001 [cluster] root19640.20.3 1429167356 ?Ssl12:210:12 redis-server 0.0.0.0:9000 [cluster] root73480.00.2 1429165352 ?Ssl13:530:00 redis-server 0.0.0.0:9003 [cluster] root73520.00.0 112664972 pts/0R+13:530:00 grep --color=auto redis-server [root@mysql config]# redis-trib.rb add-node 127.0.0.1:9003 192.168.81.100:9003# 向叢集新增節點 [root@mysql config]# redis-cli -p 9000 cluster nodes# 檢視叢集的節點資訊 2ff22acb1e006b9881abc80238e15b4e3fcefbef 127.0.0.1:9003 slave 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 0 1539826328082 7 connected 6f369311b0ca4c503f337c4bb23424eed3eeb188 127.0.0.1:9002 master - 0 1539826326067 9 connected 5461-10922 fceba6001b95e2169ddd6622436b213324fe8f77 127.0.0.1:9001 master - 0 1539826330601 2 connected 10923-16383 ac153a3c1fb10d9d502b153c32dec65c85b2f97c 192.168.81.100:9002 slave fceba6001b95e2169ddd6622436b213324fe8f77 0 1539826331108 6 connected cb8c114d44d289687798508232d31e0a065fdab5 192.168.81.100:9000 slave 6f369311b0ca4c503f337c4bb23424eed3eeb188 0 1539826332115 9 connected 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 192.168.81.100:9003 master - 0 1539826329091 7 connected cf74b2d9570665b74525802462c74cf2e072ef99 192.168.81.101:9000 myself,master - 0 0 1 connected 0-5460 71f5695dc1f4322c8ea9066d1b3cd8bb0ab7a329 192.168.81.100:9001 slave cf74b2d9570665b74525802462c74cf2e072ef99 0 1539826330098 5 connected [root@mysql config]# redis-trib.rb reshard 127.0.0.1:9000# 遷移槽 >>> Performing Cluster Check (using node 127.0.0.1:9000) M: cf74b2d9570665b74525802462c74cf2e072ef99 127.0.0.1:9000 slots:0-5460 (5461 slots) master 1 additional replica(s) S: 2ff22acb1e006b9881abc80238e15b4e3fcefbef 127.0.0.1:9003 slots: (0 slots) slave replicates 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 M: 6f369311b0ca4c503f337c4bb23424eed3eeb188 127.0.0.1:9002 slots:5461-10922 (5462 slots) master 1 additional replica(s) M: fceba6001b95e2169ddd6622436b213324fe8f77 127.0.0.1:9001 slots:10923-16383 (5461 slots) master 1 additional replica(s) S: ac153a3c1fb10d9d502b153c32dec65c85b2f97c 192.168.81.100:9002 slots: (0 slots) slave replicates fceba6001b95e2169ddd6622436b213324fe8f77 S: cb8c114d44d289687798508232d31e0a065fdab5 192.168.81.100:9000 slots: (0 slots) slave replicates 6f369311b0ca4c503f337c4bb23424eed3eeb188 M: 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 192.168.81.100:9003 slots: (0 slots) master 1 additional replica(s) S: 71f5695dc1f4322c8ea9066d1b3cd8bb0ab7a329 192.168.81.100:9001 slots: (0 slots) slave replicates cf74b2d9570665b74525802462c74cf2e072ef99 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. How many slots do you want to move (from 1 to 16384)? 4096 What is the receiving node ID? 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 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. Source node #1:all Ready to move 4096 slots. Source nodes: M: cf74b2d9570665b74525802462c74cf2e072ef99 127.0.0.1:9000 slots:0-5460 (5461 slots) master 1 additional replica(s) M: 6f369311b0ca4c503f337c4bb23424eed3eeb188 127.0.0.1:9002 slots:5461-10922 (5462 slots) master 1 additional replica(s) M: fceba6001b95e2169ddd6622436b213324fe8f77 127.0.0.1:9001 slots:10923-16383 (5461 slots) master 1 additional replica(s) Destination node: M: 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 192.168.81.100:9003 slots: (0 slots) master 1 additional replica(s) Resharding plan: Moving slot 5461 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5462 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5463 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5464 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5465 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5466 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5467 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5468 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5469 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5470 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5471 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5472 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5473 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5474 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5475 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5476 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5477 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5478 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5479 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5480 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5481 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5482 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5483 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5484 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5485 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5486 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5487 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5488 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5489 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 5490 from 6f369311b0ca4c503f337c4bb23424eed3eeb188 Moving slot 12283 from 127.0.0.1:9001 to 192.168.81.100:9003: Moving slot 12284 from 127.0.0.1:9001 to 192.168.81.100:9003: Moving slot 12285 from 127.0.0.1:9001 to 192.168.81.100:9003: Moving slot 12286 from 127.0.0.1:9001 to 192.168.81.100:9003: Moving slot 12287 from 127.0.0.1:9001 to 192.168.81.100:9003: [root@mysql config]# redis-cli -p 9000 cluster slots# 檢視叢集中槽的資訊 1) 1) (integer) 6827 2) (integer) 10922 3) 1) "127.0.0.1" 2) (integer) 9002 3) "6f369311b0ca4c503f337c4bb23424eed3eeb188" 4) 1) "192.168.81.100" 2) (integer) 9000 3) "cb8c114d44d289687798508232d31e0a065fdab5" 2) 1) (integer) 12288 2) (integer) 16383 3) 1) "127.0.0.1" 2) (integer) 9001 3) "fceba6001b95e2169ddd6622436b213324fe8f77" 4) 1) "192.168.81.100" 2) (integer) 9002 3) "ac153a3c1fb10d9d502b153c32dec65c85b2f97c" 3) 1) (integer) 0 2) (integer) 1364 3) 1) "192.168.81.100" 2) (integer) 9003 3) "27266dcfd098dfe2a42361d6ab59edf8fb9f5413" 4) 1) "127.0.0.1" 2) (integer) 9003 3) "2ff22acb1e006b9881abc80238e15b4e3fcefbef" 4) 1) (integer) 5461 2) (integer) 6826 3) 1) "192.168.81.100" 2) (integer) 9003 3) "27266dcfd098dfe2a42361d6ab59edf8fb9f5413" 4) 1) "127.0.0.1" 2) (integer) 9003 3) "2ff22acb1e006b9881abc80238e15b4e3fcefbef" 5) 1) (integer) 10923 2) (integer) 12287 3) 1) "192.168.81.100" 2) (integer) 9003 3) "27266dcfd098dfe2a42361d6ab59edf8fb9f5413" 4) 1) "127.0.0.1" 2) (integer) 9003 3) "2ff22acb1e006b9881abc80238e15b4e3fcefbef" 6) 1) (integer) 1365 2) (integer) 5460 3) 1) "192.168.81.101" 2) (integer) 9000 3) "cf74b2d9570665b74525802462c74cf2e072ef99" 4) 1) "192.168.81.100" 2) (integer) 9001 3) "71f5695dc1f4322c8ea9066d1b3cd8bb0ab7a329" [root@mysql config]# redis-cli -p 9000 cluster nodes# 檢視叢集中節點的資訊 2ff22acb1e006b9881abc80238e15b4e3fcefbef 127.0.0.1:9003 slave 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 0 1539826689921 12 connected 6f369311b0ca4c503f337c4bb23424eed3eeb188 127.0.0.1:9002 master - 0 1539826692961 9 connected 6827-10922 fceba6001b95e2169ddd6622436b213324fe8f77 127.0.0.1:9001 master - 0 1539826693970 2 connected 12288-16383 ac153a3c1fb10d9d502b153c32dec65c85b2f97c 192.168.81.100:9002 slave fceba6001b95e2169ddd6622436b213324fe8f77 0 1539826688916 6 connected cb8c114d44d289687798508232d31e0a065fdab5 192.168.81.100:9000 slave 6f369311b0ca4c503f337c4bb23424eed3eeb188 0 1539826693475 9 connected 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 192.168.81.100:9003 master - 0 1539826690944 12 connected 0-1364 5461-6826 10923-12287 cf74b2d9570665b74525802462c74cf2e072ef99 192.168.81.101:9000 myself,master - 0 0 1 connected 1365-5460 71f5695dc1f4322c8ea9066d1b3cd8bb0ab7a329 192.168.81.100:9001 slave cf74b2d9570665b74525802462c74cf2e072ef99 0 1539826691953 5 connected [root@mysql config]# redis-cli -p 9000 cluster nodes | grep master# 只檢視master的節點資訊 6f369311b0ca4c503f337c4bb23424eed3eeb188 127.0.0.1:9002 master - 0 1539826726695 9 connected 6827-10922 fceba6001b95e2169ddd6622436b213324fe8f77 127.0.0.1:9001 master - 0 1539826728205 2 connected 12288-16383 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 192.168.81.100:9003 master - 0 1539826726192 12 connected 0-1364 5461-6826 10923-12287 cf74b2d9570665b74525802462c74cf2e072ef99 192.168.81.101:9000 myself,master - 0 0 1 connected 1365-5460
7.Redis Cluster叢集收縮
說明:把192.168.81.101:9000這個master及對應slave節點從叢集中移除
[root@mysql ~]# redis-cli -p 9000 cluster nodes# 檢視叢集中的節點資訊 2ff22acb1e006b9881abc80238e15b4e3fcefbef 127.0.0.1:9003 slave 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 0 1539827599055 12 connected 6f369311b0ca4c503f337c4bb23424eed3eeb188 127.0.0.1:9002 master - 0 1539827597043 9 connected 6827-10922 fceba6001b95e2169ddd6622436b213324fe8f77 127.0.0.1:9001 master - 0 1539827598049 2 connected 12288-16383 ac153a3c1fb10d9d502b153c32dec65c85b2f97c 192.168.81.100:9002 slave fceba6001b95e2169ddd6622436b213324fe8f77 0 1539827601066 6 connected cb8c114d44d289687798508232d31e0a065fdab5 192.168.81.100:9000 slave 6f369311b0ca4c503f337c4bb23424eed3eeb188 0 1539827596039 9 connected 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 192.168.81.100:9003 master - 0 1539827600062 12 connected 0-1364 5461-6826 10923-12287 cf74b2d9570665b74525802462c74cf2e072ef99 192.168.81.101:9000 myself,master - 0 0 1 connected 1365-5460# 要移除的節點的槽編號為:1365到5460 71f5695dc1f4322c8ea9066d1b3cd8bb0ab7a329 192.168.81.100:9001 slave cf74b2d9570665b74525802462c74cf2e072ef99 0 1539827595029 5 connected [root@mysql ~]# redis-trib.rb reshard --from cf74b2d9570665b74525802462c74cf2e072ef99 --to 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 --slots 1366 127.0.0.1:9001# 遷移槽,從192.168.81.101:9000遷移到叢集中別的節點上 >>> Performing Cluster Check (using node 127.0.0.1:9001) M: fceba6001b95e2169ddd6622436b213324fe8f77 127.0.0.1:9001 slots:12288-16383 (4096 slots) master 1 additional replica(s) S: 71f5695dc1f4322c8ea9066d1b3cd8bb0ab7a329 192.168.81.100:9001 slots: (0 slots) slave replicates cf74b2d9570665b74525802462c74cf2e072ef99 M: 6f369311b0ca4c503f337c4bb23424eed3eeb188 127.0.0.1:9002 slots:6827-10922 (4096 slots) master 1 additional replica(s) M: 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 192.168.81.100:9003 slots:0-1364,5461-6826,10923-12287 (4096 slots) master 1 additional replica(s) M: cf74b2d9570665b74525802462c74cf2e072ef99 127.0.0.1:9000 slots:1365-5460 (4096 slots) master 1 additional replica(s) S: ac153a3c1fb10d9d502b153c32dec65c85b2f97c 192.168.81.100:9002 slots: (0 slots) slave replicates fceba6001b95e2169ddd6622436b213324fe8f77 S: 2ff22acb1e006b9881abc80238e15b4e3fcefbef 127.0.0.1:9003 slots: (0 slots) slave replicates 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 S: cb8c114d44d289687798508232d31e0a065fdab5 192.168.81.100:9000 slots: (0 slots) slave replicates 6f369311b0ca4c503f337c4bb23424eed3eeb188 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. Ready to move 1366 slots.# 此次可以遷移1366個槽 Source nodes: M: cf74b2d9570665b74525802462c74cf2e072ef99 127.0.0.1:9000 slots:1365-5460 (4096 slots) master 1 additional replica(s) Destination node: M: 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 192.168.81.100:9003 slots:0-1364,5461-6826,10923-12287 (4096 slots) master 1 additional replica(s) Resharding plan: Moving slot 1365 from cf74b2d9570665b74525802462c74cf2e072ef99 Moving slot 1366 from cf74b2d9570665b74525802462c74cf2e072ef99 ... Moving slot 2729 from cf74b2d9570665b74525802462c74cf2e072ef99 Moving slot 2730 from cf74b2d9570665b74525802462c74cf2e072ef99 Do you want to proceed with the proposed reshard plan (yes/no)? yes Moving slot 1365 from 127.0.0.1:9000 to 192.168.81.100:9003: Moving slot 1366 from 127.0.0.1:9000 to 192.168.81.100:9003: ... Moving slot 2728 from 127.0.0.1:9000 to 192.168.81.100:9003: Moving slot 2729 from 127.0.0.1:9000 to 192.168.81.100:9003: Moving slot 2730 from 127.0.0.1:9000 to 192.168.81.100:9003: [root@mysql ~]# redis-cli -p 9001 cluster nodes# 檢視叢集節點資訊 71f5695dc1f4322c8ea9066d1b3cd8bb0ab7a329 192.168.81.100:9001 slave cf74b2d9570665b74525802462c74cf2e072ef99 0 1539827870363 5 connected 6f369311b0ca4c503f337c4bb23424eed3eeb188 127.0.0.1:9002 master - 0 1539827868350 9 connected 6827-10922 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 192.168.81.100:9003 master - 0 1539827872375 12 connected 0-2730 5461-6826 10923-12287 fceba6001b95e2169ddd6622436b213324fe8f77 127.0.0.1:9001 myself,master - 0 0 2 connected 12288-16383 cf74b2d9570665b74525802462c74cf2e072ef99 127.0.0.1:9000 master - 0 1539827873385 1 connected 2731-5460# 還有2731到5460號槽還沒有遷移完 ac153a3c1fb10d9d502b153c32dec65c85b2f97c 192.168.81.100:9002 slave fceba6001b95e2169ddd6622436b213324fe8f77 0 1539827867345 6 connected 2ff22acb1e006b9881abc80238e15b4e3fcefbef 127.0.0.1:9003 slave 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 0 1539827869356 12 connected cb8c114d44d289687798508232d31e0a065fdab5 192.168.81.100:9000 slave 6f369311b0ca4c503f337c4bb23424eed3eeb188 0 1539827871370 9 connected [root@mysql ~]# redis-trib.rb reshard --from cf74b2d9570665b74525802462c74cf2e072ef99 --to 6f369311b0ca4c503f337c4bb23424eed3eeb188 --slots 2730 127.0.0.1:9002# 遷移槽,把192.168.81.101:9000剩餘的槽遷移到別的節點 >>> Performing Cluster Check (using node 127.0.0.1:9002) M: 6f369311b0ca4c503f337c4bb23424eed3eeb188 127.0.0.1:9002 slots:6827-10922 (4096 slots) master 1 additional replica(s) S: cb8c114d44d289687798508232d31e0a065fdab5 192.168.81.100:9000 slots: (0 slots) slave replicates 6f369311b0ca4c503f337c4bb23424eed3eeb188 S: ac153a3c1fb10d9d502b153c32dec65c85b2f97c 192.168.81.100:9002 slots: (0 slots) slave replicates fceba6001b95e2169ddd6622436b213324fe8f77 S: 2ff22acb1e006b9881abc80238e15b4e3fcefbef 127.0.0.1:9003 slots: (0 slots) slave replicates 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 S: 71f5695dc1f4322c8ea9066d1b3cd8bb0ab7a329 192.168.81.100:9001 slots: (0 slots) slave replicates cf74b2d9570665b74525802462c74cf2e072ef99 M: cf74b2d9570665b74525802462c74cf2e072ef99 127.0.0.1:9000 slots:2731-5460 (2730 slots) master 1 additional replica(s) M: fceba6001b95e2169ddd6622436b213324fe8f77 127.0.0.1:9001 slots:12288-16383 (4096 slots) master 1 additional replica(s) M: 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 192.168.81.100:9003 slots:0-2730,5461-6826,10923-12287 (5462 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. Ready to move 2730 slots. Source nodes: M: cf74b2d9570665b74525802462c74cf2e072ef99 127.0.0.1:9000 slots:2731-5460 (2730 slots) master 1 additional replica(s) Destination node: M: 6f369311b0ca4c503f337c4bb23424eed3eeb188 127.0.0.1:9002 slots:6827-10922 (4096 slots) master 1 additional replica(s) Resharding plan: Moving slot 2731 from cf74b2d9570665b74525802462c74cf2e072ef99 Moving slot 2732 from cf74b2d9570665b74525802462c74cf2e072ef99 ... Moving slot 5459 from cf74b2d9570665b74525802462c74cf2e072ef99 Moving slot 5460 from cf74b2d9570665b74525802462c74cf2e072ef99 Do you want to proceed with the proposed reshard plan (yes/no)? yes Moving slot 2731 from 127.0.0.1:9000 to 127.0.0.1:9002: Moving slot 2732 from 127.0.0.1:9000 to 127.0.0.1:9002: ... Moving slot 5459 from 127.0.0.1:9000 to 127.0.0.1:9002: Moving slot 5460 from 127.0.0.1:9000 to 127.0.0.1:9002: [root@mysql ~]# redis-cli -p 9001 cluster nodes# 檢視叢集中節點的資訊 71f5695dc1f4322c8ea9066d1b3cd8bb0ab7a329 192.168.81.100:9001 slave 6f369311b0ca4c503f337c4bb23424eed3eeb188 0 1539828016103 13 connected 6f369311b0ca4c503f337c4bb23424eed3eeb188 127.0.0.1:9002 master - 0 1539828017610 13 connected 2731-5460 6827-10922 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 192.168.81.100:9003 master - 0 1539828016605 12 connected 0-2730 5461-6826 10923-12287 fceba6001b95e2169ddd6622436b213324fe8f77 127.0.0.1:9001 myself,master - 0 0 2 connected 12288-16383 cf74b2d9570665b74525802462c74cf2e072ef99 127.0.0.1:9000 master - 0 1539828013588 1 connected# 192.168.81.101:9000上已經沒有槽了 ac153a3c1fb10d9d502b153c32dec65c85b2f97c 192.168.81.100:9002 slave fceba6001b95e2169ddd6622436b213324fe8f77 0 1539828015601 6 connected 2ff22acb1e006b9881abc80238e15b4e3fcefbef 127.0.0.1:9003 slave 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 0 1539828014593 12 connected cb8c114d44d289687798508232d31e0a065fdab5 192.168.81.100:9000 slave 6f369311b0ca4c503f337c4bb23424eed3eeb188 0 1539828012582 13 connected [root@mysql ~]# redis-cli -p 9001 cluster nodes |grep master 6f369311b0ca4c503f337c4bb23424eed3eeb188 127.0.0.1:9002 master - 0 1539828068951 13 connected 2731-5460 6827-10922 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 192.168.81.100:9003 master - 0 1539828071970 12 connected 0-2730 5461-6826 10923-12287 fceba6001b95e2169ddd6622436b213324fe8f77 127.0.0.1:9001 myself,master - 0 0 2 connected 12288-16383 cf74b2d9570665b74525802462c74cf2e072ef99 127.0.0.1:9000 master - 0 1539828073980 1 connected [root@mysql ~]# redis-trib.rb del-node 127.0.0.1:9001 cb8c114d44d289687798508232d31e0a065fdab5# 先移除192.168.81.101:9000的slave節點 >>> Removing node cb8c114d44d289687798508232d31e0a065fdab5 from cluster 127.0.0.1:9001 >>> Sending CLUSTER FORGET messages to the cluster... >>> SHUTDOWN the node. [root@mysql ~]# redis-trib.rb del-node 127.0.0.1:9001 cf74b2d9570665b74525802462c74cf2e072ef99# 移除192.168.81.101:9000節點 >>> Removing node cf74b2d9570665b74525802462c74cf2e072ef99 from cluster 127.0.0.1:9001 >>> Sending CLUSTER FORGET messages to the cluster... >>> SHUTDOWN the node. [root@mysql ~]# redis-cli -p 9000# 連線192.168.81.101:9000客戶端,顯示連線失敗 Could not connect to Redis at 127.0.0.1:9000: Connection refused Could not connect to Redis at 127.0.0.1:9000: Connection refused not connected> exit [root@mysql ~]# redis-trib.rb del-node 127.0.0.1:9001 cf74b2d9570665b74525802462c74cf2e072ef99# 移除192.168.81.101:9000節點,顯示移除失敗,因為叢集中已經沒有這個節點了 >>> Removing node cf74b2d9570665b74525802462c74cf2e072ef99 from cluster 127.0.0.1:9001 [ERR] No such node ID cf74b2d9570665b74525802462c74cf2e072ef99 [root@mysql ~]# redis-cli -p 9002 cluster nodes# 檢視叢集中的節點資訊 6f369311b0ca4c503f337c4bb23424eed3eeb188 127.0.0.1:9002 myself,master - 0 0 13 connected 2731-5460 6827-10922 ac153a3c1fb10d9d502b153c32dec65c85b2f97c 192.168.81.100:9002 slave fceba6001b95e2169ddd6622436b213324fe8f77 0 1539828535088 6 connected 2ff22acb1e006b9881abc80238e15b4e3fcefbef 127.0.0.1:9003 slave 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 0 1539828539118 12 connected 71f5695dc1f4322c8ea9066d1b3cd8bb0ab7a329 192.168.81.100:9001 slave 6f369311b0ca4c503f337c4bb23424eed3eeb188 0 1539828536098 13 connected fceba6001b95e2169ddd6622436b213324fe8f77 127.0.0.1:9001 master - 0 1539828537106 2 connected 12288-16383 27266dcfd098dfe2a42361d6ab59edf8fb9f5413 192.168.81.100:9003 master - 0 1539828538114 12 connected 0-2730 5461-6826 10923-12287