最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis主從復(fù)制作用及搭建過程

 更新時間:2025年06月01日 09:18:48   作者:huangSir-devops  
Redis?的主從復(fù)制是實現(xiàn)數(shù)據(jù)備份、讀寫分離和水平擴(kuò)展的核心機(jī)制之一,通過主從復(fù)制,一個主節(jié)點(Master)可以將數(shù)據(jù)同步到多個從節(jié)點(Slave),從節(jié)點還可以級聯(lián)創(chuàng)建自己的從節(jié)點,從而形成樹狀結(jié)構(gòu),本文給大家介紹Redis主從復(fù)制的相關(guān)知識,感興趣的朋友一起看看吧

概述

Redis 的主從復(fù)制(Master-Slave Replication)是實現(xiàn)數(shù)據(jù)備份、讀寫分離和水平擴(kuò)展的核心機(jī)制之一。通過主從復(fù)制,一個主節(jié)點(Master)可以將數(shù)據(jù)同步到多個從節(jié)點(Slave),從節(jié)點還可以級聯(lián)創(chuàng)建自己的從節(jié)點,從而形成樹狀結(jié)構(gòu)。

注意,Redis的主從復(fù)制是實現(xiàn)高可用的核心機(jī)制,并不能實現(xiàn)高可用

Redis主從復(fù)制作用

數(shù)據(jù)冗余:

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

故障恢復(fù)

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

負(fù)載均衡:

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

讀寫分離:

可以用于實現(xiàn)讀寫分離,主庫寫、從庫讀,讀寫分離不僅可以提高服務(wù)器的負(fù)載能力,同時可根據(jù)需求的變化,改變從庫的數(shù)量。

高可用基石

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

Redis主從復(fù)制搭建

搭建主服務(wù)器

參考這篇文章:Redis6.2.x版本安裝

搭建從服務(wù)器

參考這篇文章:Redis6.2.x版本安裝

需要注意從服務(wù)器配置文件的修改:

# 第75行,修改遠(yuǎn)程訪問地址
75:bind 0.0.0.0
# 第98行,修改端口號
98:port 6379
# 第259行,守護(hù)進(jìn)程運行,默認(rèn)位前臺運行,需要修改為yes
259:daemonize yes
# 第304行,指定redis的日志
304:logfile "/var/log/redis/redis.log"
# 第329行,指定數(shù)據(jù)庫的數(shù)量,默認(rèn)是16個
329:databases 16
# 第433行,持久化的文件
433:dbfilename dump.rdb
# 第456行,設(shè)置redis的數(shù)據(jù)目錄,和我們上面創(chuàng)建的路徑保持一致
456:dir /data00/data/redis/
# 第903行,設(shè)置密碼,建議不要使用弱密碼
903:requirepass 123456
# 第479行,主庫的IP和端口
479:replicaof 127.0.0.1 6379
# 第486行,如果主服務(wù)器設(shè)置了密碼,需要配置認(rèn)證
486:masterauth !Xinxin123
# 其它配置
# 從服務(wù)器是否可寫(默認(rèn)只讀)
replica-read-only yes
# 復(fù)制緩沖區(qū)大小
repl-backlog-size 1mb
# 復(fù)制超時時間(秒)
repl-timeout 60
# 當(dāng)主從斷開時,從服務(wù)器是否繼續(xù)提供服務(wù)
replica-serve-stale-data yes

啟動主庫之后再啟動從庫

[root@node01 ~]# redis-server /data00/data/redis/redis.conf
[root@node01 ~]# ss -lntup | grep 6379
tcp   LISTEN 0      511                          127.0.0.1:6379       0.0.0.0:*    users:(("redis-server",pid=1001533,fd=6))
tcp   LISTEN 0      511                              [::1]:6379          [::]:*    users:(("redis-server",pid=1001533,fd=7))

驗證主從復(fù)制是否成功

在主從分別執(zhí)行INFO REPLICATION命令

# 主庫執(zhí)行
127.0.0.1:6379> INFO REPLICATION
# Replication
role:master
connected_slaves:1
slave0:ip=10.37.99.63,port=6379,state=online,offset=98,lag=0
master_failover_state:no-failover
master_replid:2f61b8be8cbf19e45882f77bea61b55862bf74e5
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:98
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:98
# 從庫執(zhí)行
127.0.0.1:6379> INFO REPLICATION
# Replication
role:slave
master_host:10.37.97.56
master_port:6379
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_read_repl_offset:238
slave_repl_offset:238
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:2f61b8be8cbf19e45882f77bea61b55862bf74e5
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:238
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:238

驗證主庫寫入數(shù)據(jù),從庫是否能獲取到

# 主庫寫入數(shù)據(jù)
127.0.0.1:6379> set rep rep
OK
# 從庫查詢數(shù)據(jù)
127.0.0.1:6379> get rep
"rep"

驗證從庫寫數(shù)據(jù),預(yù)期應(yīng)該報錯

127.0.0.1:6379> set slave 1
(error) READONLY You can't write against a read only replica.

