精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

2W字詳解Redis集群環(huán)境搭建實踐

數(shù)據(jù)庫 其他數(shù)據(jù)庫 Redis
本文是Redis集群學(xué)習(xí)的實踐總結(jié)(基于Redis 6.0+),詳細(xì)介紹逐步搭建Redis集群環(huán)境的過程,并完成集群伸縮的實踐。

 

本文是Redis集群學(xué)習(xí)的實踐總結(jié)(基于Redis 6.0+),詳細(xì)介紹逐步搭建Redis集群環(huán)境的過程,并完成集群伸縮的實踐。

Redis集群簡介

Redis集群(Redis Cluster) 是Redis提供的分布式數(shù)據(jù)庫方案,通過 分片(sharding) 來進(jìn)行數(shù)據(jù)共享,并提供復(fù)制和故障轉(zhuǎn)移功能。相比于主從復(fù)制、哨兵模式,Redis集群實現(xiàn)了較為完善的高可用方案,解決了存儲能力受到單機限制,寫操作無法負(fù)載均衡的問題。

本文是Redis集群學(xué)習(xí)的實踐總結(jié),詳細(xì)介紹逐步搭建Redis集群環(huán)境的過程,并完成集群伸縮的實踐。

發(fā)布過很多 redis 的優(yōu)質(zhì)文章,可以關(guān)注微信公眾號 Java后端,回復(fù) 666 下載這一本 Java技術(shù)棧文檔。

1 Redis集群環(huán)境搭建

方便起見,這里集群環(huán)境的所有節(jié)點全部位于同一個服務(wù)器上,共6個節(jié)點以端口號區(qū)分,3個主節(jié)點+3個從節(jié)點。集群的簡單架構(gòu)如圖:

本文基于最新的Redis 6.0+,直接從github下載最新的源碼編譯獲得常用工具 redis-server ,  redis-cli 。值得注意的是,從Redis 5.0以后的版本,集群管理軟件 redis-trib.rb 被集成到 redis-cli 客戶端工具中(詳細(xì)可參考cluster-tutorial)。

本節(jié)介紹集群環(huán)境搭建時,并未借助 redis-trib.rb 快速管理,而是按照標(biāo)準(zhǔn)步驟一步步搭建,這也是為了熟悉集群管理的基本步驟。在集群伸縮實踐一節(jié)將借助 redis-trib.rb 完成集群重新分片工作。

集群的搭建可以分為四步:

  1.  啟動節(jié)點:將節(jié)點以集群方式啟動,此時節(jié)點是獨立的。
  2.  節(jié)點握手:將獨立的節(jié)點連成網(wǎng)絡(luò)。
  3.  槽指派:將16384個槽位分配給主節(jié)點,以達(dá)到分片保存數(shù)據(jù)庫鍵值對的效果。
  4.  主從復(fù)制:為從節(jié)點指定主節(jié)點。

1.1 啟動節(jié)點

每個節(jié)點初始狀態(tài)仍為 Master服務(wù)器,唯一不同的是:使用 Cluster 模式啟動。需要對配置文件進(jìn)行修改,以端口號為6379的節(jié)點為例,主要修改如下幾項: 

  1. # redis_6379_cluster.conf  
  2. port 6379  
  3. cluster-enabled yes  
  4. cluster-config-file "node-6379.conf"  
  5. logfile "redis-server-6379.log"  
  6. dbfilename "dump-6379.rdb"  
  7. daemonize yes 

其中 cluster-config-file 參數(shù)指定了集群配置文件的位置,每個節(jié)點在運行過程中,會維護(hù)一份集群配置文件;每當(dāng)集群信息發(fā)生變化時(如增減節(jié)點),集群內(nèi)所有節(jié)點會將最新信息更新到該配置文件;當(dāng)節(jié)點重啟后,會重新讀取該配置文件,獲取集群信息,可以方便的重新加入到集群中。也就是說,當(dāng)Redis節(jié)點以集群模式啟動時,會首先尋找是否有集群配置文件,如果有則使用文件中的配置啟動,如果沒有,則初始化配置并將配置保存到文件中。集群配置文件由Redis節(jié)點維護(hù),不需要人工修改。

為6個節(jié)點修改好相應(yīng)的配置文件后,即可利用 redis-server redis_xxxx_cluster.conf 工具啟動6個服務(wù)器(xxxx表示端口號,對應(yīng)相應(yīng)的配置文件)。利用ps命令查看進(jìn)程: 

  1. $ ps -aux | grep redis  
  2. ... 800  0.1  0.0  49584  2444 ?        Ssl  20:42   0:00 redis-server 127.0.0.1:6379 [cluster]  
  3. ... 805  0.1  0.0  49584  2440 ?        Ssl  20:42   0:00 redis-server 127.0.0.1:6380 [cluster]  
  4. ... 812  0.3  0.0  49584  2436 ?        Ssl  20:42   0:00 redis-server 127.0.0.1:6381 [cluster]  
  5. ... 817  0.1  0.0  49584  2432 ?        Ssl  20:43   0:00 redis-server 127.0.0.1:6479 [cluster]  
  6. ... 822  0.0  0.0  49584  2380 ?        Ssl  20:43   0:00 redis-server 127.0.0.1:6480 [cluster]  
  7. ... 827  0.5  0.0  49584  2380 ?        Ssl  20:43   0:00 redis-server 127.0.0.1:6481 [cluster] 

1.2 節(jié)點握手

1.1中將每個節(jié)點啟動后,節(jié)點間是相互獨立的,他們都處于一個只包含自己的集群當(dāng)中,以端口號6379的服務(wù)器為例,利用 CLUSTER NODES 查看當(dāng)前集群包含的節(jié)點。 

  1. 127.0.0.1:6379> CLUSTER NODES  
  2. 37784b3605ad216fa93e976979c43def42bf763d :6379@16379 myself,master - 0 0 0 connected 449 4576 5798 7568 8455 12706 

