011.Redis Sentinel 架構(gòu)原理詳解

1. Redis Sentinel 簡(jiǎn)介

redis 的主從復(fù)制模式下,一旦主節(jié)點(diǎn)由于故障不能提供服務(wù)晶框,需要人工將從節(jié)點(diǎn)晉升為主節(jié)點(diǎn)矩桂,再通知所有的程序把 master 地址統(tǒng)統(tǒng)改一遍喂链,然后重新上線。毫無(wú)疑問(wèn)彭谁,這種故障處理的方法是效率低下的,無(wú)法接受允扇。

于是缠局,redis 從 2.8 開(kāi)始正式提供了 sentinel 架構(gòu)來(lái)解決這個(gè)問(wèn)題。

redis sentinel 是 redis 的高可用實(shí)現(xiàn)方案蔼两,多個(gè) sentinel 進(jìn)程協(xié)同工作甩鳄,組成了一套分布式的架構(gòu),它負(fù)責(zé)持續(xù)監(jiān)控主從節(jié)點(diǎn)的健康狀況额划,當(dāng)主節(jié)點(diǎn)掛掉時(shí)妙啃,自動(dòng)選擇一個(gè)最優(yōu)的從節(jié)點(diǎn)切換為主節(jié)點(diǎn)。客戶端來(lái)連接集群時(shí)揖赴,會(huì)首先連接 sentinel馆匿,通過(guò) sentinel 來(lái)查詢主節(jié)點(diǎn)的地址,然后再去連接主節(jié)點(diǎn)進(jìn)行數(shù)據(jù)交互燥滑。當(dāng)主節(jié)點(diǎn)發(fā)生故障時(shí)渐北,客戶端會(huì)重新向 sentinel 要地址,sentinel 會(huì)將最新的主節(jié)點(diǎn)地址告訴客戶端铭拧。如此應(yīng)用程序?qū)o(wú)需重啟即可自動(dòng)完成節(jié)點(diǎn)切換赃蛛。

2. Redis Sentinel 架構(gòu)及原理

我們以經(jīng)典的一主二從架構(gòu)來(lái)說(shuō)明的 sentinel 的原理。

(1) 主從切換的過(guò)程

  1. 每個(gè) sentinel 節(jié)點(diǎn)通過(guò)定期監(jiān)控 master 的健康狀況搀菩。
  1. 主節(jié)點(diǎn)出現(xiàn)故障呕臂,兩個(gè)從節(jié)點(diǎn)與主節(jié)點(diǎn)失去連接,主從復(fù)制失敗肪跋。
  1. sentinel 集群 發(fā)現(xiàn) master 故障后歧蒋,多個(gè) sentinel 節(jié)點(diǎn)對(duì)主節(jié)點(diǎn)的故障達(dá)成一致,在 3 個(gè) sentinel 節(jié)點(diǎn)中選擇一個(gè)作為 leader 州既,例如谜洽,選舉出 sentinel-0 節(jié)點(diǎn)作為 leader,來(lái)負(fù)責(zé)故障轉(zhuǎn)移吴叶。
  1. leader sentinel 把一個(gè) slave 節(jié)點(diǎn)提升為 master阐虚,并讓另一個(gè) slave 從新的 master 復(fù)制數(shù)據(jù),并告知客戶端新的 master 的信息晤郑。
  1. 故障的舊 master 上線后敌呈,leader sentinel 讓它從新的 master 復(fù)制數(shù)據(jù)。

