欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis超詳細(xì)講解高可用主從復(fù)制基礎(chǔ)與哨兵模式方案

 更新時(shí)間:2022年04月07日 11:00:30   作者:靜靜子?  
Redis因?yàn)槠涓咝阅芎鸵子眯栽谖覀兒蠖说姆?wù)中發(fā)揮了巨大的作用,并且很多重要功能的實(shí)現(xiàn)都會(huì)依賴redis,本篇我們來(lái)了解Redis高可用主從復(fù)制與哨兵模式

高可用基礎(chǔ)---主從復(fù)制

Redis的復(fù)制功能是支持將多個(gè)數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)同步,主數(shù)據(jù)庫(kù)可以進(jìn)行讀寫操作。當(dāng)主數(shù)據(jù)庫(kù)數(shù)據(jù)發(fā)生改變時(shí)會(huì)自動(dòng)同步到從數(shù)據(jù)庫(kù),從數(shù)據(jù)庫(kù)一般是只讀的,會(huì)接收注數(shù)據(jù)庫(kù)同步過來(lái)的數(shù)據(jù)。

一個(gè)主數(shù)據(jù)庫(kù)可以有多個(gè)從數(shù)據(jù)庫(kù),而一個(gè)從數(shù)據(jù)庫(kù)只能有一個(gè)主數(shù)據(jù)庫(kù),默認(rèn)情況下,每臺(tái)服務(wù)器都是主節(jié)點(diǎn),可以通過配置來(lái)設(shè)置Redis節(jié)點(diǎn)稱為從數(shù)據(jù)庫(kù)。

img

主從復(fù)制的原理

  • 當(dāng)啟動(dòng)一個(gè)從節(jié)點(diǎn)時(shí),它會(huì)發(fā)送一個(gè) PSYNC 命令(分為全量復(fù)制和部分復(fù)制)給主節(jié)點(diǎn);
  • 如果是從節(jié)點(diǎn)初次連接到主節(jié)點(diǎn),那么會(huì)觸發(fā)一次全量復(fù)制。此時(shí)主節(jié)點(diǎn)會(huì)啟動(dòng)一個(gè)后臺(tái)線程,開始生成一份 RDB 快照文件;
  • 同時(shí)還會(huì)將從客戶端 client 新收到的所有寫命令緩存在內(nèi)存中。RDB 文件生成完畢后, 主節(jié)點(diǎn)會(huì)將RDB文件發(fā)送給從節(jié)點(diǎn),從節(jié)點(diǎn)會(huì)先將RDB文件寫入本地磁盤,然后再?gòu)谋镜卮疟P加載到內(nèi)存中;
  • 接著主節(jié)點(diǎn)會(huì)將內(nèi)存中緩存的寫命令發(fā)送到從節(jié)點(diǎn),從節(jié)點(diǎn)同步這些數(shù)據(jù);
  • 如果從節(jié)點(diǎn)跟主節(jié)點(diǎn)之間網(wǎng)絡(luò)出現(xiàn)故障,連接斷開了,會(huì)自動(dòng)重連,連接之后主節(jié)點(diǎn)僅會(huì)將部分缺失的數(shù)據(jù)同步給從節(jié)點(diǎn)。

主從復(fù)制配置

默認(rèn)情況下,每個(gè)節(jié)點(diǎn)都是主節(jié)點(diǎn),只需要配置從節(jié)點(diǎn)。可以通過復(fù)制Redis.conf配置文件,修改主要信息,例如:端口號(hào)、pid名稱、log文件名稱、dump.rdb名稱等,可以修改配置,配置就永久有效,也可以通過命令形式做處理。

命令:info replication:查看當(dāng)前庫(kù)信息

img

命令:slaveof ip port :在從服務(wù)器上執(zhí)行名,給定主服務(wù)器的端口和IP

命令:Slave no one :可以讓從節(jié)點(diǎn)恢復(fù)為主機(jī)

示例

啟動(dòng)三個(gè)Redis服務(wù),給定端口6380、6381、6382。給定6380為主節(jié)點(diǎn)

1、創(chuàng)建Redis實(shí)例

nohup redis-server --port 6380 >> /usr/local/redis/data/log/6380.log 2>&1 &
nohup redis-server --port 6381 >> /usr/local/redis/data/log/6381.log 2>&1 &
nohup redis-server --port 6382 >> /usr/local/redis/data/log/6382.log 2>&1 &
 