我們需要將各個獨立的節(jié)點連接起來,構(gòu)成一個包含多個節(jié)點的集群,使用 CLUSTER MEET 命令。

  1. $ redis-cli -p 6379 -c          # -c 選項指定以Cluster模式運行redis-cli 127.0.0.1:6379> CLUSTER MEET 127.0.0.1 6380 OK 127.0.0.1:6379> CLUSTER MEET 127.0.0.1 6381 OK 127.0.0.1:6379> CLUSTER MEET 127.0.0.1 6480 OK 127.0.0.1:6379> CLUSTER MEET 127.0.0.1 6381 OK 127.0.0.1:6379> CLUSTER MEET 127.0.0.1 6382 OK 

再次查看此時集群中包含的節(jié)點情況: 

  1. 127.0.0.1:6379> CLUSTER NODES  
  2. c47598b25205cc88abe2e5094d5bfd9ea202335f 127.0.0.1:6380@16380 master - 0 1603632309283 4 connected  
  3. 87b7dfacde34b3cf57d5f46ab44fd6fffb2e4f52 127.0.0.1:6379@16379 myself,master - 0 1603632308000 1 connected  
  4. 51081a64ddb3ccf5432c435a8cf20d45ab795dd8 127.0.0.1:6381@16381 master - 0 1603632310292 2 connected  
  5. 9d587b75bdaed26ca582036ed706df8b2282b0aa 127.0.0.1:6481@16481 master - 0 1603632309000 5 connected  
  6. 4c23b25bd4bcef7f4b77d8287e330ae72e738883 127.0.0.1:6479@16479 master - 0 1603632308000 3 connected  
  7. 32ed645a9c9d13ca68dba5a147937fb1d05922ee 127.0.0.1:6480@16480 master - 0 1603632311302 0 connected 

可以發(fā)現(xiàn)此時6個節(jié)點均作為主節(jié)點加入到集群中, CLUSTER NODES 返回的結(jié)果各項含義如下:

  1. <id> <ip:port@cport> <flags> <master> <ping-sent> <pong-recv> <config-epoch> <link-state> <slot> <slot> ... <slot> 
  •  節(jié)點id: 由40個16進(jìn)制字符串組成,節(jié)點id只在集群初始化時創(chuàng)建一次,然后保存到集群配置文件(即前文提到的cluster-config-file)中,以后節(jié)點重新啟動時會直接在集群配置文件中讀取。
  •  port@cport: 前者為普通端口,用于為客戶端提供服務(wù);后者為集群端口,分配方法為:普通端口+10000,只用于節(jié)點間的通訊。

其余各項的詳細(xì)解釋可以參考官方文檔cluster nodes。

1.3 槽指派

Redis集群通過分片(sharding)的方式保存數(shù)據(jù)庫的鍵值對,整個數(shù)據(jù)庫被分為16384個槽(slot),數(shù)據(jù)庫每個鍵都屬于這16384個槽的一個,集群中的每個節(jié)點都可以處理0個或者最多16384個slot。

槽是數(shù)據(jù)管理和遷移的基本單位。當(dāng)數(shù)據(jù)庫中的16384個槽都分配了節(jié)點時,集群處于上線狀態(tài)(ok);如果有任意一個槽沒有分配節(jié)點,則集群處于下線狀態(tài)(fail)。

注意,只有主節(jié)點有處理槽的能力,如果將槽指派步驟放在主從復(fù)制之后,并且將槽位分配給從節(jié)點,那么集群將無法正常工作(處于下線狀態(tài))。

利用 CLUSTER ADDSLOTS 

  1. redis-cli  -p 6379 cluster addslots {0..5000}  
  2. redis-cli  -p 6380 cluster addslots {5001..10000}  
  3. redis-cli  -p 6381 cluster addslots {10001..16383} 

槽指派后集群中節(jié)點情況如下: 

  1. 127.0.0.1:6379> CLUSTER NODES  
  2. c47598b25205cc88abe2e5094d5bfd9ea202335f 127.0.0.1:6380@16380 master - 0 1603632880310 4 connected 5001-10000 87b7dfacde34b3cf57d5f46ab44fd6fffb2e4f52 127.0.0.1:6379@16379 myself,master - 0 1603632879000 1 connected 0-5000 51081a64ddb3ccf5432c435a8cf20d45ab795dd8 127.0.0.1:6381@16381 master - 0 1603632879000 2 connected 10001-16383 9d587b75bdaed26ca582036ed706df8b2282b0aa 127.0.0.1:6481@16481 master - 0 1603632878000 5 connected 
  3. 4c23b25bd4bcef7f4b77d8287e330ae72e738883 127.0.0.1:6479@16479 master - 0 1603632880000 3 connected 
  4. 32ed645a9c9d13ca68dba5a147937fb1d05922ee 127.0.0.1:6480@16480 master - 0 1603632881317 0 connected 
  5. 127.0.0.1:6379> CLUSTER INFO  
  6. cluster_state:ok                        # 集群處于上線狀態(tài)  
  7. cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:5 cluster_my_epoch:1 cluster_stats_messages_ping_sent:4763 cluster_stats_messages_pong_sent:4939 cluster_stats_messages_meet_sent:5 cluster_stats_messages_sent:9707 cluster_stats_messages_ping_received:4939 cluster_stats_messages_pong_received:4768 cluster_stats_messages_received:9707 

1.4 主從復(fù)制