以上就是 sentinel 集群進(jìn)行故障轉(zhuǎn)移的整體流程造寝,具體的一些細(xì)節(jié)還會(huì)詳細(xì)介紹磕洪,這里先總結(jié)一下 sentinel 集群在 redis 主從架構(gòu)高可用中起到的 4 個(gè)作用:

  • 集群監(jiān)控
    sentinel 節(jié)點(diǎn)會(huì)定期檢測(cè) redis 數(shù)據(jù)節(jié)點(diǎn)、其余 sentinel 節(jié)點(diǎn)是否故障诫龙。
  • 故障轉(zhuǎn)移
    實(shí)現(xiàn)從節(jié)點(diǎn)晉升為主節(jié)點(diǎn)并維護(hù)后續(xù)正確的主從關(guān)系析显。
  • 配置中心
    sentinel 架構(gòu)中,客戶端在初始化的時(shí)候連接的是 sentinel 集群签赃,從中獲取主節(jié)點(diǎn)信息谷异。
  • 消息通知
    sentinel 節(jié)點(diǎn)會(huì)將故障轉(zhuǎn)移的結(jié)果通知給客戶端。

此外锦聊,使用 sentinel 集群而不是單個(gè) sentinel 節(jié)點(diǎn)去監(jiān)控 redis 主從架構(gòu)有兩個(gè)好處:

  • 對(duì)于節(jié)點(diǎn)的故障判斷由多個(gè) sentinel 節(jié)點(diǎn)共同完成歹嘹,這樣可以有效地防止誤判。
  • sentinel 集群可以保證自身的高可用性孔庭,即某個(gè) sentinel 節(jié)點(diǎn)自身故障也不會(huì)影響 sentinel 集群的健壯性尺上。

(2) sentinel 集群的監(jiān)控功能詳解

sentinel 集群通過(guò)三個(gè)定時(shí)監(jiān)控任務(wù)完成對(duì)各個(gè)節(jié)點(diǎn)發(fā)現(xiàn)和監(jiān)控材蛛。

  1. 每隔10秒,每個(gè) sentinel 節(jié)點(diǎn)會(huì)向主節(jié)點(diǎn)和從節(jié)點(diǎn)發(fā)送 info 命令獲取 redis 主從架構(gòu)的最新情況怎抛。例如卑吭,發(fā)送info replication命令可以得到以下信息:
node01:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.239.102,port=6379,state=online,offset=18621889,lag=1
slave1:ip=192.168.239.103,port=6379,state=online,offset=18621889,lag=1

這樣,sentinel 集群就可以得知 master 和 slave 的基本信息马绝,通過(guò)向主節(jié)點(diǎn)執(zhí)行 info 命令豆赏,獲取從節(jié)點(diǎn)的信息,所以 sentinel 節(jié)點(diǎn)不需要顯式配置監(jiān)控從節(jié)點(diǎn)富稻,當(dāng)有新的從節(jié)點(diǎn)加入時(shí)都可以立刻感知出來(lái)掷邦,當(dāng) master 節(jié)點(diǎn)故障或者故障轉(zhuǎn)移后,可以通過(guò) info 命令實(shí)時(shí)更新 redis 主從信息椭赋。

  1. 每隔2秒耙饰,每個(gè) sentinel 節(jié)點(diǎn)會(huì)向 redis 數(shù)據(jù)節(jié)點(diǎn)的__sentinel__:hello這個(gè)channel(頻道)發(fā)送一條消息,消息的內(nèi)容是:
<sentinel ip> <sentinel port> <sentinel runId> <Sentinel 配置版本> <master name> <master ip> <master port> <master 配置版本>