[root@redis ~]# ps -ef |grep redis
root      16421  16314  0 03:01 pts/1    00:00:00 redis-server *:6380
root      16427  16314  0 03:01 pts/1    00:00:00 redis-server *:6381
root      16431  16314  0 03:01 pts/1    00:00:00 redis-server *:6382

2、連接數(shù)據(jù)庫(kù)并設(shè)置主從復(fù)制

Gong-Dezhe-MBP:log gongdezhe$ redis-cli -p 6380
127.0.0.1:6380> 
?
Gong-Dezhe-MBP:~ gongdezhe$ redis-cli -p 6381
127.0.0.1:6381> slaveof 127.0.0.1 6380
OK
?
Gong-Dezhe-MBP:~ gongdezhe$ redis-cli -p 6382
127.0.0.1:6382> slaveof 127.0.0.1 6380
OK

主從配置完成后,主節(jié)點(diǎn)信息:

img

從節(jié)點(diǎn)信息:

img

數(shù)據(jù)同步測(cè)試:

img

img

高可用方案---哨兵模式sentinel

搭建好的主從復(fù)制方案可以達(dá)到數(shù)據(jù)同步目的,但是當(dāng)主服務(wù)器宕機(jī)后,需要手動(dòng)將一個(gè)從服務(wù)器切換為主服務(wù)器,這個(gè)過程需要人工干預(yù),同時(shí)切換會(huì)導(dǎo)致Redis的寫入功能不可用。需要一種能夠自動(dòng)完成master故障發(fā)現(xiàn)并能夠?qū)⒁粋€(gè)Slave切換為master,這個(gè)時(shí)候需要哨兵sentinel模式,哨兵模式可以自動(dòng)切換主從節(jié)點(diǎn)。

哨兵模式簡(jiǎn)介

sentinel是官方提供的高可用方案,其原理是哨兵通過發(fā)送命令,等待Redis服務(wù)器響應(yīng),從而監(jiān)控運(yùn)行的多個(gè)Redis實(shí)例。同時(shí) sentinel是一個(gè)分布式系統(tǒng),可以在一個(gè)架構(gòu)中運(yùn)行多個(gè)Sentinel進(jìn)程。所以監(jiān)控同一個(gè)Master的Sentinel會(huì)自動(dòng)連接,組成一個(gè)分布式的Sentinel網(wǎng)絡(luò),互相通信并交換彼此關(guān)于被監(jiān)視服務(wù)器信息。

img

sentinel工作過程:

  • 通過向主服務(wù)器和從服務(wù)器發(fā)送ping命令,讓服務(wù)器返回運(yùn)行狀態(tài)。
  • 當(dāng)哨兵監(jiān)測(cè)到master宕機(jī),會(huì)自動(dòng)將一個(gè)slave切換成master,然后通過發(fā)布訂閱模式通知其他的從服務(wù)器,修改配置文件,讓它們切換主機(jī)。

關(guān)于sentinel的三個(gè)定時(shí)任務(wù):

  • 每1秒每個(gè)sentinel對(duì)其他sentinel和redis節(jié)點(diǎn)執(zhí)行ping操作,心跳檢測(cè)。
  • 每10秒每個(gè)sentinel會(huì)對(duì)master和slave執(zhí)行info命令,目的是發(fā)現(xiàn)slave結(jié)點(diǎn),確定主從關(guān)系。
  • 每2秒每個(gè)sentinel通過master節(jié)點(diǎn)的channel交換信息(pub/sub)。master節(jié)點(diǎn)上有一個(gè)發(fā)布訂閱的頻道(sentinel:hello)。sentinel節(jié)點(diǎn)通過sentinel:hello頻道進(jìn)行信息交換(對(duì)節(jié)點(diǎn)的"看法"和自身的信息),達(dá)成共識(shí)。