上述步驟后,集群節(jié)點均作為主節(jié)點存在,仍不能實現(xiàn)Redis的高可用,配置主從復(fù)制之后,才算真正實現(xiàn)了集群的高可用功能。 

  1. CLUSTER REPLICATE <node_id> 用來讓集群中接收命令的節(jié)點成為 node_id 所指定節(jié)點的從節(jié)點,并開始對主節(jié)點進(jìn)行復(fù)制。 
  2.  
  3. redis-cli  -p 6479 cluster replicate 87b7dfacde34b3cf57d5f46ab44fd6fffb2e4f52  
  4. redis-cli  -p 6480 cluster replicate c47598b25205cc88abe2e5094d5bfd9ea202335f  
  5. redis-cli  -p 6481 cluster replicate 51081a64ddb3ccf5432c435a8cf20d45ab795dd8  
  6. 127.0.0.1:6379> CLUSTER NODES  
  7. c47598b25205cc88abe2e5094d5bfd9ea202335f 127.0.0.1:6380@16380 master - 0 1603633105211 4 connected 5001-10000 87b7dfacde34b3cf57d5f46ab44fd6fffb2e4f52 127.0.0.1:6379@16379 myself,master - 0 1603633105000 1 connected 0-5000 51081a64ddb3ccf5432c435a8cf20d45ab795dd8 127.0.0.1:6381@16381 master - 0 1603633105000 2 connected 10001-16383 9d587b75bdaed26ca582036ed706df8b2282b0aa 127.0.0.1:6481@16481 slave 51081a64ddb3ccf5432c435a8cf20d45ab795dd8 0 1603633107229 5 connected 
  8. 4c23b25bd4bcef7f4b77d8287e330ae72e738883 127.0.0.1:6479@16479 slave 87b7dfacde34b3cf57d5f46ab44fd6fffb2e4f52 0 1603633106221 3 connected 
  9. 32ed645a9c9d13ca68dba5a147937fb1d05922ee 127.0.0.1:6480@16480 slave c47598b25205cc88abe2e5094d5bfd9ea202335f 0 1603633104000 4 connected 

順帶補充,上述步驟1.2,1.3,1.4可以利用 redis-trib.rb 工具整體實現(xiàn),在Redis 5.0之后直接利用 redis-cli 完成,參考命令如下:

  1. redis-cli --cluster create  127.0.0.1:6379 127.0.0.1:6479  127.0.0.1:6380 127.0.0.1:6480  127.0.0.1:6381 127.0.0.1:6481  --cluster-replicas 1 

--cluster-replicas 1 指示給定的創(chuàng)建節(jié)點列表是以主節(jié)點+從節(jié)點對組成的。

1.5 在集群中執(zhí)行命令

集群此時處于上線狀態(tài),可以通過客戶端向集群中的節(jié)點發(fā)送命令。接收命令的節(jié)點會計算出命令要處理的鍵屬于哪個槽,并檢查這個槽是否指派給自己。

  •   如果鍵所在的slot剛好指派給了當(dāng)前節(jié)點,會直接執(zhí)行這個命令。
  •  否則,節(jié)點向客戶端返回 MOVED 錯誤,指引客戶端轉(zhuǎn)向 redirect 至正確的節(jié)點,并再次發(fā)送此前的命令。

此處,我們利用 CLUSTER KEYSLOT 查看到鍵 name 所在槽號為5798(被分配在6380節(jié)點),當(dāng)對此鍵操作時,會被重定向到相應(yīng)的節(jié)點。對鍵 fruits 的操作與此類似。 

  1. 127.0.0.1:6379> CLUSTER KEYSLOT name  
  2. (integer) 5798  
  3. 127.0.0.1:6379> set name huey -> Redirected to slot [5798] located at 127.0.0.1:6380 OK 127.0.0.1:6380>  
  4. 127.0.0.1:6379> get fruits -> Redirected to slot [14943] located at 127.0.0.1:6381  
  5. "apple"  
  6. 127.0.0.1:6381> 

值得注意的是,當(dāng)我們將命令通過客戶端發(fā)送給一個從節(jié)點時,命令會被重定向至對應(yīng)的主節(jié)點。 

  1. 127.0.0.1:6480> KEYS *  
  2. 1) "name"  
  3. 127.0.0.1:6480> get name -> Redirected to slot [5798] located at 127.0.0.1:6380  
  4. "huey" 

1.6 集群故障轉(zhuǎn)移

集群中主節(jié)點下線時,復(fù)制此主節(jié)點的所有的從節(jié)點將會選出一個節(jié)點作為新的主節(jié)點,并完成故障轉(zhuǎn)移。和主從復(fù)制的配置相似,當(dāng)原先的從節(jié)點再次上線,它會被作為新主節(jié)點的的從節(jié)點存在于集群中。

下面模擬6379節(jié)點宕機的情況(將其SHUTDOWN),可以觀察到其從節(jié)點6479將作為新的主節(jié)點繼續(xù)工作。 

  1. 462:S 26 Oct 14:08:12.750 * FAIL message received from c47598b25205cc88abe2e5094d5bfd9ea202335f about 87b7dfacde34b3cf57d5f46ab44fd6fffb2e4f52 462:S 26 Oct 14:08:12.751 # Cluster state changed: fail 462:S 26 Oct 14:08:12.829 # Start of election delayed for 595 milliseconds (rank #0, offset 9160). 462:S 26 Oct 14:08:13.434 # Starting a failover election for epoch 6. 462:S 26 Oct 14:08:13.446 # Failover election won: I'm the new master. 
  2. 462:S 26 Oct 14:08:13.447 # configEpoch set to 6 after successful failover 462:M 26 Oct 14:08:13.447 # Setting secondary replication ID to d357886e00341b57bf17e46b6d9f8cf53b7fad21, valid up to offset: 9161. New replication ID is adbf41b16075ea22b17f145186c53c4499864d5b 462:M 26 Oct 14:08:13.447 * Discarding previously cached master state. 462:M 26 Oct 14:08:13.448 # Cluster state changed: ok 

 6379節(jié)點從宕機狀態(tài)恢復(fù)后,將作為6380節(jié)點的從節(jié)點存在。 

  1. 127.0.0.1:6379> CLUSTER NODES  
  2. 51081a64ddb3ccf5432c435a8cf20d45ab795dd8 127.0.0.1:6381@16381 master - 0 1603692968000 2 connected 10001-16383 c47598b25205cc88abe2e5094d5bfd9ea202335f 127.0.0.1:6380@16380 master - 0 1603692968504 0 connected 5001-10000 4c23b25bd4bcef7f4b77d8287e330ae72e738883 127.0.0.1:6479@16479 master - 0 1603692967495 6 connected 0-5000 87b7dfacde34b3cf57d5f46ab44fd6fffb2e4f52 127.0.0.1:6379@16379 myself,slave 4c23b25bd4bcef7f4b77d8287e330ae72e738883 0 1603692964000 1 connected 
  3. 9d587b75bdaed26ca582036ed706df8b2282b0aa 127.0.0.1:6481@16481 slave 51081a64ddb3ccf5432c435a8cf20d45ab795dd8 0 1603692967000 4 connected 
  4. 32ed645a9c9d13ca68dba5a147937fb1d05922ee 127.0.0.1:6480@16480 slave c47598b25205cc88abe2e5094d5bfd9ea202335f 0 1603692967000 5 connected 