每個(gè) sentinel 節(jié)點(diǎn)會(huì)訂閱該 channel纹份,來(lái)了解其他
sentinel節(jié)點(diǎn)以及它們對(duì)主節(jié)點(diǎn)的判斷,所以這個(gè)定時(shí)任務(wù)可以完成以下兩個(gè)工作:

  • 發(fā)現(xiàn)新的 sentinel節(jié)點(diǎn):通過(guò)訂閱主節(jié)點(diǎn)的__sentinel__:hello了解其他的 sentinel 節(jié)點(diǎn)信息廷痘,如果是新加入的 sentinel 節(jié)點(diǎn)蔓涧,將該 sentinel 節(jié)點(diǎn)信息保存起來(lái),并與該 sentinel 節(jié)點(diǎn)創(chuàng)建連接
  • sentinel 節(jié)點(diǎn)之間交換主節(jié)點(diǎn)的狀態(tài)笋额,用于確認(rèn) master 下線和故障處理的 leader 選舉元暴。
  1. 每隔1秒,每個(gè) sentinel 節(jié)點(diǎn)會(huì)向主節(jié)點(diǎn)兄猩、從節(jié)點(diǎn)茉盏、其余 sentinel 節(jié)點(diǎn)發(fā)送一條ping命令做一次心跳檢測(cè),來(lái)確認(rèn)這些節(jié)點(diǎn)是否可達(dá)枢冤。通過(guò)定時(shí)發(fā)送ping命令鸠姨,sentinel 節(jié)點(diǎn)對(duì)主節(jié)點(diǎn)、從節(jié)點(diǎn)淹真、其余 sentinel 節(jié)點(diǎn)都建立起連接讶迁,實(shí)現(xiàn)了對(duì)每個(gè)節(jié)點(diǎn)的監(jiān)控,這個(gè)定時(shí)任務(wù)是節(jié)點(diǎn)下線判定的重要依據(jù)核蘸。

(3) sdown(主觀下線) 和 odown(客觀下線)

  1. 主觀下線
    每個(gè) sentinel 節(jié)點(diǎn)每隔1秒對(duì)主節(jié)
    點(diǎn)巍糯、從節(jié)點(diǎn)、其他 sentinel 節(jié)點(diǎn)發(fā)送 ping 命令做心跳檢測(cè)客扎,當(dāng)這些節(jié)點(diǎn)超過(guò)
    down-after-milliseconds沒(méi)有進(jìn)行有效回復(fù)祟峦,sentinel節(jié)點(diǎn)就會(huì)認(rèn)為該節(jié)點(diǎn)下線,這個(gè)行為叫做主觀下線徙鱼。主觀下線是某個(gè) sentinel 節(jié)點(diǎn)的判斷宅楞,并不是 sentinel 集群的判斷,所以存在誤判的可能。

  2. 客觀下線
    當(dāng) sentinel 主觀下線的節(jié)點(diǎn)是主節(jié)點(diǎn)時(shí)咱筛,該 sentinel 節(jié)點(diǎn)會(huì)通過(guò)sentinel ismaster-down-by-addr命令向其他 sentinel 節(jié)點(diǎn)詢問(wèn)對(duì)主節(jié)點(diǎn)的判斷搓幌,當(dāng)超過(guò)
    <quorum>個(gè)數(shù)(quorum可配置)的 sentinel 節(jié)點(diǎn)認(rèn)為主節(jié)點(diǎn)確實(shí)有問(wèn)題,這時(shí)該 sentinel 節(jié)點(diǎn)會(huì)做出客觀下線的決定迅箩,這樣客觀下線的含義是比較明顯了溉愁,也就是大部分是 sentinel 節(jié)點(diǎn)都對(duì)主節(jié)點(diǎn)的下線做了同意的判定,那么這個(gè)判定就是客觀的饲趋。

介紹一下sentinel is-master-down-by-addr命令:

sentinel is-master-down-by-addr <ip> <port> <current_epoch> <runid>

ip拐揭、port:詢問(wèn)此 ip:port 的 redis 進(jìn)程是否下線
current_epoch:當(dāng)前配置版本
runid:如果為當(dāng)前 sentinel 節(jié)點(diǎn)的 runid,則此命令用于申請(qǐng)自己成為故障處理的 leader奕塑,如果是*堂污,則此命令用于向其他 sentinel 節(jié)點(diǎn)確認(rèn) master 是否下線。

