Redis集群(windows版本操作)
一、概念篇
Redis集群的三種模式
1.主從模式
2.Sentinel模式
3.cluster模式
主從模式
一主多從的特點(diǎn)如圖,整個集群只有一個master,
1.master負(fù)責(zé)寫數(shù)據(jù)(master也可以讀),slave負(fù)責(zé)讀數(shù)據(jù)
2.master如果故障集群將無法提供寫服務(wù)(因?yàn)椴粫x出新的master),將主服務(wù)器重啟即可恢復(fù)。
3.當(dāng)寫操作發(fā)生時會master會將數(shù)據(jù)發(fā)送給slave,保證數(shù)據(jù)一致性
4.slave如果重啟需要重新使用slaveof指令連接集群
鏈表式主從
?特殊的主從模式,缺點(diǎn)是如果slave0故障了后邊的slava1與slava2都無法正常同步數(shù)據(jù)了。優(yōu)點(diǎn)是減輕了master的同步數(shù)據(jù)負(fù)擔(dān),master只負(fù)責(zé)它的從節(jié)點(diǎn)的數(shù)據(jù)同步。
sentinel模式
sentinel的意思是哨兵,顧名思義就是一個哨兵監(jiān)控著Redis集群的master是否故障,如果master故障了將由sentinel開啟投票選舉出一個新的master,當(dāng)故障的master重啟時,故障重啟的master將會成為新master的slave。
主從復(fù)制數(shù)據(jù)同步流程
slave啟動完成時,立即向master發(fā)送同步請求。master收到同步請求后觸發(fā)RDB策略,保存當(dāng)前時間的master數(shù)據(jù)集,并把該RDB文件發(fā)送給slave,slave根據(jù)此RDB文件進(jìn)行數(shù)據(jù)同步。
另外每當(dāng)master執(zhí)行寫操作之后,都會將該操作發(fā)送至從服務(wù)器與之同步。
cluster模式?
如果不需要擴(kuò)容一般是不需要用到cluster模式的(不存在Redis內(nèi)存放不下的情況),但如果Redis已經(jīng)容量不夠了則必須使用cluster。上面的主從模式只解決了高可用的問題,想容量大還得看cluster。假設(shè)我們現(xiàn)在的內(nèi)存是16G,而Redis中要放的內(nèi)存有48G,此時我們可以將Redis分為三塊,如圖(實(shí)際情況請對內(nèi)存與需求做評估后決定)。
?可見cluster實(shí)現(xiàn)了redis的水平擴(kuò)容。
二、操作(說明:由于鏈表式主從是特殊的主從模式,配置方式與主從模式一致,故不再進(jìn)行演示)
下面我們以Windows版本Redis演示集群操作
主從模式
1.下載Redis,GitHubWindows版本下載。
2.解壓文件后復(fù)制兩份同樣的文件,修改文件夾名稱方便識別。
3.修改每個文件夾中的?redis.windows.conf文件,將port改為對應(yīng)的port,并且將dbfilename改為不同的值。
6379
?6380
?
?
?剩下的6381如法炮制。
4.創(chuàng)建redis-server.bat文件在對應(yīng)的文件夾目錄下(三個redis副本皆需要此文件),右鍵編輯粘貼下面腳本保存退出。
redis-server.exe redis.windows.conf5.創(chuàng)建redis-cli.bat文件在對應(yīng)的文件夾目錄下(三個redis副本皆需要此文件),右鍵編輯粘貼下面腳本保存退出(請自行修改相應(yīng)的port)。
redis-cli.exe -p 6379此時每個redis文件夾內(nèi)應(yīng)該有如下兩個bat文件
6.在對應(yīng)的redis文件夾中啟動redis-server.bat文件。
7.在對應(yīng)的redis文件夾中啟動?redis-cli.bat文件
8.6380 、 6381兩臺redis通過 slaveof 127.0.0.1 6379 命令來選擇6379當(dāng)master。執(zhí)行命令后,6379為master,6380,6381為slave。
?
此時主從模式搭建成功,我們來試試效果
測試也沒問題,搭建成功后我們再來觀看一些主從模式的特性。
當(dāng)master故障時(把master關(guān)掉):
?
?info replication命令可以查看redis副本的狀態(tài)。可以看到master的status為down。
?首先可以看到我們依舊能正常讀,但因?yàn)閙aster故障我們無法往集群中寫入數(shù)據(jù)。并且兩臺slave并沒有任何一臺被提升為master,我們可以從server的log看到兩臺slave一直在等待master重啟。
?此時我們將master重新啟動(啟動redis-server.bat文件)
?當(dāng)master重新連接集群時,兩臺slave將與master進(jìn)行數(shù)據(jù)同步(我這里因?yàn)槟J(rèn)的RDB策略未保存RDB文件所以數(shù)據(jù)被清空了)。
?再使用master寫入k1 v1
當(dāng)slave故障時重啟會不會重新與集群連接呢?讓我們看看
先關(guān)掉6381
重啟6381之后再使用info replication觀察它的信息
?
所以當(dāng)slave故障重啟后我們需要重新使用slaveof 命令來與master重連。
測試到這里可以很清楚的看見與我們概念篇的描述相符合。
sentinel模式
sentinel模式以主從模式為基礎(chǔ),所以在這里我們與上面一樣啟動6379,6380,6381三臺redis實(shí)例,6380,6381執(zhí)行slave of 6379指令,6379為master,另外兩臺為slave。
1.現(xiàn)在我們要做的事是創(chuàng)建sentinel.conf配置文件
?sentinel配置文件解釋:
port sentinel服務(wù)運(yùn)行的端口 sentinel monitor <實(shí)例名稱(自定義)> <IP> <PORT> sentinel down-after-milliseconds <實(shí)例名稱> <timeout(ms)> : 指定的實(shí)例名稱在指定的毫秒內(nèi)如果未響應(yīng)則判定實(shí)例故障 sentinel parallel-syncs <實(shí)例名稱> <number> 故障時只能有<number>個redis slave做同步操作 sentinel failover-timeout mymaster <timeout(ms)> : 指定時間內(nèi)未完成failover event,則判定failover失敗6379的sentinel配置文件
port 10000 sentinel monitor 6379 127.0.0.1 6379 1 sentinel down-after-milliseconds 6379 10000 sentinel parallel-syncs 6379 2 sentinel failover-timeout 6379 100006380
port 10001 sentinel monitor 6379 127.0.0.1 6379 1 sentinel down-after-milliseconds 6379 10000 sentinel parallel-syncs 6379 2 sentinel failover-timeout 6379 100006381
port 10002 sentinel monitor 6379 127.0.0.1 6379 1 sentinel down-after-milliseconds 6379 10000 sentinel parallel-syncs 6379 2 sentinel failover-timeout 6379 100002.在各個redis文件夾下創(chuàng)建redis-sentinel.bat文件
redis-server.exe sentinel.conf --sentinel3.去6379、6380、6381下啟動redis-sentinel.bat,成功如下圖所見
4.現(xiàn)有6379,6380,6381三臺Redis實(shí)例,6379為master、其他兩臺為slave
?
現(xiàn)在我們開始測試sentinel模式,當(dāng)6379故障時會發(fā)生什么?
關(guān)掉6379實(shí)例。
?
?從圖中可以觀察到在sentinel模式下,6379master故障時,6380被選舉為master,并且6381自動切換為6380的slave。
可見sentinel模式自動選舉master,有這種模式我想我們再也不需要深更半夜爬起來重啟redis了,于是我們可以下出結(jié)論,與主從模式對比,肯定選擇sentinel模式。
cluster模式
說明:我們將創(chuàng)建一個三主三從的集群。
1.復(fù)制6個Redis文件夾,分別修改對應(yīng)的配置文件。
?配置文件修改
port 6379 #改為對應(yīng)的端口號 cluster-enabled yes cluster-config-file nodes-6379.conf #改為對應(yīng)的端口號以區(qū)分 cluster-node-timeout 150002.創(chuàng)建bat文件
title redis-a-6379; redis-server.exe redis.windows.conf請如上創(chuàng)建其他bat文件。
3.安裝ruby(我也不想裝,redis集群腳本需要ruby環(huán)境)
Ruby-Downloads?下載地址。
下載完成后打開exe文件安裝就好了。
安裝完成出現(xiàn)此內(nèi)容時選1
如果出現(xiàn)這種東西就是網(wǎng)速太慢(我是開代理解決的,各位可以關(guān)掉窗口打開CMD輸入
gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
gem sources -l)
?使用ruby-v出現(xiàn)下圖內(nèi)容時表示安裝完成
?安裝redis依賴?
gem?install?redis
4.下載集群腳本redis-trib.rb
redis-trib.rb 下載_new Girl的博客-CSDN博客_redis-trib.rb下載?這位老哥這里可以下載。
下載后放到這個位置中
5.先啟動所有的redis實(shí)例
cmd到redis-trib.rb文件中,執(zhí)行
ruby redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6389 127.0.0.1:6398 127.0.0.1:6380 127.0.0.1:6390 127.0.0.1:6399 命令
(--replicas的意義是指定集群中每個master配備幾個slave。)
?最后一行是問我們是否接收此分配:輸入yes。
?可以看到這次分配 6380,6390,6399是master,其他三臺是slave。
?至此Redis的集群搭建完成。
6.通過集群方式連接redis cluster
? 創(chuàng)建bat文件,
redis-cli -c -p 6379運(yùn)行bat文件,
?使用cluster nodes命令查看集群信息:
關(guān)于slot的說明
?每個Redis集群中總共有16383個slot(簡單理解為一個范圍),當(dāng)有一個K V鍵值對想被放入集群時,首先對key進(jìn)行計(jì)算,看此值屬于哪個slot(范圍),這一對鍵值對就會被放入哪個master中,因?yàn)榇藱C(jī)制,redis集群才能實(shí)現(xiàn)水平擴(kuò)容。
?可以看到5493值被放入了6389,正好符合上面的slot。
關(guān)于Redirected說明
如果要get的值或者set的值不在此次連接的實(shí)例上,因?yàn)閞edis的無中心化配置,將會切換到對應(yīng)的實(shí)例上。?
7. 測試--當(dāng)master故障會如何?
關(guān)閉6398實(shí)例。
當(dāng)6398故障時,我們?nèi)稳豢梢詮?399實(shí)例獲取到k1的value
?
可以看到6399實(shí)例被提升為master了。?當(dāng)6398重啟時,角色將從master轉(zhuǎn)為slave。
如果某一節(jié)點(diǎn)的master-slave全部掛掉了,集群是否還可用?此時我們關(guān)掉6379與6380。
所以,此處在配置文件總的配置cluster-require-full-coverage如果設(shè)置為yes時,整個集群也會down。如果配置為no,?那么集群可以使用,該slot范圍無法再存儲與讀取數(shù)據(jù)。有興趣的小伙伴可以試一試。
至此已將所有的redis集群模式介紹完成,有何不妥之處還請各位指正,謝謝!
注意:請刪除每個redis文件夾下的此文件再啟動,否則會出現(xiàn)錯誤
總結(jié)
以上是生活随笔為你收集整理的Redis集群(windows版本操作)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 财务管理能力模型(转载)
- 下一篇: java信息管理系统总结_java实现科