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

歡迎訪問 生活随笔!

生活随笔

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

数据库

Redis主从复制与优化

發(fā)布時間:2024/9/3 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis主从复制与优化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
簡介:Redis主從復(fù)制與優(yōu)化

Redis主從復(fù)制與優(yōu)化

主從復(fù)制

我們關(guān)注主從復(fù)制之前,首先要考慮單機有什么問題?

  • 機器故障
  • 容量瓶頸
  • QPS瓶頸

這些都是單節(jié)點所遇到的問題,所以這個時候出現(xiàn)了主從復(fù)制(一主一從,一主多從)

使用主從復(fù)制可以:

  • 數(shù)據(jù)副本
  • 擴展讀性能

注意:

  • 一個master可以有多個slave
  • 一個slave只有一個master
  • 數(shù)據(jù)流向是單向的,master到slave

主從復(fù)制的配置

兩種實現(xiàn)方式

  • slaveof命令

兩臺機器:主節(jié)點:47.11.11.11 從節(jié)點 47.22.22.22

在從節(jié)點執(zhí)行 slaveof 命令

47.22.22.22-6379 > slacefof 47.11.11.11 6379 OK

取消復(fù)制:

47.22.22.22-6379 > slacefof no one OK
  • 修改配置
slaveof ip port //從節(jié)點ip + 端口 slave-read-only yes //開啟只做讀的操作
  • 兩種方式比較

  • 查看主從
127.0.0.1:6379> info replication # Replication role:master //主節(jié)點 connected_slaves:0 master_replid:1d43401335a5343b27b1638fc9843e3a593fc1a7 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:0 second_repl_offset:-1 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0

知識點 :

  • 主節(jié)點 runID:

每個redis節(jié)點啟動后都會動態(tài)分配一個40位的十六進制字符串為運行ID。運行ID的主要作用是來唯一識別redis節(jié)點,比如從節(jié)點保存主節(jié)點的運行ID識別自已正在復(fù)制是哪個主節(jié)點。如果只使用ip+port的方式識別主節(jié)點,那么主節(jié)點重啟變更了整體數(shù)據(jù)集(如替換RDB/AOF文件),從節(jié)點再基于偏移量復(fù)制數(shù)據(jù)將是不安全的,因此當(dāng)運行ID變化后從節(jié)點將做全量復(fù)制。可以在info server命令查看當(dāng)前節(jié)點的運行ID。

需要注意的是redis關(guān)閉再啟動,運行的id會隨之變化。


全量復(fù)制和部分復(fù)制等

全量復(fù)制

用于初次復(fù)制或其它無法進行部分復(fù)制的情況,將主節(jié)點中的所有數(shù)據(jù)都發(fā)送給從節(jié)點。當(dāng)數(shù)據(jù)量過大的時候,會造成很大的網(wǎng)絡(luò)開銷。

redis2.8+ 全量復(fù)制流程

