redis
組件版本:
redis:5.0.8
節點架構:
3主3從、6主機
擴容后架構:
6主6從、12主機
Redis(RemoteDictionary Server ),即遠程字典服務,是一個開源的使用ANSIC語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value數據庫,并提供多種語言的API。
redis是一個key-value存儲系統,支持存儲的value類型包括string(字符串)、list(鏈表)、set(集合)、zset(sortedset--有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現了master-slave(主從)同步。
某業務系統采用rediscluster架構,由于數據量的增長導致部分數據還未過期時就被redis最大內存限制給刪除掉,所以業務在當前三柱三從架構無法滿足業務數據量持續增長的情況,需要擴容節點至六主六從。
Redis集群大致架構圖:
一組RedisCluster是由多個Redis實例組成,官方推薦使用6實例,其中3個為主節點,3個為從結點。一旦有主節點發生故障的時候,RedisCluster可以選舉出對應的從結點成為新的主節點,繼續對外服務,從而保證服務的高可用性。那么對于客戶端來說,知道知道對應的key是要路由到哪一個節點呢?原來,RedisCluster把所有的數據劃分為16384個不同的槽位,可以根據機器的性能把不同的槽位分配給不同的Redis實例,對于Redis實例來說,他們只會存儲部門的Redis數據,當然,槽的數據是可以遷移的,不同的實例之間,可以通過一定的協議,進行數據遷移。
需要把3主3從擴容為6主6從,就需要增加6個節點,依次添加3個主節點hash槽,再添加3個從節點手動分配給主節點。
復制原有集群節點的配置文件更改端口目錄等然后再啟動redis,要添加6個節點需創建6個節點并啟動:
./redis-server../6001/redis.conf
./redis-server../6002/redis.conf
./redis-server../6003/redis.conf
./redis-server../6004/redis.conf
./redis-server../6005/redis.conf
./redis-server../6006/redis.conf
第一個ip:port為需要添加的節點ip和端口,第二個ip:port為當前集群中的節點和端口;先后執行以下命令:
./redis-cli--cluster add-node 192.168.8.20:6001 192.168.8.10:7001 -a 123456
./redis-cli--cluster add-node 192.168.8.21:7002 192.168.8.10:7001 -a 123456
……
新添加的節點沒有哈希槽,并不能正常存儲數據,需要給新添加的節點分配哈希槽。
重新分配哈希槽
./redis-cli--cluster reshard ip:port -a passwd
輸入要分配多少個哈希槽(數量)
輸入指定要分配哈希槽的節點ID
選擇需要分配的哈希槽來源
輸入all需要分配給目標節點的哈希槽來著當前集群的其他主節點(每個節點拿出的數量為集群自動決定)
分配哈希槽有兩種方式
(1)將所有節點用作哈希槽的源節點。
(2)在指定的節點拿出指定數量的哈希槽分配到目標節點:
添加6004節點(slave的添加方法,master為7004)
#節點ID是主節點的ID
#192.168.8.20:6004 是新加的從節點
#192.168.8.10:7004 作為從節點的主節點
./redis-cli--cluster add-node --cluster-slave --cluster-master-idxxxxxxxxxxxxxxxxxxx 192.168.8.20:6004 192.168.8.10:7004
1、redis擴容一般有兩種方法,一種是在線擴容,一種是離線擴容,從業務的角度來說,在線擴容是最方便的方法,但在線擴容有個問題是,過程中如果某個槽正在操作會導致遷移槽是發送錯誤,需要人工干預。
2、離線擴容是比較快速的方法,人工干預比較少由集群自動分配哈希槽,缺點是需停掉業務。
3、一般來說業務上線前會對redis緩存數據量有一個預估,從而對架構的硬件配置有個預估,就不會產生擴容這個操作,但往往業務數據量是一個動態的,無法預估的,所以需要通過擴容節點的操作慢在業務的需求,需要保證擴容過程正保證數據的正確性。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/130085.html
摘要:重新分片,把要刪除的主節點的數據槽移動到其他主節點上,以免數據丟失。分區完成當前主節點已經沒有數據槽了。這樣就可以實現橫向動態擴容,新增加的主從節點,用于存儲新的數據則可,對以前的節點的數據不會有任何影響。 需求: A redis cluster 集群 40 臺集群擴容到 68 臺也就是 增加 28 臺新的機器 : 一主一從 為一組,一共12組 前期準備 掃描新增擴容服務器ip是...
摘要:本文將講解如何基于搭建集群,的集群設計包括兩個部分主從復制和哈希。至此,集群基本安裝成功。后期運維基本命令集群節點槽常見問題把所有的物理節點映射到個哈希槽上,負責維護。 Redis集群概述 Redis作為當前非常熱門的內存型數據結構存儲,可用于數據存儲,緩存和消息代理等。本文將講解如何基于docker搭建Redis集群,Redis的集群設計包括兩個部分:主從復制和哈希Slot。1.1....
摘要:本文將講解如何基于搭建集群,的集群設計包括兩個部分主從復制和哈希。至此,集群基本安裝成功。后期運維基本命令集群節點槽常見問題把所有的物理節點映射到個哈希槽上,負責維護。 Redis集群概述 Redis作為當前非常熱門的內存型數據結構存儲,可用于數據存儲,緩存和消息代理等。本文將講解如何基于docker搭建Redis集群,Redis的集群設計包括兩個部分:主從復制和哈希Slot。1.1....
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20