作者:LoyaltyLu ,來(lái)源:segmentfault Redis是一個(gè)開(kāi)源的使用ANSI C語(yǔ)言編寫(xiě),、支持網(wǎng)絡(luò),、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),,并提供多種語(yǔ)言的API,。從2010年3月15日起,Redis的開(kāi)發(fā)工作由VMware主持,。從2013年5月開(kāi)始,,Redis的開(kāi)發(fā)由Pivotal贊助。 概述在現(xiàn)有企業(yè)中80%公司大部分使用的是redis單機(jī)服務(wù),,在實(shí)際的場(chǎng)景當(dāng)中單一節(jié)點(diǎn)的redis容易面臨風(fēng)險(xiǎn),。 面臨問(wèn)題
解決辦法要實(shí)現(xiàn)分布式數(shù)據(jù)庫(kù)的更大的存儲(chǔ)容量和承受高并發(fā)訪(fǎng)問(wèn)量,,我們會(huì)將原來(lái)集中式數(shù)據(jù)庫(kù)的數(shù)據(jù)分別存儲(chǔ)到其他多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)上,。 Redis 為了解決這個(gè)單一節(jié)點(diǎn)的問(wèn)題,,也會(huì)把數(shù)據(jù)復(fù)制多個(gè)副本部署到其他節(jié)點(diǎn)上進(jìn)行復(fù)制,實(shí)現(xiàn) Redis的高可用,,實(shí)現(xiàn)對(duì)數(shù)據(jù)的冗余備份,,從而保證數(shù)據(jù)和服務(wù)的高可用。 主從復(fù)制什么是主從復(fù)制主從復(fù)制,,是指將一臺(tái)Redis服務(wù)器的數(shù)據(jù),,復(fù)制到其他的Redis服務(wù)器。前者稱(chēng)為主節(jié)點(diǎn)(master),,后者稱(chēng)為從節(jié)點(diǎn)(slave),,數(shù)據(jù)的復(fù)制是單向的,只能由主節(jié)點(diǎn)到從節(jié)點(diǎn),。 默認(rèn)情況下,,每臺(tái)Redis服務(wù)器都是主節(jié)點(diǎn);且一個(gè)主節(jié)點(diǎn)可以有多個(gè)從節(jié)點(diǎn)(或沒(méi)有從節(jié)點(diǎn)),,但一個(gè)從節(jié)點(diǎn)只能有一個(gè)主節(jié)點(diǎn),。 主從復(fù)制的作用1、數(shù)據(jù)冗余:主從復(fù)制實(shí)現(xiàn)了數(shù)據(jù)的熱備份,,是持久化之外的一種數(shù)據(jù)冗余方式,。 2、故障恢復(fù):當(dāng)主節(jié)點(diǎn)出現(xiàn)問(wèn)題時(shí),,可以由從節(jié)點(diǎn)提供服務(wù),,實(shí)現(xiàn)快速的故障恢復(fù);實(shí)際上是一種服務(wù)的冗余,。 3,、負(fù)載均衡:在主從復(fù)制的基礎(chǔ)上,配合讀寫(xiě)分離,,可以由主節(jié)點(diǎn)提供寫(xiě)服務(wù),,由從節(jié)點(diǎn)提供讀服務(wù)(即寫(xiě)Redis數(shù)據(jù)時(shí)應(yīng)用連接主節(jié)點(diǎn),讀Redis數(shù)據(jù)時(shí)應(yīng)用連接從節(jié)點(diǎn)),,分擔(dān)服務(wù)器負(fù)載,;尤其是在寫(xiě)少讀多的場(chǎng)景下,通過(guò)多個(gè)從節(jié)點(diǎn)分擔(dān)讀負(fù)載,,可以大大提高Redis服務(wù)器的并發(fā)量,。 4、讀寫(xiě)分離:可以用于實(shí)現(xiàn)讀寫(xiě)分離,,主庫(kù)寫(xiě),、從庫(kù)讀,讀寫(xiě)分離不僅可以提高服務(wù)器的負(fù)載能力,,同時(shí)可根據(jù)需求的變化,,改變從庫(kù)的數(shù)量,。 5、高可用基石:除了上述作用以外,,主從復(fù)制還是哨兵和集群能夠?qū)嵤┑幕A(chǔ),,因此說(shuō)主從復(fù)制是Redis高可用的基礎(chǔ)。 主從復(fù)制啟用從節(jié)點(diǎn)開(kāi)啟主從復(fù)制,,有3種方式: 1,、配置文件:在從服務(wù)器的配置文件中加入 2,、啟動(dòng)命令:redis-server啟動(dòng)命令后加入 3、客戶(hù)端命令:Redis服務(wù)器啟動(dòng)后,,直接通過(guò)客戶(hù)端執(zhí)行命令 通過(guò) 主從復(fù)制原理主從復(fù)制過(guò)程大體可以分為3個(gè)階段:連接建立階段(即準(zhǔn)備階段)、數(shù)據(jù)同步階段,、命令傳播階段,。 在從節(jié)點(diǎn)執(zhí)行 主從配置之后的日志記錄也可以看出這個(gè)流程。 1,、保存主節(jié)點(diǎn)(master)信息 執(zhí)行 2,、從節(jié)點(diǎn)與主節(jié)點(diǎn)建立網(wǎng)絡(luò)連接 從節(jié)點(diǎn)(slave)內(nèi)部通過(guò)每秒運(yùn)行的定時(shí)任務(wù)維護(hù)復(fù)制相關(guān)邏輯,當(dāng)定時(shí)任務(wù)發(fā)現(xiàn)存在新的主節(jié)點(diǎn)后,,會(huì)嘗試與該節(jié)點(diǎn)建立網(wǎng)絡(luò)連接,。 從節(jié)點(diǎn)與主節(jié)點(diǎn)建立網(wǎng)絡(luò)連接。 從節(jié)點(diǎn)會(huì)建立一個(gè) 如果從節(jié)點(diǎn)無(wú)法建立連接,,定時(shí)任務(wù)會(huì)無(wú)限重試直到連接成功或者執(zhí)行 關(guān)于連接失敗,可以在從節(jié)點(diǎn)執(zhí)行
3,、發(fā)送 ping 命令 連接建立成功后從節(jié)點(diǎn)發(fā)送
如果發(fā)送 從節(jié)點(diǎn)發(fā)送的 4,、權(quán)限驗(yàn)證 如果主節(jié)點(diǎn)設(shè)置了 5,、同步數(shù)據(jù)集 主從復(fù)制連接正常通信后,對(duì)于首次建立復(fù)制的場(chǎng)景,,主節(jié)點(diǎn)會(huì)把持有的數(shù)據(jù)全部發(fā)送給從節(jié)點(diǎn),,這部分操作是耗時(shí)最長(zhǎng)的步驟。 6,、命令持續(xù)復(fù)制 當(dāng)主節(jié)點(diǎn)把當(dāng)前的數(shù)據(jù)同步給從節(jié)點(diǎn)后,,便完成了復(fù)制的建立流程。接下來(lái)主節(jié)點(diǎn)會(huì)持續(xù)地把寫(xiě)命令發(fā)送給從節(jié)點(diǎn),,保證主從數(shù)據(jù)一致性,。 |
|