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