国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Redis - redis主從復制原理的深入講解

redis主從復制原理的深入講解

2019-11-23 20:34五色花 Redis

這篇文章主要給大家介紹了關于redis主從復制原理的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用redis具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

Redis持久化保證了即使redis服務重啟也不會丟失數據,因為redis服務重啟后會將硬盤上持久化的數據恢復到內存中,但是當redis服務器的硬盤損壞了可能會導致數據丟失,如果通過redis的主從復制機制就可以避免這種單點故障。

本文主要針對redis主從復制的原理進行了講解,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧

1.復制過程

2.數據間的同步

3.全量復制

4.部分復制

5.心跳

6.異步復制

1.復制過程

  1. 從節點執行 slaveof 命令。
  2. 從節點只是保存了 slaveof 命令中主節點的信息,并沒有立即發起復制。
  3. 從節點內部的定時任務發現有主節點的信息,開始使用 socket 連接主節點。
  4. 連接建立成功后,發送 ping 命令,希望得到 pong 命令響應,否則會進行重連。
  5. 如果主節點設置了權限,那么就需要進行權限驗證,如果驗證失敗,復制終止。
  6. 權限驗證通過后,進行數據同步,這是耗時最長的操作,主節點將把所有的數據全部發送給從節點。
  7. 當主節點把當前的數據同步給從節點后,便完成了復制的建立流程。接下來,主節點就會持續的把寫命令發送給從節點,保證主從數據一致性。

redis主從復制原理的深入講解

2.數據間的同步

上面說的復制過程,其中有一個步驟是“同步數據集”,這個就是現在講的“數據間的同步”。

redis 同步有 2 個命令:sync 和 psync,前者是 redis 2.8 之前的同步命令,后者是 redis 2.8 為了優化 sync 新設計的命令。我們會重點關注 2.8 的 psync 命令。

psync 命令需要 3 個組件支持:

  1. 主從節點各自復制偏移量
  2. 主節點復制積壓緩沖區
  3. 主節點運行 ID

主從節點各自復制偏移量:

  1. 參與復制的主從節點都會維護自身的復制偏移量。
  2. 主節點在處理完寫入命令后,會把命令的字節長度做累加記錄,統計信息在 info replication 中的 masterreploffset 指標中。
  3. 從節點每秒鐘上報自身的的復制偏移量給主節點,因此主節點也會保存從節點的復制偏移量。
  4. 從節點在接收到主節點發送的命令后,也會累加自身的偏移量,統計信息在 info replication 中。
  5. 通過對比主從節點的復制偏移量,可以判斷主從節點數據是否一致。

主節點復制積壓緩沖區:

  1. 復制積壓緩沖區是一個保存在主節點的一個固定長度的先進先出的隊列,默認大小 1MB。
  2.  這個隊列在 slave 連接是創建。這時主節點響應寫命令時,不但會把命令發送給從節點,也會寫入復制緩沖區。
  3. 他的作用就是用于部分復制和復制命令丟失的數據補救。通過 info replication 可以看到相關信息。

主節點運行 ID:

  1. 每個 redis 啟動的時候,都會生成一個 40 位的運行 ID。
  2. 運行 ID 的主要作用是用來識別 Redis 節點。如果使用 ip+port 的方式,那么如果主節點重啟修改了 RDB/AOF 數據,從節點再基于偏移量進行復制將是不安全的。所以,當運行 id 變化后,從節點將進行全量復制。也就是說,redis 重啟后,默認從節點會進行全量復制。

如果在重啟時不改變運行 ID 呢?

  1. 可以通過 debug reload 命令重新加載 RDB 并保持運行 ID 不變,從而有效的避免不必要的全量復制。
  2. 缺點是:debug reload 命令會阻塞當前 Redis 節點主線程,因此對于大數據量的主節點或者無法容忍阻塞的節點,需要謹慎使用。一般通過故障轉移機制可以解決這個問題。

psync 命令的使用方式:

  命令格式為psync{runId}{offset}

  runId:從節點所復制主節點的運行 id

  offset:當前從節點已復制的數據偏移量

psync 執行流程:

redis主從復制原理的深入講解

流程說明:

從節點發送 psync 命令給主節點,runId 就是目標主節點的 ID,如果沒有默認為 -1,offset 是從節點保存的復制偏移量,如果是第一次復制則為 -1.