開銷:

  • bgsave時間
  • RDB文件網(wǎng)絡(luò)傳輸
  • 從節(jié)點清空數(shù)據(jù)時間
  • 從節(jié)點加載RDB時間
  • 可能的AOF重寫時間
  • 部分復(fù)制

    用于處理在主從復(fù)制中因網(wǎng)絡(luò)閃退等原因造成數(shù)據(jù)丟失場景,當(dāng)從節(jié)點再次連上主節(jié)點,如果條件允許,主節(jié)點會補發(fā)丟失數(shù)據(jù)給從節(jié)點,因為補發(fā)的數(shù)據(jù)遠遠小于全量數(shù)據(jù),可以有效避免全量復(fù)制的過高開銷。但需要注意,如果網(wǎng)絡(luò)中斷時間過長,造成主節(jié)點沒有能夠完整地保存中斷期間執(zhí)行的寫命令,則無法進行部分復(fù)制,仍使用全量復(fù)制 。

    流程:

    復(fù)制偏移量:

    • 參與復(fù)制的主從節(jié)點都會維護自身復(fù)制偏移量,主節(jié)點在處理完寫入命令操作后,會把命令的字節(jié)長度做累加記錄,統(tǒng)計信息在info replication中的master_repl_offset指標(biāo)中。
    • 從節(jié)點每秒鐘上報自身的復(fù)制偏移量給主節(jié)點,因此主節(jié)點也會保存從節(jié)點的復(fù)制偏移量slave0:ip=192.168.1.3,port=6379,state=online,offset=116424,lag=0
    • 從節(jié)點在接收到主節(jié)點發(fā)送的命令后,也會累加記錄自身的偏移量。統(tǒng)計信息在info replication中的slave_repl_offset中。

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

    • 復(fù)制積壓緩沖區(qū)是保存在主節(jié)點上的一個固定長度的隊列,默認(rèn)大小為1MB,當(dāng)主節(jié)點有連接的從節(jié)點時被創(chuàng)建,這時主節(jié)點響應(yīng)寫命令時,不但會把命令發(fā)給從節(jié)點,還會寫入復(fù)制積壓緩沖區(qū)。
      在命令傳播階段,主節(jié)點除了將寫命令發(fā)送給從節(jié)點,還會發(fā)送一份給復(fù)制積壓緩沖區(qū),作為寫命令的備份;除了存儲寫命令,復(fù)制積壓緩沖區(qū)中還存儲了其中 的每個字節(jié)對應(yīng)的復(fù)制偏移量(offset) 。由于復(fù)制積壓緩沖區(qū)定長且先進先出,所以它保存的是主節(jié)點最近執(zhí)行的寫命令;時間較早的寫命令會被擠出緩沖區(qū)。

    生產(chǎn)中常見問題

    讀寫分離

    分流到從節(jié)點。主節(jié)點寫數(shù)據(jù),從節(jié)點讀數(shù)據(jù),可能遇到讀問題

  • 復(fù)制數(shù)據(jù)延遲
  • 讀到過期數(shù)據(jù)
  • 從節(jié)點故障
  • 主從配置不一致
  • 例如maxmemory 不一致 會導(dǎo)致 丟失數(shù)據(jù)
  • 例如數(shù)據(jù)結(jié)構(gòu)優(yōu)化參數(shù)(例如hash-max-ziplist-entries):內(nèi)存不一致
  • 規(guī)避全量復(fù)制
  • 第一次全量復(fù)制的時候
    ? - 第一次不可避免,盡量小節(jié)點 ,低峰處理
  • 節(jié)點 運行ID不匹配
    ? - 故障轉(zhuǎn)移,例如哨兵或者集群
  • 復(fù)制積壓緩存區(qū)不足
    ? - 增大復(fù)制緩存區(qū)配置rel_backlog_size ,網(wǎng)絡(luò)增強
  • 規(guī)避復(fù)制風(fēng)暴
  • 單機器復(fù)制風(fēng)暴(redis<4.0當(dāng)master宕機重啟,會導(dǎo)致該機器下所有slave同時產(chǎn)生復(fù)制。避免單機部署一套redis主從)====》主節(jié)點分散多臺機

  • 最后的注意事項:

    • 在上述的過程的實現(xiàn)是從庫不開啟AOF持久化情況下,如果從庫開啟的AOF持久化,重啟時候依然使用全量復(fù)制。
    • 之前從master復(fù)制過來的數(shù)據(jù)并不會丟失,只是不再同步之前master(如上圖的6379節(jié)點)后續(xù)寫入的數(shù)據(jù)
    • slaveof 可以用來改變其所屬的master節(jié)點,即重新成為另一臺master的slave,但是新的master首先就會把從節(jié)點的數(shù)據(jù)全部清除掉
    • 關(guān)于讀寫分離延時: 讀寫分離 ,master會一步將數(shù)據(jù)復(fù)制到slave,如果slave發(fā)生阻塞,則會延遲master數(shù)據(jù)的寫命令,造成數(shù)據(jù)不一致的問題。-------一般不考慮這個問題
    • 讀到過期數(shù)據(jù):redis在刪除key時有兩種策略,一種是懶惰型策略,即只有當(dāng)redis操作這個key時才會將key刪除,第二種是定期采樣key刪除--------當(dāng)key數(shù)據(jù)非常多時,采樣速度比不上key生成速度會造成很多過期數(shù)據(jù)沒有刪除,因為redis一般都是在master節(jié)點(增加刪除數(shù)據(jù)),slave查詢到過期數(shù)據(jù)也不能刪除。會導(dǎo)致slave讀到過期數(shù)據(jù)(在redis3.2中已經(jīng)解決)
    • 推薦 redis 主從文章https://www.cnblogs.com/wdliu/p/9407179.html
    • 推薦 redis 全量復(fù)制與部分復(fù)制文章https://blog.csdn.net/gaobinzhan/article/details/106536326

    個人博客:[http://blog.yanxiaolong.cn/](個人博客:http://blog.yanxiaolong.cn/
    )

    原文鏈接:https://developer.aliyun.com/article/775627?

    版權(quán)聲明:本文內(nèi)容由阿里云實名注冊用戶自發(fā)貢獻,版權(quán)歸原作者所有,阿里云開發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請查看《阿里云開發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開發(fā)者社區(qū)知識產(chǎn)權(quán)保護指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫侵權(quán)投訴表單進行舉報,一經(jīng)查實,本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。

    總結(jié)

    以上是生活随笔為你收集整理的Redis主从复制与优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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