欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

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

深入淺析Redis 集群伸縮原理

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

Redis 節(jié)點分別維護自己負責(zé)的槽和對應(yīng)的數(shù)據(jù)。伸縮原理:Redis 槽和對應(yīng)數(shù)據(jù)在不同節(jié)點之間移動

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

一、集群擴容

1. 手動擴容

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

192.168.11.40:9001> cluster meet 192.168.11.40 9007

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

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

(2) 遷移槽和數(shù)據(jù)

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

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

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

槽遷移流程:

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

內(nèi)部偽代碼:

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

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

準備數(shù)據(jù)

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

目標節(jié)點準備工作

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 準備導(dǎo)入槽 4096 的數(shù)據(jù)
192.168.11.40:9007> cluster setslot 4096 importing 8ccdb0963411ebd05ce21952bdd4b7597825afdc
OK
# 槽 4096 已開啟導(dǎo)入狀態(tài)
192.168.11.40:9007> cluster nodes
bb1bb0f5f9e0ee67846ba8ec94a38da700e2e80d 192.168.11.40:9007@19007 myself,master - 0 1620928959000 0 connected [4096--8ccdb0963411ebd05ce21952bdd4b7597825afdc]
...

源節(jié)點準備工作

# 9001 準備導(dǎo)出槽 4096 數(shù)據(jù)
192.168.11.40:9001> cluster setslot 4096 migrating bb1bb0f5f9e0ee67846ba8ec94a38da700e2e80d
OK
# 槽 4096 已開啟導(dǎo)出狀態(tài)
192.168.11.40:9001> cluster nodes
8ccdb0963411ebd05ce21952bdd4b7597825afdc 192.168.11.40:9001@19001 myself,master - 0 1620929179000 2 connected 0-5461 [4096->-bb1bb0f5f9e0ee67846ba8ec94a38da700e2e80d]
...

導(dǎo)出數(shù)據(jù)

# 獲取 100 個屬于槽 4096 的鍵
192.168.11.40:9001> cluster getkeysinslot 4096 100
1) "key:test:5028"
2) "key:test:68253"
# 查看數(shù)據(jù)
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 錯誤:引導(dǎo)客戶端找到數(shù)據(jù)所在的節(jié)點
192.168.11.40:9001> mget key:test:5028 key:test:68253
(error) ASK 4096 192.168.11.40:9007

通知所有主節(jié)點:槽 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

查看最終結(jié)果

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 命令參數(shù)詳解:

reshard    host:port  # 集群內(nèi)任意節(jié)點地址
           --cluster-from arg>  # 源節(jié)點id,逗號分隔
           --cluster-to arg>  # 目標節(jié)點id,只有一個
           --cluster-slots arg>  # 遷移多少個槽
           --cluster-yes  # 確認執(zhí)行reshard
           --cluster-timeout arg>  # 每次 migrate 操作的超時時間,默認 60000ms
           --cluster-pipeline arg>  # 每次批量遷移鍵的數(shù)量,默認 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:

查看最終結(jié)果

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
...

檢查節(jié)點之間槽的均衡性

$ /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.

遷移之后所有主節(jié)點負責(zé)的槽數(shù)量差異在 2% 以內(nèi),因此集群節(jié)點數(shù)據(jù)相對均勻,無需調(diào)整

二、集群收縮

1. 遷移槽

執(zhí)行 reshard 三次,將數(shù)據(jù)平均分布到其他三個節(jié)點

2. 忘記節(jié)點

60s 內(nèi)對所有節(jié)點執(zhí)行如下操作:(不建議)

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

建議使用 redis-cli 的 del-node 忘記節(jié)點:

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

內(nèi)部偽代碼

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

若主從節(jié)點都要下線,先下線從,避免全量復(fù)制

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

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

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

