Redis主從復(fù)制

1财喳、Redis 主從復(fù)制

主從復(fù)制啤握,是指將一臺Redis服務(wù)器的數(shù)據(jù),復(fù)制到其他的Redis服務(wù)器。前者稱為主節(jié)點(Master)基矮,后者稱為從節(jié)點(Slave)漂彤;數(shù)據(jù)的復(fù)制是單向的弦牡,只能由主節(jié)點到從節(jié)點兼都。

1.主從復(fù)制流程

1.1、若啟動一個Slave機器進程套媚,則它會向Master機器發(fā)送一個“sync command”命令缚态,請求同步連接。
1.2堤瘤、無論是第一次連接還是重新連接玫芦,Master機器都會啟動一個后臺進程,將數(shù)據(jù)快照保存到數(shù)據(jù)文件中(執(zhí)行rdb操作)本辐,同時Master還會記錄修改數(shù)據(jù)的所有命令并緩存在數(shù)據(jù)文件中桥帆。
1.3、后臺進程完成緩存操作之后慎皱,Master機器就會向Slave機器發(fā)送數(shù)據(jù)文件老虫,Slave端機器將數(shù)據(jù)文件保存到硬盤上,然后將其加載到內(nèi)存中茫多,接著Master機器就會將修改數(shù)據(jù)的所有操作一并發(fā)送給Slave端機器祈匙。若Slave出現(xiàn)故障導(dǎo)致宕機,則恢復(fù)正常后會自動重新連接天揖。
1.4夺欲、Master機器收到Slave端機器的連接后,將其完整的數(shù)據(jù)文件發(fā)送給Slave端機器今膊,如果Mater同時收到多個Slave發(fā)來的同步請求些阅,則Master會在后臺啟動一個進程以保存數(shù)據(jù)文件,然后將其發(fā)送給所有的Slave端機器斑唬,確保所有的Slave端機器都正常


image.png

2.搭建Redis 主從復(fù)制

docker啟動三個reids容器

docker run --name redis1 --network redis_net -d -v D:\www\redis\redis1\config\redis.conf:/usr/local/etc/redis/redis.conf -v D:\www\redis\redis1\data\redis:/data  redis  redis-server /usr/local/etc/redis/redis.conf
image.png

將redis1作為主庫扑眉,查看redis1的ip地址,
編輯redis.conf文件


#設(shè)置密碼
requirepass 123123
masterauth 123123

slaveof 192.168.31.3 6379
daemonize yes   #開啟守護進程
appendonly yes #開啟AOF持久化功能

重啟redis2 和redis3容器
進入redis3容器使用命令查看主從關(guān)系

info replication
image.png

master_link_status:up 代表主庫在線狀態(tài)
進入redis1查看從庫狀態(tài)赖钞,可以看到兩個從庫的詳細(xì)信息


image.png

操作主庫和從庫,可以發(fā)現(xiàn)主庫的的數(shù)據(jù)同步到了從庫聘裁, 從庫不能寫入數(shù)據(jù)雪营。


image.png

停掉redis1主庫,進入redis2從庫衡便,數(shù)據(jù)可以讀献起,但不能寫了洋访。
這個時候如果想恢復(fù)數(shù)據(jù)寫入就要手動重新綁定主庫了。所以就有哨兵模式出現(xiàn)了谴餐。

2.redis哨兵模式

Redis哨兵機制(Sentinel)是一種高可用性解決方案姻政,用于監(jiān)控和管理Redis集群中的多個節(jié)點。

2.1.基本概念

定義:Redis Sentinel是一個分布式系統(tǒng)岂嗓,由一個或多個Sentinel進程組成汁展,這些進程會監(jiān)控Redis集群中的主節(jié)點和從節(jié)點的健康狀態(tài)。
功能:主要負(fù)責(zé)監(jiān)控厌殉、故障轉(zhuǎn)移食绿、通知和配置管理。

2.2.工作原理

監(jiān)控:每個Sentinel進程定期通過PING命令檢查主節(jié)點和從節(jié)點的狀態(tài)公罕。如果發(fā)現(xiàn)某個節(jié)點不可用器紧,它會將其標(biāo)記為主觀下線狀態(tài)。
故障判斷:當(dāng)多數(shù)Sentinel實例確認(rèn)某個主節(jié)點無法訪問時楼眷,它們會開始進行故障轉(zhuǎn)移過程铲汪。
故障轉(zhuǎn)移:通過選舉機制,選舉出一個新的主節(jié)點罐柳,并將原主節(jié)點的從節(jié)點重新配置為新的從節(jié)點掌腰。
通知:當(dāng)Redis實例的狀態(tài)發(fā)生變化時,Sentinel可以通過通知機制將故障或恢復(fù)信息發(fā)送給管理員或其他系統(tǒng)硝清。