主節點會根據 runid 和 offset 決定返回結果:

  1. 如果回復 +FULLRESYNC {runId} {offset} ,那么從節點將觸發全量復制流程。
  2. 如果回復 +CONTINUE,從節點將觸發部分復制。
  3. 如果回復 +ERR,說明主節點不支持 2.8 的 psync 命令,將使用 sync 執行全量復制。

到這里,數據之間的同步就講的差不多了,篇幅還是比較長的。主要是針對 psync 命令相關之間的介紹。

3.全量復制

全量復制是 Redis 最早支持的復制方式,也是主從第一次建立復制時必須經歷的的階段。觸發全量復制的命令是 sync 和 psync。之前說過,這兩個命令的分水嶺版本是 2.8,redis 2.8 之前使用 sync 只能執行全量不同,2.8 之后同時支持全量同步和部分同步。

redis主從復制原理的深入講解

流程如下:

發送 psync 命令(spync ? -1)

主節點根據命令返回 FULLRESYNC

從節點記錄主節點 ID 和 offset

  1. 發送 psync 命令(spync ? -1)
  2. 主節點根據命令返回 FULLRESYNC
  3. 從節點記錄主節點 ID 和 offset
  4. 主節點 bgsave 并保存 RDB 到本地
  5. 主節點發送 RBD 文件到從節點
  6. 從節點收到 RDB 文件并加載到內存中
  7. 主節點在從節點接受數據的期間,將新數據保存到“復制客戶端緩沖區”,當從節點加載 RDB 完畢,再發送過去。(如果從節點花費時間過長,將導致緩沖區溢出,最后全量同步失敗)
  8. 從節點清空數據后加載 RDB 文件,如果 RDB 文件很大,這一步操作仍然耗時,如果此時客戶端訪問,將導致數據不一致,可以使用配置slave-server-stale-data 關閉.
  9. 從節點成功加載完 RBD 后,如果開啟了 AOF,會立刻做 bgrewriteaof。

以上加粗的部分是整個全量同步耗時的地方。

注意:

如過 RDB 文件大于 6GB,并且是千兆網卡,Redis 的默認超時機制(60 秒),會導致全量復制失敗。可以通過調大 repl-timeout 參數來解決此問題。 Redis 雖然支持無盤復制,即直接通過網絡發送給從節點,但功能不是很完善,生產環境慎用。

4.部分復制

當從節點正在復制主節點時,如果出現網絡閃斷和其他異常,從節點會讓主節點補發丟失的命令數據,主節點只需要將復制緩沖區的數據發送到從節點就能夠保證數據的一致性,相比較全量復制,成本小很多。

redis主從復制原理的深入講解

  1. 當從節點出現網絡中斷,超過了 repl-timeout 時間,主節點就會中斷復制連接。
  2. 主節點會將請求的數據寫入到“復制積壓緩沖區”,默認 1MB。
  3. 當從節點恢復,重新連接上主節點,從節點會將 offset 和主節點 id 發送到主節點。
  4. 主節點校驗后,如果偏移量的數后的數據在緩沖區中,就發送 cuntinue 響應 —— 表示可以進行部分復制。
  5. 主節點將緩沖區的數據發送到從節點,保證主從復制進行正常狀態。

5.心跳

主從節點在建立復制后,他們之間維護著長連接并彼此發送心跳命令。

心跳的關鍵機制如下:

  1. 中從都有心跳檢測機制,各自模擬成對方的客戶端進行通信,通過 client list 命令查看復制相關客戶端信息,主節點的連接狀態為 flags = M,從節點的連接狀態是 flags = S。
  2. 主節點默認每隔 10 秒對從節點發送 ping 命令,可修改配置 repl-ping-slave-period 控制發送頻率。
  3. 從節點在主線程每隔一秒發送 replconf ack{offset} 命令,給主節點上報自身當前的復制偏移量。
  4. 主節點收到 replconf 信息后,判斷從節點超時時間,如果超過 repl-timeout 60 秒,則判斷節點下線。

redis主從復制原理的深入講解

注意:

為了降低主從延遲,一般把 redis 主從節點部署在相同的機房/同城機房,避免網絡延遲帶來的網絡分區造成的心跳中斷等情況。

6.異步復制

主節點不但負責數據讀寫,還負責把寫命令同步給從節點,寫命令的發送過程是異步完成,也就是說主節點處理完寫命令后立即返回客戶度,并不等待從節點復制完成。

