日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

Redis分布式基础主从同步

發(fā)布時(shí)間:2025/3/17 数据库 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis分布式基础主从同步 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?在使用Redis的時(shí)候首先開(kāi)始是從單臺(tái)Redis服務(wù)器開(kāi)始,隨著業(yè)務(wù)和用戶量的增長(zhǎng),單機(jī)會(huì)暴漏一些問(wèn)題,比如單臺(tái)服務(wù)器的響應(yīng)達(dá)到了上限、Redis服務(wù)器宕機(jī)所有請(qǐng)求全部越過(guò)緩存等等一系列問(wèn)題。

那么我們最簡(jiǎn)單的就是有一個(gè)備用的Redis服務(wù)器,當(dāng)主服務(wù)器掛了從服務(wù)器就頂替主服務(wù)器繼續(xù)服務(wù),提高可用性。

我們擁有了主從兩臺(tái)Redis服務(wù)器之后,當(dāng)主服務(wù)器掛掉之后從服務(wù)器就替換上去繼續(xù)為我們服務(wù),原來(lái)的主服務(wù)器恢復(fù)正常后我們兩臺(tái)服務(wù)器的數(shù)據(jù)又不一樣了,那么我們?nèi)绾伪WC這兩臺(tái)服務(wù)器的數(shù)據(jù)一致性問(wèn)題呢呢?前面我們提到過(guò)CAP定理和BASE理論,我們知道在分布式、集群環(huán)境中我們需要保證數(shù)據(jù)一致性。所以我們這里得使用主從同步,或者是如果我們服務(wù)器數(shù)量特別多,我們可以減輕主服務(wù)器的同步壓力,可以使用從從同步。下面我們來(lái)介紹Redis支持的幾種同步方式。

增量同步

我們知道Redis增量備份是通過(guò)保存執(zhí)行指令來(lái)備份的,那么同步的時(shí)候我們也可以如此。主節(jié)點(diǎn)會(huì)將那些對(duì)自己的狀態(tài)產(chǎn)生修改性影響的指令記錄在本地的內(nèi)存buffer中,然后異步將buffer中的指令同步到從節(jié)點(diǎn),從節(jié)點(diǎn)一邊執(zhí)行同步的指令流來(lái)達(dá)到和主節(jié)點(diǎn)一樣的狀態(tài),一邊向主節(jié)點(diǎn)反饋?zhàn)约和降侥睦锪?#xff08;偏移量) 。

但是內(nèi)存的buffer是有限的,所以Redis主節(jié)點(diǎn)不能將所有的指令都記錄在內(nèi)存buffer中,Redis的復(fù)制內(nèi)存buffer是一個(gè)定長(zhǎng)的環(huán)形數(shù)組,如果數(shù)組內(nèi)容滿了,就會(huì)從頭開(kāi)始覆蓋前面的內(nèi)容;如果因?yàn)榫W(wǎng)絡(luò)狀況不好,從節(jié)點(diǎn)在短時(shí)間內(nèi)無(wú)法和主節(jié)點(diǎn)進(jìn)行同步,那么當(dāng)網(wǎng)絡(luò)狀況恢復(fù)肘,Redis的主節(jié)點(diǎn)中那些沒(méi)有同步的指令在buffer中有可能已經(jīng)被后續(xù)的指令覆蓋掉了。

從節(jié)點(diǎn)將無(wú)法直接通過(guò)指令流來(lái)進(jìn)行同步,這個(gè)時(shí)候就需要用到更加復(fù)雜的同步機(jī)制一一快照同步

快照同步

快照同步既全量同步,就是把整個(gè)Redis數(shù)據(jù)庫(kù)快照發(fā)送給從節(jié)點(diǎn)進(jìn)行同步,成功后接下來(lái)的動(dòng)作就是增量同步了,所以快照同步是一個(gè)非常耗資源的同步方式,這里注意的是新增加從節(jié)點(diǎn)是需要先進(jìn)行快照同步的。

