摘要:重新分片,把要刪除的主節點的數據槽移動到其他主節點上,以免數據丟失。分區完成當前主節點已經沒有數據槽了。這樣就可以實現橫向動態擴容,新增加的主從節點,用于存儲新的數據則可,對以前的節點的數據不會有任何影響。
需求:
A redis cluster 集群 40 臺集群擴容到 68 臺
也就是 增加 28 臺新的機器 : 一主一從 為一組,一共12組
掃描新增擴容服務器ip是否能訪問 DBA擴容腳本模擬驗證 準備系統驗證腳本: 1: netstat -an | grep ":6379"| grep -e add-node1-ip 檢查端口連接 netstat -an| grep :6379|awk "{print substr($5,8)}"|sort |uniq -c 2: 比較遷移前后平均沒臺機器的內存容量 curl "http://localhost:8080/systemapp/redis/info.htm?ip=add-node1-ip&port=6379" | grep maxmemory_human --col=always | grep used_memory_human --col=always | grep total_system_memory_human --col 3:查看各系統業務是否異常,是否右redis相關報錯日志
Redis Cluster集群動態擴容是指在不停掉Cluster集群環境的情況下,動態的往集群環境中增加主、從節點和動態的從集群環境中刪除節點。
redis的動態擴容操作都是通過redis-trib.rb腳本文件來完成
[root@linux redis] # ruby redis-trib.rb 可以看到redis-trib.rb具有以下功能: 1、create:創建集群 2、check:檢查集群 3、info:查看集群信息 4、fix:修復集群 5、reshard:在線遷移slot 6、rebalance:平衡集群節點slot數量 7、add-node:將新節點加入集群 8、del-node:從集群中刪除節點 9、set-timeout:設置集群節點間心跳連接的超時時間 10、call:在集群全部節點上執行命令 11、import:將外部redis數據導入集群
因為主、從節點在操作上會有差異,所以分來來說。增加節點的順序是先增加Master主節點,然后在增加Slave從節點。
-- 查看redis 進程 ps -ef | grep redis --登陸查看主從信息 redis-cli -h node-ip -p port cluster nodes
動態增加Master 主服務器節點
#前提:假設 已有6個Cluster 集群節點,三主三從; 1.1、創建目錄7006(Master主節點文件夾)和7007(Slave從節點文件夾),并從以前Cluster集群節點7000-7005任一節點中拷貝配置文件redis.conf到7006和7007目錄下。 1.2、修改配置文件,將7006和7007目錄下面的redis.conf配置文件的端口進行相應修改,與自己的目錄名稱保持一致,修改項目如下: (在linux環境下可以執行如下命令進行全局替換::%s/7000/7006/g,%s/7000/7007/g,保存并退出則可) 1.3、啟動7006和7007目錄下Redis實例,并查看效果。 redis-server ../redis-cluster/7006/redis.conf redis-server ../redis-cluster/7007/redis.conf ###連個實例雖然存在,但是沒有真正的加入到集群中!!!
登陸7006 7007 端口的實例 查看info信息 發現 connected_slaves = 0
redis-cli -C -H 192.168.127.130 -p 7006
info replication
將7006主節點加入到Cluster集群
ruby redis-trib.rb add-node add-node1:7006 old-node:7000
ruby redis-trib.rb add-node (增加節點)
add-node1:7006 (新增實例和端口 )
old-node:7000 (集群中已經存在的任意實例地址和其端口 )
注意:當添加新節點成功以后,新的節點不會有任何數據,因為他沒有分配任何的數據Slot(哈希slots),這一步需要手動操作。
Send CLUSTER MEET to node add-node1:7006 to make it join the cluster. New node added corrently
表示:節點增加成功
cluster info 驗證
cluster nodes 驗證: 添加成功但是會沒有Slots
為7006Master主節點分配數據Slots,分配方法是從集群中知道任何一個主節點
(因為只有Master主節點才有數據slots),然后對其進行重新分片工作。
ruby redis-trib.rb reshard old-node:7000 我們會從7000這個主節點上抽取一些slots 給7006 How many slots do you want to move (from 1 to 16384)? 200 我們要使用多少slots 選擇接收數據槽的節點和數據槽產生的方式: what is the receiving node id ? 接受slots的主節點 這里是7006的ID Please enter all the source node IDs: all
執行分配計劃后選擇yes ,查看cluster nodes,顯示7006有數據slots
動態增加Slave從服務器節點
ruby redis-trib.rb add-node 192.168.127.130:7007 192.168.127.130:7000
指定7007節點作為7006的從節點,實現主從的配置。
redis-cli -c -h 192.168.127.130 -p 7007 cluster replicate 71ecd970838e9b400a2a6a15cd30a94ab96203bf (主節點的ID,這里是7006)Cluster 集群刪除操作
刪除的順序是先刪除Slave從節點,然后在刪除Master主節點 1.動態刪除Slave從服務器節點 ruby redis-trib.rb del-node 192.168.127.130:7007 991ed242102aaa08873eb9404a18e0618a4e37bd 2.動態刪除Master主服務器節點 要想刪除Master主節點,可能要繁瑣一些。 因為在Master主節點上有數據槽(slots),為了保證數據的不丟失, 必須把這些數據槽遷移到其他Master主節點上,然后在刪除主節點。 2.1、重新分片,把要刪除的Master主節點的數據槽移動到其他Master主節點上,以免數據丟失。 ruby redis-trib.rb reshard 192.168.127.130:7006 2.1.1、移除多少槽如圖:創建輸入200,這里要輸入199,因為計數是從0開始的,切記。 2.1.2、接受槽的Master主節點ID:這個節點可以是任意一個主節點都可以, 我選擇7002,ID是:3b025b3ecfa65f462de639c7a412be443cf1dd1c Source node 選擇 需要移除節點7006的ID號 2.1.4、執行分區計劃,選擇yes。分區完成 2.1.5、當前7006主節點已經沒有數據槽了。 2.2、刪除7006主節點,提供要刪除節點的IP地址和Port端口,當然還有要刪除的節點的ID名稱。 ruby redis-trib.rb del-node 192.168.127.130:7006 71ecd970838e9b400a2a6a15cd30a94ab96203bf 2.2.1、刪除成功 2.2.2、查看節點效果 cluster nodes
_
總結:
主從復制和哨兵模式這兩個集群模式由于不能動態擴容,而且主節點之間(有多個主節點的情況)數據完全一樣,導致了主節點的容量成了整個集群的瓶頸,如果想擴展集群容量,必須擴展主節點的容量。由于以上的問題,redis在3.0開始Cluster集群模式,這個模式在主節點之間數據是不一樣的,數據也可以根據需求自動轉向其他節點。這樣就可以實現橫向動態擴容,新增加的主從節點,用于存儲新的數據則可,對以前的節點的數據不會有任何影響。
參考:https://www.cnblogs.com/Patri...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77079.html
摘要:本文將講解如何基于搭建集群,的集群設計包括兩個部分主從復制和哈希。至此,集群基本安裝成功。后期運維基本命令集群節點槽常見問題把所有的物理節點映射到個哈希槽上,負責維護。 Redis集群概述 Redis作為當前非常熱門的內存型數據結構存儲,可用于數據存儲,緩存和消息代理等。本文將講解如何基于docker搭建Redis集群,Redis的集群設計包括兩個部分:主從復制和哈希Slot。1.1....
摘要:本文將講解如何基于搭建集群,的集群設計包括兩個部分主從復制和哈希。至此,集群基本安裝成功。后期運維基本命令集群節點槽常見問題把所有的物理節點映射到個哈希槽上,負責維護。 Redis集群概述 Redis作為當前非常熱門的內存型數據結構存儲,可用于數據存儲,緩存和消息代理等。本文將講解如何基于docker搭建Redis集群,Redis的集群設計包括兩個部分:主從復制和哈希Slot。1.1....
閱讀 702·2021-09-29 09:34
閱讀 2554·2019-08-30 15:53
閱讀 3361·2019-08-29 17:17
閱讀 761·2019-08-29 16:08
閱讀 1120·2019-08-29 13:03
閱讀 951·2019-08-27 10:54
閱讀 688·2019-08-26 13:39
閱讀 2859·2019-08-26 13:34