婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 深入淺析Redis 集群伸縮原理

深入淺析Redis 集群伸縮原理

熱門標簽:日本中國地圖標注 北京400電話辦理收費標準 鄭州人工智能電銷機器人系統 貴州電銷卡外呼系統 魔獸2青云地圖標注 宿遷便宜外呼系統平臺 十堰營銷電銷機器人哪家便宜 超呼電話機器人 山東外呼銷售系統招商

Redis 節點分別維護自己負責的槽和對應的數據。伸縮原理:Redis 槽和對應數據在不同節點之間移動

環境:CentOS7 搭建 Redis 集群

一、集群擴容

1. 手動擴容

(1) 準備節點 9007,并加入集群

192.168.11.40:9001> cluster meet 192.168.11.40 9007

【注意】若 cluster meet 加入已存在于其它集群的節點,會導致集群合并,造成數據錯亂!。建議使用 redis-cli 的 add-node:

# 若節點已加入其它集群或包含數據,會報錯
add-node    new_host:new_port existing_host:existing_port
            --cluster-slave  # 直接添加為從節點
            --cluster-master-id arg>  # 從節點對應的主節點id

(2) 遷移槽和數據

槽在遷移過程中集群可以正常提供讀寫服務

首先確定原有節點的哪些槽需要遷移到新節點。確保每個節點負責相似數量的槽,保證各節點的數據均勻

槽是 Redis 集群管理數據的基本單位。數據遷移是逐槽進行的

槽遷移流程:

  • 目標節點準備導入槽的數據:目標節點執行cluster setslot {slot} importing {sourceNodeId}
  • 源節點準備遷出槽的數據:源節點執行cluster setslot {slot} migrating {targetNodeId}
  • 獲取 count 個屬于槽 slot 的鍵:源節點執行cluster getkeysinslot {slot} {count}
  • 遷移鍵:源節點執行migrate {targetIp} {targetPort} "" 0 {timeout} keys {keys...},把鍵通過流水線(pipeline)機制批量遷移到目標節點。Redis3.0.6 后才支持批量遷移
  • 重復上兩步,直到槽下所有的鍵值數據遷移到目標節點
  • 向集群所有主節點通知槽被分配給目標節點:集群內所有主節點執行cluster setslot {slot} node {targetNodeId}

內部偽代碼:

def move_slot(source,target,slot):
    # 目標節點準備導入槽
    target.cluster("setslot",slot,"importing",source.nodeId);
    # 目標節點準備全出槽
    source.cluster("setslot",slot,"migrating",target.nodeId);
    while true :
        # 批量從源節點獲取鍵
        keys = source.cluster("getkeysinslot",slot,pipeline_size);
        if keys.length == 0:
            # 鍵列表為空時,退出循環
            break;
        # 批量遷移鍵到目標節點
        source.call("migrate",target.host,target.port,"",0,timeout,"keys",keys);
        # 向集群所有主節點通知槽被分配給目標節點
        for node in nodes:
            if node.flag == "slave":
                continue;
            node.cluster("setslot",slot,"node",target.nodeId);

(3) 將 9001 的槽 4096 遷移到 9007 中

準備數據

192.168.11.40:9001> set key:test:5028 value:5028
192.168.11.40:9001> set key:test:68253 value:68253

目標節點準備工作

192.168.11.40:9007> cluster nodes
8ccdb0963411ebd05ce21952bdd4b7597825afdc 192.168.11.40:9001@19001 master - 0 1620928869000 2 connected 0-5461
bb1bb0f5f9e0ee67846ba8ec94a38da700e2e80d 192.168.11.40:9007@19007 myself,master - 0 1620928868000 0 connected
...
# 9007 準備導入槽 4096 的數據
192.168.11.40:9007> cluster setslot 4096 importing 8ccdb0963411ebd05ce21952bdd4b7597825afdc
OK
# 槽 4096 已開啟導入狀態
192.168.11.40:9007> cluster nodes
bb1bb0f5f9e0ee67846ba8ec94a38da700e2e80d 192.168.11.40:9007@19007 myself,master - 0 1620928959000 0 connected [4096--8ccdb0963411ebd05ce21952bdd4b7597825afdc]
...

源節點準備工作

# 9001 準備導出槽 4096 數據
192.168.11.40:9001> cluster setslot 4096 migrating bb1bb0f5f9e0ee67846ba8ec94a38da700e2e80d
OK
# 槽 4096 已開啟導出狀態
192.168.11.40:9001> cluster nodes
8ccdb0963411ebd05ce21952bdd4b7597825afdc 192.168.11.40:9001@19001 myself,master - 0 1620929179000 2 connected 0-5461 [4096->-bb1bb0f5f9e0ee67846ba8ec94a38da700e2e80d]
...