此命令返回結(jié)果包括3個(gè)信息:

  • down_state:目標(biāo) sentinel 節(jié)點(diǎn)對(duì)于主節(jié)點(diǎn)的下線判斷龄砰,1是下線盟猖,0是在線。
  • leader_runid:當(dāng)leader_runid等于*時(shí)换棚,代表返回結(jié)果是說(shuō)明主節(jié)點(diǎn)是否不可達(dá)式镐,當(dāng) leader_runid 等于具體的runid,代表目標(biāo)節(jié)點(diǎn)同意該 runid sentinel 節(jié)點(diǎn)成為 leader固蚤。
  • leader_epoch:leader 版本娘汞。

(4) 故障轉(zhuǎn)移前的 leader 選舉

當(dāng) sentinel 集群確認(rèn) master odown,需要選舉出一個(gè) leader 節(jié)點(diǎn)來(lái)進(jìn)行故障轉(zhuǎn)移夕玩,選舉過(guò)程如下:

  1. 每個(gè)在線的 sentinel 節(jié)點(diǎn)都有資格成為 leader你弦,當(dāng)它確認(rèn)主節(jié)點(diǎn)客觀下線時(shí)候,會(huì)向其他 sentinel 節(jié)點(diǎn)發(fā)送sentinel is-master-down-by-addr命令燎孟,要求將自己設(shè)置為leader禽作,比如 sentinel-0 節(jié)點(diǎn)首先發(fā)起請(qǐng)求成為 leader 的請(qǐng)求。
  2. 每個(gè) sentinel 節(jié)點(diǎn)都只能投出一票缤弦,于是當(dāng) sentinel-0 節(jié)點(diǎn)發(fā)起成為 leader 的請(qǐng)求后领迈,會(huì)得到 sentinel-1 和 sentinel-2 節(jié)點(diǎn)的投票,總共得到 2 票碍沐,得到的票數(shù)和以下公式計(jì)算的值作比較:
  max(quorum, num(sentinels) / 2 + 1)
= max(2, 3 / 2 + 1) 
= max(2, 1 + 1) 
= max(2, 2)
= 2

當(dāng)?shù)玫降钠睌?shù) >= max(quorum, num(sentinels) / 2 + 1) 的值狸捅,那么該 sentinel 節(jié)點(diǎn)成為 leader,于是累提,sentinel-0 節(jié)點(diǎn)成為 leader尘喝。

  1. 比如下一個(gè)確認(rèn) master 客觀下線的 sentinel 節(jié)點(diǎn)為 sentinel-1,當(dāng)它發(fā)起成為 leader 的請(qǐng)求后斋陪,由于 sentinel-2 節(jié)點(diǎn)已經(jīng)給 sentinel-0 節(jié)點(diǎn)投過(guò)票了朽褪,于是它只能得到 sentinel-0 節(jié)點(diǎn)投的一票置吓,所以它不能成為 leader,而當(dāng) sentinel-2 發(fā)起請(qǐng)求成為 leader 的請(qǐng)求后缔赠,它一票都得不到衍锚。于是當(dāng)已經(jīng)選舉出 leader 后,就不會(huì)再繼續(xù)進(jìn)行選舉流程了嗤堰,因?yàn)槭菦](méi)有意義的戴质。

  2. 如果一次選舉沒(méi)有選舉出 leader,那么會(huì)進(jìn)行下一次選舉踢匣。

  3. 總結(jié):正常情況下告匠,哪個(gè) sentinel 節(jié)點(diǎn)最先確認(rèn) master 客觀下線,哪個(gè) sentinel 節(jié)點(diǎn)就會(huì)成為執(zhí)行故障轉(zhuǎn)移的 leader离唬。

(5) 故障轉(zhuǎn)移前新的 master 選擇