哨兵工作原理

  • 每個(gè)Sentinel以每秒鐘一次的頻率向它所知道的Master,Slave以及其他 Sentinel實(shí)例發(fā)送一個(gè) PING命令。
  • 如果一個(gè)實(shí)例距離最后一次有效回復(fù) PING 命令的時(shí)間超過指定值, 則這個(gè)實(shí)例會(huì)被 Sentine 標(biāo)記為主觀下線。
  • 如果一個(gè)Master被標(biāo)記為主觀下線,則正在監(jiān)視這個(gè)Master的所有 Sentinel要以每秒一次的頻率確認(rèn)Master是否真正進(jìn)入主觀下線狀態(tài)。
  • 當(dāng)有足夠數(shù)量的 Sentinel(大于等于配置文件指定值)在指定的時(shí)間范圍內(nèi)確認(rèn)Master的確進(jìn)入了主觀下線狀態(tài), 則Master會(huì)被標(biāo)記為客觀下線 。若沒有足夠數(shù)量的 Sentinel同意 Master 已經(jīng)下線, Master 的客觀下線狀態(tài)就會(huì)被解除。若 Master重新向 Sentinel 的 PING 命令返回有效回復(fù), Master 的主觀下線狀態(tài)就會(huì)被移除。
  • 哨兵節(jié)點(diǎn)會(huì)選舉出哨兵 leader,負(fù)責(zé)故障轉(zhuǎn)移的工作。
  • 哨兵 leader 會(huì)推選出某個(gè)表現(xiàn)良好的從節(jié)點(diǎn)成為新的主節(jié)點(diǎn),然后通知其他從節(jié)點(diǎn)更新主節(jié)點(diǎn)信息。

然而一個(gè)哨兵進(jìn)程對(duì)Redis服務(wù)器進(jìn)行監(jiān)控,可能會(huì)出現(xiàn)問題,為此,我們可以使用多個(gè)哨兵進(jìn)行監(jiān)控,各個(gè)哨兵之間還會(huì)進(jìn)行監(jiān)控,這樣就形成了多哨兵模式。

img

哨兵故障修復(fù)原理

1.主觀下線:

當(dāng)主服務(wù)器發(fā)生故障時(shí),此時(shí)一個(gè)sentinel發(fā)現(xiàn)了故障,系統(tǒng)并不會(huì)馬上進(jìn)行failover過程(這個(gè)現(xiàn)象稱為主觀下線),它會(huì)向網(wǎng)絡(luò)中的其他Sentinel進(jìn)行確認(rèn)。

2.客觀下線:

接著其他Sentinel也陸續(xù)發(fā)現(xiàn)故障,這個(gè)時(shí)候其中一個(gè)Sentinel就會(huì)發(fā)起投票。一定數(shù)量的哨兵(在配置文件中指定)確認(rèn)Master被標(biāo)記為主觀下線,此時(shí)將Master標(biāo)記為客觀下線。

3.sentinel的leader選舉:

要想完成故障切換(將故障master剔除,并將一個(gè)slave提升為master)就必須先選舉一個(gè)leader。最先發(fā)現(xiàn)故障的sentinel向其他哨兵發(fā)起請(qǐng)求成為leader,其他哨兵在沒有同意別的哨兵的leader請(qǐng)求時(shí),就會(huì)把票投給該sentinel。當(dāng)半數(shù)以上的sentinel投票通過后就認(rèn)定該sentinel為leader。接下來(lái)的故障切換有該leader完成。

4.master選舉:

leader選好后將故障master剔除,從slave中挑選一個(gè)成為master。遵照的原則如下:

  • slave的優(yōu)先級(jí)
  • slave從master那同步的數(shù)據(jù)量,那個(gè)slave多就優(yōu)先。

5.新Master再通過發(fā)布訂閱模式通知所有sentinel更新監(jiān)控主機(jī)信息。

6.故障的主服務(wù)器修復(fù)后將成為從服務(wù)器繼續(xù)工作。

示例:故障發(fā)生時(shí):

img

故障切換:

img

Master重新上線后:

img

sentinel.conf配置講解

配置哨兵配置文件 sentinel.conf

#Sentinel monitor <name> <ip> <port> <quorum>

  • name :redis主服務(wù)名稱,可以自行命名,但是在一個(gè)sentinel網(wǎng)絡(luò)中,一個(gè)redis主服務(wù)只能有一個(gè)名稱;
  • ip和port :redis主服務(wù)的IP地址和端口號(hào).
  • quorum :表示要將這個(gè)主服務(wù)器判斷為失效并下線至少需要2個(gè)sentinel同意
  • protected-mode :關(guān)閉保護(hù)模式(默認(rèn)情況下,redis node和sentinel的protected-mode都是yes,在搭建集群時(shí),若想從遠(yuǎn)程連接redis集群,需要將redis node和sentinel的protected-mode修改為no,若只修改redis node,從遠(yuǎn)程連接sentinel后,依然是無(wú)法正常使用的,且sentinel的配置文件中沒有protected-mode配置項(xiàng),需要手工添加。依據(jù)redis文檔的說(shuō)明,若protected-mode設(shè)置為no后,需要增加密碼證或是IP限制等保護(hù)機(jī)制,否則是極度危險(xiǎn)的。)

