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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis复制机制

發(fā)布時間:2024/3/26 数据库 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis复制机制 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、Redis的復制機制

在生產(chǎn)環(huán)境中,單個數(shù)據(jù)庫實例常常存在諸如系統(tǒng)崩潰、網(wǎng)絡連接閃斷或突然斷電等單點故障問題。與其他大多數(shù)數(shù)據(jù)庫系統(tǒng)一樣,Redis也提供了一個復制機制,使得數(shù)據(jù)能夠從一個Redis服務器(master, 主實例)復制到一個或多個其他的Redis服務器(slave,從實例)。
復制不僅提高了整個系統(tǒng)的容錯能力,還可以用來對系統(tǒng)進行水平擴展。在一個重讀取的應用中,可以通過增加多個Redis只讀從實例來減輕主實例的壓力。
Redis的復制機制是Redis Cluster的基礎,而Redis Cluster在此基礎上提供了高可用性。

二、Redis復制機制的工作原理

當主從實例之間網(wǎng)絡連接通暢且建立了復制關系后,主實例會把將其接收到的寫入命令轉(zhuǎn)發(fā)給從實例執(zhí)行,以實現(xiàn)主從實例之間的數(shù)據(jù)同步。
在Redis的復制機制中,共有兩種重新同步機制:部分重新同步和完全重新同步。
當一個Redis的從實例啟動并連接到主實例時,從實例總是會嘗試通過發(fā)送請求進行部分重新同步。如果主實例接受部分重新同步的請求,那么它會從從實例停止時的最后一個偏移處開始增量地進行命令同步。否則,需要進行完全重新同步。
當從實例第一次連接到它的主實例時,總是需要進行完全重新同步。在進行完全重新同步時,為了將所有的數(shù)據(jù)復制到從實例中,主實例需要將數(shù)據(jù)轉(zhuǎn)儲到一個RDB文件中,然后將這個文件發(fā)送給從實例。從實例接收到RDB文件后,會先將內(nèi)存中的所有數(shù)據(jù)清除,再將RDB文件中的數(shù)據(jù)導入。
主實例上的復制過程完全是異步的,因此并不會阻塞服務器處理客戶端的請求!
與完全重新同步相比,部分重新同步不需要從主實例中傳輸完整的數(shù)據(jù)轉(zhuǎn)儲文件。另外,將數(shù)據(jù)轉(zhuǎn)儲到RDB文件中會創(chuàng)建一個后臺進程,還會有內(nèi)存開銷。

為避免主從實例之間的數(shù)據(jù)不一致,大多數(shù)情況下,在redis的配置文件中配置slave-read-only yes,使得服務器處于只讀模式,在這種情況下,在從實例上創(chuàng)建一個新鍵或修改已有鍵的值時,會得到一個錯誤,禁止修改!

三、Redis復制機制調(diào)優(yōu)

Redis調(diào)優(yōu):對Redis的關鍵配置參數(shù)進行優(yōu)化來達到更好的Redis性能。

  • repl-backlog-size: 通過調(diào)整該參數(shù)以充分利用部分重新同步的優(yōu)勢來實現(xiàn)更好的主從復制性能。
  • Redis中使用replication backlog緩沖區(qū)來決定究竟是進行完全重新同步還是部分重新同步,更具體地說,在發(fā)出SLAVEOF命令后,從實例使用最后一個offset和最后一個主實例的ID向主實例發(fā)送一個部分重新同步請求。當主實例和從實例之間的連接建立后,主實例首先會檢查請求中的master_replid是否與它自己的master_replid一致。然后,主實例會檢查請求中的offset能否從backlog緩沖區(qū)中獲取。如果offset位于backlog的范圍內(nèi),那么就可以從中獲取到連接斷開前的所有寫入命令,即意味這可以進行部分重新同步。否則,如果主實例在連接斷開期間接收到的寫入命令的數(shù)量超過了backlog緩沖區(qū)的容量,那么部分重新同步請求會被拒絕,此時完全重新同步會執(zhí)行。
    默認情況下,backlog緩沖區(qū)的大小是1MB,這個容量在連接斷開期間只能容納少量的寫入命令。多數(shù)情況下,需要把這個參數(shù)調(diào)整為更高的值以滿足需求。
    通過在峰值期間使用INFO命令來計算master_repl_offset的變化量,可以估算backlog緩沖區(qū)的合適大小為:
    t * (master_repl_offset2 - master_repl_offset1) / (t2 - t1), t is how long the disconnection may last in seconds.

  • repl-backlog-ttl:如果所有的從實例與主實例的連接全部斷開,那么主實例等待多久釋放backlog占用的內(nèi)存,默認值為3600s.
  • 總結

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

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