要執(zhí)行故障轉(zhuǎn)移后专,首先要從 slave 中選擇一個(gè)作為新的 master,選擇的準(zhǔn)則如下:

  1. 不選擇不健康的 slave输莺,以下?tīng)顟B(tài)的 slave 是不健康的:
  • 主觀下線的 slave
  • 大于等于5秒沒(méi)有回復(fù)過(guò) sentinel 節(jié)點(diǎn) ping 響應(yīng)的 slave
  • 與 master 失聯(lián)超過(guò)down-after-milliseconds * 10秒的 slave
  1. 對(duì)健康的 slave 進(jìn)行排序
  • 選擇 priority(從節(jié)點(diǎn)優(yōu)先級(jí)戚哎,可配置,默認(rèn)100)最低的從節(jié)點(diǎn)嫂用,如果有優(yōu)先級(jí)相同的節(jié)點(diǎn)建瘫,進(jìn)行下一步。注意如果這個(gè)值配置為0尸折,則代表禁止該節(jié)點(diǎn)成為 master。
  • 選擇復(fù)制偏移量最大的從節(jié)點(diǎn)(復(fù)制的最完整)殷蛇,如果有復(fù)制偏移量相等的節(jié)點(diǎn)实夹,進(jìn)行下一步。
  • 選擇 runid 最小的從節(jié)點(diǎn)粒梦。

然后就是 leader 進(jìn)行故障轉(zhuǎn)移的過(guò)程了:

  • leader 對(duì)選擇出來(lái)的要成為 new master 的 slave 執(zhí)行 slaveof no one 命令讓其成為 new master亮航。
  • leader 會(huì)向剩余的 slave 發(fā)送命令,讓它們成為 new master 的 slave匀们。
  • leader 會(huì)將 old master 更新為 slave點(diǎn)缴淋,并保持著對(duì)其關(guān)注,當(dāng)其恢復(fù)后命令它去復(fù)制 new master泄朴。復(fù)制規(guī)則和parallel-syncs配置有關(guān)重抖。該配置指定了在執(zhí)行故障轉(zhuǎn)移時(shí),最多可以有多少個(gè) slave 同時(shí)對(duì) new master 進(jìn)行同步祖灰,這個(gè)數(shù)字越小钟沛,完成故障轉(zhuǎn)移所需的時(shí)間就越長(zhǎng)。 如果從服務(wù)器被設(shè)置為允許使用過(guò)期數(shù)據(jù)集(redis.conf 中slave-serve-stale-data配置) 局扶,那么你可能不希望所有 slave 都在同一時(shí)間向 new master 發(fā)送同步請(qǐng)求恨统,因?yàn)楸M管復(fù)制過(guò)程的絕大部分步驟都不會(huì)阻塞slave叁扫, 但 slave 在 load new master 發(fā)來(lái)的 RDB 文件時(shí), 仍然會(huì)造成其在一段時(shí)間內(nèi)不能處理請(qǐng)求畜埋。如果全部 slave 一起對(duì) new master 進(jìn)行同步莫绣, 那么就可能會(huì)造成所有 slave 在短時(shí)間內(nèi)全部不可用的情況出現(xiàn)。你可以通過(guò)將這個(gè)值設(shè)為 1 來(lái)保證故障轉(zhuǎn)移后最多只有一個(gè) slave 處于不可用狀態(tài)悠鞍。但這樣的話对室,全部 slave 的數(shù)據(jù)同步就是串行的,這樣就會(huì)增加故障轉(zhuǎn)移整個(gè)過(guò)程的時(shí)間狞玛。

(6) Sentinel 集群的 quorum 和 majority

  • quorum 是在 sentinel.conf中手動(dòng)配置的软驰,默認(rèn)為2
# sentinel monitor [master-name] [master-ip] [master-port] [quorum] 
sentinel monitor mymaster 127.0.0.1 6379 2

意味著,只有 大于等于 quorum 數(shù)量都認(rèn)為 master 主觀下線心肪,sentinel 集群才會(huì)認(rèn)為 master 客觀下線锭亏。

  • sentinel 集群執(zhí)行故障轉(zhuǎn)移時(shí)需要選舉 leader,此時(shí)涉及到 majority硬鞍,majority 代表 sentinel 集群中大部分 sentinel 節(jié)點(diǎn)的個(gè)數(shù)慧瘤,只有大于等于 max(quorum, majority) 個(gè)節(jié)點(diǎn)給某個(gè) sentinel 節(jié)點(diǎn)投票,才能確定該 sentinel 節(jié)點(diǎn)為 leader固该,majority 的計(jì)算方式為:num(sentinels) / 2 + 1锅减,比如:

2 個(gè)節(jié)點(diǎn)的 sentinel 集群的 majority為 2
3 個(gè)節(jié)點(diǎn)的 sentinel 集群的 majority為 2
4 個(gè)節(jié)點(diǎn)的 sentinel 集群的 majority為 3
5 個(gè)節(jié)點(diǎn)的 sentinel 集群的 majority為 3

所以 sentinel 集群的節(jié)點(diǎn)個(gè)數(shù)至少為3個(gè),當(dāng)節(jié)點(diǎn)數(shù)為2時(shí)伐坏,假如一個(gè) sentinel 節(jié)點(diǎn)宕機(jī)怔匣,那么剩余一個(gè)節(jié)點(diǎn)是無(wú)法讓自己成為 leader 的,因?yàn)?個(gè)節(jié)點(diǎn)的 sentinel 集群的 majority 是 2桦沉,此時(shí)沒(méi)有2個(gè)節(jié)點(diǎn)都給剩余的節(jié)點(diǎn)投票每瞒,也就無(wú)法選擇出 leader,從而無(wú)法進(jìn)行故障轉(zhuǎn)移纯露。

另外最好把 quorum 的值設(shè)置為 <= majority剿骨,否則即使 sentinel 集群剩余的節(jié)點(diǎn)滿足 majority 數(shù),但是有可能不能滿足 quorum 數(shù)埠褪,那還是無(wú)法選舉 leader浓利,也就不能進(jìn)行故障轉(zhuǎn)移。

(7) configuration epoch

configuration epoch 是當(dāng)前 redis 主從架構(gòu)的配置版本號(hào)钞速,無(wú)論是 sentinel 集群選舉 leader 還是進(jìn)行故障轉(zhuǎn)移的時(shí)候贷掖,要求各 sentinel 節(jié)點(diǎn)得到的 configuration epoch 都是相同的,sentinel is-master-down-by-addr 命令中就必須有當(dāng)前配置版本號(hào)這個(gè)參數(shù)渴语,在選舉 leader 過(guò)程中羽资,如果本次選舉失敗,那么進(jìn)行下一次選舉遵班,就會(huì)更新配置版本號(hào)屠升,也就是說(shuō)潮改,每次選舉都對(duì)應(yīng)一個(gè)新的 configuration epoch,在故障轉(zhuǎn)移的過(guò)程中腹暖,也要求各個(gè) sentinel 節(jié)點(diǎn)使用相同的 configuration epoch汇在。

在故障轉(zhuǎn)移成功之后,sentinel leader 會(huì)更新生成最新的 master 配置脏答,configuration epoch 也會(huì)更新糕殉,然后同步給其他的 sentinel 節(jié)點(diǎn),這樣保證 sentinel 集群中保存的 master <-> slave 配置都是最新的殖告,當(dāng) client 請(qǐng)求的時(shí)候就會(huì)拿到最新的配置信息阿蝶。

