最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

RedisCluster簡單配置與動態(tài)擴容

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-09 13:03:47
文檔

RedisCluster簡單配置與動態(tài)擴容

RedisCluster簡單配置與動態(tài)擴容:Redis 3.0 就要自帶集群功能了, 去看了一下這里還有官方教程之后, 發(fā)現(xiàn)似乎必須用命令行來搞著, 而且官方提供的 redis-trib.rb 要求至少 3 個節(jié)點才能建立一個集群, 這規(guī)格是向黨支部看齊么... 至少 3 個節(jié)點這個還是略坑, 而且不能自動添加節(jié)點 (難道要
推薦度:
導(dǎo)讀RedisCluster簡單配置與動態(tài)擴容:Redis 3.0 就要自帶集群功能了, 去看了一下這里還有官方教程之后, 發(fā)現(xiàn)似乎必須用命令行來搞著, 而且官方提供的 redis-trib.rb 要求至少 3 個節(jié)點才能建立一個集群, 這規(guī)格是向黨支部看齊么... 至少 3 個節(jié)點這個還是略坑, 而且不能自動添加節(jié)點 (難道要

Redis 3.0 就要自帶集群功能了, 去看了一下這里還有官方教程之后, 發(fā)現(xiàn)似乎必須用命令行來搞著, 而且官方提供的 redis-trib.rb 要求至少 3 個節(jié)點才能建立一個集群, 這規(guī)格是向黨支部看齊么... 至少 3 個節(jié)點這個還是略坑, 而且不能自動添加節(jié)點 (難道要我啟

Redis 3.0 就要自帶集群功能了, 去看了一下這里還有官方教程之后, 發(fā)現(xiàn)似乎必須用命令行來搞著, 而且官方提供的 redis-trib.rb 要求至少 3 個節(jié)點才能建立一個集群, 這規(guī)格是向黨支部看齊么...
至少 3 個節(jié)點這個還是略坑, 而且不能自動添加節(jié)點 (難道要我啟動個 py 的 subprocess 去掉 ruby?), 于是去看看源代碼, 驚訝地發(fā)現(xiàn), 原來限制 3 個節(jié)點起步的是 ruby 腳本, 而且調(diào)集群加節(jié)點平衡負載其實都可以用 redis 命令來完成. 好吧, 那我自己來連 socket 搞總行了吧.
結(jié)果一番折騰還真的可行的樣子, 于是有了這篇文章和一個簡單的工具. 那么首先說說怎么用 redis-cli 來做這些事情.

如何在 redis-cli 手動啟動集群呢, 請隨意連上一個空的支持集群模式的節(jié)點, 然后執(zhí)行

cluster addslots 0 1 2 ... 16383

千萬不要誤會了, 中間那個 ... 可是要實打?qū)嵉貜念^寫到尾的哦. 所以如果可以的話, 手動寫個腳本來干這事情吧.
不過也可以略過這些步驟, 反正下面看看例子就行, 最后會給出一個 Python 工具來做這些.
接下來的例子中, 假定已經(jīng)開好了一個集群, 共有 3 個 master 節(jié)點. 要在控制臺檢視這些節(jié)點, 請用 redis-cli 隨意連上其中一個, 并執(zhí)行

cluster nodes

輸出

e7f4fcc0dd003fc107333a4132a471ad306d5513 127.0.0.1:8001 master - 0 1414033928009 3 connected 0-2729 8192-10921
bd239f7dbeaba9541586a708484cdce0ca99aba5 127.0.0.1:8000 master - 0 1414033929011 2 connected 2730-8191
787e06e9d96e6a9a3d02c7f3ec14e243882293e9 127.0.0.1:7999 myself,master - 0 0 1 connected 10922-16383

以上每一行是一個節(jié)點信息, 按空格分隔的域依次表示
  • 節(jié)點 ID
  • 節(jié)點地址
  • 節(jié)點角色 (master / slave), 如果是當(dāng)前節(jié)點, 還會有個 myself
  • 對于 slave 而言, 其 master 節(jié)點的 ID
  • 最后一次 ping 時間戳
  • 最后一次 pong 時間戳
  • 節(jié)點順序號
  • 節(jié)點連接狀態(tài)
  • 之后的所有 : 節(jié)點所配給的槽位, 如果槽位連續(xù), 就以 BEGIN-END 表示, 不連續(xù)的由空格隔開
  • 如果要向集群新增一個節(jié)點, 需要用 redis-cli 連上這個新節(jié)點, 調(diào)用一次 cluster meet 命令. 如

    cluster meet 127.0.0.1 7999

    后面參數(shù)是已經(jīng)在集群中的節(jié)點中任意一個節(jié)點的地址及端口. 然后再來一次

    e7f4fcc0dd003fc107333a4132a471ad306d5513 127.0.0.1:8001 master - 0 1414034715486 3 connected 0-2729 8192-10921
    bd239f7dbeaba9541586a708484cdce0ca99aba5 127.0.0.1:8000 master - 0 1414034714983 2 connected 2730-8191
    787e06e9d96e6a9a3d02c7f3ec14e243882293e9 127.0.0.1:7999 master - 0 1414034714482 1 connected 10922-16383
    a0fa298711f5da94cb8acc0ed913970f7b00c7af 127.0.0.1:8010 myself,master - 0 0 0 connected

    就會發(fā)現(xiàn)這個節(jié)點已經(jīng)加入集群, 但是沒有被分配任何槽位. 現(xiàn)在得從原來幾個節(jié)點搬運一些過來. 在執(zhí)行這個操作前, 為了測試, 先向集群里扔一個值進去

    set "foo14308" "bar"

    這個鍵對應(yīng)的槽位是 7 號. 等會兒就嘗試將 7 號槽移動到新節(jié)點上.

    第一步, 鎖定槽位. 這個操作需要分開進行. 首先用 redis-cli 連上新節(jié)點 (上述例子中端口 8010 的那個) 并執(zhí)行

    cluster setslot 7 importing e7f4fcc0dd003fc107333a4132a471ad306d5513

    這表示即將從 ID 為 e7f4fcc0dd003fc107333a4132a471ad306d5513 的節(jié)點 (也就是 7 號槽位的所有者) 導(dǎo)入 7 號槽.
    接下來連上 7 號槽位的所有者所在的 8001 端口, 執(zhí)行

    cluster setslot 7 migrating a0fa298711f5da94cb8acc0ed913970f7b00c7af

    再執(zhí)行

    cluster getkeysinslot 7 10

    查看 7 號槽位的全部鍵 (參數(shù) 7 表示槽位, 參數(shù) 10 表示數(shù)量). 這樣 redis 會回顯剛才放進去的 "foo14308".
    現(xiàn)在開始手動遷移這些鍵. 在 8001 端口的客戶端上執(zhí)行

    migrate 127.0.0.1 8010 foo14308 0 15000

    (最后兩個參數(shù), 其實我也不知道什么意思, 從 官方代碼里 抄過來的)
    因為只有這一個鍵, 所以現(xiàn)在整個槽的遷移已經(jīng)完成了, 需要告知整個集群 7 號槽位已經(jīng)被新節(jié)點承包了, 官方源碼里 這里進行了廣播, 在命令行里的話似乎需要逐個連接節(jié)點, 執(zhí)行以下命令

    cluster setslot 7 node a0fa298711f5da94cb8acc0ed913970f7b00c7af

    搞完就好了.

    在知道以上這些的基礎(chǔ)上, 做了一個簡單的集群小工具, 能夠在單節(jié)點上啟動集群, 以及將一個新節(jié)點加入集群中并且自動平衡槽位. 此 Python 工具已加入 GitHub, 歡迎大家拍磚.

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    RedisCluster簡單配置與動態(tài)擴容

    RedisCluster簡單配置與動態(tài)擴容:Redis 3.0 就要自帶集群功能了, 去看了一下這里還有官方教程之后, 發(fā)現(xiàn)似乎必須用命令行來搞著, 而且官方提供的 redis-trib.rb 要求至少 3 個節(jié)點才能建立一個集群, 這規(guī)格是向黨支部看齊么... 至少 3 個節(jié)點這個還是略坑, 而且不能自動添加節(jié)點 (難道要
    推薦度:
    標(biāo)簽: 動態(tài) 簡單 擴容
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top