日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

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

数据库

Redis的主从复制是如何做的?复制过程中也会产生各种问题

發(fā)布時(shí)間:2024/4/11 数据库 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis的主从复制是如何做的?复制过程中也会产生各种问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

點(diǎn)擊上方“朱小廝的博客”,選擇“設(shè)為星標(biāo)”

后臺(tái)回復(fù)"書",獲取

來源:urlify.cn/bQbeAf

在Redis客戶端通過info replication可以查看與復(fù)制相關(guān)的狀態(tài),對(duì)于了解主從節(jié)點(diǎn)的當(dāng)前狀態(tài),以及解決出現(xiàn)的問題都會(huì)有幫助。

主從復(fù)制,是指將一臺(tái)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)。

默認(rèn)情況下,每臺(tái)Redis服務(wù)器都是主節(jié)點(diǎn);且一個(gè)主節(jié)點(diǎn)可以有多個(gè)從節(jié)點(diǎn)(或沒有從節(jié)點(diǎn)),但一個(gè)從節(jié)點(diǎn)只能有一個(gè)主節(jié)點(diǎn)。

主從復(fù)制的作用主要包括:

  • 數(shù)據(jù)冗余:主從復(fù)制實(shí)現(xiàn)了數(shù)據(jù)的熱備份,是持久化之外的一種數(shù)據(jù)冗余方式。

  • 故障恢復(fù):當(dāng)主節(jié)點(diǎn)出現(xiàn)問題時(shí),可以由從節(jié)點(diǎn)提供服務(wù),實(shí)現(xiàn)快速的故障恢復(fù);實(shí)際上是一種服務(wù)的冗余。

  • 負(fù)載均衡:在主從復(fù)制的基礎(chǔ)上,配合讀寫分離,可以由主節(jié)點(diǎn)提供寫服務(wù),由從節(jié)點(diǎn)提供讀服務(wù)(即寫Redis數(shù)據(jù)時(shí)應(yīng)用連接主節(jié)點(diǎn),讀Redis數(shù)據(jù)時(shí)應(yīng)用連接從節(jié)點(diǎn)),分擔(dān)服務(wù)器負(fù)載;尤其是在寫少讀多的場(chǎng)景下,通過多個(gè)從節(jié)點(diǎn)分擔(dān)讀負(fù)載,可以大大提高Redis服務(wù)器的并發(fā)量。

  • 高可用基石:除了上述作用以外,主從復(fù)制還是哨兵和集群能夠?qū)嵤┑幕A(chǔ),因此說主從復(fù)制是Redis高可用的基礎(chǔ)。

  • 如何使用主從復(fù)制

    開啟主從復(fù)制

    主從復(fù)制的開啟,完全是在從節(jié)點(diǎn)發(fā)起的;不需要我們?cè)谥鞴?jié)點(diǎn)做任何事情。

    從節(jié)點(diǎn)開啟主從復(fù)制,有3種方式:

    • 配置文件:在從服務(wù)器的配置文件中加入:slaveof

    • 啟動(dòng)命令:redis-server啟動(dòng)命令后加入 --slaveof

    • 客戶端命令:Redis服務(wù)器啟動(dòng)后,直接通過客戶端執(zhí)行命令:slaveof,則該Redis實(shí)例成為從節(jié)點(diǎn)。

    斷開主從復(fù)制

    通過slaveof命令建立主從復(fù)制關(guān)系以后,可以通過slaveof no one斷開。

    從節(jié)點(diǎn)斷開復(fù)制后,不會(huì)刪除已有的數(shù)據(jù),只是不再接受主節(jié)點(diǎn)新的數(shù)據(jù)變化。

    主從復(fù)制的實(shí)現(xiàn)原理

    主從復(fù)制過程大體可以分為3個(gè)階段:連接建立階段(即準(zhǔn)備階段)數(shù)據(jù)同步階段命令傳播階段

    連接建立階段

    step1:保存主節(jié)點(diǎn)信息

    從節(jié)點(diǎn)服務(wù)器內(nèi)部維護(hù)了兩個(gè)字段,即masterhost和masterport字段,用于存儲(chǔ)主節(jié)點(diǎn)的ip和port信息。

    slaveof是異步命令,從節(jié)點(diǎn)完成主節(jié)點(diǎn)ip和port的保存后,向發(fā)送slaveof命令的客戶端直接返回OK**,實(shí)際的復(fù)制操作在這之后才開始進(jìn)行。**

    step2:建立socket連接

    從節(jié)點(diǎn)每秒1次調(diào)用復(fù)制定時(shí)函數(shù)replicationCron(),如果發(fā)現(xiàn)了有主節(jié)點(diǎn)可以連接,便會(huì)根據(jù)主節(jié)點(diǎn)的ip和port,創(chuàng)建socket連接。

    如果連接成功:

    從節(jié)點(diǎn):為該socket建立一個(gè)專門處理復(fù)制工作的文件事件處理器,負(fù)責(zé)后續(xù)的復(fù)制工作,如接收RDB文件、接收命令傳播等。

    主節(jié)點(diǎn):接收到從節(jié)點(diǎn)的socket連接后(即accept之后),為該socket創(chuàng)建相應(yīng)的客戶端狀態(tài),并將從節(jié)點(diǎn)看做是連接到主節(jié)點(diǎn)的一個(gè)客戶端,后面的步驟會(huì)以從節(jié)點(diǎn)向主節(jié)點(diǎn)發(fā)送命令請(qǐng)求的形式來進(jìn)行。

    step3:發(fā)送ping命令

    從節(jié)點(diǎn)成為主節(jié)點(diǎn)的客戶端之后,發(fā)送ping命令進(jìn)行首次請(qǐng)求,目的是:檢查socket連接是否可用,以及主節(jié)點(diǎn)當(dāng)前是否能夠處理請(qǐng)求。

    從節(jié)點(diǎn)發(fā)送ping命令后,可能出現(xiàn)3種情況:

    (1)返回pong:說明socket連接正常,且主節(jié)點(diǎn)當(dāng)前可以處理請(qǐng)求,復(fù)制過程繼續(xù)。

    (2)超時(shí):一定時(shí)間后從節(jié)點(diǎn)仍未收到主節(jié)點(diǎn)的回復(fù),說明socket連接不可用,則從節(jié)點(diǎn)斷開socket連接,并重連。

    (3)返回pong以外的結(jié)果:如果主節(jié)點(diǎn)返回其他結(jié)果,如正在處理超時(shí)運(yùn)行的腳本,說明主節(jié)點(diǎn)當(dāng)前無法處理命令,則從節(jié)點(diǎn)斷開socket連接,并重連。

    step4:身份驗(yàn)證

    如果從節(jié)點(diǎn)中設(shè)置了masterauth選項(xiàng),則從節(jié)點(diǎn)需要向主節(jié)點(diǎn)進(jìn)行身份驗(yàn)證;沒有設(shè)置該選項(xiàng),則不需要驗(yàn)證。

    從節(jié)點(diǎn)進(jìn)行身份驗(yàn)證是通過向主節(jié)點(diǎn)發(fā)送auth命令進(jìn)行的,auth命令的參數(shù)即為配置文件中的masterauth的值。

    如果主節(jié)點(diǎn)設(shè)置密碼的狀態(tài),與從節(jié)點(diǎn)masterauth的狀態(tài)一致(一致是指都存在,且密碼相同,或者都不存在),則身份驗(yàn)證通過,復(fù)制過程繼續(xù);如果不一致,則從節(jié)點(diǎn)斷開socket連接,并重連。

    step5:發(fā)送從節(jié)點(diǎn)端口信息

    身份驗(yàn)證之后,從節(jié)點(diǎn)會(huì)向主節(jié)點(diǎn)發(fā)送其監(jiān)聽的端口號(hào),主節(jié)點(diǎn)將該信息保存到該從節(jié)點(diǎn)對(duì)應(yīng)的客戶端的slave_listening_port字段中;該端口信息除了在主節(jié)點(diǎn)中執(zhí)行info Replication時(shí)顯示以外,沒有其他作用。

    數(shù)據(jù)同步階段

    主從節(jié)點(diǎn)之間的連接建立以后,便可以開始進(jìn)行數(shù)據(jù)同步,該階段可以理解為從節(jié)點(diǎn)數(shù)據(jù)的初始化。

    具體執(zhí)行的方式是:從節(jié)點(diǎn)向主節(jié)點(diǎn)發(fā)送psync命令,開始同步。

    數(shù)據(jù)同步階段是主從復(fù)制最核心的階段,根據(jù)主從節(jié)點(diǎn)當(dāng)前狀態(tài)的不同,可以分為全量復(fù)制和部分復(fù)制

    在數(shù)據(jù)同步階段之前,從節(jié)點(diǎn)是主節(jié)點(diǎn)的客戶端,主節(jié)點(diǎn)不是從節(jié)點(diǎn)的客戶端;而到了這一階段及以后,主從節(jié)點(diǎn)互為客戶端。原因在于:在此之前,主節(jié)點(diǎn)只需要響應(yīng)從節(jié)點(diǎn)的請(qǐng)求即可,不需要主動(dòng)發(fā)請(qǐng)求,而在數(shù)據(jù)同步階段和后面的命令傳播階段,主節(jié)點(diǎn)需要主動(dòng)向從節(jié)點(diǎn)發(fā)送請(qǐng)求(如推送緩沖區(qū)中的寫命令),才能完成復(fù)制。

    命令傳播階段

    數(shù)據(jù)同步階段完成后,主從節(jié)點(diǎn)進(jìn)入命令傳播階段;在這個(gè)階段主節(jié)點(diǎn)將自己執(zhí)行的寫命令發(fā)送給從節(jié)點(diǎn),從節(jié)點(diǎn)接收命令并執(zhí)行,從而保證主從節(jié)點(diǎn)數(shù)據(jù)的一致性。

    在命令傳播階段,除了發(fā)送寫命令,主從節(jié)點(diǎn)還維持著心跳機(jī)制:PING和REPLCONF ACK。

    PS:

    延遲與不一致: 命令傳播是異步的過程,即主節(jié)點(diǎn)發(fā)送寫命令后并不會(huì)等待從節(jié)點(diǎn)的回復(fù);因此實(shí)際上主從節(jié)點(diǎn)之間很難保持實(shí)時(shí)的一致性,延遲在所難免。數(shù)據(jù)不一致的程度,與主從節(jié)點(diǎn)之間的網(wǎng)絡(luò)狀況、主節(jié)點(diǎn)寫命令的執(zhí)行頻率、以及主節(jié)點(diǎn)中的repl-disable-tcp-nodelay配置等有關(guān)。

    repl-disable-tcp-nodelay no:該配置作用于命令傳播階段,控制主節(jié)點(diǎn)是否禁止與從節(jié)點(diǎn)的TCP_NODELAY;默認(rèn)no,即不禁止TCP_NODELAY。當(dāng)設(shè)置為yes時(shí),TCP會(huì)對(duì)包進(jìn)行合并從而減少帶寬,但是發(fā)送的頻率會(huì)降低,從節(jié)點(diǎn)數(shù)據(jù)延遲增加,一致性變差;具體發(fā)送頻率與Linux內(nèi)核的配置有關(guān),默認(rèn)配置為40ms。當(dāng)設(shè)置為no時(shí),TCP會(huì)立馬將主節(jié)點(diǎn)的數(shù)據(jù)發(fā)送給從節(jié)點(diǎn),帶寬增加但延遲變小。一般來說,只有當(dāng)應(yīng)用對(duì)Redis數(shù)據(jù)不一致的容忍度較高,且主從節(jié)點(diǎn)之間網(wǎng)絡(luò)狀況不好時(shí),才會(huì)設(shè)置為yes;多數(shù)情況使用默認(rèn)值no。

    【數(shù)據(jù)同步階段】全量復(fù)制和部分復(fù)制

    在Redis2.8以前,從節(jié)點(diǎn)向主節(jié)點(diǎn)發(fā)送sync命令請(qǐng)求同步數(shù)據(jù),此時(shí)的同步方式是全量復(fù)制;

    在Redis2.8以后,從節(jié)點(diǎn)可以發(fā)送psync命令請(qǐng)求同步數(shù)據(jù),此時(shí)根據(jù)主從節(jié)點(diǎn)當(dāng)前狀態(tài)的不同,同步方式可能是全量復(fù)制或部分復(fù)制。

  • 全量復(fù)制:用于初次復(fù)制或其他無法進(jìn)行部分復(fù)制的情況,將主節(jié)點(diǎn)中的所有數(shù)據(jù)都發(fā)送給從節(jié)點(diǎn),是一個(gè)非常重型的操作。

  • 部分復(fù)制:用于網(wǎng)絡(luò)中斷等情況后的復(fù)制,只將中斷期間主節(jié)點(diǎn)執(zhí)行的寫命令發(fā)送給從節(jié)點(diǎn),與全量復(fù)制相比更加高效。需要注意的是,如果網(wǎng)絡(luò)中斷時(shí)間過長(zhǎng),導(dǎo)致主節(jié)點(diǎn)沒有能夠完整地保存中斷期間執(zhí)行的寫命令,則無法進(jìn)行部分復(fù)制,仍使用全量復(fù)制。

  • 全量復(fù)制

    Redis通過psync命令進(jìn)行全量復(fù)制的過程如下:

    (1)從節(jié)點(diǎn)判斷無法進(jìn)行部分復(fù)制,向主節(jié)點(diǎn)發(fā)送全量復(fù)制的請(qǐng)求;或從節(jié)點(diǎn)發(fā)送部分復(fù)制的請(qǐng)求,但主節(jié)點(diǎn)判斷無法進(jìn)行全量復(fù)制;

    (2)主節(jié)點(diǎn)收到全量復(fù)制的命令后,執(zhí)行bgsave,在后臺(tái)生成RDB文件,并使用一個(gè)緩沖區(qū)(稱為復(fù)制緩沖區(qū))記錄從現(xiàn)在開始執(zhí)行的所有寫命令

    (3)主節(jié)點(diǎn)的bgsave執(zhí)行完成后,將RDB文件發(fā)送給從節(jié)點(diǎn);從節(jié)點(diǎn)首先清除自己的舊數(shù)據(jù),然后載入接收的RDB文件,將數(shù)據(jù)庫狀態(tài)更新至主節(jié)點(diǎn)執(zhí)行bgsave時(shí)的數(shù)據(jù)庫狀態(tài)

    (4)主節(jié)點(diǎn)將前述復(fù)制緩沖區(qū)中的所有寫命令發(fā)送給從節(jié)點(diǎn),從節(jié)點(diǎn)執(zhí)行這些寫命令,將數(shù)據(jù)庫狀態(tài)更新至主節(jié)點(diǎn)的最新狀態(tài)

    (5)如果從節(jié)點(diǎn)開啟了AOF,則會(huì)觸發(fā)bgrewriteaof的執(zhí)行,從而保證AOF文件更新至主節(jié)點(diǎn)的最新狀態(tài)

    通過全量復(fù)制的過程可以看出,全量復(fù)制是非常重型的操作:

    (1)主節(jié)點(diǎn)通過bgsave命令fork子進(jìn)程進(jìn)行RDB持久化,該過程是非常消耗CPU、內(nèi)存(頁表復(fù)制)、硬盤IO的;

    (2)主節(jié)點(diǎn)通過網(wǎng)絡(luò)將RDB文件發(fā)送給從節(jié)點(diǎn),對(duì)主從節(jié)點(diǎn)的帶寬都會(huì)帶來很大的消耗

    (3)從節(jié)點(diǎn)清空老數(shù)據(jù)、載入新RDB文件的過程是阻塞的,無法響應(yīng)客戶端的命令;如果從節(jié)點(diǎn)執(zhí)行bgrewriteaof,也會(huì)帶來額外的消耗

    部分復(fù)制

    由于全量復(fù)制在主節(jié)點(diǎn)數(shù)據(jù)量較大時(shí)效率太低,因此Redis2.8開始提供部分復(fù)制,用于處理網(wǎng)絡(luò)中斷時(shí)的數(shù)據(jù)同步。

    部分復(fù)制的實(shí)現(xiàn),依賴于三個(gè)重要的概念:復(fù)制偏移量,復(fù)制積壓緩沖區(qū),服務(wù)器運(yùn)行ID

    復(fù)制偏移量

    主節(jié)點(diǎn)和從節(jié)點(diǎn)分別維護(hù)一個(gè)復(fù)制偏移量(offset),代表的是主節(jié)點(diǎn)向從節(jié)點(diǎn)傳遞的字節(jié)數(shù);主節(jié)點(diǎn)每次向從節(jié)點(diǎn)傳播N個(gè)字節(jié)數(shù)據(jù)時(shí),主節(jié)點(diǎn)的offset增加N;從節(jié)點(diǎn)每次收到主節(jié)點(diǎn)傳來的N個(gè)字節(jié)數(shù)據(jù)時(shí),從節(jié)點(diǎn)的offset增加N。

    offset用于判斷主從節(jié)點(diǎn)的數(shù)據(jù)庫狀態(tài)是否一致:如果二者offset相同,則一致;如果offset不同,則不一致,此時(shí)可以根據(jù)兩個(gè)offset找出從節(jié)點(diǎn)缺少的那部分?jǐn)?shù)據(jù)。例如,如果主節(jié)點(diǎn)的offset是1000,而從節(jié)點(diǎn)的offset是500,那么部分復(fù)制就需要將offset為501-1000的數(shù)據(jù)傳遞給從節(jié)點(diǎn)。而offset為501-1000的數(shù)據(jù)存儲(chǔ)的位置,就是下面要介紹的復(fù)制積壓緩沖區(qū)。

    復(fù)制積壓緩沖區(qū)

    復(fù)制積壓緩沖區(qū)是由主節(jié)點(diǎn)維護(hù)的、固定長(zhǎng)度的、先進(jìn)先出(FIFO)隊(duì)列,默認(rèn)大小1MB;當(dāng)主節(jié)點(diǎn)開始有從節(jié)點(diǎn)時(shí)創(chuàng)建,其作用是備份主節(jié)點(diǎn)最近發(fā)送給從節(jié)點(diǎn)的數(shù)據(jù)。注意,無論主節(jié)點(diǎn)有一個(gè)還是多個(gè)從節(jié)點(diǎn),都只需要一個(gè)復(fù)制積壓緩沖區(qū)。

    在命令傳播階段,主節(jié)點(diǎn)除了將寫命令發(fā)送給從節(jié)點(diǎn),還會(huì)發(fā)送一份給復(fù)制積壓緩沖區(qū),作為寫命令的備份;除了存儲(chǔ)寫命令,復(fù)制積壓緩沖區(qū)中還存儲(chǔ)了其中的每個(gè)字節(jié)對(duì)應(yīng)的復(fù)制偏移量(offset)。由于復(fù)制積壓緩沖區(qū)定長(zhǎng)且是先進(jìn)先出,所以它保存的是主節(jié)點(diǎn)最近執(zhí)行的寫命令;時(shí)間較早的寫命令會(huì)被擠出緩沖區(qū)。

    由于該緩沖區(qū)長(zhǎng)度固定且有限,因此可以備份的寫命令也有限,當(dāng)主從節(jié)點(diǎn)offset的差距過大超過緩沖區(qū)長(zhǎng)度時(shí),將無法執(zhí)行部分復(fù)制,只能執(zhí)行全量復(fù)制。反過來說,為了提高網(wǎng)絡(luò)中斷時(shí)部分復(fù)制執(zhí)行的概率,可以根據(jù)需要增大復(fù)制積壓緩沖區(qū)的大小(通過配置repl-backlog-size);例如如果網(wǎng)絡(luò)中斷的平均時(shí)間是60s,而主節(jié)點(diǎn)平均每秒產(chǎn)生的寫命令(特定協(xié)議格式)所占的字節(jié)數(shù)為100KB,則復(fù)制積壓緩沖區(qū)的平均需求為6MB,保險(xiǎn)起見,可以設(shè)置為12MB,來保證絕大多數(shù)斷線情況都可以使用部分復(fù)制。

    從節(jié)點(diǎn)將offset發(fā)送給主節(jié)點(diǎn)后,主節(jié)點(diǎn)根據(jù)offset和緩沖區(qū)大小決定能否執(zhí)行部分復(fù)制:

    • 如果offset偏移量之后的數(shù)據(jù),仍然都在復(fù)制積壓緩沖區(qū)里,則執(zhí)行部分復(fù)制;

    • 如果offset偏移量之后的數(shù)據(jù)已不在復(fù)制積壓緩沖區(qū)中(數(shù)據(jù)已被擠出),則執(zhí)行全量復(fù)制。

    服務(wù)器運(yùn)行ID(runid)

    每個(gè)Redis節(jié)點(diǎn)(無論主從),在啟動(dòng)時(shí)都會(huì)自動(dòng)生成一個(gè)隨機(jī)ID(每次啟動(dòng)都不一樣),由40個(gè)隨機(jī)的十六進(jìn)制字符組成;

    runid用來唯一識(shí)別一個(gè)Redis節(jié)點(diǎn)。通過info Server命令,可以查看節(jié)點(diǎn)的runid。

    主從節(jié)點(diǎn)初次復(fù)制時(shí),主節(jié)點(diǎn)將自己的runid發(fā)送給從節(jié)點(diǎn),從節(jié)點(diǎn)將這個(gè)runid保存起來;當(dāng)斷線重連時(shí),從節(jié)點(diǎn)會(huì)將這個(gè)runid發(fā)送給主節(jié)點(diǎn);主節(jié)點(diǎn)根據(jù)runid判斷能否進(jìn)行部分復(fù)制:

    • 如果從節(jié)點(diǎn)保存的runid與主節(jié)點(diǎn)現(xiàn)在的runid相同,說明主從節(jié)點(diǎn)之前同步過,主節(jié)點(diǎn)會(huì)繼續(xù)嘗試使用部分復(fù)制(到底能不能部分復(fù)制還要看offset和復(fù)制積壓緩沖區(qū)的情況);

    • 如果從節(jié)點(diǎn)保存的runid與主節(jié)點(diǎn)現(xiàn)在的runid不同,說明從節(jié)點(diǎn)在斷線前同步的Redis節(jié)點(diǎn)并不是當(dāng)前的主節(jié)點(diǎn),只能進(jìn)行全量復(fù)制。

    psync命令的執(zhí)行

    image

    (1)首先從節(jié)點(diǎn)根據(jù)當(dāng)前狀態(tài),決定如何調(diào)用psync命令:

    • 如果從節(jié)點(diǎn)之前未執(zhí)行過slaveof或最近執(zhí)行了slaveof no one,則從節(jié)點(diǎn)發(fā)送命令為psync ? -1,向主節(jié)點(diǎn)請(qǐng)求全量復(fù)制;

    • 如果從節(jié)點(diǎn)之前執(zhí)行了slaveof,則發(fā)送命令為psync,其中runid為上次復(fù)制的主節(jié)點(diǎn)的runid,offset為上次復(fù)制截止時(shí)從節(jié)點(diǎn)保存的復(fù)制偏移量。

    (2)主節(jié)點(diǎn)根據(jù)收到的psync命令,及當(dāng)前服務(wù)器狀態(tài),決定執(zhí)行全量復(fù)制還是部分復(fù)制:

    • 如果主節(jié)點(diǎn)版本低于Redis2.8,則返回-ERR回復(fù),此時(shí)從節(jié)點(diǎn)重新發(fā)送sync命令執(zhí)行全量復(fù)制;

    • 如果主節(jié)點(diǎn)版本夠新,且runid與從節(jié)點(diǎn)發(fā)送的runid相同,且從節(jié)點(diǎn)發(fā)送的offset之后的數(shù)據(jù)在復(fù)制積壓緩沖區(qū)中都存在,則回復(fù)+CONTINUE,表示將進(jìn)行部分復(fù)制,從節(jié)點(diǎn)等待主節(jié)點(diǎn)發(fā)送其缺少的數(shù)據(jù)即可;

    • 如果主節(jié)點(diǎn)版本夠新,但是runid與從節(jié)點(diǎn)發(fā)送的runid不同,或從節(jié)點(diǎn)發(fā)送的offset之后的數(shù)據(jù)已不在復(fù)制積壓緩沖區(qū)中(在隊(duì)列中被擠出了),則回復(fù)+FULLRESYNC,表示要進(jìn)行全量復(fù)制,其中runid表示主節(jié)點(diǎn)當(dāng)前的runid,offset表示主節(jié)點(diǎn)當(dāng)前的offset,從節(jié)點(diǎn)保存這兩個(gè)值,以備使用。

    【命令傳播階段】心跳機(jī)制

    在命令傳播階段,除了發(fā)送寫命令,主從節(jié)點(diǎn)還維持著心跳機(jī)制:PING和REPLCONF ACK。心跳機(jī)制對(duì)于主從復(fù)制的超時(shí)判斷、數(shù)據(jù)安全等有作用。

    主->從:PING

    每隔指定的時(shí)間,主節(jié)點(diǎn)會(huì)向從節(jié)點(diǎn)發(fā)送PING命令,這個(gè)PING命令的作用,主要是為了讓從節(jié)點(diǎn)進(jìn)行超時(shí)判斷。

    PING發(fā)送的頻率由 repl-ping-slave-period 參數(shù)控制,單位是秒,默認(rèn)值是10s。

    從->主:REPLCONF ACK

    在命令傳播階段,**從節(jié)點(diǎn)會(huì)向主節(jié)點(diǎn)發(fā)送REPLCONF ACK命令,**頻率是每秒1次;命令格式為:REPLCONF ACK {offset},其中offset指從節(jié)點(diǎn)保存的復(fù)制偏移量。

    REPLCONF ACK命令的作用包括:

    (1)實(shí)時(shí)監(jiān)測(cè)主從節(jié)點(diǎn)網(wǎng)絡(luò)狀態(tài):該命令會(huì)被主節(jié)點(diǎn)用于復(fù)制超時(shí)的判斷。此外,在主節(jié)點(diǎn)中使用info Replication,可以看到其從節(jié)點(diǎn)的狀態(tài)中的lag值,代表的是主節(jié)點(diǎn)上次收到該REPLCONF ACK命令的時(shí)間間隔,在正常情況下,該值應(yīng)該是0或1。

    (2)檢測(cè)命令丟失:從節(jié)點(diǎn)發(fā)送了自身的offset,主節(jié)點(diǎn)會(huì)與自己的offset對(duì)比,如果從節(jié)點(diǎn)數(shù)據(jù)缺失(如網(wǎng)絡(luò)丟包),主節(jié)點(diǎn)會(huì)推送缺失的數(shù)據(jù)(這里也會(huì)利用復(fù)制積壓緩沖區(qū))。注意,offset和復(fù)制積壓緩沖區(qū),不僅可以用于部分復(fù)制,也可以用于處理命令丟失等情形;區(qū)別在于前者是在斷線重連后進(jìn)行的,而后者是在主從節(jié)點(diǎn)沒有斷線的情況下進(jìn)行的。

    (3)輔助保證從節(jié)點(diǎn)的數(shù)量和延遲:Redis主節(jié)點(diǎn)中使用min-slaves-to-write和min-slaves-max-lag參數(shù),來保證主節(jié)點(diǎn)在不安全的情況下不會(huì)執(zhí)行寫命令;所謂不安全,是指從節(jié)點(diǎn)數(shù)量太少,或延遲過高。例如min-slaves-to-write和min-slaves-max-lag分別是3和10,含義是如果從節(jié)點(diǎn)數(shù)量小于3個(gè),或所有從節(jié)點(diǎn)的延遲值都大于10s,則主節(jié)點(diǎn)拒絕執(zhí)行寫命令。而這里從節(jié)點(diǎn)延遲值的獲取,就是通過主節(jié)點(diǎn)接收到REPLCONF ACK命令的時(shí)間來判斷的,即前面所說的info Replication中的lag值。

    應(yīng)用中的問題

    讀寫分離及其中的問題

    在主從復(fù)制基礎(chǔ)上實(shí)現(xiàn)的讀寫分離,可以實(shí)現(xiàn)Redis的讀負(fù)載均衡:由主節(jié)點(diǎn)提供寫服務(wù),由一個(gè)或多個(gè)從節(jié)點(diǎn)提供讀服務(wù)(多個(gè)從節(jié)點(diǎn)既可以提高數(shù)據(jù)冗余程度,也可以最大化讀負(fù)載能力);

    在使用Redis讀寫分離時(shí)需要注意的問題。

    延遲與不一致問題

    由于主從復(fù)制的命令傳播是異步的,延遲與數(shù)據(jù)的不一致不可避免。如果應(yīng)用對(duì)數(shù)據(jù)不一致的接受程度程度較低,可能的優(yōu)化措施包括:

    優(yōu)化主從節(jié)點(diǎn)之間的網(wǎng)絡(luò)環(huán)境(如在同機(jī)房部署);

    監(jiān)控主從節(jié)點(diǎn)延遲(通過offset)判斷,如果從節(jié)點(diǎn)延遲過大,通知應(yīng)用不再通過該從節(jié)點(diǎn)讀取數(shù)據(jù);

    使用集群同時(shí)擴(kuò)展寫負(fù)載和讀負(fù)載等。

    在命令傳播階段以外的其他情況下,從節(jié)點(diǎn)的數(shù)據(jù)不一致可能更加嚴(yán)重,例如連接在數(shù)據(jù)同步階段,或從節(jié)點(diǎn)失去與主節(jié)點(diǎn)的連接時(shí)等。從節(jié)點(diǎn)的slave-serve-stale-data參數(shù)便與此有關(guān):它控制這種情況下從節(jié)點(diǎn)的表現(xiàn);如果為yes(默認(rèn)值),則從節(jié)點(diǎn)仍能夠響應(yīng)客戶端的命令,如果為no,則從節(jié)點(diǎn)只能響應(yīng)info、slaveof等少數(shù)命令。該參數(shù)的設(shè)置與應(yīng)用對(duì)數(shù)據(jù)一致性的要求有關(guān);如果對(duì)數(shù)據(jù)一致性要求很高,則應(yīng)設(shè)置為no。

    數(shù)據(jù)過期問題

    在單機(jī)版Redis中,存在兩種刪除策略:

    • 惰性刪除:服務(wù)器不會(huì)主動(dòng)刪除數(shù)據(jù),只有當(dāng)客戶端查詢某個(gè)數(shù)據(jù)時(shí),服務(wù)器判斷該數(shù)據(jù)是否過期,如果過期則刪除。

    • 定期刪除:服務(wù)器執(zhí)行定時(shí)任務(wù)刪除過期數(shù)據(jù),但是考慮到內(nèi)存和CPU的折中(刪除會(huì)釋放內(nèi)存,但是頻繁的刪除操作對(duì)CPU不友好),該刪除的頻率和執(zhí)行時(shí)間都受到了限制。

    在主從復(fù)制場(chǎng)景下,為了主從節(jié)點(diǎn)的數(shù)據(jù)一致性,從節(jié)點(diǎn)不會(huì)主動(dòng)刪除數(shù)據(jù),而是由主節(jié)點(diǎn)控制從節(jié)點(diǎn)中過期數(shù)據(jù)的刪除。由于主節(jié)點(diǎn)的惰性刪除和定期刪除策略,都不能保證主節(jié)點(diǎn)及時(shí)對(duì)過期數(shù)據(jù)執(zhí)行刪除操作,因此,當(dāng)客戶端通過Redis從節(jié)點(diǎn)讀取數(shù)據(jù)時(shí),很容易讀取到已經(jīng)過期的數(shù)據(jù)。Redis 3.2中,從節(jié)點(diǎn)在讀取數(shù)據(jù)時(shí),增加了對(duì)數(shù)據(jù)是否過期的判斷:如果該數(shù)據(jù)已過期,則不返回給客戶端;將Redis升級(jí)到3.2可以解決數(shù)據(jù)過期問題。

    故障切換問題

    在沒有使用哨兵的讀寫分離場(chǎng)景下,應(yīng)用針對(duì)讀和寫分別連接不同的Redis節(jié)點(diǎn);當(dāng)主節(jié)點(diǎn)或從節(jié)點(diǎn)出現(xiàn)問題而發(fā)生更改時(shí),需要及時(shí)修改應(yīng)用程序讀寫Redis數(shù)據(jù)的連接;連接的切換可以手動(dòng)進(jìn)行,或者自己寫監(jiān)控程序進(jìn)行切換,但前者響應(yīng)慢、容易出錯(cuò),后者實(shí)現(xiàn)復(fù)雜,成本都不算低。

    復(fù)制超時(shí)問題

    主從節(jié)點(diǎn)復(fù)制超時(shí)是導(dǎo)致復(fù)制中斷的最重要的原因之一。

    超時(shí)判斷意義: 在復(fù)制連接建立過程中及之后,主從節(jié)點(diǎn)都有機(jī)制判斷連接是否超時(shí),其意義在于:

    (1)如果主節(jié)點(diǎn)判斷連接超時(shí),其會(huì)釋放相應(yīng)從節(jié)點(diǎn)的連接,從而釋放各種資源,否則無效的從節(jié)點(diǎn)仍會(huì)占用主節(jié)點(diǎn)的各種資源(輸出緩沖區(qū)、帶寬、連接等);此外連接超時(shí)的判斷可以讓主節(jié)點(diǎn)更準(zhǔn)確的知道當(dāng)前有效從節(jié)點(diǎn)的個(gè)數(shù),有助于保證數(shù)據(jù)安全(配合前面講到的min-slaves-to-write等參數(shù))。

    (2)如果從節(jié)點(diǎn)判斷連接超時(shí),則可以及時(shí)重新建立連接,避免與主節(jié)點(diǎn)數(shù)據(jù)長(zhǎng)期的不一致。

    判斷機(jī)制

    主從復(fù)制超時(shí)判斷的核心,在于repl-timeout參數(shù),該參數(shù)規(guī)定了超時(shí)時(shí)間的閾值(默認(rèn)60s),對(duì)于主節(jié)點(diǎn)和從節(jié)點(diǎn)同時(shí)有效;主從節(jié)點(diǎn)觸發(fā)超時(shí)的條件分別如下:

    (1)主節(jié)點(diǎn):每秒1次調(diào)用復(fù)制定時(shí)函數(shù)replicationCron(),在其中判斷當(dāng)前時(shí)間距離上次收到各個(gè)從節(jié)點(diǎn)REPLCONF ACK的時(shí)間,是否超過了repl-timeout值,如果超過了則釋放相應(yīng)從節(jié)點(diǎn)的連接。

    (2)從節(jié)點(diǎn):從節(jié)點(diǎn)對(duì)超時(shí)的判斷同樣是在復(fù)制定時(shí)函數(shù)中判斷,基本邏輯是:

    • 如果當(dāng)前處于連接建立階段,且距離上次收到主節(jié)點(diǎn)的信息的時(shí)間已超過repl-timeout,則釋放與主節(jié)點(diǎn)的連接;

    • 如果當(dāng)前處于數(shù)據(jù)同步階段,且收到主節(jié)點(diǎn)的RDB文件的時(shí)間超時(shí),則停止數(shù)據(jù)同步,釋放連接;

    • 如果當(dāng)前處于命令傳播階段,且距離上次收到主節(jié)點(diǎn)的PING命令或數(shù)據(jù)的時(shí)間已超過repl-timeout值,則釋放與主節(jié)點(diǎn)的連接。

    復(fù)制階段連接超時(shí)有關(guān)的一些實(shí)際問題:

    (1)數(shù)據(jù)同步階段:在主從節(jié)點(diǎn)進(jìn)行全量復(fù)制bgsave時(shí),主節(jié)點(diǎn)需要首先fork子進(jìn)程將當(dāng)前數(shù)據(jù)保存到RDB文件中,然后再將RDB文件通過網(wǎng)絡(luò)傳輸?shù)綇墓?jié)點(diǎn)。如果RDB文件過大,主節(jié)點(diǎn)在fork子進(jìn)程+保存RDB文件時(shí)耗時(shí)過多,可能會(huì)導(dǎo)致從節(jié)點(diǎn)長(zhǎng)時(shí)間收不到數(shù)據(jù)而觸發(fā)超時(shí);此時(shí)從節(jié)點(diǎn)會(huì)重連主節(jié)點(diǎn),然后再次全量復(fù)制,再次超時(shí),再次重連……這是個(gè)悲傷的循環(huán)。為了避免這種情況的發(fā)生,除了注意Redis單機(jī)數(shù)據(jù)量不要過大,另一方面就是適當(dāng)增大repl-timeout值,具體的大小可以根據(jù)bgsave耗時(shí)來調(diào)整。

    (2)命令傳播階段:在該階段主節(jié)點(diǎn)會(huì)向從節(jié)點(diǎn)發(fā)送PING命令,頻率由repl-ping-slave-period控制;該參數(shù)應(yīng)明顯小于repl-timeout值(后者至少是前者的幾倍)。否則,如果兩個(gè)參數(shù)相等或接近,網(wǎng)絡(luò)抖動(dòng)導(dǎo)致個(gè)別PING命令丟失,此時(shí)恰巧主節(jié)點(diǎn)也沒有向從節(jié)點(diǎn)發(fā)送數(shù)據(jù),則從節(jié)點(diǎn)很容易判斷超時(shí)。

    (3)慢查詢導(dǎo)致的阻塞:如果主節(jié)點(diǎn)或從節(jié)點(diǎn)執(zhí)行了一些慢查詢(如keys *或者對(duì)大數(shù)據(jù)的hgetall等),導(dǎo)致服務(wù)器阻塞;阻塞期間無法響應(yīng)復(fù)制連接中對(duì)方節(jié)點(diǎn)的請(qǐng)求,可能導(dǎo)致復(fù)制超時(shí)。

    復(fù)制緩沖區(qū)溢出

    在全量復(fù)制階段,主節(jié)點(diǎn)會(huì)將執(zhí)行的寫命令放到復(fù)制緩沖區(qū)中,該緩沖區(qū)存放的數(shù)據(jù)包括了以下幾個(gè)時(shí)間段內(nèi)主節(jié)點(diǎn)執(zhí)行的寫命令:bgsave生成RDB文件、RDB文件由主節(jié)點(diǎn)發(fā)往從節(jié)點(diǎn)、從節(jié)點(diǎn)清空老數(shù)據(jù)并載入RDB文件中的數(shù)據(jù)。

    當(dāng)主節(jié)點(diǎn)數(shù)據(jù)量較大,或者主從節(jié)點(diǎn)之間網(wǎng)絡(luò)延遲較大時(shí),可能導(dǎo)致該緩沖區(qū)的大小超過了限制,此時(shí)主節(jié)點(diǎn)會(huì)斷開與從節(jié)點(diǎn)之間的連接;這種情況可能引起全量復(fù)制->復(fù)制緩沖區(qū)溢出導(dǎo)致連接中斷->重連->全量復(fù)制->復(fù)制緩沖區(qū)溢出導(dǎo)致連接中斷……的循環(huán)。

    復(fù)制緩沖區(qū)的大小由client-output-buffer-limit slave {hard limit} {soft limit} {soft seconds}配置,默認(rèn)值為client-output-buffer-limit slave 256MB 64MB 60,其含義是:如果buffer大于256MB,或者連續(xù)60s大于64MB,則主節(jié)點(diǎn)會(huì)斷開與該從節(jié)點(diǎn)的連接。該參數(shù)是可以通過config set命令動(dòng)態(tài)配置的(即不重啟Redis也可以生效)。

    需要注意的是,復(fù)制緩沖區(qū)是客戶端輸出緩沖區(qū)的一種,主節(jié)點(diǎn)會(huì)為每一個(gè)從節(jié)點(diǎn)分別分配復(fù)制緩沖區(qū);而復(fù)制積壓緩沖區(qū)則是一個(gè)主節(jié)點(diǎn)只有一個(gè),無論它有多少個(gè)從節(jié)點(diǎn)。

    各場(chǎng)景下復(fù)制的選擇及優(yōu)化技巧

    第一次建立復(fù)制

    此時(shí)全量復(fù)制不可避免,但仍有幾點(diǎn)需要注意:

    如果主節(jié)點(diǎn)的數(shù)據(jù)量較大,應(yīng)該盡量避開流量的高峰期,避免造成阻塞;

    如果有多個(gè)從節(jié)點(diǎn)需要建立對(duì)主節(jié)點(diǎn)的復(fù)制,可以考慮將幾個(gè)從節(jié)點(diǎn)錯(cuò)開,避免主節(jié)點(diǎn)帶寬占用過大。

    如果從節(jié)點(diǎn)過多,也可以調(diào)整主從復(fù)制的拓?fù)浣Y(jié)構(gòu),由一主多從結(jié)構(gòu)變?yōu)闃錉罱Y(jié)構(gòu)(中間的節(jié)點(diǎn)既是其主節(jié)點(diǎn)的從節(jié)點(diǎn),也是其從節(jié)點(diǎn)的主節(jié)點(diǎn));

    但使用樹狀結(jié)構(gòu)應(yīng)該謹(jǐn)慎:雖然主節(jié)點(diǎn)的直接從節(jié)點(diǎn)減少,降低了主節(jié)點(diǎn)的負(fù)擔(dān),但是多層從節(jié)點(diǎn)的延遲增大,數(shù)據(jù)一致性變差;且結(jié)構(gòu)復(fù)雜,維護(hù)相當(dāng)困難。

    主節(jié)點(diǎn)重啟

    主節(jié)點(diǎn)重啟可以分為兩種情況來討論,一種是故障導(dǎo)致宕機(jī),另一種則是有計(jì)劃的重啟。

    主節(jié)點(diǎn)宕機(jī)

    主節(jié)點(diǎn)宕機(jī)重啟后,runid會(huì)發(fā)生變化,因此不能進(jìn)行部分復(fù)制,只能全量復(fù)制。

    實(shí)際上在主節(jié)點(diǎn)宕機(jī)的情況下,應(yīng)進(jìn)行故障轉(zhuǎn)移處理,將其中的一個(gè)從節(jié)點(diǎn)升級(jí)為主節(jié)點(diǎn),其他從節(jié)點(diǎn)從新的主節(jié)點(diǎn)進(jìn)行復(fù)制;且故障轉(zhuǎn)移應(yīng)盡量的自動(dòng)化。

    安全重啟:debug reload

    在一些場(chǎng)景下,可能希望對(duì)主節(jié)點(diǎn)進(jìn)行重啟,例如主節(jié)點(diǎn)內(nèi)存碎片率過高,或者希望調(diào)整一些只能在啟動(dòng)時(shí)調(diào)整的參數(shù)。如果使用普通的手段重啟主節(jié)點(diǎn),會(huì)使得runid發(fā)生變化,可能導(dǎo)致不必要的全量復(fù)制。

    為了解決這個(gè)問題,Redis提供了debug reload的重啟方式:**重啟后,主節(jié)點(diǎn)的runid和offset****都不受影響,**避免了全量復(fù)制。

    但debug reload是一柄雙刃劍:它會(huì)清空當(dāng)前內(nèi)存中的數(shù)據(jù),重新從RDB文件中加載,這個(gè)過程會(huì)導(dǎo)致主節(jié)點(diǎn)的阻塞,因此也需要謹(jǐn)慎。

    從節(jié)點(diǎn)重啟

    從節(jié)點(diǎn)宕機(jī)重啟后,其保存的主節(jié)點(diǎn)的runid會(huì)丟失,因此即使再次執(zhí)行slaveof,也無法進(jìn)行部分復(fù)制。

    網(wǎng)絡(luò)中斷

    如果主從節(jié)點(diǎn)之間出現(xiàn)網(wǎng)絡(luò)問題,造成短時(shí)間內(nèi)網(wǎng)絡(luò)中斷,可以分為多種情況討論。

    第一種情況:網(wǎng)絡(luò)問題時(shí)間極為短暫,只造成了短暫的丟包,主從節(jié)點(diǎn)都沒有判定超時(shí)(未觸發(fā)repl-timeout);此時(shí)只需要通過REPLCONF ACK來補(bǔ)充丟失的數(shù)據(jù)即可。

    第二種情況:網(wǎng)絡(luò)問題時(shí)間很長(zhǎng),主從節(jié)點(diǎn)判斷超時(shí)(觸發(fā)了repl-timeout),且丟失的數(shù)據(jù)過多,超過了復(fù)制積壓緩沖區(qū)所能存儲(chǔ)的范圍;此時(shí)主從節(jié)點(diǎn)無法進(jìn)行部分復(fù)制,只能進(jìn)行全量復(fù)制。為了盡可能避免這種情況的發(fā)生,應(yīng)該根據(jù)實(shí)際情況適當(dāng)調(diào)整復(fù)制積壓緩沖區(qū)的大小;此外及時(shí)發(fā)現(xiàn)并修復(fù)網(wǎng)絡(luò)中斷,也可以減少全量復(fù)制。

    第三種情況:介于前述兩種情況之間,主從節(jié)點(diǎn)判斷超時(shí),且丟失的數(shù)據(jù)仍然都在復(fù)制積壓緩沖區(qū)中;此時(shí)主從節(jié)點(diǎn)可以進(jìn)行部分復(fù)制。

    復(fù)制相關(guān)的配置

    slaveof:Redis啟動(dòng)時(shí)起作用;作用是建立復(fù)制關(guān)系,開啟了該配置的Redis服務(wù)器在啟動(dòng)后成為從節(jié)點(diǎn)。該注釋默認(rèn)注釋掉,即Redis服務(wù)器默認(rèn)都是主節(jié)點(diǎn)。

    repl-timeout 60:與各個(gè)階段主從節(jié)點(diǎn)連接超時(shí)判斷有關(guān)。

    repl-diskless-sync no:作用于全量復(fù)制階段,控制主節(jié)點(diǎn)是否使用diskless復(fù)制(無盤復(fù)制)。所謂diskless復(fù)制,是指在全量復(fù)制時(shí),主節(jié)點(diǎn)不再先把數(shù)據(jù)寫入RDB文件,而是直接寫入slave的socket中,整個(gè)過程中不涉及硬盤;diskless復(fù)制在磁盤IO很慢而網(wǎng)速很快時(shí)更有優(yōu)勢(shì)。需要注意的是,截至Redis3.0,diskless復(fù)制處于實(shí)驗(yàn)階段,默認(rèn)是關(guān)閉的。

    repl-diskless-sync-delay 5:該配置作用于全量復(fù)制階段,當(dāng)主節(jié)點(diǎn)使用diskless復(fù)制時(shí),該配置決定主節(jié)點(diǎn)向從節(jié)點(diǎn)發(fā)送之前停頓的時(shí)間,單位是秒;只有當(dāng)diskless復(fù)制打開時(shí)有效,默認(rèn)5s。之所以設(shè)置停頓時(shí)間,是基于以下兩個(gè)考慮:(1)向slave的socket的傳輸一旦開始,新連接的slave只能等待當(dāng)前數(shù)據(jù)傳輸結(jié)束,才能開始新的數(shù)據(jù)傳輸 (2)多個(gè)從節(jié)點(diǎn)有較大的概率在短時(shí)間內(nèi)建立主從復(fù)制。

    client-output-buffer-limit slave 256MB 64MB 60:與全量復(fù)制階段主節(jié)點(diǎn)的緩沖區(qū)大小有關(guān),見前面的介紹。

    repl-disable-tcp-nodelay no:與命令傳播階段的延遲有關(guān)。

    masterauth:與連接建立階段的身份驗(yàn)證有關(guān)。

    repl-ping-slave-period 10:與命令傳播階段主從節(jié)點(diǎn)的超時(shí)判斷有關(guān)。

    repl-backlog-size 1mb:復(fù)制積壓緩沖區(qū)的大小。

    repl-backlog-ttl 3600:當(dāng)主節(jié)點(diǎn)沒有從節(jié)點(diǎn)時(shí),復(fù)制積壓緩沖區(qū)保留的時(shí)間,這樣當(dāng)斷開的從節(jié)點(diǎn)重新連進(jìn)來時(shí),可以進(jìn)行全量復(fù)制;默認(rèn)3600s。如果設(shè)置為0,則永遠(yuǎn)不會(huì)釋放復(fù)制積壓緩沖區(qū)。

    min-slaves-to-write 3與min-slaves-max-lag 10:規(guī)定了主節(jié)點(diǎn)的最小從節(jié)點(diǎn)數(shù)目,及對(duì)應(yīng)的最大延遲,見前面的介紹。

    slave-serve-stale-data yes:與從節(jié)點(diǎn)數(shù)據(jù)陳舊時(shí)是否響應(yīng)客戶端命令有關(guān),見前面的介紹。

    slave-read-only yes:從節(jié)點(diǎn)是否只讀;默認(rèn)是只讀的。由于從節(jié)點(diǎn)開啟寫操作容易導(dǎo)致主從節(jié)點(diǎn)的數(shù)據(jù)不一致,因此該配置盡量不要修改。

    單機(jī)內(nèi)存大小限制

    fork操作對(duì)Redis單機(jī)內(nèi)存大小的限制。實(shí)際上在Redis的使用中,限制單機(jī)內(nèi)存大小的因素非常之多,單機(jī)內(nèi)存過大可能造成的影響:

    (1)切主:當(dāng)主節(jié)點(diǎn)宕機(jī)時(shí),一種常見的容災(zāi)策略是將其中一個(gè)從節(jié)點(diǎn)提升為主節(jié)點(diǎn),并將其他從節(jié)點(diǎn)掛載到新的主節(jié)點(diǎn)上,此時(shí)這些從節(jié)點(diǎn)只能進(jìn)行全量復(fù)制;如果Redis單機(jī)內(nèi)存達(dá)到10GB,一個(gè)從節(jié)點(diǎn)的同步時(shí)間在幾分鐘的級(jí)別;如果從節(jié)點(diǎn)較多,恢復(fù)的速度會(huì)更慢。如果系統(tǒng)的讀負(fù)載很高,而這段時(shí)間從節(jié)點(diǎn)無法提供服務(wù),會(huì)對(duì)系統(tǒng)造成很大的壓力。

    (2)從庫擴(kuò)容:如果訪問量突然增大,此時(shí)希望增加從節(jié)點(diǎn)分擔(dān)讀負(fù)載,如果數(shù)據(jù)量過大,從節(jié)點(diǎn)同步太慢,難以及時(shí)應(yīng)對(duì)訪問量的暴增。

    (3)緩沖區(qū)溢出:(1)和(2)都是從節(jié)點(diǎn)可以正常同步的情形(雖然慢),但是如果數(shù)據(jù)量過大,導(dǎo)致全量復(fù)制階段主節(jié)點(diǎn)的復(fù)制緩沖區(qū)溢出,從而導(dǎo)致復(fù)制中斷,則主從節(jié)點(diǎn)的數(shù)據(jù)同步會(huì)全量復(fù)制->復(fù)制緩沖區(qū)溢出導(dǎo)致復(fù)制中斷->重連->全量復(fù)制->復(fù)制緩沖區(qū)溢出導(dǎo)致復(fù)制中斷……的循環(huán)。

    (4)超時(shí):如果數(shù)據(jù)量過大,全量復(fù)制階段主節(jié)點(diǎn)fork+保存RDB文件耗時(shí)過大,從節(jié)點(diǎn)長(zhǎng)時(shí)間接收不到數(shù)據(jù)觸發(fā)超時(shí),主從節(jié)點(diǎn)的數(shù)據(jù)同步同樣可能陷入全量復(fù)制->超時(shí)導(dǎo)致復(fù)制中斷->重連->全量復(fù)制->超時(shí)導(dǎo)致復(fù)制中斷……的循環(huán)。

    此外,主節(jié)點(diǎn)單機(jī)內(nèi)存除了絕對(duì)量不能太大,其占用主機(jī)內(nèi)存的比例也不應(yīng)過大:最好只使用50%-65%的內(nèi)存,留下30%-45%的內(nèi)存用于執(zhí)行bgsave命令和創(chuàng)建復(fù)制緩沖區(qū)等。

    想知道更多?描下面的二維碼關(guān)注我

    后臺(tái)回復(fù)"技術(shù)",加入技術(shù)群

    【精彩推薦】

    • 超清晰的DNS入門指南

    • 如何用ELK搭建TB級(jí)的日志系統(tǒng)

    • 深度好文:Linux系統(tǒng)內(nèi)存知識(shí)

    • 日志采集系統(tǒng)都用到哪些技術(shù)?

    • 面試官:為什么HashMap的加載因子是0.75?

    • 原創(chuàng)|OpenAPI標(biāo)準(zhǔn)規(guī)范

    • 如此簡(jiǎn)單| ES最全詳細(xì)使用教程

    • ClickHouse到底是什么?為什么如此牛逼!

    • 原來ElasticSearch還可以這么理解

    • 面試官:InnoDB中一棵B+樹可以存放多少行數(shù)據(jù)?

    點(diǎn)個(gè)贊+在看,少個(gè) bug?????

    總結(jié)

    以上是生活随笔為你收集整理的Redis的主从复制是如何做的?复制过程中也会产生各种问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    九九免费在线观看视频 | 最近中文字幕大全 | 久久99精品国产99久久 | 午夜av在线电影 | 五月婷婷播播 | 五月婷婷国产 | 久久人人爽人人人人片 | 国产精品1区 | 久久国产亚洲视频 | 黄色片亚洲 | 亚洲精品观看 | 国产成人高清 | 99精品热视频 | 日本论理电影 | 欧美日韩一区三区 | 成片免费观看视频 | 精品久久久亚洲 | 手机在线看永久av片免费 | 婷婷五月在线视频 | 四虎国产精品免费 | 在线观看爱爱视频 | 免费看一级黄色大全 | 免费视频资源 | 成人av一二三区 | 黄色h在线观看 | 国产精品久久久电影 | 国产一级在线免费观看 | 97视频资源 | 欧美午夜精品久久久久久浪潮 | 精品人人爽 | 99久久精品免费视频 | 成人久久综合 | 日韩欧美69 | 婷婷久久五月天 | 亚洲h色精品 | 国产成年免费视频 | 91精品国产91久久久久久三级 | 午夜国产一区二区三区四区 | 国产成人精品一区二区三区网站观看 | 狠狠色香婷婷久久亚洲精品 | 亚洲成av| 狠狠干狠狠操 | 中文av一区二区 | 91免费网址| 久草免费福利在线观看 | 久久影视一区二区 | 亚洲精品www久久久久久 | 亚洲va综合va国产va中文 | 最近中文字幕完整高清 | 亚洲1区在线 | 国产一区二区免费在线观看 | 91人人视频在线观看 | 国产美女视频免费观看的网站 | 久久欧洲视频 | 91精品国自产在线 | 综合亚洲视频 | 天天干天天操天天入 | 中文字幕一区二区三区在线观看 | av日韩精品| 毛片网在线播放 | 91激情视频在线 | 婷婷丁香色综合狠狠色 | 成人网页在线免费观看 | 九九热精品视频在线观看 | 免费av观看 | 日韩黄色av网站 | 久久亚洲欧美日韩精品专区 | 国产日产精品一区二区三区四区的观看方式 | 怡红院av久久久久久久 | 天天色天天骑天天射 | 国产午夜亚洲精品 | 四虎影院在线观看av | 91麻豆免费看 | 国内成人精品视频 | 久久99精品久久只有精品 | 久色小说 | 很黄很污的视频网站 | 婷婷中文在线 | 高清一区二区三区 | 亚洲精品综合一二三区在线观看 | 99视频精品在线 | 久久人人爽人人爽人人片 | 亚洲欧美日韩国产精品一区午夜 | 久草视频在线新免费 | 国产精品av电影 | 美女黄网站视频免费 | 91麻豆精品国产自产在线游戏 | 天天激情综合网 | 欧美一级专区免费大片 | 婷婷激情五月综合 | 91在线一区二区 | 在线观看国产中文字幕 | 久久视频这里有精品 | 亚洲高清av在线 | 视频在线一区二区三区 | 国产精品视频免费看 | 九九热99视频 | 国产精品一区二区在线观看 | 亚洲精品色婷婷 | 国产一级片一区二区三区 | 中文字幕文字幕一区二区 | 国产在线观看二区 | 欧美成人日韩 | 国产精品视频不卡 | 超碰在线97免费 | 成人午夜在线电影 | 干av在线 | www..com黄色片 | 中文字幕二区三区 | 国产资源av| 久久69av| 亚洲天堂免费视频 | 久久国产精品久久国产精品 | 在线成人欧美 | 亚洲精品资源在线观看 | 日本免费一二三区 | www.超碰97.com | 亚洲综合五月 | 1024在线看片 | 欧美在线资源 | 91av官网| 狠狠操操网| 久久久久久久久久久久国产精品 | 久草视频中文 | 日本在线观看中文字幕 | 国产免费成人 | 亚洲精选视频免费看 | 最新av免费 | 精品国产1区2区 | 亚洲精品乱码久久久久久高潮 | 日韩免费中文 | 国产爽妇网 | 成人小视频在线观看免费 | 久草电影免费在线观看 | 探花系列在线 | 日本xxxx裸体xxxx17 | 免费看国产a | 久久96国产精品久久99软件 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 亚洲欧美乱综合图片区小说区 | 久产久精国产品 | 中文字幕乱码在线播放 | 999久久 | 国产在线自| 精品字幕在线 | 中文字幕在线观看第三页 | 中文字幕精品一区 | 美女av电影 | 国产一区视频在线观看免费 | 中文字幕在线播放视频 | 六月色婷 | 91精品在线免费 | 国产性天天综合网 | 欧美激情综合五月色丁香小说 | 999成人免费视频 | 亚洲人成人在线 | 超级碰碰碰碰 | 欧美激情第八页 | 韩国av三级| 91在线在线观看 | 国产在线观看免费观看 | 国产99久久久精品 | 国产高清精品在线 | 日韩欧美视频免费在线观看 | av一本久道久久波多野结衣 | 国产在线va | 日韩视频中文字幕在线观看 | 日本一区二区免费在线观看 | 久久精品毛片基地 | 国产精品一码二码三码在线 | 干天天 | 免费看网站在线 | 国产97av| 日韩在线观看视频在线 | 欧美一级爽 | 国产精品永久久久久久久久久 | 日韩一二三区不卡 | 久草在线视频网站 | 五月婷婷丁香 | 成人av一二三区 | 99久热在线精品视频成人一区 | 91正在播放 | 国产一级片在线播放 | 在线免费观看麻豆 | 视频 国产区 | 97碰碰视频 | avlulu久久精品| 在线黄av| 天天干天天拍天天操天天拍 | 97日日 | 天天色天天骑天天射 | 欧洲亚洲国产视频 | 欧美日韩免费观看一区二区三区 | 日韩极品视频在线观看 | 一区三区视频 | 日本一区二区不卡高清 | 国产91丝袜在线播放动漫 | 日日干日日操 | 天天摸天天弄 | 国产精品一区二区久久精品爱微奶 | 欧美激情综合五月色丁香 | 免费在线播放 | 欧美视频日韩视频 | 精品国产一区二区三区久久影院 | av噜噜噜在线播放 | 国内一级片在线观看 | 国产精品嫩草69影院 | 欧美在线观看小视频 | www国产亚洲精品久久网站 | 丁香婷婷电影 | 久热免费在线 | 久久免费在线视频 | 9草在线| 欧美日韩视频 | 久草视频在线资源站 | 玖玖视频网 | 在线播放视频一区 | a级片网站 | 国产黄色理论片 | 日韩精品一区二区三区丰满 | 人人爽人人舔 | 色婷婷88av视频一二三区 | 亚洲国产成人在线播放 | 91人人网 | 337p西西人体大胆瓣开下部 | 国产xx在线 | 久99视频 | 亚洲高清精品在线 | 久久精品久久久精品美女 | 91久久精品一区 | 日韩有码网站 | 国产精品毛片完整版 | 久久视讯 | 国产精品青青 | 久久成人免费视频 | 久久久久国产a免费观看rela | 久久国产三级 | 精品国内自产拍在线观看视频 | 亚洲春色综合另类校园电影 | 在线观看黄网 | 久久久受www免费人成 | 国产九色在线播放九色 | 国产精品无av码在线观看 | 天堂中文在线视频 | 欧美另类高清 videos | 欧美一区三区四区 | 五月天com | 国产精品国产毛片 | 久草色在线观看 | 亚洲黄色三级 | 精品久久久久_ | 国产精品美女久久久久久久 | 黄色大全免费观看 | 九九久久久久久久久激情 | 天天拍天天色 | 亚洲va欧美va | 成人动漫精品一区二区 | 亚洲理论在线 | 一区二区三区www | 看片黄网站 | 日日干精品 | 一区二区三区免费在线 | 久久午夜视频 | 国产高清专区 | 在线精品视频在线观看高清 | 99人久久精品视频最新地址 | 亚洲精品日韩av | 96视频免费在线观看 | 免费av免费观看 | 黄色a在线观看 | 日韩电影中文,亚洲精品乱码 | 午夜免费福利视频 | 91av视频在线观看 | 国产欧美高清 | 91热视频 | 国产精品久久久久久久久久久免费看 | www.av在线播放 | 在线免费av电影 | 日韩精品免费 | 久久免费黄色大片 | av线上看 | 欧美a级在线播放 | 天堂中文在线播放 | 久久精品男人的天堂 | 亚洲成av人片一区二区梦乃 | 正在播放国产91 | 日韩乱理| 欧美视频日韩视频 | 91麻豆精品国产91久久久久 | 天天天色综合a | 99精品欧美一区二区蜜桃免费 | 国产精品爽爽久久久久久蜜臀 | 精品视频在线观看 | 99久久婷婷国产一区二区三区 | 亚洲最大在线视频 | 在线播放第一页 | 免费在线观看日韩 | 超碰国产人人 | 国产亚洲精品久久久久久久久久久久 | 免费成人在线网站 | 久久人人爽人人片 | 国产 日韩 欧美 中文 在线播放 | 久久影院午夜论 | 亚洲国产精品视频 | 国产在线观看91 | 天天躁日日躁狠狠躁av中文 | 国产一级在线视频 | 在线免费观看黄色小说 | 亚洲三级在线播放 | 久久精品男人的天堂 | 99久久精品国产欧美主题曲 | 国产超碰97 | 国产精品一区免费在线观看 | 午夜私人影院久久久久 | 中文字幕在线字幕中文 | 成人国产精品入口 | 亚洲精品一区二区三区四区高清 | 日韩高清免费在线 | 日韩高清毛片 | 国产91国语对白在线 | 开心色停停 | 亚洲天堂网视频在线观看 | 久久99精品久久久久久秒播蜜臀 | 91系列在线| 麻豆视频免费在线播放 | 激情伊人五月天 | 免费视频二区 | 在线观看日韩视频 | 丁香婷婷激情国产高清秒播 | 成人福利av| 久久免费视频这里只有精品 | 久草免费在线视频观看 | 日本视频久久久 | 欧美 日韩精品 | av天天干 | 久久久香蕉视频 | 中文字幕在线成人 | 亚洲专区 国产精品 | 亚洲欧洲在线视频 | 午夜影视一区 | 天天射综合 | 久久免费99 | 国产精品久久久久久久久久东京 | 国产亚洲亚洲 | 天天操人 | 狠狠色综合网站久久久久久久 | 欧美精品久久久久久久久免 | 日本午夜免费福利视频 | 欧洲性视频| 国产又粗又猛又色 | 亚洲精品久久久久久久蜜桃 | 亚洲成人xxx| 深爱激情综合网 | 超碰在线观看av | 中文字幕一区二区三区四区久久 | 精品久久久久一区二区国产 | 国产中文字幕在线播放 | 欧美在线free | 中文字幕在线观看你懂的 | 久草精品视频在线看网站免费 | 麻豆精品视频在线观看免费 | 日韩在线第一区 | 一级黄色毛片 | 波多野结衣在线观看一区二区三区 | 国产成人精品午夜在线播放 | 欧洲亚洲女同hd | 色美女在线 | 欧美国产日韩在线观看 | 天天爽夜夜爽人人爽曰av | 91手机视频在线 | 日韩精品一区二区免费视频 | 青青草视频精品 | 国产亚洲精品久久久久久无几年桃 | 欧美日韩另类在线观看 | 亚洲第一香蕉视频 | 最近中文字幕mv免费高清在线 | 蜜臀91丨九色丨蝌蚪老版 | 欧美一级黄色片 | 亚洲伦理一区二区 | 美女视频是黄的免费观看 | 久久国产精品免费观看 | 欧洲亚洲女同hd | 欧美综合在线视频 | 日本在线免费看 | 亚洲国产片色 | 外国av网 | 国产一二三精品 | 日本中文在线播放 | 亚洲人成影院在线 | 在线观看a视频 | 国产精品激情偷乱一区二区∴ | 日韩字幕在线观看 | 成人黄色资源 | 色综合久久66 | 欧美日韩视频在线 | 久久高清 | 91九色在线视频观看 | 久久国产影视 | 国产视频一区二区在线观看 | 免费精品在线视频 | 91污在线| 国产精品麻 | 久久久久国产精品午夜一区 | 毛片区| 免费看国产曰批40分钟 | 国产高清中文字幕 | 久久视频在线观看免费 | 99精品在这里 | 国产精品乱码高清在线看 | 麻豆国产露脸在线观看 | 国产精品综合久久久 | 欧美日韩精品在线视频 | 夜夜操天天操 | 欧美性猛片 | 狠狠操天天干 | 992tv人人草| 91亚洲狠狠婷婷综合久久久 | 欧美日韩中字 | 免费污片 | 亚洲一级二级 | 日韩亚洲在线视频 | 欧美日韩不卡在线观看 | 日韩视频免费观看高清 | 国产成人99久久亚洲综合精品 | 日本久草电影 | 成人午夜剧场在线观看 | 国产超碰在线 | 久久婷婷五月综合色丁香 | 久操中文字幕在线观看 | 久久精品国产免费看久久精品 | 久久精品站 | 国产精品系列在线观看 | 欧美a级一区二区 | 五月天综合色 | 视频在线观看一区 | 97超碰国产精品 | 天堂网中文在线 | 欧美国产日韩一区二区三区 | www91在线 | 在线观看视频免费播放 | 在线电影中文字幕 | av免费观看网址 | 国产精品久久久久久影院 | 国产一区欧美在线 | 欧美精品一区二区在线观看 | av在线免费不卡 | 97电影在线观看 | 免费在线观看视频a | 青青草国产免费 | 欧美日韩国产在线精品 | 久久久久亚洲国产精品 | 丰满少妇高潮在线观看 | 久久看片网| 伊人久在线 | 欧美日韩国内在线 | 在线观看视频一区二区三区 | 超碰国产人人 | 国产精品综合在线观看 | 国产精品久久久久久久久蜜臀 | 色网站在线免费 | 国产在线精品一区 | 处女av在线 | 精品一二三四在线 | 在线 精品 国产 | 九九在线国产视频 | 91自拍视频在线观看 | 国产亚洲午夜高清国产拍精品 | 国产成人在线观看免费 | 国产在线91精品 | 青草视频免费观看 | 精品国产乱码久久久久久三级人 | 91免费观看视频在线 | 最新av在线网站 | 亚洲免费高清视频 | 午夜精品视频一区二区三区在线看 | 97精品视频在线 | 中文字幕视频一区二区 | 日韩中文字幕在线不卡 | 国产精品欧美一区二区三区不卡 | 天天干天天射天天爽 | 婷婷久久国产 | 日韩超碰 | 99热精品国产一区二区在线观看 | 中文字幕av专区 | av片在线观看免费 | 国产亚洲欧美在线视频 | 最新高清无码专区 | 欧美精品乱码久久久久久 | 欧美精品一区二区在线观看 | 日韩av成人在线观看 | 国产在线观看网站 | 99热在线免费观看 | 色婷婷天天干 | 深爱五月激情网 | 国产精品久久久久久一区二区三区 | 97夜夜澡人人爽人人免费 | 九九精品在线观看 | 久久久久久国产精品久久 | 欧美疯狂性受xxxxx另类 | 国产在线2020 | 欧美一级电影免费观看 | 免费看国产a | 五月婷婷导航 | 国产一区二区精品久久91 | 精品亚洲一区二区 | 91亚洲精品久久久蜜桃借种 | 久久亚洲综合国产精品99麻豆的功能介绍 | 亚洲最新av在线网站 | 国产精品成人av电影 | 91麻豆精品国产91久久久久久 | 日韩乱理 | 一区二区三区日韩在线观看 | 最新午夜电影 | 国产免费资源 | 欧美性色网站 | 免费观看福利视频 | 国内精品久久久久久久久 | 久久久福利影院 | 福利一区在线 | 夜夜操天天 | 免费a网站 | 91看片一区二区三区 | 国产日韩精品一区二区三区 | 久久亚洲婷婷 | 一级黄色网址 | 国产在线一区观看 | 久久精品一区二区 | 国产一级一片免费播放放 | 亚洲成人av电影在线 | 黄色的视频网站 | 97av视频在线观看 | 91手机视频 | 99久久99视频只有精品 | 欧美激情综合五月色丁香 | 色婷婷免费 | 91桃色在线免费观看 | 97超碰中文字幕 | 色吊丝在线永久观看最新版本 | 天天做天天干 | 免费69视频 | 久草.com| 夜夜躁狠狠躁日日躁 | 国产视频九色蝌蚪 | 久久久国产一区二区三区四区小说 | 国产精品久久久久一区二区 | 国产在线一区二区三区播放 | 亚洲精品97| 午夜精品久久久久久中宇69 | 日韩免费视频 | 91人人澡人人爽 | av丝袜天堂 | 操操操影院 | 亚洲在线视频网站 | 久久精品日本啪啪涩涩 | 日韩亚洲在线 | 日本久久久久久科技有限公司 | 天堂网在线视频 | 五月天网页 | 国产在线永久 | 免费看黄的 | 97精品国产97久久久久久免费 | 五月激情在线 | 国产中文a | 西西www4444大胆在线 | 国产九九精品 | 日韩最新在线 | 日日干网址 | 日本黄色免费网站 | 亚洲精品xx | 亚洲国产精品女人久久久 | 国内精品久久久久 | 中文av网| av中文字幕日韩 | 日韩三级在线 | 最近中文字幕免费视频 | 91激情 | 五月婷婷开心 | 亚洲精选在线观看 | 久久av电影 | 中文字幕在线观看免费观看 | www.com黄色 | 91精品久久香蕉国产线看观看 | 园产精品久久久久久久7电影 | 五月婷婷视频在线 | 五月开心六月婷婷 | 亚洲国产久 | 五月婷婷综合在线观看 | 五月天com| 中文字幕在线观看完整版 | 免费a视频 | 欧美激精品 | 97精品欧美91久久久久久 | 99精品欧美一区二区三区 | 国产精品福利av | 中文字幕在线有码 | 久久av中文字幕片 | 日韩欧美在线视频一区二区三区 | 国产精品18久久久久久首页狼 | 国产精品国产三级国产不产一地 | 天天操人人干 | 欧美 另类 交 | 欧美色噜噜 | 亚洲精品国产精品久久99热 | 99视频网址| 免费av视屏| 色婷婷亚洲精品 | 天天操天天色天天射 | 国产亚洲一区 | 永久av免费在线观看 | 日韩av资源站 | 性色av免费在线观看 | 久久 一区 | 91亚洲精品国偷拍自产在线观看 | 天天爽天天爽夜夜爽 | 99视频导航| 亚洲精品国产日韩 | 91片在线观看 | 四虎在线免费视频 | 97国产超碰| 黄色免费高清视频 | 日韩在线无 | 国产高清无av久久 | 超碰97人人爱 | 999久久久久久久久6666 | 天天在线免费视频 | 黄色大片日本免费大片 | 亚洲精品乱码久久久久久写真 | 99视频在线观看一区三区 | 伊人久久一区 | 久久久国产一区二区三区四区小说 | 99精品国产高清在线观看 | 日韩视频一区二区三区在线播放免费观看 | 亚洲色图22p| 国产精品扒开做爽爽的视频 | 久久精品视频播放 | 激情丁香综合五月 | 久久精品视频2 | 人人看人人爱 | 国产盗摄精品一区二区 | 日韩在线第一区 | 在线中文字幕一区二区 | av资源免费看 | 欧美在线视频一区二区 | 久久爱www.| www.国产高清| 午夜三级理论 | av一级一片 | 国产免费一区二区三区网站免费 | 天天操天天添天天吹 | 国产成人精品一区二区三区免费 | 色噜噜噜噜 | 久久免费视频3 | 99久久精品免费看国产麻豆 | 中文字幕在线观看视频免费 | 香蕉免费 | 久久成人国产精品免费软件 | 日本中文字幕一二区观 | 日日爽视频| 在线免费观看黄色大片 | 精品在线一区二区 | 美女国内精品自产拍在线播放 | 亚洲婷婷免费 | 成人久久18免费 | 国产成人黄色av | 色是在线视频 | www国产亚洲精品久久网站 | 日韩av中文在线观看 | 精品亚洲视频在线 | 精品福利片 | 麻豆视频免费在线播放 | 天天操天天添天天吹 | 国产成人精品一区二区在线观看 | 亚洲,播放 | 精品国产伦一区二区三区观看说明 | 国产小视频在线观看 | 国产日产精品一区二区三区四区的观看方式 | 久草网在线视频 | 国产免费a | 免费黄色激情视频 | 精品国产乱码久久久久久1区2匹 | 五月婷婷在线视频 | 91成人久久 | 亚洲欧洲国产精品 | 菠萝菠萝在线精品视频 | 久久乐九色婷婷综合色狠狠182 | 亚洲国产中文字幕在线视频综合 | 天天干天天草天天爽 | 九九九九色 | 白丝av在线 | 国产乱对白刺激视频在线观看女王 | 国产美女主播精品一区二区三区 | 欧美xxxxx在线视频 | 国产精品99视频 | 91九色网站 | 日韩免费一级a毛片在线播放一级 | 最近中文字幕免费视频 | 亚洲欧洲xxxx | 久草剧场| 成人午夜精品 | 国产精品久久久久婷婷 | 肉色欧美久久久久久久免费看 | 亚洲观看黄色网 | 国产视频一区在线播放 | av看片在线观看 | 999久久久精品视频 日韩高清www | 亚洲成av人片在线观看无 | 中文久草| 色婷婷av一区 | 天天干天天操天天搞 | 国产色拍拍拍拍在线精品 | 国产乱老熟视频网88av | 亚洲亚洲精品在线观看 | 五月婷婷婷婷婷 | 在线电影播放 | 欧美日韩一区二区免费在线观看 | 这里有精品在线视频 | 97香蕉久久国产在线观看 | 手机在线看永久av片免费 | 一级黄色大片 | 国际av在线 | 97超碰在线久草超碰在线观看 | 色丁香色婷婷 | 国产69精品久久久久9999apgf | 亚洲乱码在线观看 | 久久久久区 | 日韩视频1 | 99精品国产高清在线观看 | 亚洲精品欧美视频 | 午夜国产成人 | 少妇搡bbbb搡bbb搡忠贞 | 99久久99久久精品国产片 | 日韩成人免费在线观看 | 欧美一级电影在线观看 | 国产在线精品二区 | 中文字幕免费播放 | 午夜在线观看 | 一区二区伦理电影 | 国产视频 亚洲视频 | 免费看黄色大全 | 91亚色免费视频 | 天天综合区 | 国产在线毛片 | 久久99久久99免费视频 | 欧美一区三区四区 | 久久99久久久久 | 国产尤物在线观看 | 国内精品久久久久久久影视麻豆 | 最近中文字幕免费 | 97电影手机版 | 波多野结衣在线播放一区 | 日韩视频a | 久久看片 | 国产999精品 | 美女av免费| 中文字幕专区高清在线观看 | 久久字幕精品一区 | 嫩草伊人久久精品少妇av | 亚洲撸撸 | 国产成人精品久久久 | 99久视频| 性色在线视频 | 一区二区av | 欧美小视频在线 | 久草精品视频在线观看 | 国产在线看一区 | 99久久久久久久 | 久久久久美女 | 久久99精品久久久久久三级 | 不卡电影免费在线播放一区 | 日本电影久久 | 久久久久国产一区二区三区四区 | 草莓视频在线观看免费观看 | 欧美国产不卡 | 日本精品一区二区三区在线观看 | 国产精品欧美久久 | 狠狠色狠狠色综合日日92 | 91视频这里只有精品 | 国外成人在线视频网站 | 蜜桃视频色| 国产日韩av在线 | 中文字幕国产一区 | 精品亚洲国产视频 | 精品日韩在线一区 | 中文字幕欧美日韩va免费视频 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 亚洲精品视频在线免费 | 国产精品毛片一区二区三区 | 亚洲天天在线日亚洲洲精 | 九九精品视频在线看 | 五月激情久久 | 奇米影视999 | 亚州激情视频 | 色综合婷婷久久 | 免费的黄色av | www.亚洲精品 | 日韩电影一区二区在线观看 | 日韩乱色精品一区二区 | 国产女教师精品久久av | 黄色特一级片 | 91视频在线国产 | 国产精品一区二区三区视频免费 | 人人插人人艹 | 成人在线观看网址 | 久久久观看 | 日本在线视频一区二区三区 | 中文字幕有码在线播放 | 久久精品一区二 | 国产在线视频在线观看 | 最近能播放的中文字幕 | 亚洲激情国产精品 | 国产一区国产二区在线观看 | 综合天堂av久久久久久久 | 免费看的国产视频网站 | 久草com| 亚洲少妇久久 | 免费看一级一片 | 日韩专区一区二区 | 国产精品久久 | 人人干在线 | 亚洲一区二区三区在线看 | 97超碰中文字幕 | 欧美激情视频免费看 | 成人午夜av电影 | 97成人资源 | 亚洲涩涩网站 | 国产精品久久久亚洲 | av天天澡天天爽天天av | 成人精品视频 | 国产精品成人久久久久久久 | 国产精品不卡在线 | 97成人在线 | 天天操 夜夜操 | 操操综合| 日韩在线观看第一页 | 欧美成人久久 | 超级碰视频 | 亚洲黑丝少妇 | 久久99在线观看 | 欧美激情精品久久 | 波多野结衣视频一区二区三区 | 中文字幕第一页在线视频 | 亚洲精品乱码久久久久 | 亚洲天天| 国产99久久久国产精品 | 精品国产成人 | 激情视频免费在线 | 91亚洲成人 | 国产精品入口66mio女同 | 在线播放视频一区 | 欧美不卡视频在线 | 亚洲干视频在线观看 | 国产精品久久婷婷六月丁香 | 亚洲人在线7777777精品 | 欧美久久成人 | 狠狠做深爱婷婷综合一区 | 婷婷去俺也去六月色 | 天堂激情网 | 在线一级片 | 在线观看视频在线观看 | 97成人在线观看 | 国产在线观看99 | 久久久福利影院 | 久久一精品 | 午夜美女福利 | 国产人成看黄久久久久久久久 | 国内外成人在线视频 | 久久激情日本aⅴ | 欧美一区二区在线 | 久久精品国产第一区二区三区 | 国产日韩欧美在线 | 国产精品2020 | 欧美日韩xxxxx | 91在线看视频免费 | 久久久国产99久久国产一 | 欧美成人影音 | 伊在线视频 | 黄色一级免费 | 草莓视频在线观看免费观看 | 在线亚洲观看 | 久久久久久久久久久网站 | 国内一级片在线观看 | 伊人五月在线 | 欧美性生活免费 | 草久久久久久久 | a级免费观看 | 91天天操| 欧美激情精品久久久久久免费 | 国产精品久久久久婷婷二区次 | 曰本三级在线 | 亚洲成人二区 | 中国精品少妇 | 国产欧美精品一区二区三区四区 | 欧美一级性视频 | 亚洲三级黄色 | a视频在线| 福利久久| 四虎影视www | 欧美污污网站 | 99久久er热在这里只有精品66 | 国产高清在线观看 | 福利视频一区二区 | 亚洲va韩国va欧美va精四季 | 国产精品12 | 在线观看av小说 | 亚洲精品tv | 精品国产亚洲一区二区麻豆 | 亚洲在线精品 | 国产精品a久久 | 中文字幕一区二区三区在线视频 | 中文字幕 91 | 精品国产乱子伦一区二区 | 免费福利片 | 久草青青在线观看 | av女优中文字幕在线观看 | 久久国产电影院 | 日韩中文字幕网站 | 日韩二区三区 | 日日干av | 国产午夜剧场 | 欧美精品一区在线发布 | 日日操夜夜操狠狠操 | 九九视频免费观看视频精品 | 亚洲精品玖玖玖av在线看 | 国产91精品高清一区二区三区 | 免费黄色一区 | 亚洲人视频在线 | 亚洲欧洲精品一区 | 免费h视频 | 久久的色 | 四虎影视成人永久免费观看视频 | 欧美成人影音 | 欧美日本三级 | 亚洲免费观看在线视频 | 国内久久久 | www.久草视频| 日韩激情精品 | 免费观看福利视频 | 欧美日韩p片 | 日韩黄色软件 | 久久久精品视频成人 | 激情综合色播五月 | av中文天堂 | 天天操夜夜干 | 亚洲成人免费 | 色99在线 | 福利一区在线 | 亚洲激情在线播放 | 亚洲综合激情小说 | 91视频三区| 中文字幕免费看 | 久久手机免费视频 | 亚洲播放一区 | 成人午夜影院 | 一级一片免费观看 | 久久久久久久久久久久av | 男女男视频 | 天天干,天天插 | 久久草草热国产精品直播 | 一级黄网 | 久草在线视频免费资源观看 | 午夜久久影视 | 日韩欧美电影 | 久久久香蕉视频 | 国产日韩欧美在线一区 | 亚洲视频大全 | 国产精久久 | 色爽网站 | 婷婷久久五月天 | 亚洲精品理论 | 久久精品aaa | 午夜精品一区二区三区在线视频 | 激情小说 五月 | 精品伊人久久久 | 中文字幕在线视频国产 | 性色av免费在线观看 | 久久综合网色—综合色88 | 在线观看不卡视频 | 婷婷六月天天 | 人人澡人人添人人爽一区二区 | 午夜色大片在线观看 | 午夜国产一区 | 日韩欧美在线第一页 | 国内精品久久久久久久影视麻豆 | 中文在线亚洲 | 日韩久久久久久久久久久久 | 日韩中文字幕国产精品 | 国产精品久久久久一区二区三区 | 一区 二区 精品 | 精品久久久久久久久久久久 | 色永久免费视频 | 国产91精品在线观看 | 狠狠的干狠狠的操 | www91在线观看 | 久久久久国产精品厨房 | 中文字幕中文 | 免费在线观看国产精品 | 18女毛片| 综合色综合 |