前文提到 cluster-config-file 會記錄下集群節(jié)點的狀態(tài),打開節(jié)點6379的配置文件 nodes-6379.conf ,可以看到 CLUSTER NODES 所示信息均被保存在配置文件中: 

  1. 51081a64ddb3ccf5432c435a8cf20d45ab795dd8 127.0.0.1:6381@16381 master - 0 1603694920206 2 connected 10001-16383 c47598b25205cc88abe2e5094d5bfd9ea202335f 127.0.0.1:6380@16380 master - 0 1603694916000 0 connected 5001-10000 4c23b25bd4bcef7f4b77d8287e330ae72e738883 127.0.0.1:6479@16479 master - 0 1603694920000 6 connected 0-5000 87b7dfacde34b3cf57d5f46ab44fd6fffb2e4f52 127.0.0.1:6379@16379 myself,slave 4c23b25bd4bcef7f4b77d8287e330ae72e738883 0 1603694918000 1 connected 
  2. 9d587b75bdaed26ca582036ed706df8b2282b0aa 127.0.0.1:6481@16481 slave 51081a64ddb3ccf5432c435a8cf20d45ab795dd8 0 1603694919000 4 connected 
  3. 32ed645a9c9d13ca68dba5a147937fb1d05922ee 127.0.0.1:6480@16480 slave c47598b25205cc88abe2e5094d5bfd9ea202335f 0 1603694919200 5 connected 
  4. vars currentEpoch 6 lastVoteEpoch 0 

2 集群伸縮實踐

集群伸縮的關(guān)鍵在于對集群的進(jìn)行重新分片,實現(xiàn)槽位在節(jié)點間的遷移。本節(jié)將以在集群中添加節(jié)點和刪除節(jié)點為例,對槽遷移進(jìn)行實踐。

借助于 redis-cli 中集成的 redis-trib.rb 工具進(jìn)行槽位的管理,工具的幫助菜單如下: 

  1. $ redis-cli --cluster help  
  2. Cluster Manager Commands:  
  3.   create         host1:port1 ... hostN:portN --cluster-replicas <arg> check          host:port --cluster-search-multiple-owners  
  4.   info           host:port  
  5.   fix            host:port --cluster-search-multiple-owners --cluster-fix-with-unreachable-masters  
  6.   reshard        host:port --cluster-from <arg>  
  7.                  --cluster-to <arg>  
  8.                  --cluster-slots <arg>  
  9.                  --cluster-yes --cluster-timeout <arg>  
  10.                  --cluster-pipeline <arg>  
  11.                  --cluster-replace  
  12.   rebalance      host:port --cluster-weight <node1node1=w1...nodeN=wN>  
  13.                  --cluster-use-empty-masters --cluster-timeout <arg>  
  14.                  --cluster-simulate --cluster-pipeline <arg>  
  15.                  --cluster-threshold <arg>  
  16.                  --cluster-replace  
  17.   add-node       new_host:new_port existing_host:existing_port --cluster-slave --cluster-master-id <arg> del-node       host:port node_id  
  18.   call           host:port command arg arg .. arg set-timeout    host:port milliseconds  
  19.   import         host:port --cluster-from <arg>  
  20.                  --cluster-copy --cluster-replace 
  21.   backup         host:port backup_directory  
  22.   help  
  23. For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster. 

2.1 集群伸縮-添加節(jié)點

考慮在集群中添加兩個節(jié)點,端口號為6382和6482,其中節(jié)點6482對6382進(jìn)行復(fù)制。

(1) 啟動節(jié)點:按照1.1中介紹的步驟,啟動6382和6482節(jié)點。