導出數據

# 獲取 100 個屬于槽 4096 的鍵
192.168.11.40:9001> cluster getkeysinslot 4096 100
1) "key:test:5028"
2) "key:test:68253"
# 查看數據
192.168.11.40:9001> mget key:test:5028 key:test:68253
1) "value:5028"
2) "value:68253"
# 遷移這2個鍵:migrate 命令保證了每個鍵遷移過程的原子性
192.168.11.40:9001> migrate 192.168.11.40 9007 "" 0 5000 keys key:test:5028 key:test:68253
OK
# 再次查詢會報 ASK 錯誤:引導客戶端找到數據所在的節點
192.168.11.40:9001> mget key:test:5028 key:test:68253
(error) ASK 4096 192.168.11.40:9007

通知所有主節點:槽 4096 指派給 9007

192.168.11.40:9001> cluster setslot 4096 node bb1bb0f5f9e0ee67846ba8ec94a38da700e2e80d
192.168.11.40:9002> cluster setslot 4096 node bb1bb0f5f9e0ee67846ba8ec94a38da700e2e80d
192.168.11.40:9003> cluster setslot 4096 node bb1bb0f5f9e0ee67846ba8ec94a38da700e2e80d
192.168.11.40:9007> cluster setslot 4096 node bb1bb0f5f9e0ee67846ba8ec94a38da700e2e80d

查看最終結果

192.168.11.40:9007> cluster nodes
8ccdb0963411ebd05ce21952bdd4b7597825afdc 192.168.11.40:9001@19001 master - 0 1620931743303 7 connected 0-4095 4097-5461
bb1bb0f5f9e0ee67846ba8ec94a38da700e2e80d 192.168.11.40:9007@19007 myself,master - 0 1620931741000 8 connected 4096
...

2. 使用 redis-cli 擴容

redis-cli 提供了槽重分片功能

reshard 命令參數詳解:

reshard    host:port  # 集群內任意節點地址
           --cluster-from arg>  # 源節點id,逗號分隔
           --cluster-to arg>  # 目標節點id,只有一個
           --cluster-slots arg>  # 遷移多少個槽
           --cluster-yes  # 確認執行reshard
           --cluster-timeout arg>  # 每次 migrate 操作的超時時間,默認 60000ms
           --cluster-pipeline arg>  # 每次批量遷移鍵的數量,默認 10
           --cluster-replace

將 9001、9002、9003 的槽遷移到 9007,共遷移 4096 個

$ /usr/local/redis/bin/redis-cli --cluster reshard 192.168.11.40:9001
M: 8ccdb0963411ebd05ce21952bdd4b7597825afdc 192.168.11.40:9001
   slots:[0-4095],[4097-5461] (5461 slots) master
   1 additional replica(s)
M: bb1bb0f5f9e0ee67846ba8ec94a38da700e2e80d 192.168.11.40:9007
   slots:[4096] (1 slots) master
...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 4096
What is the receiving node ID? bb1bb0f5f9e0ee67846ba8ec94a38da700e2e80d
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: 8ccdb0963411ebd05ce21952bdd4b7597825afdc
Source node #2: 5786e3237c7fa413ed22465d15be721f95e72cfa
Source node #3: 85ceb9826e8aa003169c46fb4ba115c72002d4f9
Source node #4: done
    Moving slot 0 from 8ccdb0963411ebd05ce21952bdd4b7597825afdc
    ...
    Moving slot 12287 from 85ceb9826e8aa003169c46fb4ba115c72002d4f9
Do you want to proceed with the proposed reshard plan (yes/no)? yes
Moving slot 0 from 192.168.11.40:9001 to 192.168.11.40:9007:
...
Moving slot 12287 from 192.168.11.40:9003 to 192.168.11.40:9007:

查看最終結果

192.168.11.40:9007> cluster nodes
8ccdb0963411ebd05ce21952bdd4b7597825afdc 192.168.11.40:9001@19001 master - 0 1620933907753 7 connected 1366-4095 4097-5461
5786e3237c7fa413ed22465d15be721f95e72cfa 192.168.11.40:9002@19002 master - 0 1620933906733 1 connected 6827-10922
85ceb9826e8aa003169c46fb4ba115c72002d4f9 192.168.11.40:9003@19003 master - 0 1620933905000 3 connected 12288-16383
bb1bb0f5f9e0ee67846ba8ec94a38da700e2e80d 192.168.11.40:9007@19007 myself,master - 0 1620933900000 8 connected 0-1365 4096 5462-6826 10923-12287
...

檢查節點之間槽的均衡性

