国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Redis 分片集群

這篇具有很好參考價值的文章主要介紹了Redis 分片集群。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

1.Redis分片集群

1.1.搭建分片集群

主從和哨兵可以解決高可用、高并發(fā)讀的問題。但是依然有兩個問題沒有解決:

  • 海量數(shù)據(jù)存儲問題

  • 高并發(fā)寫的問題

使用分片集群可以解決上述問題,如圖:

Redis 分片集群

分片集群特征:

  • 集群中有多個master,每個master保存不同數(shù)據(jù)。

  • 每個master都可以有多個slave節(jié)點(diǎn)。

  • master之間通過ping監(jiān)測彼此健康狀態(tài)。

  • 客戶端請求可以訪問集群任意節(jié)點(diǎn),最終都會被轉(zhuǎn)發(fā)到正確節(jié)點(diǎn)。

具體搭建流程參考課前資料《Redis集群.md》:

1.2.集群結(jié)構(gòu)

分片集群需要的節(jié)點(diǎn)數(shù)量較多,這里我們搭建一個最小的分片集群,包含3個master節(jié)點(diǎn),每個master包含一個slave節(jié)點(diǎn),結(jié)構(gòu)如下:

Redis 分片集群

這里會在同一臺虛擬機(jī)中開啟6個redis實例,模擬分片集群,信息如下:

IP PORT 角色
192.168.150.101 7001 master
192.168.150.101 7002 master
192.168.150.101 7003 master
192.168.150.101 8001 slave
192.168.150.101 8002 slave
192.168.150.101 8003 slave

1.3.準(zhǔn)備實例和配置

刪除之前的7001、7002、7003這幾個目錄,重新創(chuàng)建出7001、7002、7003、8001、8002、8003目錄:

# 進(jìn)入/tmp目錄
cd /tmp
# 刪除舊的,避免配置干擾
rm -rf 7001 7002 7003
# 創(chuàng)建目錄
mkdir 7001 7002 7003 8001 8002 8003

在/tmp下準(zhǔn)備一個新的redis.conf文件,內(nèi)容如下:

port 6379
# 開啟集群功能
cluster-enabled yes
# 集群的配置文件名稱,不需要我們創(chuàng)建,由redis自己維護(hù)
cluster-config-file /tmp/6379/nodes.conf
# 節(jié)點(diǎn)心跳失敗的超時時間
cluster-node-timeout 5000
# 持久化文件存放目錄
dir /tmp/6379
# 綁定地址
bind 0.0.0.0
# 讓redis后臺運(yùn)行
daemonize yes
# 注冊的實例ip
replica-announce-ip 192.168.150.101
# 保護(hù)模式
protected-mode no
# 數(shù)據(jù)庫數(shù)量
databases 1
# 日志
logfile /tmp/6379/run.log

將這個文件拷貝到每個目錄下:

# 進(jìn)入/tmp目錄
cd /tmp
# 執(zhí)行拷貝
echo 7001 7002 7003 8001 8002 8003 | xargs -t -n 1 cp redis.conf

修改每個目錄下的redis.conf,將其中的6379修改為與所在目錄一致:

# 進(jìn)入/tmp目錄
cd /tmp
# 修改配置文件
printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t sed -i 's/6379/{}/g' {}/redis.conf

1.4.啟動

因為已經(jīng)配置了后臺啟動模式,所以可以直接啟動服務(wù):

# 進(jìn)入/tmp目錄
cd /tmp
# 一鍵啟動所有服務(wù)
printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t redis-server {}/redis.conf

通過ps查看狀態(tài):

ps -ef | grep redis

發(fā)現(xiàn)服務(wù)都已經(jīng)正常啟動:

Redis 分片集群

如果要關(guān)閉所有進(jìn)程,可以執(zhí)行命令:

ps -ef | grep redis | awk '{print $2}' | xargs kill

或者(推薦這種方式):

printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t redis-cli -p {} shutdown