image.png

2.2辅斟、搭建Redis 哨兵模式

在各節(jié)點的配置文件創(chuàng)建sentinel.conf,并增加配置

sentinel monitor mymaster 192.168.31.2 6379 2 #指定該哨兵節(jié)點監(jiān)控192.168.31.2:6379這個主節(jié)點芦拿,該主節(jié)點的名稱是mymaster士飒,最后的2的含義與主節(jié)點的故障判定有關(guān):至少需要2個哨兵節(jié)點同意,才能判定主節(jié)點故障并進行故障轉(zhuǎn)移
sentinel down-after-milliseconds mymaster 3000  #判定服務(wù)器down掉的時間周期蔗崎,默認(rèn)3000毫秒(3秒)

啟動哨兵模式 先啟master酵幕,再啟slave,進入redis容器
redis-sentinel /usr/local/etc/redis/sentinel.conf &

image.png

連接哨兵 查看哨兵模式狀態(tài)

redis-cli -p 26379   #26379 為哨兵模式默認(rèn)端口

info sentinel 查看哨兵狀態(tài)
image.png

上圖可以看到哨兵的數(shù)量,主從庫的信息等缓苛。
分別進入redis1和redis2 主庫和從庫 測試芳撒,主庫可以讀寫,從庫只能讀數(shù)據(jù)未桥。這時候redis主從復(fù)制的哨兵模式就搭建成功了笔刹。


image.png

2.3、模擬主庫掛掉

我們將主庫容器停掉冬耿,在進入redis3查看主從信息舌菜。這時候看到master變成了192.168.31.4也就是redis2


image.png

我們進入redis2,可以看到redis2 已經(jīng)成為master


image.png

image.png

可以看到此時數(shù)據(jù)還存在亦镶,而且redis2可以寫入數(shù)據(jù)了日月。

3袱瓮、Redis 群集模式

集群,即Redis Cluster爱咬,是Redis 3.0開始引入的分布式存儲方案尺借。
集群由多個節(jié)點(Node)組成,Redis的數(shù)據(jù)分布在這些節(jié)點中精拟。集群中的節(jié)點分為主節(jié)點和從節(jié)點:只有主節(jié)點負(fù)責(zé)讀寫請求和集群信息的維護燎斩;從節(jié)點只進行主節(jié)點數(shù)據(jù)和狀態(tài)信息的復(fù)制。

3.1串前、集群的作用

數(shù)據(jù)分區(qū):數(shù)據(jù)分區(qū)(或稱數(shù)據(jù)分片)是集群最核心的功能瘫里。
集群將數(shù)據(jù)分散到多個節(jié)點,一方面突破了Redis單機內(nèi)存大小的限制荡碾,存儲容量大大增加谨读;另一方面每個主節(jié)點都可以對外提供讀服務(wù)和寫服務(wù),大大提高了集群的響應(yīng)能力坛吁。
Redis單機內(nèi)存大小受限問題劳殖,在介紹持久化和主從復(fù)制時都有提及;例如拨脉,如果單機內(nèi)存太大哆姻,bgsave和bgrewriteaof的fork操作可能導(dǎo)致主進程阻塞,主從環(huán)境下主機切換時可能導(dǎo)致從節(jié)點長時間無法提供服務(wù)玫膀,全量復(fù)制階段主節(jié)點的復(fù)制緩沖區(qū)可能溢出矛缨。
高可用:集群支持主從復(fù)制和主節(jié)點的自動故障轉(zhuǎn)移(與哨兵類似);當(dāng)任一節(jié)點發(fā)生故障時帖旨,集群仍然可以對外提供服務(wù)箕昭。

3.2、集群模式的數(shù)據(jù)分片

1解阅、Redis集群引入了哈希槽的概念
2落竹、Redis集群有 16384 個哈希槽( 編號0-16383)
3、集群的每個節(jié)點負(fù)責(zé)一部分哈希槽
4货抄、每個Key 通過 CRC16校驗后對16384取余來決定放置哪個哈希槽述召,通過這個值,去找到對應(yīng)的插槽所對應(yīng)的節(jié)點蟹地,然后直接自動跳轉(zhuǎn)到這個對應(yīng)的節(jié)點上進行存取操作
<- - -以3個節(jié)點組成的集群為例- - ->
節(jié)點A 包含0到5460號哈希槽
節(jié)點B 包含5461到10922號哈希槽
節(jié)點C 包含10923到16383號哈希槽

3.3积暖、Redis集群的主從復(fù)制模型

集群中具有A、B怪与、C三個節(jié)點夺刑,如果節(jié)點B失敗了,整個集群就會因缺少5461-10922這個范圍的槽而不可以用琼梆。
為每個節(jié)點添加一個從節(jié)點A1性誉、B1、C1整個集群便有三個Master節(jié)點和三個slave節(jié)點組成茎杂,在節(jié)點B失敗后错览,集群選舉B1位為的主節(jié)點繼續(xù)服務(wù)。當(dāng)B和B1都失敗后煌往,集群將不可用倾哺。