Redis主從復(fù)制原理

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

在從節(jié)點執(zhí)行 slaveof 命令后,復(fù)制過程便開始運作,下面圖示可以看出復(fù)制過程大致分為6個過程。

image

  • 保存主節(jié)點信息

執(zhí)行slaveof后 Redis會打印如下日志:

  • 從節(jié)點與主節(jié)點建立網(wǎng)絡(luò)連接

從節(jié)點(slave)內(nèi)部通過每秒運行的定時任務(wù)維護(hù)復(fù)制相關(guān)邏輯,當(dāng)定時任務(wù)發(fā)現(xiàn)存在新的主節(jié)點后,會嘗試與該節(jié)點建立網(wǎng)絡(luò)連接。

從節(jié)點會建立一個 socket 套接字,從節(jié)點建立了一個端口為51234的套接字,專門用于接受主節(jié)點發(fā)送的復(fù)制命令。從節(jié)點連接成功后打印如下日志:

如果從節(jié)點無法建立連接,定時任務(wù)會無限重試直到連接成功或者執(zhí)行 slaveofnoone 取消復(fù)制。

關(guān)于連接失敗,可以在從節(jié)點執(zhí)行 info replication 查看 master_link_down_since_seconds 指標(biāo),它會記錄與主節(jié)點連接失敗的系統(tǒng)時間。從節(jié)點連接主節(jié)點失敗時也會每秒打印如下日志,方便發(fā)現(xiàn)問題:

  • 發(fā)送ping命令

連接建立成功后從節(jié)點發(fā)送 ping 請求進(jìn)行首次通信, ping 請求主要目的如下:

  • 檢測主從之間網(wǎng)絡(luò)套接字是否可用。

  • 檢測主節(jié)點當(dāng)前是否可接受處理命令。

如果發(fā)送 ping 命令后,從節(jié)點沒有收到主節(jié)點的 pong 回復(fù)或者超時,比如網(wǎng)絡(luò)超時或者主節(jié)點正在阻塞無法響應(yīng)命令,從節(jié)點會斷開復(fù)制連接,下次定時任務(wù)會發(fā)起重連。

從節(jié)點發(fā)送的 ping 命令成功返回,Redis 打印如下日志,并繼續(xù)后續(xù)復(fù)制流程:

  • 權(quán)限驗證

如果主節(jié)點設(shè)置了 requirepass 參數(shù),則需要密碼驗證,從節(jié)點必須配置 masterauth 參數(shù)保證與主節(jié)點相同的密碼才能通過驗證。如果驗證失敗復(fù)制將終止,從節(jié)點重新發(fā)起復(fù)制流程。

  • 同步數(shù)據(jù)集

主從復(fù)制連接正常通信后,對于首次建立復(fù)制的場景,主節(jié)點會把持有的數(shù)據(jù)全部發(fā)送給從節(jié)點,這部分操作是耗時最長的步驟。

  • 命令持續(xù)復(fù)制

當(dāng)主節(jié)點把當(dāng)前的數(shù)據(jù)同步給從節(jié)點后,便完成了復(fù)制的建立流程。接下來主節(jié)點會持續(xù)地把寫命令發(fā)送給從節(jié)點,保證主從數(shù)據(jù)一致性。

主從復(fù)制數(shù)據(jù)同步原理

Redis支持主從復(fù)制,Redis的主從結(jié)構(gòu)可以采用一主多從或者級聯(lián)結(jié)構(gòu),Redis主從復(fù)制可以根據(jù)是否是全量分為全量同步和增量同步。下圖為級聯(lián)結(jié)構(gòu)。

全量同步階段

Redis全量同步一般發(fā)生在Slave初始化階段,這時Slave需要將Master上的所有數(shù)據(jù)都復(fù)制一份。具體步驟如下:

  • 從服務(wù)器配置主服務(wù)器的連接信息(slaveof屬性);

  • 從服務(wù)器連接上主服務(wù)器,發(fā)送SYNC命令

  • 主服務(wù)器判斷是否為全量復(fù)制:如果是全量復(fù)制,則進(jìn)入下一步;否則可以看增量復(fù)制的子流程。

  • 主服務(wù)器接收到SYNC命名后,開始執(zhí)行BGSAVE命令生成RDB文件并使用緩沖區(qū)記錄此后執(zhí)行的所有寫命令;

  • 主服務(wù)器BGSAVE執(zhí)行完后,向所有從服務(wù)器發(fā)送快照文件,并在發(fā)送期間繼續(xù)記錄被執(zhí)行的寫命令;

  • 從服務(wù)器收到快照文件后丟棄所有舊數(shù)據(jù),載入收到的快照;

  • 主服務(wù)器快照發(fā)送完畢后開始向從服務(wù)器發(fā)送緩沖區(qū)中的寫命令;

從服務(wù)器完成對快照的載入,開始接收命令請求,并執(zhí)行來自主服務(wù)器緩沖區(qū)的寫命令;

增量同步階段