$ /usr/local/redis/bin/redis-cli --cluster rebalance 192.168.11.40:9001
...
[OK] All 16384 slots covered.
*** No rebalancing needed! All nodes are within the 2.00% threshold.

遷移之后所有主節點負責的槽數量差異在 2% 以內,因此集群節點數據相對均勻,無需調整

二、集群收縮

1. 遷移槽

執行 reshard 三次,將數據平均分布到其他三個節點

2. 忘記節點

60s 內對所有節點執行如下操作:(不建議)

# 執行后,會將該節點加入禁用列表(持續 60s),不再向其發送 Gossip 消息
cluster forget {nodeId}

建議使用 redis-cli 的 del-node 忘記節點:

/usr/local/redis/bin/redis-cli --cluster del-node {host:port} {nodeId}

內部偽代碼

def delnode_cluster_cmd(downNode):
    # 下線節點不允許包含slots
    if downNode.slots.length != 0
        exit 1
    end
    # 向集群內節點發送cluster forget
    for n in nodes:
        if n.id == downNode.id:
            # 不能對自己做forget操作
            continue;
        # 如果下線節點有從節點則把從節點指向其他主節點
        if n.replicate  n.replicate.nodeId == downNode.id :
            # 指向擁有最少從節點的主節點
            master = get_master_with_least_replicas();
            n.cluster("replicate",master.nodeId);
        #發送忘記節點命令
        n.cluster('forget',downNode.id)
    # 節點關閉
    downNode.shutdown();

若主從節點都要下線,先下線從,避免全量復制

以上就是Redis 集群伸縮原理的詳細內容,更多關于Redis 集群原理的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • 基于Docker搭建Redis主從集群的實現
  • Docker上實現Redis集群搭建
  • Redis6.0搭建集群Redis-cluster的方法
  • Redis5之后版本的高可用集群搭建的實現
  • 在K8s上部署Redis集群的方法步驟
  • Redis主從集群切換數據丟失的解決方案
  • Redis cluster集群模式的原理解析
  • Redis Cluster集群主從切換的踩坑與填坑
  • 詳解Redis集群搭建的三種方式

標簽:臺州 大慶 北京 江蘇 楊凌 朝陽 果洛 吉安