1.5.創(chuàng)建集群

雖然服務(wù)啟動了,但是目前每個服務(wù)之間都是獨(dú)立的,沒有任何關(guān)聯(lián)。

我們需要執(zhí)行命令來創(chuàng)建集群,在Redis5.0之前創(chuàng)建集群比較麻煩,5.0之后集群管理命令都集成到了redis-cli中。

1)Redis5.0之前

Redis5.0之前集群命令都是用redis安裝包下的src/redis-trib.rb來實現(xiàn)的。因為redis-trib.rb是有ruby語言編寫的所以需要安裝ruby環(huán)境。

# 安裝依賴
yum -y install zlib ruby rubygems
gem install redis

然后通過命令來管理集群:

# 進(jìn)入redis的src目錄
cd /tmp/redis-6.2.4/src
# 創(chuàng)建集群
./redis-trib.rb create --replicas 1 192.168.150.101:7001 192.168.150.101:7002 192.168.150.101:7003 192.168.150.101:8001 192.168.150.101:8002 192.168.150.101:8003

2)Redis5.0以后

我們使用的是Redis6.2.4版本,集群管理以及集成到了redis-cli中,格式如下:

redis-cli --cluster create --cluster-replicas 1 192.168.150.101:7001 192.168.150.101:7002 192.168.150.101:7003 192.168.150.101:8001 192.168.150.101:8002 192.168.150.101:8003

命令說明:

  • redis-cli --cluster或者./redis-trib.rb:代表集群操作命令
  • create:代表是創(chuàng)建集群
  • --replicas 1或者--cluster-replicas 1 :指定集群中每個master的副本個數(shù)為1,此時節(jié)點(diǎn)總數(shù) ÷ (replicas + 1) 得到的就是master的數(shù)量。因此節(jié)點(diǎn)列表中的前n個就是master,其它節(jié)點(diǎn)都是slave節(jié)點(diǎn),隨機(jī)分配到不同master

運(yùn)行后的樣子:

Redis 分片集群

這里輸入yes,則集群開始創(chuàng)建:

Redis 分片集群

通過命令可以查看集群狀態(tài):

redis-cli -p 7001 cluster nodes

Redis 分片集群

1.6.測試

嘗試連接7001節(jié)點(diǎn),存儲一個數(shù)據(jù):

# 連接
redis-cli -p 7001
# 存儲數(shù)據(jù)
set num 123
# 讀取數(shù)據(jù)
get num
# 再次存儲
set a 1

結(jié)果悲劇了:

Redis 分片集群

集群操作時,需要給redis-cli加上-c參數(shù)才可以:

redis-cli -c -p 7001

這次可以了:

Redis 分片集群

2.散列插槽

2.1.插槽原理

Redis會把每一個master節(jié)點(diǎn)映射到0~16383共16384個插槽(hash slot)上,查看集群信息時就能看到:

Redis 分片集群

數(shù)據(jù)key不是與節(jié)點(diǎn)綁定,而是與插槽綁定。redis會根據(jù)key的有效部分計算插槽值,分兩種情況:

  • key中包含"{}",且“{}”中至少包含1個字符,“{}”中的部分是有效部分
  • key中不包含“{}”,整個key都是有效部分

例如:key是num,那么就根據(jù)num計算,如果是{itcast}num,則根據(jù)itcast計算。計算方式是利用CRC16算法得到一個hash值,然后對16384取余,得到的結(jié)果就是slot值。

Redis 分片集群

如圖,在7001這個節(jié)點(diǎn)執(zhí)行set a 1時,對a做hash運(yùn)算,對16384取余,得到的結(jié)果是15495,因此要存儲到103節(jié)點(diǎn)。

到了7003后,執(zhí)行get num時,對num做hash運(yùn)算,對16384取余,得到的結(jié)果是2765,因此需要切換到7001節(jié)點(diǎn)

2.2.小結(jié)