3.5、搭建Redis 群集模式

redis的集群一般需要6個節(jié)點刽脖,3主3從羞海。方便起見,這里我們啟動6個redis容器:
首先依次在redis的本地配置文件redis.conf中,開啟集群模式曲管。

cluster-enabled yes     
cluster-config-file nodes-1.conf
cluster-node-timeout 15000
appendonly yes          

依次掛載配置文件并啟動:

docker run --name redis1 --network redis_net -d -v D:\www\redis\redis1\config:/usr/local/etc/redis -v D:\www\redis\redis1\data\redis:/data  redis  redis-server /usr/local/etc/redis/redis.conf

啟動集群

redis-cli --cluster create redis1:6379 redis2:6379 redis3:6379 redis4:6379 192.168.31.6:6379 192.168.31.7:6379 --cluster-replicas 1
#六個實例分為三組,容器使用的同一個網(wǎng)絡(luò)使用容器名稱或者ip都可以却邓,記得機上端口號,每組一主一從院水,前面的做主節(jié)點腊徙,后面的做從節(jié)點。下面交互的時候 需要輸入 yes 才可以創(chuàng)建檬某。
--replicas 1 表示每個主節(jié)點有1個從節(jié)點撬腾。

測試群集,進入容器中

redis-cli -c                    #加-c參數(shù)恢恼,節(jié)點之間就可以互相跳轉(zhuǎn)
cluster slots           #查看節(jié)點的哈希槽編號范圍
image.png

可以看到有三個節(jié)點民傻,每個節(jié)點包含一個主從服務(wù)。


image.png

查詢數(shù)據(jù)可以看到根據(jù)key調(diào)到對應(yīng)的節(jié)點场斑。name存在ip為192.168.31.3的redis2容器里漓踢。

cluster keyslot name  #查看name鍵的槽編號

進入redis2容器,查看存儲的所有數(shù)據(jù)


image.png

進入redis2的從服務(wù)容器redis6和簸,查看存儲的所有數(shù)據(jù)


image.png

可以看到主從的數(shù)據(jù)一致∨砦恚現(xiàn)在可以把redis2 容器stop掉 再測試一下
第一次連接還是連接的是主數(shù)據(jù)庫192.168.31.3
image.png

再次連接就是連的是從服務(wù)192.168.31.7


image.png

再次查看集群狀態(tài):第二個節(jié)點變?yōu)榱艘慌_服務(wù)。
image.png

小結(jié):
總的來說redis主從復(fù)制是解決了redis數(shù)據(jù)安全的問題锁保。主庫掛掉數(shù)據(jù)在從庫上還存在薯酝。可以手動將從庫切換為主庫爽柒。
哨兵模式解決了主從復(fù)制中主從切換的問題吴菠,在主庫掛掉時候,通過選舉算法浩村,切換到新的主庫做葵。
集群是更高級的模式,增加了數(shù)據(jù)庫的分片存儲心墅,每個節(jié)點可以在主庫掛掉時候進行哨兵模式選舉出新的主庫酿矢。避免單機數(shù)據(jù)過大以及數(shù)據(jù)安全的問題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末榨乎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瘫筐,更是在濱河造成了極大的恐慌蜜暑,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件策肝,死亡現(xiàn)場離奇詭異肛捍,居然都是意外死亡,警方通過查閱死者的電腦和手機之众,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門拙毫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人棺禾,你說我怎么就攤上這事缀蹄。” “怎么了帘睦?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵袍患,是天一觀的道長。 經(jīng)常有香客問我竣付,道長诡延,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任古胆,我火速辦了婚禮肆良,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逸绎。我一直安慰自己惹恃,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布棺牧。 她就那樣靜靜地躺著巫糙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪颊乘。 梳的紋絲不亂的頭發(fā)上参淹,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音乏悄,去河邊找鬼浙值。 笑死,一個胖子當(dāng)著我的面吹牛檩小,可吹牛的內(nèi)容都是我干的开呐。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼筐付!你這毒婦竟也來了卵惦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤瓦戚,失蹤者是張志新(化名)和其女友劉穎鸵荠,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伤极,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年姨伤,在試婚紗的時候發(fā)現(xiàn)自己被綠了哨坪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡乍楚,死狀恐怖当编,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情徒溪,我是刑警寧澤忿偷,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站臊泌,受9級特大地震影響鲤桥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜渠概,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一茶凳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧播揪,春花似錦贮喧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至雇庙,卻和暖如春谓形,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背状共。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工套耕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人峡继。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓冯袍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子康愤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容