Redis增量復(fù)制是指Slave初始化后開始正常工作時主服務(wù)器發(fā)生的寫操作同步到從服務(wù)器的過程。

增量復(fù)制的過程主要是主服務(wù)器每執(zhí)行一個寫命令就會向從服務(wù)器發(fā)送相同的寫命令,從服務(wù)器接收并執(zhí)行收到的寫命令。

開啟無磁盤同步

Redis在與從數(shù)據(jù)庫進(jìn)行復(fù)制初始化時將不會將快照存儲到磁盤,而是直接通過網(wǎng)絡(luò)發(fā)送給從數(shù)據(jù)庫,避免了IO性能差問題。

啟動無磁盤復(fù)制:

repl-diskless-sync yes

到此這篇關(guān)于Redis主從復(fù)制詳解的文章就介紹到這了,更多相關(guān)Redis主從復(fù)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis基本數(shù)據(jù)類型示例詳解

    Redis基本數(shù)據(jù)類型示例詳解

    本文給大家介紹了Redis基本數(shù)據(jù)類型示例詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-09-09
  • 使用Redis實現(xiàn)實時排行榜功能

    使用Redis實現(xiàn)實時排行榜功能

    排行榜功能是一個很普遍的需求。使用 Redis 中有序集合的特性來實現(xiàn)排行榜是又好又快的選擇。接下來通過本文給大家介紹使用Redis實現(xiàn)實時排行榜功能,需要的朋友可以參考下
    2021-07-07
  • 基于 Redis 的 JWT令牌失效處理方案(實現(xiàn)步驟)

    基于 Redis 的 JWT令牌失效處理方案(實現(xiàn)步驟)

    當(dāng)用戶登錄狀態(tài)到登出狀態(tài)時,對應(yīng)的JWT的令牌需要設(shè)置為失效狀態(tài),這時可以使用基于Redis 的黑名單方案來實現(xiàn)JWT令牌失效,本文給大家分享基于 Redis 的 JWT令牌失效處理方案,感興趣的朋友一起看看吧
    2024-03-03
  • Linux安裝Redis、后臺運行、系統(tǒng)自啟動的設(shè)置方法

    Linux安裝Redis、后臺運行、系統(tǒng)自啟動的設(shè)置方法

    Redis是用C語言編寫的開源免費的高性能的分布式內(nèi)存數(shù)據(jù)庫,基于內(nèi)存運行并支持持久化的NoSQL數(shù)據(jù)庫。這篇文章主要介紹了Linux安裝Redis、后臺運行、系統(tǒng)自啟動,需要的朋友可以參考下
    2020-01-01
  • RedisAPI原子性操作及原理解析

    RedisAPI原子性操作及原理解析

    這篇文章主要介紹了RedisAPI原子性操作及原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • redis如何設(shè)置database個數(shù)

    redis如何設(shè)置database個數(shù)

    這篇文章主要介紹了redis如何設(shè)置database個數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Redis 集群搭建和簡單使用教程

    Redis 集群搭建和簡單使用教程

    集群技術(shù)是構(gòu)建高性能網(wǎng)站架構(gòu)的重要手段,下面這篇文章主要介紹了Redis 集群搭建和簡單使用教程,文中通過示例代碼和圖片介紹的很想,對大家具有一定的參考價值,有需要的朋友們下面來一起看看吧。
    2017-02-02
  • redis加鎖的幾種方式匯總

    redis加鎖的幾種方式匯總

    這篇文章主要介紹了redis加鎖的幾種方式匯總,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 詳解Redis用鏈表實現(xiàn)消息隊列

    詳解Redis用鏈表實現(xiàn)消息隊列

    Redis有兩種方式實現(xiàn)消息隊列,一種是用Redis自帶的鏈表數(shù)據(jù)結(jié)構(gòu),另一種是用Redis發(fā)布/訂閱模式實現(xiàn),這篇文章先介紹鏈表實現(xiàn)消息隊列,有需要的朋友們可以參考借鑒。
    2016-09-09
  • 基于Redis實現(xiàn)分布式單號及分布式ID(自定義規(guī)則生成)

    基于Redis實現(xiàn)分布式單號及分布式ID(自定義規(guī)則生成)

    一些業(yè)務(wù)背景下,業(yè)務(wù)要求單號需要有區(qū)分不同的前綴,那么在分布式的架構(gòu)下如何自定義單號而且還能保證唯一呢?本文就來詳細(xì)的介紹一下
    2021-09-09

最新評論

岳普湖县| 屏东县| 平顺县| 永德县| 嘉义市| 徐闻县| 隆安县| 晴隆县| 彭泽县| 承德市| 株洲市| 拜泉县| 白朗县| 林口县| 萨迦县| 新余市| 博罗县| 黑龙江省| 马关县| 江山市| 富顺县| 莫力| 德兴市| 平武县| 英德市| 东宁县| 大悟县| 沁阳市| 周口市| 泰和县| 濉溪县| 吉隆县| 昌宁县| 筠连县| 阿城市| 东丰县| 临邑县| 津市市| 东光县| 双流县| 信阳市|