Redis如何判斷某個key應(yīng)該在哪個實例?

  • 將16384個插槽分配到不同的實例
  • 根據(jù)key的有效部分計算哈希值,對16384取余
  • 余數(shù)作為插槽,尋找插槽所在實例即可

如何將同一類數(shù)據(jù)固定的保存在同一個Redis實例?

  • 這一類數(shù)據(jù)使用相同的有效部分,例如key都以{typeId}為前綴

3.集群伸縮

3.1.命令幫助

redis-cli --cluster提供了很多操作集群的命令,可以通過下面方式查看:

Redis 分片集群

比如,添加節(jié)點(diǎn)的命令:

Redis 分片集群

3.2.需求分析

需求:向集群中添加一個新的master節(jié)點(diǎn),并向其中存儲 num = 10

  • 啟動一個新的redis實例,端口為7004
  • 添加7004到之前的集群,并作為一個master節(jié)點(diǎn)
  • 給7004節(jié)點(diǎn)分配插槽,使得num這個key可以存儲到7004實例

這里需要兩個新的功能:

  • 添加一個節(jié)點(diǎn)到集群中
  • 將部分插槽分配到新插槽

3.3.創(chuàng)建新的redis實例

創(chuàng)建一個文件夾:

mkdir 7004

拷貝配置文件:

cp redis.conf /7004

修改配置文件:

sed /s/6379/7004/g 7004/redis.conf

啟動

redis-server 7004/redis.conf

3.4.添加新節(jié)點(diǎn)到redis

添加節(jié)點(diǎn)的語法如下:

Redis 分片集群

執(zhí)行命令:

redis-cli --cluster add-node  192.168.150.101:7004 192.168.150.101:7001

通過命令查看集群狀態(tài):

redis-cli -p 7001 cluster nodes

如圖,7004加入了集群,并且默認(rèn)是一個master節(jié)點(diǎn):

Redis 分片集群

但是,可以看到7004節(jié)點(diǎn)的插槽數(shù)量為0,因此沒有任何數(shù)據(jù)可以存儲到7004上

3.5.轉(zhuǎn)移插槽

我們要將num存儲到7004節(jié)點(diǎn),因此需要先看看num的插槽是多少:

Redis 分片集群

如上圖所示,num的插槽為2765.

可以將0~3000的插槽從7001轉(zhuǎn)移到7004,命令格式如下:

Redis 分片集群

具體命令如下:

建立連接:

Redis 分片集群

得到下面的反饋:

Redis 分片集群

詢問要移動多少個插槽,計劃是3000個:

新的問題來了:

Redis 分片集群

那個node來接收這些插槽??

顯然是7004,那么7004節(jié)點(diǎn)的id是多少呢?

Redis 分片集群

復(fù)制這個id,然后拷貝到剛才的控制臺后:

Redis 分片集群

這里詢問,你的插槽是從哪里移動過來的?

  • all:代表全部,也就是三個節(jié)點(diǎn)各轉(zhuǎn)移一部分
  • 具體的id:目標(biāo)節(jié)點(diǎn)的id
  • done:沒有了

這里我們要從7001獲取,因此填寫7001的id:

Redis 分片集群

填完后,點(diǎn)擊done,這樣插槽轉(zhuǎn)移就準(zhǔn)備好了:

Redis 分片集群

確認(rèn)要轉(zhuǎn)移嗎?輸入yes:

然后,通過命令查看結(jié)果:

Redis 分片集群

可以看到:

Redis 分片集群

目的達(dá)成。

3.故障轉(zhuǎn)移

集群初識狀態(tài)是這樣的:

Redis 分片集群

其中7001、7002、7003都是master,我們計劃讓7002宕機(jī)。

3.1.自動故障轉(zhuǎn)移

當(dāng)集群中有一個master宕機(jī)會發(fā)生什么呢?

直接停止一個redis實例,例如7002:

redis-cli -p 7002 shutdown

1)首先是該實例與其它實例失去連接

2)然后是疑似宕機(jī):

Redis 分片集群