異步復制的步驟很簡單,如下:

  1. 主節點接受處理命令。
  2. 主節點處理完后返回響應結果 。
  3. 對于修改命令,異步發送給從節點,從節點在主線程中執行復制的命令。

redis主從復制原理的深入講解

總結

本文主要分析了 Redis 的復制原理,包括復制過程,數據之間的同步,全量復制的流程,部分復制的流程,心跳設計,異步復制流程。其中,可以看出,RDB 數據之間的同步非常耗時。所以,Redis 在 2.8 版本退出了類似增量復制的 psync 命令,當 Redis 主從直接發生了網絡中斷,不會進行全量復制,而是將數據放到緩沖區(默認 1MB)里,在通過主從之間各自維護復制 offset 來判斷緩存區的數據是否溢出,如果沒有溢出,只需要發送緩沖區數據即可,成本很小,反之,則要進行全量復制,因此,控制緩沖區大小非常的重要。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。

原文鏈接:https://www.cnblogs.com/luao/p/10682830.html

延伸 · 閱讀

精彩推薦
  • Redis詳解Redis復制原理

    詳解Redis復制原理

    與大多數db一樣,Redis也提供了復制機制,以滿足故障恢復和負載均衡等需求。復制也是Redis高可用的基礎,哨兵和集群都是建立在復制基礎上實現高可用的...

    李留廣10222021-08-09
  • Redisredis實現排行榜功能

    redis實現排行榜功能

    排行榜在很多地方都能使用到,redis的zset可以很方便地用來實現排行榜功能,本文就來簡單的介紹一下如何使用,具有一定的參考價值,感興趣的小伙伴們...

    乘月歸5022021-08-05
  • Redisredis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    這篇文章主要給大家介紹了關于redis中如何使用lua腳本讓你的靈活性提高5個逼格的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具...

    一線碼農5812019-11-18
  • RedisRedis如何實現數據庫讀寫分離詳解

    Redis如何實現數據庫讀寫分離詳解

    Redis的主從架構,能幫助我們實現讀多,寫少的情況,下面這篇文章主要給大家介紹了關于Redis如何實現數據庫讀寫分離的相關資料,文中通過示例代碼介紹...

    羅兵漂流記6092019-11-11
  • RedisRedis全量復制與部分復制示例詳解

    Redis全量復制與部分復制示例詳解

    這篇文章主要給大家介紹了關于Redis全量復制與部分復制的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis爬蟲具有一定的參考學習...

    豆子先生5052019-11-27
  • Redisredis 交集、并集、差集的具體使用

    redis 交集、并集、差集的具體使用

    這篇文章主要介紹了redis 交集、并集、差集的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    xiaojin21cen10152021-07-27
  • RedisRedis 事務知識點相關總結

    Redis 事務知識點相關總結

    這篇文章主要介紹了Redis 事務相關總結,幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下...

    AsiaYe8232021-07-28
  • RedisRedis的配置、啟動、操作和關閉方法

    Redis的配置、啟動、操作和關閉方法

    今天小編就為大家分享一篇Redis的配置、啟動、操作和關閉方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    大道化簡5312019-11-14
主站蜘蛛池模板: 欧美一区二区在线视频 | 久久精品无码一区二区三区 | 一区二区三区精品视频 | 黄色片视频免费 | 亚洲男人的天堂网站 | 天天操天天插 | 欧美一区二区免费 | 一级片在线观看网站 | 狠狠干夜夜| 日本在线观看一区二区 | 国产日韩精品一区 | 高清hd写真福利在线播放 | 中文字幕在线观看一区二区 | 小情侣高清国产在线播放 | 在线小视频国产 | 99久久亚洲一区二区三区青草 | 日韩国产一区 | 精品视频网 | 亚洲精品一区在线 | 日韩欧美一级精品久久 | 在线观看国产一区视频 | 欧美成人不卡 | 精品国偷自产在线 | 亚洲网站免费 | 一级毛片免费完整视频 | 依人在线 | 亚洲bbw | 亚洲人成网站999久久久综合 | 99色综合| 色天天综合久久久久综合片 | 激情在线视频 | 国产欧美久久久久久 | 成人片免费看 | 国产精品一区视频 | 亚洲精品久久久久久一区二区 | 动漫爱爱视频 | 久久久亚洲国产美女国产盗摄 | 99久久99久久久精品色圆 | 久久手机免费视频 | 美女一区 | 精品在线一区二区 |