巨人網絡通訊聲明:本文標題《深入淺析Redis 集群伸縮原理》,本文關鍵詞  深入,淺析,Redis,集群,伸縮,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《深入淺析Redis 集群伸縮原理》相關的同類信息!
  • 本頁收集關于深入淺析Redis 集群伸縮原理的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩av中文字幕一区二区三区| 成人午夜伦理影院| 日韩精品免费视频人成| 99久久精品国产网站| 久久久久久久精| 免费日韩伦理电影| 欧美日韩激情一区二区三区| 亚洲女同ⅹxx女同tv| 懂色av一区二区三区免费观看| 日韩欧美高清一区| 日本免费新一区视频| 欧美四级电影网| 一区二区三区欧美亚洲| 成人av网在线| 日韩一区欧美小说| zzijzzij亚洲日本少妇熟睡| 国产午夜精品理论片a级大结局| 久久99在线观看| 精品欧美乱码久久久久久1区2区| 日本欧美一区二区三区| 欧美日韩精品一区二区天天拍小说| 一区二区激情小说| 91福利国产成人精品照片| 亚洲色图欧洲色图婷婷| 91福利国产成人精品照片| 亚洲图片另类小说| 91福利国产成人精品照片| 伊人色综合久久天天| 在线免费观看日本欧美| 午夜视频一区二区三区| 在线观看91精品国产麻豆| 亚洲午夜久久久久久久久电影网 | 国产精品久久久久影院老司 | 精品sm捆绑视频| 久久精品国产精品亚洲综合| 久久久国产精品午夜一区ai换脸| 国产麻豆9l精品三级站| 久久久www成人免费无遮挡大片| 成人免费视频一区| 亚洲男女一区二区三区| 欧美日韩黄色一区二区| 秋霞电影一区二区| 欧美xingq一区二区| 国产主播一区二区三区| 国产精品视频一区二区三区不卡| 成人a免费在线看| 一区二区三区四区五区视频在线观看| 欧美午夜精品一区二区三区| 免费看日韩a级影片| 国产欧美日韩另类一区| 91传媒视频在线播放| 热久久一区二区| 国产精品视频免费| 欧美日韩国产另类不卡| 国产一区二区免费看| 亚洲精品写真福利| 欧美一区永久视频免费观看| 国产成人综合精品三级| 亚洲一区二区三区四区在线免费观看| 欧美久久久久久蜜桃| 亚洲国产aⅴ成人精品无吗| 国产亚洲成年网址在线观看| 久久精品在线观看| 日韩欧美电影一区| 一区二区在线观看av| 91精品国产一区二区三区| 国产综合色产在线精品| 一区二区三区不卡视频在线观看| 日韩欧美成人午夜| 99久久国产综合色|国产精品| 天堂久久一区二区三区| 国产女人18水真多18精品一级做| 欧美优质美女网站| 国产激情精品久久久第一区二区 | 日本一区二区三区久久久久久久久不| 在线免费观看日本欧美| 国产高清精品在线| 视频一区免费在线观看| 中文字幕一区二区三区在线不卡| 欧美裸体一区二区三区| 99免费精品在线| 国产精品一区二区不卡| 午夜国产不卡在线观看视频| 日韩一区欧美一区| 精品久久久三级丝袜| 色菇凉天天综合网| 国产一区二区三区不卡在线观看| 亚洲国产欧美在线人成| 丁香五精品蜜臀久久久久99网站| 亚洲v中文字幕| 中文字幕日韩av资源站| 精品免费一区二区三区| 欧美久久久一区| 一本到不卡精品视频在线观看| 国产综合色视频| 美女一区二区在线观看| 亚洲一区二区在线视频| 中文字幕亚洲精品在线观看| 国产欧美一区二区精品仙草咪| 欧美精品一区二区三区在线| 91精品蜜臀在线一区尤物| 欧美亚洲愉拍一区二区| 色哟哟精品一区| 成人免费观看视频| 成人av综合在线| 粉嫩欧美一区二区三区高清影视| 韩国v欧美v日本v亚洲v| 九九视频精品免费| 蜜桃av一区二区在线观看| 免费观看91视频大全| 免费在线观看视频一区| 免费的成人av| 国产一区二区导航在线播放| 国产成人亚洲综合色影视| 国产盗摄一区二区三区| 国产999精品久久久久久绿帽| 国产成人在线看| 99视频精品在线| 91福利精品第一导航| 色哟哟一区二区三区| 欧美视频一区二区三区| 欧美三级电影在线看| 青青青爽久久午夜综合久久午夜| 青青草国产成人99久久| 麻豆免费精品视频| 国产精品白丝jk黑袜喷水| 成人h动漫精品一区二区| 色婷婷亚洲综合| 欧美一区二区三区小说| 日韩精品中文字幕在线一区| 日韩精品一区二区三区中文不卡| 久久只精品国产| 国产精品毛片久久久久久| 亚洲一区二区欧美日韩| 日韩精品一二三四| 久久99精品久久久久久| jlzzjlzz欧美大全| 欧洲另类一二三四区| 91精品综合久久久久久| 国产欧美日韩视频一区二区| 亚洲欧美经典视频| 人人超碰91尤物精品国产| 国产伦精品一区二区三区视频青涩 | 国产成a人无v码亚洲福利| 91无套直看片红桃| 在线观看视频一区二区| 欧美大片日本大片免费观看| 久久精品亚洲国产奇米99| 国产精品妹子av| 日本在线播放一区二区三区| 国产一区二区三区精品欧美日韩一区二区三区| 成人午夜私人影院| 欧美精品日韩综合在线| 国产日韩精品一区二区三区在线| 亚洲另类春色国产| 黄网站免费久久| 91蜜桃在线观看| 日韩精品中文字幕在线不卡尤物| 国产精品欧美一级免费| 国产精品久久毛片| 免费人成网站在线观看欧美高清| 成人精品视频一区| 欧美肥胖老妇做爰| 中文字幕欧美激情一区| 日韩精品三区四区| 色婷婷国产精品| 亚洲精品在线网站| 亚洲成人av中文| 成人爱爱电影网址| 日韩欧美视频在线| 亚洲尤物视频在线| 国产91富婆露脸刺激对白 | 老司机一区二区| 日本高清不卡一区| 国产亚洲人成网站| 天天射综合影视| 日本道在线观看一区二区| 国产亚洲精品超碰| 免费美女久久99| 欧美浪妇xxxx高跟鞋交| 亚洲美女视频一区| 日韩一级黄色片| 亚洲午夜精品17c| 2023国产精华国产精品| 午夜精品久久久久久久久| 成人午夜视频网站| 亚洲精品一区二区三区福利| 日韩精品91亚洲二区在线观看| 91在线云播放| 综合久久综合久久| 成人性生交大片| 欧美激情一二三区| 国产成人免费在线| 久久视频一区二区| 久久精品免费观看| 91精品国产91久久久久久最新毛片 | 91蝌蚪porny| 亚洲日韩欧美一区二区在线| 99久久精品国产网站| 成人欧美一区二区三区小说 |