過(guò)程:

  • 先將主節(jié)點(diǎn)的數(shù)據(jù)先bgsave

  • 將這個(gè)快照保存在磁盤上,重寫開(kāi)啟一個(gè)socket線程

  • 通過(guò)socket線程可以發(fā)送快照給子節(jié)點(diǎn),此時(shí)的快照是所有子節(jié)點(diǎn)共享的

  • 子節(jié)點(diǎn)同步

  • 這里注意一個(gè)問(wèn)題:當(dāng)我們進(jìn)行快照同步的時(shí)候,增量同步也在進(jìn)行,當(dāng)增量同步的數(shù)據(jù)被覆蓋后還會(huì)進(jìn)行快照同步,如此反復(fù)形成一個(gè)死循環(huán)

    無(wú)盤復(fù)制

    我們上面提到了在快照同步的時(shí)候會(huì)執(zhí)行增量同步,這里還有一個(gè)沒(méi)關(guān)注的就是Redis的AOF增量同步問(wèn)題。

    當(dāng)主節(jié)點(diǎn)進(jìn)行快照同步時(shí)是先把這個(gè)快照保存到磁盤中,然后通過(guò)子線程共享文件到從節(jié)點(diǎn),這里會(huì)進(jìn)行文件的IO操作,這個(gè)操作是非常耗時(shí)的,在非SSD磁盤中存儲(chǔ)時(shí)快照同步會(huì)對(duì)系統(tǒng)產(chǎn)生較大的負(fù)載,此時(shí)剛好主節(jié)點(diǎn)到了執(zhí)行AOF備份操作,但是這兩者并不能同時(shí)進(jìn)行,所以AOF操作是會(huì)被延遲執(zhí)行的,這樣會(huì)嚴(yán)重影響主節(jié)點(diǎn)的執(zhí)行效率,所以在Redis2.8版本之后支持無(wú)盤復(fù)制。

    無(wú)盤復(fù)制是指主服務(wù)器直接通過(guò)套接字將快照內(nèi)容發(fā)送到從節(jié)點(diǎn),生成快照是一個(gè)遍歷的過(guò)程,主節(jié)點(diǎn)會(huì)一邊遍歷內(nèi)存,一邊將序列化的內(nèi)容發(fā)送到從節(jié)點(diǎn),從節(jié)點(diǎn)先將接收到的內(nèi)容存儲(chǔ)到磁盤文件中,再進(jìn)行一次性加載。

    同步復(fù)制

    無(wú)盤復(fù)制屬于一種異步的方式,Redis3.0提供了一種同步復(fù)制的指令——wait,確保系統(tǒng)強(qiáng)一致性。wait提供兩個(gè)參數(shù),第一個(gè)參數(shù)是從節(jié)點(diǎn)的數(shù)量,第二個(gè)參數(shù)是時(shí)間,以毫秒為單位

    等待wait指令之前的所有寫操作同步到N個(gè)從節(jié)點(diǎn)最多等待T毫秒時(shí)間。如果時(shí)間=0, 表示無(wú)限等待直至N個(gè)從節(jié)點(diǎn)同步完成 。

    注意:如果時(shí)間等于0,剛好有個(gè)節(jié)點(diǎn)掉線了,那么這里會(huì)一直等待,阻塞服務(wù)器。

    > set key valueOK> wait 1 0(integer) 1

    ?

    總結(jié)一下

  • 同步類型有主從同步、從從同步

  • 同步方式有:增量同步、快照同步、無(wú)盤復(fù)制、同步復(fù)制

  • 增量同步內(nèi)存中的buffer環(huán)形數(shù)組滿了會(huì)覆蓋,而主節(jié)點(diǎn)會(huì)執(zhí)行快照同步

  • 新添加從節(jié)點(diǎn)會(huì)使用快照同步

  • 快照同步過(guò)程:先執(zhí)行bgsave把快照信息放入磁盤,并且開(kāi)啟子線程將快照共享,發(fā)送至從節(jié)點(diǎn)進(jìn)行同步

  • 快照同步的同時(shí)也會(huì)進(jìn)行增量同步,如果增量同步已經(jīng)被覆蓋則會(huì)執(zhí)行快照同步,產(chǎn)生死循環(huán)

  • 為了減小主節(jié)點(diǎn)的壓力,當(dāng)啟用同步時(shí)數(shù)據(jù)不經(jīng)過(guò)磁盤直接通過(guò)套接字將快照數(shù)據(jù)同步到從節(jié)點(diǎn)

  • ?

    一名正在搶救的coder

    筆名:mangolove

    CSDN地址:https://blog.csdn.net/mango_love

    GitHub地址:https://github.com/mangoloveYu

    新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!

    總結(jié)

    以上是生活随笔為你收集整理的Redis分布式基础主从同步的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。