img

img

img

img

哨兵模式的優(yōu)點(diǎn)

  • 哨兵集群、基于主從復(fù)制模式,所有的主從復(fù)制優(yōu)點(diǎn),它會(huì)有
  • 主從可以切換,故障可以轉(zhuǎn)移,系統(tǒng)的可用性會(huì)更好
  • 哨兵模式就是主從模式的升級(jí),手動(dòng)轉(zhuǎn)自動(dòng),更加健壯

哨兵模式的缺點(diǎn)

  • Redis不好在線擴(kuò)展,集群容量一旦到達(dá)上限,在線擴(kuò)容十分麻煩
  • 實(shí)現(xiàn)哨兵模式的配置很麻煩,里面有很多選擇

到此這篇關(guān)于Redis超詳細(xì)講解高可用主從復(fù)制基礎(chǔ)與哨兵模式方案的文章就介紹到這了,更多相關(guān)Redis 高可用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis可視化連接服務(wù)器的方法

    Redis可視化連接服務(wù)器的方法

    這篇文章主要介紹了Redis可視化連接服務(wù)器的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • redis如何實(shí)現(xiàn)保存對(duì)象

    redis如何實(shí)現(xiàn)保存對(duì)象

    這篇文章主要介紹了redis如何實(shí)現(xiàn)保存對(duì)象,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 關(guān)于Redis未授權(quán)訪問的問題

    關(guān)于Redis未授權(quán)訪問的問題

    這篇文章主要介紹了Redis未授權(quán)訪問的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • redis中使用bloomfilter的白名單功能解決緩存穿透問題

    redis中使用bloomfilter的白名單功能解決緩存穿透問題

    本文主要介紹了redis中使用bloomfilter的白名單功能解決緩存穿透問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 解決 Redis 數(shù)據(jù)傾斜、熱點(diǎn)等問題

    解決 Redis 數(shù)據(jù)傾斜、熱點(diǎn)等問題

    ?單臺(tái)機(jī)器的硬件配置有上限制約,一般我們會(huì)采用分布式架構(gòu)將多臺(tái)機(jī)器組成一個(gè)集群,這篇文章主要介紹了解決 Redis 數(shù)據(jù)傾斜、熱點(diǎn)等問題,需要的朋友可以參考下
    2022-12-12
  • Redis安裝啟動(dòng)及常見數(shù)據(jù)類型

    Redis安裝啟動(dòng)及常見數(shù)據(jù)類型

    這篇文章主要介紹了Redis安裝啟動(dòng)及常見數(shù)據(jù)類型,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • linux安裝配置及使用redis

    linux安裝配置及使用redis

    本文主要跟大家講解的是在Linux環(huán)境下,Redis的安裝與部署,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下
    2018-04-04
  • 詳解Redis基本命令與使用場(chǎng)景

    詳解Redis基本命令與使用場(chǎng)景

    REmote DIctionary Server(Redis)是一個(gè)由Salvatore Sanfilippo寫的key-value 存儲(chǔ)系統(tǒng),是跨平臺(tái)的非關(guān)系型數(shù)據(jù)庫(kù),是一個(gè)開源的使用ANSI C語(yǔ)言編寫、遵守BSD協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存、分布式、可選持久性的鍵值對(duì)(Key-Value)存儲(chǔ)數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的 API。
    2021-06-06
  • 詳解Redis集群搭建的三種方式

    詳解Redis集群搭建的三種方式

    Redis是一個(gè)開源的key-value存儲(chǔ)系統(tǒng),大部分互聯(lián)網(wǎng)企業(yè)都用來(lái)做服務(wù)器端緩存。Redis在3.0版本前只支持單實(shí)例模式,雖然支持主從模式、哨兵模式部署來(lái)解決單點(diǎn)故障,但是現(xiàn)在互聯(lián)網(wǎng)企業(yè)動(dòng)輒大幾百G的數(shù)據(jù),沒法滿足業(yè)務(wù)的需求,所以Redis在3.0版本以后就推出了集群模式。
    2021-05-05
  • Redis自動(dòng)化安裝及集群實(shí)現(xiàn)搭建過程

    Redis自動(dòng)化安裝及集群實(shí)現(xiàn)搭建過程

    這篇文章主要介紹了Redis自動(dòng)化安裝以及集群實(shí)現(xiàn)搭建過程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評(píng)論