《Redis开发与运维》学习第十章
第十章 Redis Cluster集群
什么叫集群??
集群(cluster)技術(shù)是一種較新的技術(shù),通過(guò)集群技術(shù),可以在付出較低成本的情況下獲得在性能、可靠性、靈活性方面的相對(duì)較高的收益,其任務(wù)調(diào)度則是集群系統(tǒng)中的核心技術(shù)。
集群是一組相互獨(dú)立的、通過(guò)高速網(wǎng)絡(luò)互聯(lián)的計(jì)算機(jī),它們構(gòu)成了一個(gè)組,并以單一系統(tǒng)的模式加以管理。一個(gè)客戶(hù)與集群相互作用時(shí),集群像是一個(gè)獨(dú)立的服務(wù)器。集群配置是用于提高可用性和可縮放性。--------百度百科
Redis Cluster是把這種集群技術(shù)運(yùn)用到Redis數(shù)據(jù)庫(kù)中。
這一章主要講解Redis Cluster的數(shù)據(jù)分布、節(jié)點(diǎn)通信、集群伸縮、請(qǐng)求路由、故障轉(zhuǎn)移、集群運(yùn)維等幾個(gè)方面來(lái)介紹。
10.1 數(shù)據(jù)分布
10.1.1 數(shù)據(jù)分布理論
分布式數(shù)據(jù)庫(kù)首先要解決的是如何把整個(gè)數(shù)據(jù)集按照分區(qū)規(guī)則映射到多個(gè)節(jié)點(diǎn)的問(wèn)題。即把數(shù)據(jù)集劃分到多個(gè)節(jié)點(diǎn)上,每個(gè)節(jié)點(diǎn)負(fù)責(zé)整體數(shù)據(jù)的一個(gè)子集。
這里需要重點(diǎn)關(guān)注的是數(shù)據(jù)分區(qū)規(guī)則。
常見(jiàn)的數(shù)據(jù)分區(qū)規(guī)則有哈希分區(qū)和順序分區(qū),如下表所示:
Redis Cluster采用的是哈希分區(qū)規(guī)則,接下來(lái)介紹常見(jiàn)的哈希分區(qū)規(guī)則;
1 節(jié)點(diǎn)取余規(guī)則
實(shí)現(xiàn)方案是:使用特定的數(shù)據(jù),如Redis的鍵或用戶(hù)ID,再根據(jù)節(jié)點(diǎn)數(shù)量N使用公式:hash(key)%N計(jì)算出哈希值,用來(lái)決定映射到哪一個(gè)節(jié)點(diǎn)上。這方案實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單,但是它存在一個(gè)問(wèn)題:當(dāng)節(jié)點(diǎn)數(shù)量變化時(shí),數(shù)據(jù)節(jié)點(diǎn)映射關(guān)系需要重新計(jì)算,這樣會(huì)導(dǎo)致數(shù)據(jù)的重新紅轉(zhuǎn)移。
2 一致性哈希分區(qū)
實(shí)現(xiàn)思路:為系統(tǒng)中的每一個(gè)節(jié)點(diǎn)分配一個(gè)token,范圍在0~2的32次方,這些token構(gòu)成一個(gè)哈希環(huán)。數(shù)據(jù)讀寫(xiě)執(zhí)行節(jié)點(diǎn)查找操作時(shí),先根據(jù)key計(jì)算hash值,然后順時(shí)針找到第一個(gè)大于等于該哈希值的token節(jié)點(diǎn),這種方式最帶的優(yōu)點(diǎn)是插入刪除節(jié)點(diǎn)時(shí)只影響哈希環(huán)中相鄰的節(jié)點(diǎn) 。但是這種仍然存在很多問(wèn)題。因此引入了虛擬槽技術(shù)對(duì)這種方式進(jìn)行改進(jìn)。
如下圖所示:
3 虛擬槽技術(shù)(Redis Cluster采用的集群分區(qū)方案)
虛擬槽分區(qū)巧妙的使用了哈希空間 ,使用分散度較好的哈希函數(shù)把所有的數(shù)據(jù)映射到一個(gè)固定范圍的整數(shù)集合中,整數(shù)定義為槽(slot).
這個(gè)范圍一般遠(yuǎn)大于節(jié)點(diǎn)數(shù)目,比如Redis Cluster的槽范圍是0~16383.
槽是集群內(nèi)數(shù)據(jù)管理和遷移的單位。采用大范圍的槽主要是為了方便數(shù)據(jù)拆分和集群擴(kuò)展。
10.1.2 數(shù)據(jù)分區(qū)
Redis Cluster采用虛擬槽技術(shù)分區(qū),所有的鍵根據(jù)哈希函數(shù)映射到0~16383整數(shù)槽內(nèi),計(jì)算公式:slot=CRC16(key)&16383。每一個(gè)節(jié)點(diǎn)負(fù)責(zé)維護(hù)一部分槽以及槽所映射的鍵值數(shù)據(jù)。
如圖示:
10.2 搭建集群
三個(gè)步驟:
1)準(zhǔn)備節(jié)點(diǎn)
2)節(jié)點(diǎn)握手
3) 分配槽
10.2.1 準(zhǔn)備節(jié)點(diǎn)
Redis集群一般有多個(gè)節(jié)點(diǎn)組成,節(jié)點(diǎn)數(shù)量至少為6個(gè)才能保證組成完整高可用的集群。
每個(gè)節(jié)點(diǎn)需要開(kāi)啟配置cluster-enabled yes.,讓redis運(yùn)行在集群模式下。集群相關(guān)配置如下:
節(jié)點(diǎn)啟動(dòng)過(guò)程如下:
10.2.2 節(jié)點(diǎn)握手
節(jié)點(diǎn)握手是指一批運(yùn)行在集群模式下的節(jié)點(diǎn)通過(guò)Gossip協(xié)議彼此通信,達(dá)到感知對(duì)方的過(guò)程。
圖示:
命令cluster meet 127.0.0.1 6380讓節(jié)點(diǎn)6379和6380節(jié)點(diǎn)進(jìn)行握手通信。cluster meet 是一個(gè)異步命令,執(zhí)行完后立刻返回。
6379和6380兩個(gè)節(jié)點(diǎn)通過(guò)meet命令建立通信后的集群結(jié)構(gòu)如圖10-9.
工作流程如下:
對(duì)節(jié)點(diǎn)6379和6380執(zhí)行cluster nodes命令,可以看到他們已經(jīng)感受道對(duì)方的存在:
我們只需在集群內(nèi)任意節(jié)點(diǎn)上執(zhí)行cluster meet命令加入新節(jié)點(diǎn),握手狀態(tài)會(huì)通過(guò)消息在集群內(nèi)傳播,這樣其他節(jié)點(diǎn)會(huì)自動(dòng)發(fā)現(xiàn)新節(jié)點(diǎn)并發(fā)起握手流程。最后執(zhí)行cluster nodes命令確認(rèn)6個(gè)節(jié)點(diǎn)都彼此感知并組成集群:
通過(guò)cluster info命令可以獲取集群當(dāng)前狀態(tài):
從輸出內(nèi)容上看出:
被分配的槽cluster_slots_assigned是0 ,因?yàn)槟壳八械牟蹧](méi)有分配到節(jié)點(diǎn),因此集群無(wú)法發(fā)完成槽到節(jié)點(diǎn)的映射。只有當(dāng)16384個(gè)槽全部分配給節(jié)點(diǎn)后,集群才進(jìn)入在線狀態(tài)。
10.2.3 分配槽
Redis集群把所有的數(shù)據(jù)映射到16384個(gè)槽中。
每個(gè)key會(huì)映射為一個(gè)固定的槽,只有當(dāng)節(jié)點(diǎn)分配了槽,才會(huì)相應(yīng)和這些槽相關(guān)的鍵命令。
通過(guò)cluster addslots為節(jié)點(diǎn)分配槽。
這里利用bash特性批量設(shè)置槽slots :
把16384個(gè)slot個(gè)槽平均分配給6379 6380 6381三個(gè)節(jié)點(diǎn)。
執(zhí)行cluster info查看集群狀態(tài):
作為一個(gè)完整的集群,每個(gè)負(fù)責(zé)處理槽的節(jié)點(diǎn)應(yīng)該具有從節(jié)點(diǎn),保證它出現(xiàn)故障時(shí)可以自動(dòng)進(jìn)行故障轉(zhuǎn)移。
集群模式下,Redis節(jié)點(diǎn)角色分為主節(jié)點(diǎn)和從節(jié)點(diǎn)。
首次啟動(dòng)的節(jié)點(diǎn)和被分配的節(jié)點(diǎn)都是主節(jié)點(diǎn),從節(jié)點(diǎn)負(fù)責(zé)復(fù)制主節(jié)點(diǎn)槽信息和相關(guān)的數(shù)據(jù)。
使用cluster replicate {nodeId}讓一個(gè)節(jié)點(diǎn)成為從節(jié)點(diǎn)。這個(gè)命令必須在對(duì)應(yīng)的從節(jié)點(diǎn)上執(zhí)行,nodeId是要復(fù)制的主節(jié)點(diǎn)的節(jié)點(diǎn)ID :
復(fù)制完成后,整個(gè)集群結(jié)構(gòu)如下:
如上,我們是依照Redis協(xié)議手動(dòng)搭建一個(gè)集群。該集群由6個(gè)節(jié)點(diǎn)組成,3個(gè)主節(jié)點(diǎn)負(fù)責(zé)處理槽和相關(guān)數(shù)據(jù),3個(gè)從節(jié)點(diǎn)負(fù)責(zé)故障轉(zhuǎn)移。
手動(dòng)集群比較繁瑣,Redis官方提供了redis-trib.rb工具方便我們快速搭建集群。
10.2.4 介紹用redis-trib.rb工具搭建集群
redis-trib.rb是一個(gè)采用Ruby實(shí)現(xiàn)的Redis集群管理工具。Ruby是一個(gè)依賴(lài)環(huán)境。
主要是介紹這個(gè)工具,不詳細(xì)展開(kāi)啦,給出課本上的一些命令。
1 Ruby環(huán)境準(zhǔn)備
2 準(zhǔn)備節(jié)點(diǎn)
3 創(chuàng)建集群
4 集群完整性檢查
10.3 節(jié)點(diǎn)通信
10.3.1 通信流程
分布式存儲(chǔ)中需要提供維護(hù)節(jié)點(diǎn)元數(shù)據(jù)信息的機(jī)制。所謂元數(shù)據(jù)是指:節(jié)點(diǎn)負(fù)責(zé)哪些數(shù)據(jù),是否出現(xiàn)故障等狀態(tài)信心。
常見(jiàn)的元數(shù)據(jù)維護(hù)方式分為:集中式和P2P方式。 person to person 個(gè)人對(duì)個(gè)人
Redis集群采用P2P的Gossip(流言)協(xié)議:節(jié)點(diǎn)彼此之間不斷的通信交換信息,一段時(shí)間后所有的節(jié)點(diǎn)都會(huì)知道集群完整的信息,這種方式類(lèi)似于流言傳播。原理如圖所示:
通信過(guò)程如下圖所示:
10.3.2 Gossip 消息
Gossip 消息的主要職責(zé)是信息交換。信息交換的載體就是節(jié)點(diǎn)彼此發(fā)送的Gossip消息。
常見(jiàn)的Gossip消息可分為:ping 消息 pong 消息 meet消息 fail消息 .他們的通信模式如下:
所有的消息格式為:消息頭和消息體。
消息頭包含發(fā)送節(jié)點(diǎn)自身狀態(tài)數(shù)據(jù),接收節(jié)點(diǎn)根據(jù)消息頭就可以獲取到發(fā)送節(jié)點(diǎn)的相關(guān)數(shù)據(jù)。結(jié)構(gòu)如下:
10.3.3 節(jié)點(diǎn)選擇
Redis集群內(nèi)節(jié)點(diǎn)通信采用固定頻率,因此節(jié)點(diǎn)每次選擇需要通信的節(jié)點(diǎn)列表很重要。
Redis內(nèi)集群通信節(jié)點(diǎn)的選擇規(guī)則如下:
根據(jù)通信節(jié)點(diǎn)選擇的流程可以看出消息交換的成本主要體現(xiàn)在單位時(shí)間選擇發(fā)送消息的節(jié)點(diǎn)數(shù)量和每個(gè)消息攜帶的數(shù)據(jù)量。
1 選擇發(fā)送消息的節(jié)點(diǎn)數(shù)量
2 消息數(shù)據(jù)量
10.4 集群伸縮
10.4.1 伸縮原理
一般Redis集群可以實(shí)現(xiàn)對(duì)節(jié)點(diǎn)的靈活上線下線:其中原理可以抽象為槽和對(duì)應(yīng)數(shù)據(jù)在不同節(jié)點(diǎn)之間靈活移動(dòng)。
首先 看下之間搭建的集群槽和數(shù)據(jù)節(jié)點(diǎn)的對(duì)應(yīng)關(guān)系:
其中三個(gè)主節(jié)點(diǎn)分別維護(hù)自己負(fù)責(zé)的槽和對(duì)應(yīng)的數(shù)據(jù),如果希望加入一個(gè)節(jié)點(diǎn)實(shí)現(xiàn)集群擴(kuò)容時(shí),需要通過(guò)相關(guān)命令把一部分槽和數(shù)據(jù)遷移給新節(jié)點(diǎn),如圖所示:
圖中每個(gè)節(jié)點(diǎn)把一部分槽和數(shù)據(jù)遷移到新的節(jié)點(diǎn)6385,每個(gè)節(jié)點(diǎn)負(fù)責(zé)的槽和數(shù)據(jù)相比之前少了從而達(dá)到集群擴(kuò)容的目的。
可以簡(jiǎn)單的理解為:
集群伸縮=槽和數(shù)據(jù)在節(jié)點(diǎn)之間的移動(dòng)
10.4.2 擴(kuò)容集群
擴(kuò)容是分布式存儲(chǔ)最常見(jiàn)的需求。Redis集群擴(kuò)容操作可以分為如下幾個(gè)步驟:
1) 準(zhǔn)備新節(jié)點(diǎn)
2)加入集群
3)遷移槽和數(shù)據(jù)
1 準(zhǔn)備新節(jié)點(diǎn)
新節(jié)點(diǎn)建議與集群內(nèi)的節(jié)點(diǎn)配置保持一致
準(zhǔn)備號(hào)配置后啟動(dòng)兩個(gè)節(jié)點(diǎn)的命令如下:
2 加入集群
新節(jié)點(diǎn)依然采用cluster meet命令加入到現(xiàn)有集群中。在集群內(nèi)任意節(jié)點(diǎn)處執(zhí)行cluster meet讓6385和6386兩個(gè)節(jié)點(diǎn)加入 :
新節(jié)點(diǎn)加入集群前后的示意圖:
新節(jié)點(diǎn)剛開(kāi)始是主節(jié)點(diǎn)狀態(tài),但是由于沒(méi)有負(fù)責(zé)的槽,所以不能接受任何讀寫(xiě)操作,對(duì)于新加入的節(jié)點(diǎn)的 后續(xù)操作一般有兩種::
1 為他遷移槽和數(shù)據(jù)實(shí)現(xiàn)擴(kuò)容
2 作為其他主節(jié)點(diǎn)的從節(jié)點(diǎn)負(fù)責(zé)故障轉(zhuǎn)移
注意:
正式環(huán)境下建議使用redis-trib.rb add-node 命令加入新節(jié)點(diǎn)。一般不選擇手動(dòng)添加的方式,而是利用redis-trib這個(gè)工具。
3 遷移槽和數(shù)據(jù)
加入集群后需要為新節(jié)點(diǎn)遷移槽和相關(guān)相關(guān)數(shù)據(jù)。
遷移過(guò)程是集群擴(kuò)容中的最核心環(huán)節(jié)。
1) 槽遷移計(jì)劃
槽是Redis集群管理數(shù)據(jù)的基本單位,首先需要為新節(jié)點(diǎn)制定槽的遷移計(jì)劃,確定原有節(jié)點(diǎn)的哪些槽需要遷移新節(jié)點(diǎn)。
槽遷移計(jì)劃確定后開(kāi)始逐個(gè)把槽內(nèi)的數(shù)據(jù)從源節(jié)點(diǎn)遷移到目標(biāo)節(jié)點(diǎn)。
具體流程如圖所示
2 遷移數(shù)據(jù)
數(shù)據(jù)遷移過(guò)程是逐個(gè)槽進(jìn)行的:
流程說(shuō)明:
1) 對(duì)目標(biāo)節(jié)點(diǎn)發(fā)送cluster setslot {slot} importing {sourceNodeId}命令,讓目標(biāo)節(jié)點(diǎn)準(zhǔn)備導(dǎo)入槽的數(shù)據(jù)
2) 對(duì)源節(jié)點(diǎn)發(fā)送cluster setslot {slot} migrating {targetNodeId},讓源節(jié)點(diǎn)準(zhǔn)備遷出槽的數(shù)據(jù)
3) 源節(jié)點(diǎn)循環(huán)執(zhí)行cluster getkeysinslot {slot} {count}命令。獲取count個(gè)屬于{slot}的槽
4)在源節(jié)點(diǎn)上執(zhí)行migrate {targetIp} {targetPort} "" 0 {timeout} keys {keys...}命令,把獲取的鍵通過(guò)流水線機(jī)制(pipeline)批量遷移到目標(biāo)節(jié)點(diǎn)。
5)重復(fù)執(zhí)行步驟3 4 直到槽下所有的鍵值數(shù)據(jù)遷移到目標(biāo)節(jié)點(diǎn)
6) 向集群內(nèi)所有主節(jié)點(diǎn)發(fā)送cluster setslot {slot} node {targetNodeId}命令通知槽分配給目標(biāo)節(jié)點(diǎn)。
但是一般我們不手動(dòng)去遷移數(shù)據(jù),而是用redis-trib提供的槽重分片功能實(shí)現(xiàn)數(shù)據(jù)的遷移i。
具體操作是如何實(shí)現(xiàn)的可以查看課本。
10.4.3 收縮集群
收縮集群意味著縮減規(guī)模,需要從現(xiàn)有集群中安全下線部分節(jié)點(diǎn)。安全下線節(jié)點(diǎn)流程如下圖所示:
1 下線遷移槽
下線節(jié)點(diǎn)需要自己把自己負(fù)責(zé)的槽遷移到其他節(jié)點(diǎn),原理與之前節(jié)點(diǎn)擴(kuò)容的遷移槽過(guò)程一致。
2 忘記節(jié)點(diǎn)
由于集群內(nèi)的節(jié)點(diǎn)不斷的通過(guò)Gossip消息彼此交換節(jié)點(diǎn)狀態(tài),因此需要通過(guò)一種健壯的機(jī)制讓集群內(nèi)所有的節(jié)點(diǎn)忘記下線的節(jié)點(diǎn)。為此,Redis提供了cluster forget {downNodeId}實(shí)現(xiàn)該功能
線上操作不建議直接使用cluster forget執(zhí)行節(jié)點(diǎn)下線,建議使用redis-trib.rb del-node {host:port} {downNodeId}來(lái)執(zhí)行該操作。
10.5 請(qǐng)求路由
10.5.1 請(qǐng)求重定向
集群模式下,Redis接收任何鍵相關(guān)命令時(shí)首先計(jì)算鍵對(duì)應(yīng)的槽,再根據(jù)槽找出所對(duì)應(yīng)的節(jié)點(diǎn),如果節(jié)點(diǎn)是自身,則處理鍵命令;否則回復(fù)MOVED重定向錯(cuò)誤,通知客戶(hù)端請(qǐng)求正確的節(jié)點(diǎn),這個(gè)過(guò)程稱(chēng)為MOVED重定向;
如圖所示:
鍵命令執(zhí)行步驟主要分為兩步:計(jì)算槽,查找槽所對(duì)應(yīng)的節(jié)點(diǎn)。
1 計(jì)算槽
Redis首先需要計(jì)算鍵所對(duì)應(yīng)的槽。根據(jù)鍵的有效部分使用CRC16函數(shù)計(jì)算出散列值,再取對(duì)16383的余數(shù),使每個(gè)鍵都可以映射到0-16383槽范圍內(nèi)
2 槽節(jié)點(diǎn)查詢(xún)
Redis計(jì)算得到鍵對(duì)應(yīng)的槽后,需要查找槽所對(duì)應(yīng)的節(jié)點(diǎn)。
根據(jù)MOVED重定向機(jī)制,客戶(hù)端可以隨機(jī)連接集群內(nèi)任一Redis獲取鍵所在的節(jié)點(diǎn),這種客戶(hù)端叫Dummy客戶(hù)端,它的代碼簡(jiǎn)單,但是也存在一些問(wèn)題。因此通常情況下,集群客戶(hù)端都采用另一種實(shí)現(xiàn):Smart客戶(hù)端。
10.5.2 Smart客戶(hù)端
實(shí)現(xiàn)原理:
Smart客戶(hù)端通過(guò)在內(nèi)部維護(hù)slot->node的映射關(guān)系,本地就可以實(shí)現(xiàn)鍵到節(jié)點(diǎn)的查找,從而保證IO效率的最大化,而MOVED重定向機(jī)制負(fù)責(zé)協(xié)助Smart客戶(hù)端更新slot->node映射。
10.5.3 ASK重定向
10.6 故障轉(zhuǎn)移
Redis集群內(nèi)節(jié)點(diǎn)通過(guò)ping/pong 命令實(shí)現(xiàn)節(jié)點(diǎn)通信,消息不但可以傳播節(jié)點(diǎn)槽信息,還可以傳播其他狀態(tài)如:主從狀態(tài)、節(jié)點(diǎn)故障等。因此故障發(fā)現(xiàn)也是通過(guò)消息傳播機(jī)制實(shí)現(xiàn)的,主要環(huán)節(jié)如下:主觀下線pfail和客觀下線fail
再次理解主管下線和客觀下線:
主觀下線:指某個(gè)節(jié)點(diǎn)認(rèn)為另一個(gè)節(jié)點(diǎn)不可用,即下線狀態(tài),這個(gè)狀態(tài)并不是最終的故障判定,只能代表一個(gè)節(jié)點(diǎn) 的意見(jiàn),可能存在誤判的情況。
客觀下線:標(biāo)記一個(gè)節(jié)點(diǎn)真正的下線,集群內(nèi)多個(gè)節(jié)點(diǎn)都認(rèn)為i該節(jié)點(diǎn)不可用,從而達(dá)成共識(shí)的結(jié)果。如果是持有槽的主節(jié)點(diǎn)故障,需要為該節(jié)點(diǎn)執(zhí)行故障轉(zhuǎn)移。
Redis集群是比較健壯的故障發(fā)現(xiàn)機(jī)制,因此只有當(dāng)認(rèn)為客觀下線后,才認(rèn)為該節(jié)點(diǎn)是真正的下線。
10.6.2 故障恢復(fù)
故障節(jié)點(diǎn)變?yōu)榭陀^下線后,如果該節(jié)點(diǎn)是持有槽的主節(jié)點(diǎn),則需要在它的從節(jié)點(diǎn)中選出一個(gè)替換它,從而保證的集群的高可用。下線主節(jié)點(diǎn)的所有從節(jié)點(diǎn)承擔(dān)故障恢復(fù)的義務(wù),當(dāng)從節(jié)點(diǎn)通過(guò)內(nèi)部定時(shí)任務(wù)發(fā)現(xiàn)自身復(fù)制的主節(jié)點(diǎn)進(jìn)入客觀下線后時(shí),將觸發(fā)故障恢復(fù)流程。
故障恢復(fù)流程如下:
10.7 集群運(yùn)維
10.7.1 集群完整性
為了保證集群的完整性,默認(rèn)情況下當(dāng)前集群16384個(gè)槽任何一個(gè)沒(méi)有指派到節(jié)點(diǎn)時(shí)整個(gè)集群不可用。
10.7.2 帶寬消耗
集群內(nèi)Gossip消息通信本身會(huì)消耗帶寬,官方建議集群內(nèi)最大規(guī)模在1000以?xún)?nèi),也是出于對(duì)消息通信成本的考慮,因此單集群不適合部署超大規(guī)模的節(jié)點(diǎn)。
10.7.3 Pub/Sub 廣播問(wèn)題
Redis 提供訂閱發(fā)布功能,用于針對(duì)頻道實(shí)現(xiàn)消息的發(fā)布和訂閱,但是在集群模式下內(nèi)部實(shí)現(xiàn)對(duì)所有的publish命令都會(huì)向所有的節(jié)點(diǎn)進(jìn)行廣播,造成每條publish數(shù)據(jù)都會(huì)在集群內(nèi)所有節(jié)點(diǎn)傳播一次,加重帶寬負(fù)擔(dān)。
10.7.4 集群傾斜
集群傾斜指不同節(jié)點(diǎn)之間的數(shù)據(jù)量和請(qǐng)求量出現(xiàn)明顯差異,這種情況將加大負(fù)載均衡和開(kāi)發(fā)運(yùn)維的難度。
分為數(shù)據(jù)傾斜和請(qǐng)求傾斜
10.7.5 集群讀寫(xiě)分離
10.7.6 手動(dòng)故障轉(zhuǎn)移
10.7.7 數(shù)據(jù)遷移
總結(jié)
以上是生活随笔為你收集整理的《Redis开发与运维》学习第十章的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【微信小程序制作模板套用】小程序模板如何
- 下一篇: Redis开发与运维之第八章理解内存(四