(8) Redis Sentinel 可能出現(xiàn)的問(wèn)題以及解決辦法

  1. redis sentinel 無(wú)法保證數(shù)據(jù)完全不丟失,原因有兩個(gè):
    (1) 異步復(fù)制導(dǎo)致的數(shù)據(jù)丟失
    因?yàn)?master -> slave 的復(fù)制是異步的黄绩,所以可能有部分?jǐn)?shù)據(jù)還沒(méi)復(fù)制到 slave羡洁,master 就宕機(jī)了,此時(shí)這部分?jǐn)?shù)據(jù)就丟失了爽丹。
    (2) redis 服務(wù)腦裂導(dǎo)致的數(shù)據(jù)丟失
    腦裂筑煮,也就是說(shuō),某個(gè) master 所在機(jī)器突然網(wǎng)絡(luò)故障粤蝎,跟其他 slave 機(jī)器不能連接真仲,但是實(shí)際上 master 還運(yùn)行著。此時(shí)哨兵可能就會(huì)認(rèn)為 master 宕機(jī)了初澎,然后開(kāi)啟選舉秸应,將其他 slave 切換成了master,這個(gè)時(shí)候碑宴,集群里就會(huì)有兩個(gè)master灸眼,也就是所謂的腦裂。此時(shí)雖然某個(gè) slave 被切換成了 master墓懂,但是 client 還沒(méi)來(lái)得及切換到新的master,還繼續(xù)寫(xiě)向舊 master 的數(shù)據(jù)就丟失了霉囚。因?yàn)榕f master 再次恢復(fù)的時(shí)候捕仔,會(huì)被作為一個(gè) slave 掛到新的 master 上去,自己的數(shù)據(jù)會(huì)清空盈罐,重新從新的 master 復(fù)制數(shù)據(jù)榜跌。

redis 提供了兩個(gè)配置參數(shù)可以盡量丟失少的數(shù)據(jù):

min-slaves-to-write 1
min-slaves-max-lag 10

第一個(gè)參數(shù)表示 master 必須至少有一個(gè) slave 在進(jìn)行正常復(fù)制,否則就拒絕寫(xiě)請(qǐng)求盅粪,此時(shí) master 喪失可用性钓葫。

何為正常復(fù)制,何為異常復(fù)制票顾?這個(gè)就是由第二個(gè)參數(shù)控制的础浮,它的單位是秒帆调,
表示如果 10s 沒(méi)有收到從節(jié)點(diǎn)的反饋,就意味著從節(jié)點(diǎn)同步不正常豆同。

這樣可以把 master 宕機(jī)期間的數(shù)據(jù)丟失降低到可控范圍內(nèi)番刊。

  1. redis-2.6 版本提供的是 redis sentinel v1版本,但是功能性和健壯性都有一些問(wèn)題影锈,如果想使用 redis sentinel的話芹务,建議使用2.8以上版本,也就是v2版本的 redis sentinel鸭廷。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末枣抱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子辆床,更是在濱河造成了極大的恐慌佳晶,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件佛吓,死亡現(xiàn)場(chǎng)離奇詭異宵晚,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)维雇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)淤刃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人吱型,你說(shuō)我怎么就攤上這事逸贾。” “怎么了津滞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵铝侵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我触徐,道長(zhǎng)咪鲜,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任撞鹉,我火速辦了婚禮疟丙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鸟雏。我一直安慰自己享郊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布孝鹊。 她就那樣靜靜地躺著炊琉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪又活。 梳的紋絲不亂的頭發(fā)上苔咪,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天锰悼,我揣著相機(jī)與錄音,去河邊找鬼悼泌。 笑死松捉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的馆里。 我是一名探鬼主播隘世,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鸠踪!你這毒婦竟也來(lái)了丙者?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤营密,失蹤者是張志新(化名)和其女友劉穎械媒,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體评汰,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡送粱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年后豫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了倍阐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仇箱。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖惨缆,靈堂內(nèi)的尸體忽然破棺而出糜值,到底是詐尸還是另有隱情,我是刑警寧澤坯墨,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布寂汇,位于F島的核電站,受9級(jí)特大地震影響捣染,放射性物質(zhì)發(fā)生泄漏骄瓣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一耍攘、第九天 我趴在偏房一處隱蔽的房頂上張望榕栏。 院中可真熱鬧,春花似錦少漆、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至嚷硫,卻和暖如春检访,著一層夾襖步出監(jiān)牢的瞬間始鱼,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工脆贵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留医清,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓卖氨,卻偏偏與公主長(zhǎng)得像会烙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子筒捺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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