Redis 復(fù)制初體驗(yàn)

前言

在分布式系統(tǒng)中,為了解決單點(diǎn)問題,通常會把數(shù)據(jù)復(fù)制多個副本部署在其他機(jī)器,滿足故障恢復(fù)和負(fù)載均衡等需求。Redis 也是如此,他為我們提供了復(fù)制功能,實(shí)現(xiàn)類相同數(shù)據(jù)的多個 Redis 副本。復(fù)制功能是 Redis 高可用的基礎(chǔ),Redis 的哨兵和集群都是在此基礎(chǔ)上實(shí)現(xiàn)的。


1 復(fù)制的配置

1. 如何建立復(fù)制?
  • 配置文件中加入 slaveof {masterIp} {masterport}
  • redis-server 命令后加入 --slaveof {masterIp} {masterport}
  • 直接在從節(jié)點(diǎn) redis-cli 中執(zhí)行 slaveof {masterIp} {masterport}

建立復(fù)制后,主節(jié)點(diǎn)的每次修改命令都會用異步的方式發(fā)送到從節(jié)點(diǎn)。

2. 如何斷開復(fù)制鏈接?
  • 在從節(jié)點(diǎn)執(zhí)行 slaveof no one

注意:當(dāng)從節(jié)點(diǎn)從舊的主節(jié)點(diǎn)斷開后,然后接入到新的節(jié)點(diǎn),從節(jié)點(diǎn)會刪除所有舊的數(shù)據(jù)。

3. 連接的安全

對于數(shù)據(jù)比較重要的節(jié)點(diǎn),主節(jié)點(diǎn)會通過 requirepass 參數(shù)進(jìn)行密碼驗(yàn)證,這時所有的客戶端訪問必須使用 auth 命令進(jìn)行校驗(yàn),因此需要在從節(jié)點(diǎn)胚子 masterauth 參數(shù)與主節(jié)點(diǎn)密碼保持一致,這樣從節(jié)點(diǎn)才可以正確的連接到主節(jié)點(diǎn)并發(fā)起復(fù)制流程。

4. 只讀

默認(rèn)情況下,從節(jié)點(diǎn)使用 alave-read-only=yes 配置為只讀模式。由于復(fù)制只能從主節(jié)點(diǎn)到從節(jié)點(diǎn),對于從節(jié)點(diǎn)的任何修改,主節(jié)點(diǎn)都是無法感知的,修改從節(jié)點(diǎn)會造成數(shù)據(jù)不一致。因此,建議不要修改這個配置。


2 拓?fù)?/h2>

1. 一主一從

一主一從是最簡單的復(fù)制拓?fù)浣Y(jié)構(gòu),用于主節(jié)點(diǎn)出現(xiàn)宕機(jī)時,從節(jié)點(diǎn)提供故障轉(zhuǎn)移支持。

注意:如果主節(jié)點(diǎn)因?yàn)樘岣咝阅荜P(guān)閉了 AOF 持久化功能,同時,主節(jié)點(diǎn)自動重啟了,如果從節(jié)點(diǎn)繼續(xù)復(fù)制主節(jié)點(diǎn)的話,從節(jié)點(diǎn)的數(shù)據(jù)也會被清空!

所以,如果想保留數(shù)據(jù),正確的做法是先斷開從節(jié)點(diǎn)和主節(jié)點(diǎn)的連接,然后再重啟主節(jié)點(diǎn)。類似于一種故障轉(zhuǎn)移機(jī)制。

2. 一主多從

一主多從,又稱星形拓?fù)浣Y(jié)構(gòu),使得應(yīng)用端可以利用多個從節(jié)點(diǎn)實(shí)現(xiàn)讀寫分離,對于讀占比較大的場景,可以通過多個讀節(jié)點(diǎn)分擔(dān)主節(jié)點(diǎn)壓力。

同時,在日常開發(fā)中,一些耗時命令(keys,sort),可以在其中一臺上執(zhí)行,防止干擾其他請求。

但是:如果寫并發(fā)量很高,多個從節(jié)點(diǎn)會導(dǎo)致主節(jié)點(diǎn)寫命令的多次發(fā)送從而過度消耗網(wǎng)絡(luò)帶寬,同時也加重了主節(jié)點(diǎn)負(fù)載影響服務(wù)穩(wěn)定性。

3. 樹形結(jié)構(gòu)

又稱(樹狀拓?fù)浣Y(jié)構(gòu)),使得從節(jié)點(diǎn)不但可以復(fù)制主節(jié)點(diǎn)數(shù)據(jù),同時可以作為其他從節(jié)點(diǎn)的主節(jié)點(diǎn)繼續(xù)向下復(fù)制。通過引入復(fù)制中間層,一主多從的缺點(diǎn)(多個從節(jié)點(diǎn)導(dǎo)致的消耗過多網(wǎng)絡(luò)帶寬)就解決了。

但是,也帶來了新的問題,如下圖:

如果圖中節(jié)點(diǎn)故障,那么后面的節(jié)點(diǎn)也將無法收到主節(jié)點(diǎn)的信息,因此對于運(yùn)維來講,增添了許多復(fù)雜度,需要手動將節(jié)點(diǎn)啟動。

總結(jié)

本文只是簡單介紹了一下 redis 復(fù)制相關(guān)的內(nèi)容,包括如何建立復(fù)制,斷開復(fù)制,復(fù)制連接的安全,復(fù)制的只讀狀態(tài),還有 Redis 拓?fù)湎嚓P(guān),例如一主一從,一主多從,樹形結(jié)構(gòu)。

下一篇文章將重點(diǎn)介紹 Redis 復(fù)制的原理。

引用

《Redis 開發(fā)與運(yùn)維》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 本篇就一下方面展開分析 如何使用主從復(fù)制? 主從復(fù)制的原理(重點(diǎn)是全量復(fù)制和部分復(fù)制、以及心跳機(jī)制) 實(shí)際應(yīng)用中需...
    lucode閱讀 1,009評論 0 5
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,012評論 2 89
  • 通過這篇文章你會知道如下: 如何配置主從關(guān)系?如何斷開主從關(guān)系?如何將從節(jié)點(diǎn)變成主節(jié)點(diǎn)? 主從復(fù)制的拓?fù)浣Y(jié)構(gòu)以及相...
    打傘的Fish閱讀 454評論 0 1
  • Redis Cluster Specification 1 設(shè)計(jì)目標(biāo)和理由 1.1 Redis Cluster g...
    近路閱讀 4,276評論 0 12
  • 超強(qiáng)、超詳細(xì)Redis入門教程 轉(zhuǎn)載2017年03月04日 16:20:02 16916 轉(zhuǎn)載自: http://...
    邵云濤閱讀 17,502評論 3 313