<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Redis 主從復(fù)制、哨兵模式、集群

          共 12341字,需瀏覽 25分鐘

           ·

          2021-07-04 06:50

          公眾號(hào)關(guān)注“杰哥的IT之旅”,

          選擇“星標(biāo)”,重磅干貨,第一時(shí)間送達(dá)!



          1、單機(jī)模式

          持久化是最簡(jiǎn)單的高可用方法(有時(shí)甚至不被歸為高可用的手段),主要作用是數(shù)據(jù)備份,即將數(shù)據(jù)存儲(chǔ)在硬盤,保證數(shù)據(jù)不會(huì)因進(jìn)程退出而丟失。

          缺點(diǎn)

          • 單機(jī)故障,無法保證數(shù)據(jù)的安全

          • 讀寫操作無法負(fù)載均衡

          • 容量瓶頸,存儲(chǔ)能力受到限制

          2、主從復(fù)制

          復(fù)制是高可用 Redis 的基礎(chǔ),哨兵和集群都是在復(fù)制基礎(chǔ)上實(shí)現(xiàn)高可用的。復(fù)制主要實(shí)現(xiàn)了數(shù)據(jù)的多機(jī)備份(容災(zāi)備份),以及對(duì)于讀操作的負(fù)載均衡(寫操作仍然在主機(jī))和簡(jiǎn)單的故障恢復(fù)。

          • master:寫操作

          • slave:讀操作(負(fù)載均衡),不能寫

          配置

          公共配置(端口,文件保存路徑,根據(jù)環(huán)境配置)

          bind 0.0.0.0
          port 6000
          daemonize yes
          pidfile "/home/eric/redis-masterslave/redis6000/redis_6000.pid"
          logfile "/home/eric/redis-masterslave/redis6000/redis.log"
          dbfilename "dump.rdb"
          dir "/home/eric/redis-masterslave/redis6000"
          appendonly yes
          appendfilename "appendonly.aof"
          appendfsync everysec
          no-appendfsync-on-rewrite no
          auto-aof-rewrite-percentage 100
          auto-aof-rewrite-min-size 64mb

          配置主機(jī)地址與密碼(配從不配主

          • masterauth:主要是針對(duì) master 對(duì)應(yīng)的 slave 節(jié)點(diǎn)設(shè)置的,在 slave 節(jié)點(diǎn)數(shù)據(jù)同步的時(shí)候用到。

          • requirepass:對(duì)登錄權(quán)限做限制,redis 每個(gè)節(jié)點(diǎn)的 requirepass 可以是獨(dú)立、不同的。

          replicaof 127.0.0.1 6000
          masterauth 123456 # 如果主機(jī)設(shè)置密碼的話,需要填寫(主機(jī)使用 requirepass, 從機(jī)使用 masterauth

          查看節(jié)點(diǎn)信息

          127.0.0.1:6000info replication

          配置建議

          主機(jī)通常不配置 RDB 和 AOF 持久化

          save ""
          appendonly no

          工作流程

          建立連接

          • 設(shè)置 master 的地址和端口,發(fā)送 slaveof ip port 指令,master 會(huì)返回響應(yīng)客戶端,根據(jù)響應(yīng)信息保存 master 的 run id 和 ip port 信息(連接測(cè)試)

          • 根據(jù)保存的信息創(chuàng)建連接 master 的 socket

          • 周期性發(fā)送 ping,master 會(huì)相應(yīng) pong

          • 發(fā)送指令 auth password(身份驗(yàn)證),master 驗(yàn)證身份

          • 發(fā)送 slave 端口信息,master 保存 salve 端口號(hào)

          數(shù)據(jù)同步

          • slave 發(fā)送指令 psync2(psync2 run_id -1)

          • 主機(jī)返回當(dāng)前的 runid 和 offset 給 salve

          • salve 保存主機(jī)的相關(guān)信息

          • master 執(zhí)行 bgsave

          • 在第一個(gè) salve 連接時(shí),創(chuàng)建命令緩存區(qū)

          • 生產(chǎn) RDB 文件,通過 socket 發(fā)送給 slave

          • slave 接收 RDB 文件,清空數(shù)據(jù),執(zhí)行 RDB 文件恢復(fù)過程

          • 發(fā)送命令告知 RDB 恢復(fù)已經(jīng)完成(告知全量復(fù)制完成)

          • master 發(fā)送復(fù)制緩沖區(qū)信息

          • slave 接收信息,執(zhí)行重寫后恢復(fù)數(shù)據(jù)

          注意 master 會(huì)保存 slave 從我這里拿走了多少數(shù)據(jù),保存 slave 的偏移量

          全量復(fù)制消耗

          • bgsave 時(shí)間

          • RDB 文件網(wǎng)絡(luò)傳輸

          • 從節(jié)點(diǎn)請(qǐng)求數(shù)據(jù)時(shí)間

          • 從節(jié)點(diǎn)加載 RDB 的時(shí)間

          • 可能的 AOF 重寫時(shí)間

          # 查看 runid
          127.0.0.1:6001> info server
          # Server
          ...
          run_id:ac11dde108fa5288af0f7d72c6c0f20e4611157d
          ...

          # 查看 offset
          127.0.0.1:6002> info replication
          # Replication
          role:master
          connected_slaves:2
          slave0:ip=127.0.0.1,port=6000,state=online,offset=3482,lag=1
          slave1:ip=127.0.0.1,port=6001,state=online,offset=3482,lag=1
          master_repl_offset:3482
          ...

          命令傳播

          slave 心跳:replconf ack (offset)匯報(bào) slave 自己的 offset,獲取最新的數(shù)據(jù)指令

          • 命令傳播階段出現(xiàn)斷網(wǎng):

          1) 網(wǎng)絡(luò)閃斷、閃連:忽略
          2) 短時(shí)間斷網(wǎng):增量
          3) 長(zhǎng)時(shí)間斷網(wǎng):全量

          • 全量復(fù)制核心三個(gè)要素

          1) 服務(wù)器運(yùn)行ID

          • 用于服務(wù)器之間通信驗(yàn)證身份,master 首次連接 slave 時(shí),會(huì)將自己的 run id 發(fā)送給 slave,slave 保存此 ID

          • 主服務(wù)器積壓的命令緩沖區(qū)
            先進(jìn)先出隊(duì)列

          • 主服務(wù)器的復(fù)制偏移量
            用于比對(duì)偏移量,然后判斷出執(zhí)行全量還是增量

          切換主從命令

          將當(dāng)前服務(wù)器轉(zhuǎn)變?yōu)橹付ǚ?wù)器的從屬服務(wù)器

          slaveof 127.0.0.1 6000

          將從屬服務(wù)器用作新的主服務(wù)器

          slaveof no noe

          缺點(diǎn)

          • 存儲(chǔ)能力受到單機(jī)的限制

          • 缺陷是故障恢復(fù)無法自動(dòng)化

          • 寫操作無法負(fù)載均衡

          3、哨兵模式

          在 Redis 2.8 版本開始引入,在主從復(fù)制的基礎(chǔ)上,哨兵實(shí)現(xiàn)了自動(dòng)化的故障恢復(fù)。通俗的來說哨兵模式的出現(xiàn)時(shí)為了解決主從復(fù)制模式中需要人為操作的東西,變?yōu)樽詣?dòng)操作

          功能

          • 監(jiān)控(Monitoring):哨兵會(huì)不斷的檢查主節(jié)點(diǎn)和從節(jié)點(diǎn)是否正常工作

          • 自動(dòng)故障轉(zhuǎn)移(Automatic Failover):當(dāng)主節(jié)點(diǎn)不能正常工作時(shí),哨兵會(huì)開始自動(dòng)故障轉(zhuǎn)移操作,它會(huì)選擇失效的主節(jié)點(diǎn)里其中一個(gè)從節(jié)點(diǎn)升級(jí)為新的主節(jié)點(diǎn),并讓其他從節(jié)點(diǎn)改為復(fù)制新的主節(jié)點(diǎn)中的數(shù)據(jù)

          • 配置提供者(Configuration Provider):客戶端在初始化時(shí),通過連接哨兵來獲取當(dāng)前 Redis 服務(wù)的地址

          • 通知(Notification):哨兵可以將故障轉(zhuǎn)移的結(jié)果發(fā)送給客戶端

          其中,監(jiān)控和自動(dòng)故障轉(zhuǎn)移功能,使得哨兵可以及時(shí)發(fā)現(xiàn)主節(jié)點(diǎn)的故障并完成轉(zhuǎn)移,而配置提供者和通知功能,則需要在與客戶端交互中才能體現(xiàn)

          架構(gòu)

          • 哨兵節(jié)點(diǎn):哨兵系統(tǒng)由一個(gè)或多個(gè)哨兵節(jié)點(diǎn)組成,哨兵節(jié)點(diǎn)是特殊的 Redis 節(jié)點(diǎn),不存儲(chǔ)數(shù)據(jù)

          • 數(shù)據(jù)節(jié)點(diǎn):主節(jié)點(diǎn)和從節(jié)點(diǎn)都是數(shù)據(jù)節(jié)點(diǎn)

          配置

          配置哨兵

          復(fù)制 sentinel.conf 至目標(biāo)目錄下,并進(jìn)行修改

          bind 0.0.0.0
          port 8000
          daemonize yes
          pidfile /home/eric/redis-sentinel/redis8000/redis-sentinel-8000.pid
          logfile "/home/eric/redis-sentinel/redis8000/sentinel-8000.log"
          dir /home/eric/redis-sentinel/redis8000
          sentinel monitor mymaster 127.0.0.1 7000 2
          # sentinel auth-pass <master-name> <password>

          其中 sentinel monitor mymaster 127.0.0.1 7000 2 的含義是:該節(jié)點(diǎn)監(jiān)控 127.0.0.1 7000 這個(gè)主節(jié)點(diǎn),該主節(jié)點(diǎn)的名稱定義為 mymaster,最后的 2 的含義與主節(jié)點(diǎn)故障判定有關(guān),即至少需要 2 個(gè)哨兵同意(認(rèn)為該主機(jī)點(diǎn)已經(jīng)不能提供服務(wù)),才能判斷該主節(jié)點(diǎn)發(fā)生故障并進(jìn)行故障轉(zhuǎn)移。

          配置數(shù)據(jù)(主從)節(jié)點(diǎn)

          同主從配置

          啟動(dòng)

          啟動(dòng)數(shù)據(jù)(主從)節(jié)點(diǎn)

          哨兵系統(tǒng)的主從節(jié)點(diǎn)與普通的主從節(jié)點(diǎn)配置完全相同,并不需要做額外的處理

          replicaof <masterip> <masterport>

          啟動(dòng)哨兵

          redis-sentinel ./redis8000/sentinel.conf
          redis-sentinel ./redis8001/sentinel.conf
          redis-sentinel ./redis8002/sentinel.conf

          當(dāng)發(fā)送故障轉(zhuǎn)移的時(shí)候,哨兵會(huì)自己修改配置文件中的 sentinel monitor 配置

          客戶端(Jedis)訪問哨兵系統(tǒng)

          Set<String> set = new HashSet<>();
          set.add("127.0.0.1:8000");
          set.add("127.0.0.1:8001");
          set.add("127.0.0.1:8002");
          JedisSentinelPool jedisSentinelPool= new JedisSentinelPool("mymaster"set"pwd");
          Jedis jedis = jedisSentinelPool.getResource();
          jedis.set("key""value");

          原理

          相關(guān)概念

          • 主觀下線:在心跳檢測(cè)的定時(shí)任務(wù)中,如果其他節(jié)點(diǎn)超過一定的時(shí)間沒有響應(yīng),哨兵節(jié)點(diǎn)就會(huì)將其進(jìn)行主觀下線,顧名思義,主觀下線是一個(gè)哨兵節(jié)點(diǎn)“主觀的”判斷下線,與其對(duì)應(yīng)的是客觀下線

          • 客觀下線:哨兵節(jié)點(diǎn)在對(duì)主節(jié)點(diǎn)進(jìn)行主觀下線后,會(huì)通過 sentinel is-maste-down-by-addr 命令詢問其他哨兵節(jié)點(diǎn)該主節(jié)點(diǎn)的狀態(tài),如果判斷主節(jié)點(diǎn)下線的哨兵達(dá)到一定數(shù)量后,則對(duì)該主節(jié)點(diǎn)進(jìn)行客觀下線

          需要注意的是:客觀下線是主節(jié)點(diǎn)才有的概念,如果哨兵發(fā)現(xiàn)從節(jié)點(diǎn)故障,被哨兵主觀下線后,不會(huì)再有后續(xù)的客觀下線和故障轉(zhuǎn)移操作。

          定時(shí)任務(wù):每個(gè)哨兵節(jié)點(diǎn)維護(hù)了 3 個(gè)定時(shí)任務(wù),定時(shí)任務(wù)的功能分別如下:

          • 每 10 秒通過向該主節(jié)點(diǎn)發(fā)送 info 命令獲取最新的主從結(jié)構(gòu)
            發(fā)現(xiàn) slave 節(jié)點(diǎn)
            確定主從關(guān)系

          • 每 2 秒通過發(fā)布/訂閱功能獲取其他哨兵的信息

          • 每 1 秒通過向其他節(jié)點(diǎn)發(fā)送 ping 命令,進(jìn)行心跳檢測(cè),判斷是否下線(Monitor)

          選舉領(lǐng)導(dǎo)者哨兵節(jié)點(diǎn)

          當(dāng)主節(jié)點(diǎn)被判斷客戶下線后,各個(gè)哨兵會(huì)協(xié)商,選舉出一個(gè)領(lǐng)導(dǎo)者哨兵節(jié)點(diǎn),并由改領(lǐng)導(dǎo)者節(jié)點(diǎn)對(duì)其進(jìn)行故障轉(zhuǎn)移操作。

          監(jiān)視改主節(jié)點(diǎn)的哨兵都有可能成為領(lǐng)導(dǎo)者,選舉使用的算法是 Raft 算法,Raft 算法的思路是先到先得,即在一輪選舉中,哨兵 A 向哨兵 B 發(fā)送稱為領(lǐng)導(dǎo)者的申請(qǐng),如果哨兵 B 沒有同意過其他哨兵,則會(huì)同意哨兵 A 成為領(lǐng)導(dǎo)者,選舉的過程很快,通常,誰先完成客觀下線,一般就能成為領(lǐng)導(dǎo)者,成為領(lǐng)導(dǎo)者后,就可以開始進(jìn)行故障轉(zhuǎn)移,即選舉新的主節(jié)點(diǎn)

          選舉主節(jié)點(diǎn)原則

          1、首先過濾掉不健康的從節(jié)點(diǎn)(ping 不通,或延遲比較久)
          2、過濾掉響應(yīng)慢的從節(jié)點(diǎn)
          3、過濾掉與 master 斷開時(shí)間最久的從節(jié)點(diǎn)
          4、優(yōu)先原則

          • 優(yōu)先選擇優(yōu)先級(jí)最高(replica-priority)的從節(jié)點(diǎn)

          • 如果優(yōu)先級(jí)無法區(qū)分,則選擇復(fù)制偏移量最大的從節(jié)點(diǎn)(偏移量越大,表示與主機(jī)數(shù)據(jù)越接近)

          • 如果仍無法區(qū)分,則選擇 runid 最小的從節(jié)點(diǎn)

          實(shí)踐建議

          • 哨兵節(jié)點(diǎn)數(shù)量應(yīng)不止一個(gè),一方面增加哨兵節(jié)點(diǎn)的冗余,避免哨兵節(jié)點(diǎn)成為高可用的瓶頸,另一方面減少對(duì)客觀下線的誤判,此外哨兵節(jié)點(diǎn)通常放再不同的物理主機(jī)上

          • 哨兵節(jié)點(diǎn)數(shù)量最好是奇數(shù),以便于哨兵通過投票選出“領(lǐng)導(dǎo)者”以及對(duì)客觀下線的“決策”

          • 各個(gè)哨兵節(jié)點(diǎn)配置應(yīng)保持一致,包括硬件、網(wǎng)絡(luò)等參數(shù),此外應(yīng)保證時(shí)間的準(zhǔn)確性

          缺點(diǎn)

          • 存儲(chǔ)能力受到單機(jī)的限制

          • 寫操作無法負(fù)載均衡

          4、Redis Cluster 高可用集群

          通過集群,Redis 解決了寫操作無法負(fù)載均衡,以及存儲(chǔ)能力受到單機(jī)限制的問題,實(shí)現(xiàn)了較為完善的高可用方案

          Redis Cluster 集群是一個(gè)由多個(gè)主從節(jié)點(diǎn)群組成的分布式服務(wù)器群(至少要有 3 個(gè)主節(jié)點(diǎn)),它具有復(fù)制、高可用和分片特性。Redis Custer 集群不需要 sentinel 哨兵也能完成節(jié)點(diǎn)移除和故障轉(zhuǎn)移的功能。需要將每個(gè)節(jié)點(diǎn)設(shè)置成集群模式,這種集群模式?jīng)]有中心節(jié)點(diǎn),可水平擴(kuò)展,據(jù)官方文檔稱可以線性擴(kuò)展到 1000 節(jié)點(diǎn)。Redis Cluster 集群的性能和高可用性均優(yōu)于之前版本的哨兵模式,且集群配置非常簡(jiǎn)單

          集群搭建

          redis-cli --cluster help

          原生搭建

          1) 基本配置文件

          bind 0.0.0.0
          port 7000
          daemonize yes
          pidfile /home/eric/redis-cluster/redis7000/redis_7000.pid
          logfile "/home/eric/redis-cluster/redis7000/redis_7000.log"
          dir /home/eric/redis-cluster/redis7000/
          masterauth 123456
          requirepass 123456

          2) 配置開啟 cluster 節(jié)點(diǎn)(集群配置)

          cluster-enabled yes(啟動(dòng)集群模式)
          cluster-config-file nodes-7000.conf(節(jié)點(diǎn)配置文件,這里 7000 最好和 port 對(duì)應(yīng)上)
          cluster-require-full-coverage no (主機(jī)宕機(jī)了,且沒有從機(jī)可進(jìn)行故障轉(zhuǎn)移,那么整個(gè)集群是否可以繼續(xù)使用)

          # 替換配置文件
          sed 's/7000/7001/g' redis7000/redis.conf > redis7001/redis.conf
          sed 's/7000/7002/g' redis7000/redis.conf > redis7002/redis.conf
          ...
          sed 's/7000/7005/g' redis7000/redis.conf > redis7005/redis.conf

          # 啟動(dòng)
          redis-server ./redis7000/redis.conf
          redis-server ./redis7001/redis.conf
          redis-server ./redis7002/redis.conf
          redis-server ./redis7003/redis.conf
          redis-server ./redis7004/redis.conf
          redis-server ./redis7005/redis.conf

          # 檢查進(jìn)程啟動(dòng)情況
          ps -ef | grep redis
          eric  252  1  0 13:32 ?  00:00:00 redis-server 0.0.0.0:7000 [cluster]
          eric  257  1  0 13:32 ?  00:00:00 redis-server 0.0.0.0:7001 [cluster]
          eric  262  1  0 13:32 ?  00:00:00 redis-server 0.0.0.0:7002 [cluster]
          eric  267  1  0 13:32 ?  00:00:00 redis-server 0.0.0.0:7003 [cluster]
          eric  272  1  0 13:32 ?  00:00:00 redis-server 0.0.0.0:7004 [cluster]
          eric  277  1  0 13:32 ?  00:00:00 redis-server 0.0.0.0:7005 [cluster]
          eric  282  7  0 13:32 tty1  00:00:00 grep --color=auto redis

          # 測(cè)試連接
          redis-cli -h 127.0.0.1 -p 7000 -a 123456
          Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
          127.0.0.1:7000> set k1 v1
          (error) CLUSTERDOWN Hash slot not served // 沒有分配槽位,所以不能添加數(shù)據(jù)
          127.0.0.1:7000> cluster nodes
          7b777e4abce4e3427dd9a7a42721e46bdc42af88 :7000@17000 myself,master - 0 0 0 connected

          3) meet

          讓所有的集群相互認(rèn)識(shí)(通訊)

          cluster meet ip port
          cluster meet 127.0.0.1 7001
          cluster meet 127.0.0.1 7002

          4) 指派槽

          查看 crc16 算法算出 key 的槽位命令 cluster keyslot key

          cluster keyslot key
          16384/3  0-5461  5462-10922  10923-16383
          16384/4 4096

          cluster addslots slot(槽位下標(biāo))

          5) 分配主從

          cluster replicate node-id

          使用 redis-cli 配置集群

          Redis Cluster 集群需要至少要三個(gè) master 節(jié)點(diǎn),我們這里搭建三個(gè) master 節(jié)點(diǎn),并且給每個(gè) master 再搭建一個(gè) slave 節(jié)點(diǎn),總共 6 個(gè) Redis 節(jié)點(diǎn)。

          由于節(jié)點(diǎn)數(shù)較多,這里采用在一臺(tái)機(jī)器上創(chuàng)建 6 個(gè) Redis 實(shí)例,并將這 6 個(gè) Redis 實(shí)例配置成集群模式,所以這里搭建的是偽集群模式,當(dāng)然真正的分布式集群的配置方法幾乎一樣

          查看集群命令:

          redis-cli --cluster help

          1、分配主機(jī)

          create host1:port1 … hostN:portN --cluster-replicas

          redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1 -a 123456

          其中--cluster-replicas 1 表示 6 個(gè)節(jié)點(diǎn)按 1:1 分配,那么就是 3 個(gè) master 節(jié)點(diǎn),3 個(gè) slave 節(jié)點(diǎn),如果 --cluster-replicas 2 則 6 個(gè)節(jié)點(diǎn)表示按照 1:2 分配,那么就會(huì)使 2 個(gè) master 節(jié)點(diǎn),4 個(gè) slave 節(jié)點(diǎn),如果這樣依賴,則不滿足最少 3 個(gè) master 節(jié)點(diǎn),就會(huì)失敗

          主節(jié)點(diǎn):取最前面的

          從節(jié)點(diǎn):依次取后面的,做為主節(jié)點(diǎn)的從節(jié)點(diǎn),隨機(jī)分配

          槽位:根據(jù)主機(jī)數(shù)量,平均分配

          查看節(jié)點(diǎn)狀態(tài)

          redis-cli -h 127.0.0.1 -p 7000 -a 123456 cluster nodes

          Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
          7fd64ce350df005c963ab355e7e5551b00c6dc7e 127.0.0.1:7002@17002 master - 0 1599406449000 2 connected 5461-10922
          fe9183edd29a1c1c9a34eccc1b638f46a1c59aab 127.0.0.1:7005@17005 slave 87e7956a0513ea3da005c78224d728e3cd77f609 0 1599406448000 3 connected
          87e7956a0513ea3da005c78224d728e3cd77f609 127.0.0.1:7003@17003 master - 0 1599406450945 3 connected 10923-16383
          4f9d051cb178f5078df51eb6e52f1be3ae30a2d2 127.0.0.1:7001@17001 myself,master - 0 1599406449000 1 connected 0-5460
          43d57aff953c58a223a528c689ec6a397eb85481 127.0.0.1:7006@17006 slave 4f9d051cb178f5078df51eb6e52f1be3ae30a2d2 0 1599406449938 1 connected
          3f468212653a046626e2869aeff46ee9bcb61c4a 127.0.0.1:7004@17004 slave 7fd64ce350df005c963ab355e7e5551b00c6dc7e 0 1599406451954 2 connected

          以集群方式登錄

          -C 代表以集群方式登錄,寫值成功后會(huì)自動(dòng)跳轉(zhuǎn)到所屬主機(jī),否則就是以正常方式登錄,當(dāng)寫數(shù)據(jù)時(shí),可能會(huì)提示 hash 計(jì)算的槽位,并不屬于當(dāng)前主機(jī)

          redis-cli -h 127.0.0.1 -p 7000 -a 123456 -c

          127.0.0.1:7000set k1 v1
          -Redirected to slot [12706] located at 127.0.0.1:7002
          OK
          127.0.0.1:7002keys *
          1) "k1"

          擴(kuò)容和縮容

          啟動(dòng)需要加入集群的節(jié)點(diǎn)

          redis-server ./redis7006/redis.conf
          redis-server ./redis7007/redis.conf

          添加節(jié)點(diǎn)

          add-node new_host:new_port existing_host:existing_port --cluster-slave --cluster-master-id

          添加 master 節(jié)點(diǎn)

          redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000 -a 123456

          添加 slave 節(jié)點(diǎn)

          redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7000 --cluster-slave --cluster-master-id masterID -a 123456

          分配槽位

          reshard host:port --cluster-from--cluster-to--cluster-slots--cluster-yes --cluster-timeout--cluster-pipeline--cluster-replace

          利用導(dǎo)航模式分配,根據(jù)提示一步一步完成

          要分配的槽位數(shù) -> 接收槽位的 node id -> 分配策略(all / 指定要分出槽位的 node id)-> done -> yes

          all:所有節(jié)點(diǎn)平均分配

          輸入要分配的 node id -> 繼續(xù)輸入要分配的 node id -> … -> done

          redis-cli --cluster reshard 127.0.0.1:7000 -a 123456

          刪除節(jié)點(diǎn)

          1、先對(duì)槽位進(jìn)行縮容

          redis-cli --cluster reshard 127.0.0.1:7000 
          --cluster-from 要遷移的節(jié)點(diǎn)ID --cluster-to 要接收的節(jié)點(diǎn)ID --cluster-slots 要遷出的槽位數(shù)量

          再進(jìn)行刪除

          刪除的時(shí)候,通常都是先刪除從節(jié)點(diǎn),然后再刪除主節(jié)點(diǎn),否則會(huì)進(jìn)行故障轉(zhuǎn)移,發(fā)生不必要的資源浪費(fèi)

          redis-cli --cluster del-node 127.0.0.1:7000 要?jiǎng)h除的節(jié)點(diǎn)ID -a 123456

          source: https://www.yuque.com/nashihuakai/qlwgtg/zk5qz7

          公眾號(hào)后臺(tái)回復(fù)「搜索」即可搜索你所需要的文章;
          公眾號(hào)后臺(tái)回復(fù)「wx」添加杰哥微信即可加入讀者交流群;

          Redis 相關(guān)文章推薦:

          Redis是什么?看這一篇就夠了!

          學(xué) Redis,至少要看看這篇!7000 字小結(jié)

          史上最全 Redis 總結(jié),你想知道的都在這里啦!

          大廠面試!我和面試官之間關(guān)于Redis的一場(chǎng)對(duì)弈!

          這 40 道 Redis 面試題讓你不再慌(附答案)

          Redis 性能監(jiān)控指標(biāo)匯總

          推薦幾款 Redis 可視化工具

          Redis 使用的 10 個(gè)小技巧!

          杰哥的另一個(gè)公眾號(hào),主要分享關(guān)于個(gè)人成長(zhǎng)經(jīng)歷的那點(diǎn)事,歡迎您的關(guān)注。

          瀏覽 60
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产这里只有精品 | 香蕉网-大香蕉网 | 韩日精品在线观看 | 日韩美女被操 | 五月天淫淫网 |