3)最后是確定下線,自動提升一個slave為新的master:

Redis 分片集群

4)當(dāng)7002再次啟動,就會變?yōu)橐粋€slave節(jié)點(diǎn)了:

Redis 分片集群

3.2.手動故障轉(zhuǎn)移

利用cluster failover命令可以手動讓集群中的某個master宕機(jī),切換到執(zhí)行cluster failover命令的這個slave節(jié)點(diǎn),實現(xiàn)無感知的數(shù)據(jù)遷移。其流程如下:

Redis 分片集群

這種failover命令可以指定三種模式:

  • 缺?。耗J(rèn)的流程,如圖1~6歩
  • force:省略了對offset的一致性校驗
  • takeover:直接執(zhí)行第5歩,忽略數(shù)據(jù)一致性、忽略master狀態(tài)和其它master的意見

案例需求:在7002這個slave節(jié)點(diǎn)執(zhí)行手動故障轉(zhuǎn)移,重新奪回master地位

步驟如下:

1)利用redis-cli連接7002這個節(jié)點(diǎn)

2)執(zhí)行cluster failover命令

如圖:

Redis 分片集群

效果:

Redis 分片集群文章來源地址http://www.zghlxwxcb.cn/news/detail-776969.html

到了這里,關(guān)于Redis 分片集群的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Redis搭建分片集群

    Redis搭建分片集群

    1、概念 Redis分片集群是用于將Redis的數(shù)據(jù)分布在多個Redis節(jié)點(diǎn)上的分布式系統(tǒng)。通過分片集群,可以將數(shù)據(jù)分成多個部分,并將每個部分存儲在不同的節(jié)點(diǎn)上,以便實現(xiàn)Redis的高可用性和高性能。 2、Redis分片集群原理 Redis分片集群原理是將數(shù)據(jù)分成多個部分,并將每個部分存

    2024年02月08日
    瀏覽(19)
  • Redis分片集群搭建及其原理

    Redis分片集群搭建及其原理

    主從和哨兵可以解決高可用、高并發(fā)讀的問題。但是依然有兩個問題沒有解決: 海量數(shù)據(jù)存儲問題 高并發(fā)寫的問題 使用分片集群可以解決上述問題,如圖: 分片集群特征: 集群中有多個master,每個master保存不同數(shù)據(jù) 每個master都可以有多個slave節(jié)點(diǎn) master之間通過ping監(jiān)測彼此

    2024年02月05日
    瀏覽(21)
  • Ubuntu下搭建Redis分片集群

    Ubuntu下搭建Redis分片集群

    目錄 準(zhǔn)備實例和配置 啟動分片集群 測試分片集群 分片集群需要的節(jié)點(diǎn)數(shù)量較多,搭建一個最小的分片集群,包含3個master節(jié)點(diǎn),每個master包含一個slave節(jié)點(diǎn),并且master之間通過心跳機(jī)制互相監(jiān)聽,此模式下不需要哨兵監(jiān)聽結(jié)構(gòu)如下 ?同一臺虛擬機(jī)中開啟6個redis實例,模擬分片

    2024年02月16日
    瀏覽(17)
  • redis主從配置+集群搭建

    為什么需要主從配置????? 當(dāng)出現(xiàn)高并發(fā)流量情況 如果我們只有一個 redis 服務(wù)器 掛掉之后 網(wǎng)站的運(yùn)營會出現(xiàn)問題. 我們可以多弄幾臺 redis 服務(wù)器,使得一臺服務(wù)器掛掉自動切換到另一臺 redis 服務(wù)器,這個時候就實現(xiàn)了一個高可用的系統(tǒng) 主從配置 環(huán)境是2臺 ubuntu serv

    2024年02月09日
    瀏覽(24)
  • Redis 搭建主從集群

    Redis 搭建主從集群

    單節(jié)點(diǎn)的 Redis 并發(fā)能力有限,要進(jìn)一步提高 Redis 的并發(fā)能力,就需要搭建主從集群,實現(xiàn)讀寫分離。 共包含三個節(jié)點(diǎn),一個主節(jié)點(diǎn),兩個從節(jié)點(diǎn)。 這里我們會在同一臺虛擬機(jī)中開啟3個redis實例,模擬主從集群,信息如下: IP PORT 角色 192.168.150.101 7001 master 192.168.150.101 7002

    2024年02月14日
    瀏覽(18)
  • 搭建Redis主從集群和哨兵

    搭建Redis主從集群和哨兵

    說明:單機(jī)的Redis存在許多的問題,如數(shù)據(jù)丟失問題、高并發(fā)問題、故障恢復(fù)問題、海量數(shù)據(jù)的存儲能力問題,針對這四個問題,對應(yīng)解決方式有:數(shù)據(jù)持久化(參考:http://t.csdn.cn/SSyBi)、搭建主從集群、Redis哨兵和搭建分片集群; 本文介紹搭建Redis主從集群和哨兵,用以解

    2024年02月16日
    瀏覽(22)
  • Redis進(jìn)階:主從復(fù)制、集群搭建

    Redis進(jìn)階:主從復(fù)制、集群搭建

    介紹:主機(jī)數(shù)據(jù)更新后根據(jù)配置和策略, 自動同步到備機(jī)的 master/slaver機(jī)制 , Master以寫為主,Slave以讀為主 ; 優(yōu)點(diǎn): 1) 讀寫分離 ,減輕主機(jī)的壓力,性能擴(kuò)展; 2) 容災(zāi)快速恢復(fù) :某個從機(jī)宕機(jī),可自動從其他的從機(jī)讀取數(shù)據(jù); 缺點(diǎn): 復(fù)制延時 ,從機(jī)越多,復(fù)制延時

    2024年02月08日
    瀏覽(17)
  • Redis——主從復(fù)制+集群搭建(非哨兵)

    Redis——主從復(fù)制+集群搭建(非哨兵)

    主從復(fù)制,是指將一臺Redis服務(wù)器的數(shù)據(jù),復(fù)制到其他的Redis服務(wù)器。前者稱為主節(jié)點(diǎn)(master/leader),后者稱為從節(jié)點(diǎn)(slave/follower); 數(shù)據(jù)的復(fù)制是單向的,只能由主節(jié)點(diǎn)到從節(jié)點(diǎn)。Master以寫為主,Slave 以讀為主。 默認(rèn)情況下,每臺Redis服務(wù)器都是主節(jié)點(diǎn),且一個主節(jié)點(diǎn)可以有多個

    2024年02月12日
    瀏覽(28)
  • 使用Docker搭建Redis主從集群

    使用Docker搭建Redis主從集群

    歡迎來到 請回答1024 的博客 ??????歡迎來到 請回答1024的博客 關(guān)于博主 : 我是 請回答1024 ,一個追求數(shù)學(xué)與計算的邊界、時間與空間的平衡,0與1的延伸的后端開發(fā)者。 博客特色 : 在我的博客中,開設(shè)了如下專欄( 點(diǎn)擊可以進(jìn)入專欄奧~ ): Java、MySQL、Redis、Spring、SpringB

    2024年04月24日
    瀏覽(29)
  • Redis的主從集群搭建與配置

    Redis的主從集群搭建與配置

    Redis的集群模式 主從復(fù)制模式:利用主從復(fù)制原理,一主多從架構(gòu)。讀寫分離,主節(jié)點(diǎn)可讀可寫,從節(jié)點(diǎn)只能提供讀服務(wù)。 哨兵模式:哨兵實現(xiàn)了自動化的故障恢復(fù),哨兵節(jié)點(diǎn)是特殊的redis節(jié)點(diǎn),不存儲數(shù)據(jù)。哨兵監(jiān)控整個redis集群。 Cluster 模式:實現(xiàn)了 Redis 的分布式存儲,

    2024年02月05日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包