巨人網(wǎng)絡(luò)通訊聲明:本文標題《深入淺析Redis 集群伸縮原理》,本文關(guān)鍵詞  深入,淺析,Redis,集群,伸縮,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《深入淺析Redis 集群伸縮原理》相關(guān)的同類信息!
  • 本頁收集關(guān)于深入淺析Redis 集群伸縮原理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    精品一区二区免费看| 国产视频精品免费| 欧美日韩免费电影| 亚洲激情男女视频| av动漫一区二区| 一本到不卡精品视频在线观看 | 色综合天天天天做夜夜夜夜做| 国产日产精品1区| 国产成人综合在线播放| 天堂网中文在线观看| 亚洲国产经典视频| 成人综合日日夜夜| 日本乱码高清不卡字幕| 亚洲美女免费视频| 麻豆av免费看| 91精品国产91久久久久久最新毛片 | 99精品桃花视频在线观看| 中文字幕av播放| 亚洲欧美日韩综合aⅴ视频| 91污片在线观看| 精品视频免费在线| 天涯成人国产亚洲精品一区av| 2一3sex性hd| 日韩午夜精品视频| 久久99国产精品成人| 后入内射无码人妻一区| 中文字幕中文字幕在线一区 | 国产成人午夜片在线观看高清观看| 国产又粗又硬视频| 国产精品区一区二区三区| 99久久久久免费精品国产| 欧美日韩一二三| 石原莉奈在线亚洲三区| 日韩人妻无码精品综合区| 国产午夜亚洲精品理论片色戒| 成人手机电影网| 欧美日韩高清一区| 蓝色福利精品导航| 国产成人自拍网站| 亚洲国产精品精华液网站| 国产三级国产精品| 欧美激情资源网| 欧美性猛交xx| 欧美大片拔萝卜| 成人一区在线观看| 在线不卡免费欧美| 国产一区二区三区免费看| 五月婷婷一区二区| 石原莉奈在线亚洲二区| www.4hu95.com四虎| 亚洲欧美色图小说| 中文字字幕码一二三区| 国产精品久久网站| 欧美性生交xxxxx| 久久久国产精华| 91女人视频在线观看| 精品三级在线观看| 波多野结衣一区二区三区 | 日韩在线一二三区| 日本少妇aaa| 亚洲一级不卡视频| 少妇精品无码一区二区免费视频| 亚洲视频电影在线| 爱爱免费小视频| 亚洲精品少妇30p| 西西444www无码大胆| 亚洲女人的天堂| 色无极影院亚洲| 亚洲另类一区二区| 日本综合在线观看| 午夜精品久久久久久久久久| 成人做爰69片免网站| 亚洲国产日韩a在线播放| 91麻豆精品久久毛片一级| 亚洲成a人v欧美综合天堂下载 | 欧美日韩视频专区在线播放| 国产一区二区三区四区五区美女| 欧美系列日韩一区| 国产东北露脸精品视频| 日韩一级大片在线| 91社区在线播放| 欧美激情自拍偷拍| 亚欧洲乱码视频| 亚洲国产视频一区二区| www.av免费| 九一九一国产精品| 69av一区二区三区| 99久久精品99国产精品 | 一区二区不卡免费视频| 亚洲综合精品自拍| 91精品少妇一区二区三区蜜桃臀| 青青国产91久久久久久| 在线观看日韩电影| 成人自拍视频在线观看| 精品国产乱码久久久久久浪潮| 亚洲国产精品第一页| 亚洲免费在线电影| 国产盗摄x88av| 国产精品1024| 久久综合999| 亚洲综合色一区| 日产国产欧美视频一区精品| 欧美日韩亚洲综合一区二区三区| www.亚洲人| ●精品国产综合乱码久久久久| 黑人と日本人の交わりビデオ| 麻豆成人久久精品二区三区红 | 欧美精品在线视频| 91老师片黄在线观看| 综合中文字幕亚洲| 成人免费视频国产免费观看| 国产精品亚洲专一区二区三区| 亚洲精品一区二区三区蜜桃下载 | 日韩午夜av一区| 精品一区二区视频在线观看| 亚洲一二三区不卡| 在线看不卡av| 成人av在线观| 亚洲欧洲在线观看av| 777777国产7777777| 国产成人综合在线| 欧美高清在线视频| 日本一二三区在线观看| 高清在线不卡av| 国产精品盗摄一区二区三区| 欧美一区二区三区爽爽爽| 成人白浆超碰人人人人| 综合色天天鬼久久鬼色| 色妹子一区二区| 潘金莲一级淫片aaaaa| 亚洲一区电影777| 717成人午夜免费福利电影| 精品人妻一区二区免费视频| 日韩国产在线一| 欧美成人vps| 亚洲第一综合网| 国产精品99久久久久久有的能看| 国产欧美日韩亚州综合| www青青草原| 天天爽夜夜爽视频| 亚洲成人tv网| 日韩女优毛片在线| 一区二区三区伦理片| 国产米奇在线777精品观看| 国产精品蜜臀av| 欧美主播一区二区三区| 黄色av电影网站| 蜜桃av一区二区在线观看| 久久精品一区蜜桃臀影院| 国产成人av免费在线观看| 91香蕉视频mp4| 婷婷综合在线观看| 久久女同互慰一区二区三区| 免费在线观看黄色小视频| 成人av网站在线观看免费| 亚洲一区二区偷拍精品| 日韩一区二区在线看| 国产农村妇女精品一区| av中文一区二区三区| 亚洲成av人影院| 精品国产免费视频| 黄视频网站免费看| 无码国产精品一区二区免费式直播| 麻豆成人久久精品二区三区小说| 中文字幕av一区二区三区免费看| 欧美色男人天堂| 干b视频在线观看| 成人黄色片在线观看| 午夜视频一区在线观看| 久久亚洲精品国产精品紫薇| 色网站国产精品| 国内精品久久99人妻无码| 国产成人精品免费一区二区| 亚洲永久免费av| 精品成人私密视频| 在线亚洲+欧美+日本专区| 国产偷人妻精品一区| 成人午夜视频在线| 日日摸夜夜添夜夜添国产精品| 精品无码在线观看| 99这里只有久久精品视频| 人禽交欧美网站| 亚洲欧洲日产国码二区| 日韩一区二区高清| 精品欧美一区二区久久久久| 不卡一区二区在线观看| 成人av电影在线观看| 日本一区中文字幕| 亚洲日本乱码在线观看| 精品欧美一区二区久久| 欧美在线观看禁18| 波多野结衣家庭教师在线观看 | 中文字幕黄色网址| 亚洲成年人在线观看| 国产高清不卡一区| 欧美aaaaaa午夜精品| 亚洲激情图片一区| 欧美激情一区二区在线| 欧美一级日韩免费不卡| 在线视频亚洲一区|