(2) 節(jié)點握手:借助 redis-cli --cluster add-node 命令分別添加節(jié)點6382和6482。 

  1. redis-cli --cluster add-node 127.0.0.1:6382 127.0.0.1:6379 redis-cli --cluster add-node 127.0.0.1:6482 127.0.0.1:6379  
  2. $ redis-cli --cluster add-node 127.0.0.1:6382 127.0.0.1:6379  
  3. >>> Adding node 127.0.0.1:6382 to cluster 127.0.0.1:6379  
  4. >>> Performing Cluster Check (using node 127.0.0.1:6379)  
  5. S: 87b7dfacde34b3cf57d5f46ab44fd6fffb2e4f52 127.0.0.1:6379 slots: (0 slots) slave  
  6.     replicates 4c23b25bd4bcef7f4b77d8287e330ae72e738883  
  7. M: 51081a64ddb3ccf5432c435a8cf20d45ab795dd8 127.0.0.1:6381 slots:[10001-16383] (6383 slots) master 1 additional replica(s)  
  8. M: c47598b25205cc88abe2e5094d5bfd9ea202335f 127.0.0.1:6380 slots:[5001-10000] (5000 slots) master 1 additional replica(s)  
  9. M: 4c23b25bd4bcef7f4b77d8287e330ae72e738883 127.0.0.1:6479 slots:[0-5000] (5001 slots) master 1 additional replica(s)  
  10. S: 9d587b75bdaed26ca582036ed706df8b2282b0aa 127.0.0.1:6481 slots: (0 slots) slave  
  11.     replicates 51081a64ddb3ccf5432c435a8cf20d45ab795dd8  
  12. S: 32ed645a9c9d13ca68dba5a147937fb1d05922ee 127.0.0.1:6480 slots: (0 slots) slave  
  13.     replicates c47598b25205cc88abe2e5094d5bfd9ea202335f  
  14. [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage...  
  15. [OK] All 16384 slots covered. >>> Send CLUSTER MEET to node 127.0.0.1:6382 to make it join the cluster.  
  16. [OK] New node added correctly.  
  17. ```shell  
  18. 3) 重新分片:借助 redis-cli --cluster reshard 命令對集群重新分片,使得各節(jié)點槽位均衡(分別從節(jié)點6379/6380/6381中遷移一些slot到節(jié)點6382中)。需要指定:  
  19. * 移動的槽位數(shù):最終平均每個主節(jié)點有4096個slot,因此總共移動4096 slots  
  20. * 接收槽位的目標(biāo)節(jié)點ID:節(jié)點6382的ID  
  21. * 移出槽位的源節(jié)點ID:節(jié)點6379/6380/6381的ID  
  22. ```shell  
  23. $ redis-cli --cluster reshard 127.0.0.1 6479  
  24. >>> Performing Cluster Check (using node 127.0.0.1:6479)  
  25. M: 4c23b25bd4bcef7f4b77d8287e330ae72e738883 127.0.0.1:6479 slots:[0-5000] (5001 slots) master 1 additional replica(s)  
  26. S: 32ed645a9c9d13ca68dba5a147937fb1d05922ee 127.0.0.1:6480 slots: (0 slots) slave  
  27.   replicates c47598b25205cc88abe2e5094d5bfd9ea202335f  
  28. M: 706f399b248ed3a080cf1d4e43047a79331b714f 127.0.0.1:6482 slots: (0 slots) master  
  29. M: af81109fc29f69f9184ce9512c46df476fe693a3 127.0.0.1:6382 slots: (0 slots) master  
  30. M: 51081a64ddb3ccf5432c435a8cf20d45ab795dd8 127.0.0.1:6381 slots:[10001-16383] (6383 slots) master 1 additional replica(s)  
  31. S: 9d587b75bdaed26ca582036ed706df8b2282b0aa 127.0.0.1:6481 slots: (0 slots) slave  
  32.   replicates 51081a64ddb3ccf5432c435a8cf20d45ab795dd8  
  33. S: 87b7dfacde34b3cf57d5f46ab44fd6fffb2e4f52 127.0.0.1:6379 slots: (0 slots) slave  
  34.   replicates 4c23b25bd4bcef7f4b77d8287e330ae72e738883  
  35. M: c47598b25205cc88abe2e5094d5bfd9ea202335f 127.0.0.1:6380 slots:[5001-10000] (5000 slots) master 1 additional replica(s)  
  36. [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage...  
  37. [OK] All 16384 slots covered.  
  38. How many slots do you want to move (from 1 to 16384)? 4096 What is the receiving node ID? 

(4) 設(shè)置主從關(guān)系: 

  1. redis-cli -p 6482 cluster replicate af81109fc29f69f9184ce9512c46df476fe693a3   
  2. 127.0.0.1:6482> CLUSTER NODES  
  3. 32ed645a9c9d13ca68dba5a147937fb1d05922ee 127.0.0.1:6480@16480 slave c47598b25205cc88abe2e5094d5bfd9ea202335f 0 1603694930000 0 connected 
  4. 51081a64ddb3ccf5432c435a8cf20d45ab795dd8 127.0.0.1:6381@16381 master - 0 1603694931000 2 connected 11597-16383 9d587b75bdaed26ca582036ed706df8b2282b0aa 127.0.0.1:6481@16481 slave 51081a64ddb3ccf5432c435a8cf20d45ab795dd8 0 1603694932000 2 connected 
  5. 706f399b248ed3a080cf1d4e43047a79331b714f 127.0.0.1:6482@16482 myself,slave af81109fc29f69f9184ce9512c46df476fe693a3 0 1603694932000 8 connected 
  6. 87b7dfacde34b3cf57d5f46ab44fd6fffb2e4f52 127.0.0.1:6379@16379 slave 4c23b25bd4bcef7f4b77d8287e330ae72e738883 0 1603694932000 6 connected 
  7. c47598b25205cc88abe2e5094d5bfd9ea202335f 127.0.0.1:6380@16380 master - 0 1603694933678 0 connected 6251-10000 4c23b25bd4bcef7f4b77d8287e330ae72e738883 127.0.0.1:6479@16479 master - 0 1603694932669 6 connected 1250-5000 af81109fc29f69f9184ce9512c46df476fe693a3 127.0.0.1:6382@16382 master - 0 1603694933000 9 connected 0-1249 5001-6250 10001-11596 

2.2 集群伸縮-刪除節(jié)點

這里考慮將新添加的兩個節(jié)點6382和6482刪除,需要將節(jié)點6382上分配的槽位遷移到其他節(jié)點。

(1) 重新分片: 同樣借助 redis-cli --cluster reshard 命令,將6382節(jié)點上的槽位全部轉(zhuǎn)移到節(jié)點6479上。 

  1. $ redis-cli --cluster reshard 127.0.0.1 6382  
  2. >>> Performing Cluster Check (using node 127.0.0.1:6382)  
  3. M: af81109fc29f69f9184ce9512c46df476fe693a3 127.0.0.1:6382 slots:[0-1249],[5001-6250],[10001-11596] (4096 slots) master 1 additional replica(s)  
  4. M: 51081a64ddb3ccf5432c435a8cf20d45ab795dd8 127.0.0.1:6381 slots:[11597-16383] (4787 slots) master 1 additional replica(s)  
  5. S: 87b7dfacde34b3cf57d5f46ab44fd6fffb2e4f52 127.0.0.1:6379 slots: (0 slots) slave  
  6.     replicates 4c23b25bd4bcef7f4b77d8287e330ae72e738883  
  7. S: 32ed645a9c9d13ca68dba5a147937fb1d05922ee 127.0.0.1:6480 slots: (0 slots) slave  
  8.     replicates c47598b25205cc88abe2e5094d5bfd9ea202335f  
  9. M: 4c23b25bd4bcef7f4b77d8287e330ae72e738883 127.0.0.1:6479 slots:[1250-5000] (3751 slots) master 1 additional replica(s)  
  10. M: c47598b25205cc88abe2e5094d5bfd9ea202335f 127.0.0.1:6380 slots:[6251-10000] (3750 slots) master 1 additional replica(s)  
  11. S: 706f399b248ed3a080cf1d4e43047a79331b714f 127.0.0.1:6482 slots: (0 slots) slave 
  12.      replicates af81109fc29f69f9184ce9512c46df476fe693a3  
  13. S: 9d587b75bdaed26ca582036ed706df8b2282b0aa 127.0.0.1:6481 slots: (0 slots) slave  
  14.     replicates 51081a64ddb3ccf5432c435a8cf20d45ab795dd8  
  15. [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage...  
  16. [OK] All 16384 slots covered.  
  17. How many slots do you want to move (from 1 to 16384)? 4096 What is the receiving node ID? 4c23b25bd4bcef7f4b77d8287e330ae72e738883  
  18. Please enter all the source node IDs.  
  19. Type 'all' to use all the nodes as source nodes for the hash slots. 
  20.  Type 'done' once you entered all the source nodes IDs.  
  21. Source node #1: af81109fc29f69f9184ce9512c46df476fe693a3  
  22. Source node #2: done  
  23. 127.0.0.1:6379> CLUSTER NODES  
  24. c47598b25205cc88abe2e5094d5bfd9ea202335f 127.0.0.1:6380@16380 master - 0 1603773540922 0 connected 6251-10000 87b7dfacde34b3cf57d5f46ab44fd6fffb2e4f52 127.0.0.1:6379@16379 myself,slave 4c23b25bd4bcef7f4b77d8287e330ae72e738883 0 1603773539000 1 connected 
  25. 4c23b25bd4bcef7f4b77d8287e330ae72e738883 127.0.0.1:6479@16479 master - 0 1603773541000 10 connected 0-6250 10001-11596 706f399b248ed3a080cf1d4e43047a79331b714f 127.0.0.1:6482@16482 slave 4c23b25bd4bcef7f4b77d8287e330ae72e738883 0 1603773541000 10 connected 
  26. 32ed645a9c9d13ca68dba5a147937fb1d05922ee 127.0.0.1:6480@16480 slave c47598b25205cc88abe2e5094d5bfd9ea202335f 0 1603773539000 5 connected 
  27. 9d587b75bdaed26ca582036ed706df8b2282b0aa 127.0.0.1:6481@16481 slave 51081a64ddb3ccf5432c435a8cf20d45ab795dd8 0 1603773541931 4 connected 
  28. af81109fc29f69f9184ce9512c46df476fe693a3 127.0.0.1:6382@16382 master - 0 1603773539000 9 connected 
  29. 51081a64ddb3ccf5432c435a8cf20d45ab795dd8 127.0.0.1:6381@16381 master - 0 1603773540000 2 connected 11597-16383 

(2) 刪除節(jié)點: 利用 redis-cli --cluster del-node 命令依次刪除從節(jié)點6482和主節(jié)點6382。 

  1. $ redis-cli --cluster del-node 127.0.0.1:6482 706f399b248ed3a080cf1d4e43047a79331b714f >>> Removing node 706f399b248ed3a080cf1d4e43047a79331b714f from cluster 127.0.0.1:6482 
  2. >>> Sending CLUSTER FORGET messages to the cluster... >>> Sending CLUSTER RESET SOFT to the deleted node. 
  3. $ redis-cli --cluster del-node 127.0.0.1:6382 af81109fc29f69f9184ce9512c46df476fe693a3 >>> Removing node af81109fc29f69f9184ce9512c46df476fe693a3 from cluster 127.0.0.1:6382 
  4. >>> Sending CLUSTER FORGET messages to the cluster... >>> Sending CLUSTER RESET SOFT to the deleted node. 
  5. 127.0.0.1:6379> CLUSTER NODES 
  6. 47598b25205cc88abe2e5094d5bfd9ea202335f 127.0.0.1:6380@16380 master - 0 1603773679121 0 connected 6251-10000 87b7dfacde34b3cf57d5f46ab44fd6fffb2e4f52 127.0.0.1:6379@16379 myself,slave 4c23b25bd4bcef7f4b77d8287e330ae72e738883 0 1603773677000 1 connected 
  7. 4c23b25bd4bcef7f4b77d8287e330ae72e738883 127.0.0.1:6479@16479 master - 0 1603773678000 10 connected 0-6250 10001-11596 32ed645a9c9d13ca68dba5a147937fb1d05922ee 127.0.0.1:6480@16480 slave c47598b25205cc88abe2e5094d5bfd9ea202335f 0 1603773680130 5 connected 
  8. 9d587b75bdaed26ca582036ed706df8b2282b0aa 127.0.0.1:6481@16481 slave 51081a64ddb3ccf5432c435a8cf20d45ab795dd8 0 1603773677099 4 connected 
  9. 51081a64ddb3ccf5432c435a8cf20d45ab795dd8 127.0.0.1:6381@16381 master - 0 1603773678112 2 connected 11597-16383 

3 總結(jié)

Redis集群環(huán)境的搭建主要包括啟動節(jié)點、節(jié)點握手、槽指派和主從復(fù)制等四個步驟,集群伸縮同樣涉及這幾個方面。借助 redis-cli --cluster 命令來管理集群環(huán)境,不僅能增加簡便性,還能降低操作失誤的風(fēng)險。 

 

責(zé)任編輯:龐桂玉 來源: 互聯(lián)網(wǎng)程序員
相關(guān)推薦

2021-01-07 10:18:03

Redis數(shù)據(jù)庫環(huán)境搭建

2019-09-16 16:05:13

Redis集群模式

2020-10-10 14:19:08

數(shù)據(jù)庫知識點

2021-01-06 14:15:42

線程池Java代碼

2022-02-11 08:41:19

WindowsRedis集群

2020-04-14 21:12:42

Redis集群Linux

2015-05-06 13:34:14

MySQL集群搭建

2010-06-04 17:43:12

Hadoop集群搭建

2021-09-06 07:59:56

死鎖工具多線編程

2009-03-30 17:29:26

四核服務(wù)器惠普

2024-03-07 16:03:56

RedisDocker

2024-09-11 20:05:56

2011-08-25 15:02:17

Lua環(huán)境搭建EditPlus

2012-11-01 17:15:04

2020-06-01 08:55:56

WindowsRedis集群

2022-05-31 08:04:03

Redis高可用集群

2022-10-14 15:44:03

大數(shù)據(jù)Hadoop

2017-07-11 13:30:12

RedisDockerLinux

2021-04-06 06:04:36

Redis 6.X C集群搭建操作系統(tǒng)
點贊
收藏

51CTO技術(shù)棧公眾號

黄色在线播放| 精品在线观看一区| 中文在线免费二区三区| 97国产精品videossex| 日韩av男人的天堂| 亚洲色图100p| 91精品国产自产精品男人的天堂| 午夜激情一区二区| 神马一区二区影院| www.xxxx国产| 日韩黄色在线观看| 欧美成人免费在线视频| 中文字幕日韩三级片| 日本国产一区| 亚洲成年人影院| 亚洲一区尤物| 人妻精品一区二区三区| 日本aⅴ亚洲精品中文乱码| 欧美日韩xxx| 91麻豆制片厂| 老司机精品视频在线播放| 精品视频在线免费看| 日韩一级片免费视频| 欧洲亚洲精品视频| 国产传媒欧美日韩成人| 国产精品久久久久久久美男| xxxxxx国产| 欧美99久久| 国产一级揄自揄精品视频| 国产精品熟妇一区二区三区四区 | 国产精品国产自产拍在线| 视频一区国产视频| 精品久久国产字幕高潮| 天天天干夜夜夜操| 成人免费网站观看| 亚洲日本一区二区三区| 日韩欧美亚洲在线| 天堂中文在线观看视频| 国产一区欧美一区| 国产日韩在线播放| 国语对白做受69按摩| 亚洲理伦在线| 国语自产精品视频在免费| xxxx日本少妇| 亚洲91精品| 久久精品国产久精国产思思| 欧美激情视频二区| 精品欧美激情在线观看| 国产视频自拍一区| 国产精品入口麻豆| 8x国产一区二区三区精品推荐| 88在线观看91蜜桃国自产| 亚洲成人天堂网| 九色成人搞黄网站| 欧美亚洲高清一区二区三区不卡| 国产三区在线视频| 欧美片第一页| 色综合久久久久久久| 看av免费毛片手机播放| www欧美xxxx| 亚洲成人777| 亚洲中文字幕无码专区| 在线免费看h| 欧美视频在线看| 日韩av在线第一页| 欧美7777| 欧美性欧美巨大黑白大战| 美女网站免费观看视频| 97成人超碰| 欧美精品自拍偷拍动漫精品| 一级黄色片国产| 精品一区二区三区亚洲| 精品久久久久久无| 人妻少妇精品视频一区二区三区| 无码日韩精品一区二区免费| 亚洲精品视频网上网址在线观看 | 成人精品国产一区二区4080| 国产精品一区二区av| 天天操天天操天天操| 久久午夜电影网| 亚洲精品9999| 国内精品不卡| 亚洲国产日韩一区二区| 99热成人精品热久久66| 91精品美女| 欧美xxxxx牲另类人与| 在线免费观看污视频| 国产亚洲电影| 久久精品在线播放| 激情五月色婷婷| 三级久久三级久久久| 国产欧美一区二区三区久久 | 性欧美超级视频| 777色狠狠一区二区三区| av漫画在线观看| 国产探花在线精品| 欧美日本啪啪无遮挡网站| 波多野结衣视频网站| 久久99精品国产.久久久久久| 99re视频| 懂色av中文在线| 一区二区三区欧美日韩| 国产熟人av一二三区| 老司机亚洲精品一区二区| 亚洲精品有码在线| 亚洲波多野结衣| 久久不射2019中文字幕| 91精品在线一区| 日韩在线免费播放| 亚洲黄色免费电影| 欧美日韩亚洲自拍| 国产乱人伦丫前精品视频| 日韩亚洲一区二区| 久久免费激情视频| 国产成人av电影在线播放| 日本一区二区精品| av不卡高清| 777亚洲妇女| 女人十八毛片嫩草av| 亚洲人体偷拍| 亚洲va电影大全| 国产毛片av在线| 天天综合天天综合色| 91制片厂毛片| 在线成人av电影| 在线观看一二三区| av在线综合网| 强开小嫩苞一区二区三区网站 | 国产精品久久网站| 欧美色图另类小说| 1204国产成人精品视频| 在线视频欧美性高潮| av资源免费观看| 成人精品国产免费网站| 精品一区二区三区毛片| 欧美亚洲福利| 中文字幕亚洲一区二区三区五十路 | 久久久久人妻精品一区三寸| 中文字幕一区二区三区日韩精品| 色视频www在线播放国产成人| 无码人妻久久一区二区三区| 91亚洲资源网| 怡红院av亚洲一区二区三区h| 最新国产一区二区| 欧美大片免费看| www.爱爱.com| 亚洲综合在线免费观看| 三级黄色片播放| 91精品国产成人观看| 国产精品专区h在线观看| av在线电影院| 欧美网站一区二区| 久操视频在线观看免费| 视频一区在线视频| 视频在线99| 日韩精品免费观看视频| 亚洲网站视频福利| 在线免费一区二区| 国产精品素人视频| 婷婷免费在线观看| 欧美激情偷拍自拍| 成人黄色午夜影院| 中文字幕在线观看播放| 欧美mv和日韩mv国产网站| 欧美国产精品一二三| 国产91丝袜在线观看| www.xxx麻豆| 欧美日韩大片免费观看| 国产va免费精品高清在线观看| 青青草手机在线| 欧美亚洲高清一区| 免费在线黄色网| 成人永久看片免费视频天堂| 少妇人妻在线视频| 国产毛片一区二区三区| 国产精品在线看| 色yeye免费人成网站在线观看| 精品成人在线观看| 日日骚av一区二区| 中文字幕中文字幕中文字幕亚洲无线| 精品国产午夜福利在线观看| 亚洲激情网站| 日本在线一区| 亚洲1区在线观看| 欧美综合在线第二页| 成人欧美亚洲| 精品久久久三级丝袜| 免费观看成人毛片| 久久久精品日韩欧美| 三上悠亚在线一区二区| 狠狠综合久久| 日韩电影在线播放| 试看120秒一区二区三区| 国产69精品久久久久久| 免费超碰在线| 日韩精品免费观看| 国产精品永久久久久久久久久| 亚洲成人综合网站| 99自拍偷拍视频| 成人动漫视频在线| 亚洲精品20p| 激情亚洲网站| 一区二区在线观看网站| 成人资源在线| 国产精品嫩草影院一区二区| 成年人视频免费在线播放| 一本久久综合亚洲鲁鲁| 精品区在线观看| 在线区一区二视频| 国产精品99精品无码视| 国产精品拍天天在线| 中文字幕三级电影| 国产综合色视频| 农村妇女精品一二区| 伊人久久婷婷| 亚洲制服欧美久久| 亚洲资源网你懂的| 春色成人在线视频| 亚洲精品aa| 国产成人极品视频| 大桥未久在线播放| 欧美精品在线免费观看| 色影院视频在线| 亚洲少妇中文在线| 视频午夜在线| 亚洲第一视频网| va婷婷在线免费观看| 欧美日韩亚洲综合| 国产一级淫片a视频免费观看| 亚洲风情在线资源站| 欧美性猛交xxxxx少妇| 国产精品水嫩水嫩| 黄色片网站免费| 久久亚洲二区三区| 少妇一级淫免费观看| 丁香六月综合激情| 无码人妻少妇色欲av一区二区| 免费高清在线视频一区·| 超碰97人人射妻| 国产精品日本欧美一区二区三区| 日韩欧美不卡在线| 影音先锋久久久| 国产免费一区二区视频| 欧美日韩国产欧| 黄色成人在线免费观看| 欧美1区2区视频| 国产精品igao激情视频| 在线电影一区二区| 69精品丰满人妻无码视频a片| 2023国产精品久久久精品双| 中文视频一区视频二区视频三区| 三区四区不卡| 中文字幕免费在线不卡| 亚洲精品国产首次亮相| 成人国产一区二区三区| 黑丝一区二区三区| 国产av人人夜夜澡人人爽麻豆 | 日韩欧美黄色大片| 丝袜诱惑制服诱惑色一区在线观看| 免费高清在线观看免费| 日韩中文欧美在线| mm131国产精品| 国产乱子伦一区二区三区国色天香| 污污视频在线免费| 成人黄色av电影| 久久久久亚洲AV成人无码国产| 99久久婷婷国产精品综合| 四虎永久免费影院| 亚洲国产精品ⅴa在线观看| 亚洲激情图片网| 最新热久久免费视频| 久久久99精品| 欧美性xxxx在线播放| 嫩草影院一区二区三区| 777午夜精品视频在线播放| 亚洲精品喷潮一区二区三区| 亚洲精品视频免费在线观看| av在线免费观看网| 欧美激情在线狂野欧美精品| 亚洲校园激情春色| 国产一区二区在线播放| 一区二区在线视频观看| 久久久综合香蕉尹人综合网| 成人在线免费观看网站| 水蜜桃在线免费观看| 午夜一区在线| 国产精品久久久久久9999| 成人午夜激情影院| 女人黄色一级片| 亚洲男人天堂av网| 天堂网中文字幕| 欧美一区二区三区人| 日产精品久久久久久久性色| 色综合伊人色综合网站| free性m.freesex欧美| 国产精品pans私拍| 亚洲精品观看| 日本午夜精品一区二区三区| 欧美体内she精视频在线观看| 一本久道综合色婷婷五月| 国产成人欧美日韩在线电影| 亚洲国产日韩一区无码精品久久久| 成人免费视频在线观看| 国产99久久久| 日韩欧美激情一区| av在线天堂| 欧美一区二区三区图| 日韩欧美另类中文字幕| 日本中文不卡| 国产欧美日本| 黑人无套内谢中国美女| 国产精品色婷婷久久58| 国产小视频在线免费观看| 欧美日韩精品二区第二页| 欧美高清成人| 韩剧1988免费观看全集| 91麻豆精品国产91久久久更新资源速度超快| 精品一区二区国产| 欧美激情五月| 性生活免费在线观看| 久久久国际精品| 日本熟妇毛茸茸丰满| 欧美一区二区精品| 日本高清中文字幕在线| 国产成人精品久久久| 青青久久av| www.xxx麻豆| 国产成人综合在线| 国产精品国产三级国产传播| 欧美日韩视频一区二区| 国产小视频在线| 91sao在线观看国产| 红杏aⅴ成人免费视频| 亚洲中文字幕无码一区二区三区| 久久国产生活片100| 青青青视频在线播放| 91国偷自产一区二区三区成为亚洲经典 | 国产不卡人人| 国产麻豆一区二区三区在线观看| 你懂的一区二区| 国产九九九视频| 亚洲色图19p| 国产毛片久久久久| 北条麻妃一区二区三区中文字幕| 另类一区二区三区| 伊人久久大香线蕉av一区| 日韩avvvv在线播放| 日韩免费成人av| 欧美性生活影院| av在线电影免费观看| 国产精品自产拍高潮在线观看| 色婷婷色综合| 九九九九九九九九| 一区二区三区中文字幕精品精品| 精品人妻一区二区三区浪潮在线 | 国产67194| 欧美一二三四区在线| 欧美6一10sex性hd| 国产一区二区三区高清视频| 一本色道久久综合亚洲精品不卡| 少妇户外露出[11p]| 日韩欧美在线一区| 高清日韩av电影| 国产在线观看精品| 一区二区三区网站| 人妻换人妻a片爽麻豆| 黄色成人在线免费| 国模吧精品人体gogo| 国产精品揄拍一区二区| 亚洲在线久久| 国产精品果冻传媒| 日韩欧美精品中文字幕| 91porn在线观看| 91超碰在线电影| 亚洲毛片网站| 五月天婷婷丁香网| 日韩欧美久久一区| 成人影院av| 伊人久久大香线蕉成人综合网 | 欧美午夜不卡视频| 九色porny在线| 国产欧美韩日| 日本免费新一区视频 | 欧美性猛交99久久久久99按摩| 国产精品一二三区视频| 亚洲一区二区在线| 一本久久综合| 小嫩苞一区二区三区| 亚洲精品久久久久久久久久久久久| 奇米777日韩| 喜爱夜蒲2在线| 久久亚洲一区二区三区明星换脸 | 亚洲激情在线视频| 国产第一精品| 国产婷婷一区二区三区| 国产欧美日韩久久| 可以免费看毛片的网站| 国产精品吹潮在线观看| 午夜视频一区| 九九九视频在线观看|