成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 通過Docker部署Redis 6.x集群的方法

通過Docker部署Redis 6.x集群的方法

熱門標(biāo)簽:上海申請高400開頭的電話 怎么找到?jīng)]有地圖標(biāo)注的店 宿城區(qū)電話機(jī)器人找哪家 打400電話怎么辦理收費(fèi) 10086外包用的什么外呼系統(tǒng) 福州企業(yè)電銷機(jī)器人排名 麗江真人語音電話外呼系統(tǒng) 河南防封號電銷機(jī)器人是什么 400電話辦理介紹信

系統(tǒng)環(huán)境:

  • Redis 版本:6.0.8
  • Docker 版本:19.03.12
  • 系統(tǒng)版本:CoreOS 7.8
  • 內(nèi)核版本:5.8.5-1.el7.elrepo.x86_64

一、什么是 Redis 集群模式

在 Redis 3.0 版本后正式推出 Redis 集群模式,該模式是 Redis 的分布式的解決方案,是一個提供在多個 Redis 節(jié)點(diǎn)間共享數(shù)據(jù)的程序集,且 Redis 集群是去中心化的,它的每個 Master 節(jié)點(diǎn)都可以進(jìn)行讀寫數(shù)據(jù),每個節(jié)點(diǎn)都擁有平等的關(guān)系,每個節(jié)點(diǎn)都保持各自的數(shù)據(jù)和整個集群的狀態(tài)。

Redis 集群設(shè)計(jì)的主要目的是讓 Redis 數(shù)據(jù)存儲能夠線性擴(kuò)展,通過分區(qū)來提供一定程度的可用性,在實(shí)際環(huán)境中當(dāng)某個節(jié)點(diǎn)宕機(jī)或者不可達(dá)的情況下其可以繼續(xù)處理命令。但是,如果發(fā)生較大故障(例如,大多數(shù)主站不可用時(shí))時(shí)集群會停止運(yùn)行,即 redis 集群不能保證數(shù)據(jù)的強(qiáng)一致性。

二、為什么需要 Redis 集群

  • 高可用性: Redis 在集群模式下每個 Master 都是主從復(fù)制模式,其 Master 節(jié)點(diǎn)上的數(shù)據(jù)會實(shí)時(shí)同步到 Slave 節(jié)點(diǎn)上,當(dāng) Master 節(jié)點(diǎn)不可用時(shí),其對應(yīng)的 Slave 節(jié)點(diǎn)身份會更改為 Master 節(jié)點(diǎn),保證集群的可用性。
  • 數(shù)據(jù)橫向擴(kuò)展: Redis 是一個內(nèi)存數(shù)據(jù)庫,所有數(shù)據(jù)都存在內(nèi)存中,在單節(jié)點(diǎn)中所在服務(wù)器能給與的內(nèi)存是有一定限制。當(dāng)數(shù)據(jù)量達(dá)到一定程度后,內(nèi)存將不足以支撐這么多的數(shù)據(jù)存儲,這時(shí)候需要將數(shù)據(jù)進(jìn)行分片存儲,而 Redis 集群模式就是將數(shù)據(jù)分片存儲,非常方便橫向擴(kuò)展。

三、Redis 集群的數(shù)據(jù)分片

Redis 集群沒有使用一致性 Hash, 而是引入了”哈希槽”的概念。Redis 集群有 16384 個哈希槽,每個 key 通過 CRC16 校驗(yàn)后對 16384 取模來決定放置哪個槽,集群的每個節(jié)點(diǎn)負(fù)責(zé)一部分 hash 槽。

舉個例子,比如當(dāng)前集群有3個節(jié)點(diǎn),那么:

  • 節(jié)點(diǎn) A 包含 0 到 5460 號哈希槽;
  • 節(jié)點(diǎn) B 包含 5461 到 10922 號哈希槽;
  • 節(jié)點(diǎn) C 包含 10923 到 16383 號哈希槽;

這種結(jié)構(gòu)很容易”添加”或者”刪除”節(jié)點(diǎn). 比如如果我想新添加個節(jié)點(diǎn) D,我需要從節(jié)點(diǎn) A, B, C 中得部分槽轉(zhuǎn)移到節(jié)點(diǎn) D 上, 如果我想移除節(jié)點(diǎn) A,則需要將 A 中的槽移到 B 和 C 節(jié)點(diǎn)上,然后將沒有任何槽的 A 節(jié)點(diǎn)從集群中移除即可。由于從一個節(jié)點(diǎn)將哈希槽移動到另一個節(jié)點(diǎn)并不會停止服務(wù),所以無論添加刪除或者改變某個節(jié)點(diǎn)的哈希槽的數(shù)量都不會造成集群不可用的狀態(tài)。

Redis 支持多個 key 操作,只要這些 key 在一個單個命令中執(zhí)行(或者一個事務(wù),或者 Lua 腳本執(zhí)行),那么它們就屬于相同的 Hash 槽。你也可以用 hash tags 命令強(qiáng)制多個 key 都在相同的 hash 槽中。

四、Redis 集群的主從復(fù)制

集群中的主從模型

在 Redis 集群模式下,為了防止集群部分節(jié)點(diǎn)因宕機(jī)等情況造成不可用,故而 Redis 集群使用了主從復(fù)制模式。在該模式下要求 Redis 集群至少要存在六個節(jié)點(diǎn),其中三個節(jié)點(diǎn)為主節(jié)點(diǎn),能夠?qū)ν馓峁┳x寫。還有三個節(jié)點(diǎn)為從節(jié)點(diǎn),會同步其對應(yīng)的主節(jié)點(diǎn)的數(shù)據(jù)。當(dāng)某個主節(jié)點(diǎn)出現(xiàn)問題不可用時(shí),Redis 將通過選舉算法從主節(jié)點(diǎn)對應(yīng)的從節(jié)點(diǎn)中選擇一個節(jié)點(diǎn)(主節(jié)點(diǎn)存在多個從節(jié)點(diǎn)的情況下),將其更改為一個新的主節(jié)點(diǎn),且能夠?qū)ν馓峁┓?wù)。

例如,在存在 A,B,C 三個主節(jié)點(diǎn)和其對應(yīng)的 (A1、A2),(B1、B2),(C1、C2) 六個從節(jié)點(diǎn),共九個節(jié)點(diǎn)中,如果節(jié)點(diǎn) A 節(jié)點(diǎn)掛掉,那么其對應(yīng)的從節(jié)點(diǎn) A1、A2 節(jié)點(diǎn)將通過選舉算法,選擇其中一個節(jié)點(diǎn)提升為主節(jié)點(diǎn),以確保集群能夠正常服務(wù)。不過當(dāng) A1、A2 兩個從節(jié)點(diǎn)或者或者半數(shù)以上主節(jié)點(diǎn)不可用時(shí),那么集群也是不可用的。

在部署 Redis 集群模式時(shí),至少需要六個節(jié)點(diǎn)組成集群才能保證集群的可用性。

主從復(fù)制的相關(guān)概念

(1)、全量復(fù)制與增量復(fù)制

在 Redis 主從復(fù)制中,分為”全量復(fù)制”和”增量復(fù)制”兩種數(shù)據(jù)同步方式:

  • 全量復(fù)制: 用于初次復(fù)制或其它無法進(jìn)行部分復(fù)制的情況,將主節(jié)點(diǎn)中的所有數(shù)據(jù)都發(fā)送給從節(jié)點(diǎn)。當(dāng)數(shù)據(jù)量過大的時(shí)候,會造成很大的網(wǎng)絡(luò)開銷。
  • 增量復(fù)制: 用于處理在主從復(fù)制中因網(wǎng)絡(luò)閃退等原因造成數(shù)據(jù)丟失場景,當(dāng)從節(jié)點(diǎn)再次連上主節(jié)點(diǎn),如果條件允許,主節(jié)點(diǎn)會補(bǔ)發(fā)丟失數(shù)據(jù)給從節(jié)點(diǎn),因?yàn)檠a(bǔ)發(fā)的數(shù)據(jù)遠(yuǎn)遠(yuǎn)小于全量數(shù)據(jù),可以有效避免全量復(fù)制的過高開銷。但需要注意,如果網(wǎng)絡(luò)中斷時(shí)間過長,造成主節(jié)點(diǎn)沒有能夠完整地保存中斷期間執(zhí)行的寫命令,則無法進(jìn)行部分復(fù)制,仍使用全量復(fù)制。

(2)、記錄復(fù)制位置的偏移量

  • 參與復(fù)制的主從節(jié)點(diǎn)都會維護(hù)自身復(fù)制偏移量,主節(jié)點(diǎn)在處理完寫入命令操作后,會把命令的字節(jié)長度做累加記錄,可以使用 info replication 命令查詢 master_repl_offset 偏移量信息。
  • 從節(jié)點(diǎn)每秒鐘上報(bào)自身的復(fù)制偏移量給主節(jié)點(diǎn),因此主節(jié)點(diǎn)也會保存從節(jié)點(diǎn)的復(fù)制偏移量。
  • 從節(jié)點(diǎn)在接收到主節(jié)點(diǎn)發(fā)送的命令后,也會累加記錄自身的偏移量,可以使用 info replication 命令查詢 slave_repl_offset 偏移量信息。

(3)、復(fù)制積壓緩沖區(qū)

復(fù)制積壓緩沖區(qū)(backlog)是保存在主節(jié)點(diǎn)上的一個固定長度的隊(duì)列,默認(rèn)大小為 1MB,當(dāng)主節(jié)點(diǎn)有連接的從節(jié)點(diǎn)時(shí)被創(chuàng)建,這時(shí)主節(jié)點(diǎn)響應(yīng)寫命令時(shí),不但會把命令發(fā)給從節(jié)點(diǎn),還會寫入復(fù)制積壓緩沖區(qū),作為寫命令的備份。

除了存儲寫命令,復(fù)制積壓緩沖區(qū)中還存儲了其中的每個字節(jié)對應(yīng)的復(fù)制偏移量(offset) 。由于復(fù)制積壓緩沖區(qū)定長且先進(jìn)先出,所以它保存的是主節(jié)點(diǎn)最近執(zhí)行的寫命令,時(shí)間較早的寫命令會被擠出緩沖區(qū)。

(4)、節(jié)點(diǎn)運(yùn)行的 ID

  • 每個 Redis 節(jié)點(diǎn)啟動后都會動態(tài)分配一個 40 位的十六進(jìn)制字符串為運(yùn)行 ID。運(yùn)行 ID 的主要作用是來唯一識別 Redis 節(jié)點(diǎn),比如,從節(jié)點(diǎn)保存主節(jié)點(diǎn)的運(yùn)行 ID 識別自已正在復(fù)制是哪個主節(jié)點(diǎn)。如果只使用 IP + Port 的方式識別主節(jié)點(diǎn),那么主節(jié)點(diǎn)重啟變更了整體數(shù)據(jù)集(如替換 RDB/AOF 文件),從節(jié)點(diǎn)再基于偏移量復(fù)制數(shù)據(jù)將是不安全的,因此當(dāng)運(yùn)行 ID 變化后從節(jié)點(diǎn)將做全量復(fù)制??梢栽?info server 命令查看當(dāng)前節(jié)點(diǎn)的運(yùn)行 ID。
  • 需要注意的是 Redis 關(guān)閉再啟動,運(yùn)行的 ID 會隨之變化。

主從復(fù)制的執(zhí)行過程

(1)、psync 命令

從節(jié)點(diǎn)使用 psync 從主節(jié)點(diǎn)獲取 runid 與 offset。

主節(jié)點(diǎn)會根據(jù)自身情況返回響應(yīng)信息,可能是 FULLRESYNC runid offset 觸發(fā)全量復(fù)制,可能是 CONTINUE 觸發(fā)增量復(fù)制。

(2)、psync 觸發(fā)全量復(fù)制

從節(jié)點(diǎn)使用 psync 命令完成部分復(fù)制和全量復(fù)制功能:

當(dāng)從節(jié)點(diǎn)第一次連接主節(jié)點(diǎn)時(shí)候,執(zhí)行全量復(fù)制:

① Slave 節(jié)點(diǎn)發(fā)送 psync? - 1 命令,表示要求 Master 執(zhí)行數(shù)據(jù)同步;

② Master 檢測到?jīng)]有 offset ,是第一次執(zhí)行復(fù)制,執(zhí)行全量復(fù)制,就發(fā)送 FULLRESYNC {runid} {offset} 命令,將 runid 和 offset 發(fā)送到 slave 節(jié)點(diǎn)。

③ Slave 節(jié)點(diǎn)保存 Master 節(jié)點(diǎn)傳遞的 runid 與 offset 信息。

④ Master 節(jié)點(diǎn)執(zhí)行 bgsave 生成 RBD 快照文件,并使用緩沖區(qū)記錄從現(xiàn)在開始執(zhí)行的全部命令。

⑤ Master 節(jié)點(diǎn)發(fā)送 RBD 文件到 Slave 節(jié)點(diǎn)。

⑥ Master 節(jié)點(diǎn)發(fā)送 BUFFER 緩存區(qū)記錄的寫命令到 Slave 節(jié)點(diǎn)。

⑦ Slave 節(jié)點(diǎn)清空舊數(shù)據(jù)。

⑧ Slave 節(jié)點(diǎn)載入 Master 節(jié)點(diǎn)傳入的 RBD 文件。

(2)、psync 觸發(fā)增量復(fù)制

當(dāng)從節(jié)點(diǎn)與主節(jié)點(diǎn)發(fā)送中斷后,從節(jié)點(diǎn)會重新連接主節(jié)點(diǎn),這時(shí)會觸發(fā)增量復(fù)制,過程如下:

① Slave 節(jié)點(diǎn)使用 psync 發(fā)送 runid 和 offset 值。

② Master 節(jié)點(diǎn)驗(yàn)證 Slave 節(jié)點(diǎn)發(fā)送的 runid 是否和自己相同:

  • 不相同: 不相同則執(zhí)行全量復(fù)制;
  • 相同: 則還需要驗(yàn)證緩存區(qū)中是否存在對應(yīng)的 offset,如果不存在就執(zhí)行全量復(fù)制,否則執(zhí)行增量復(fù)制;

③ 滿足存在對應(yīng) offset 這個條件后,則驗(yàn)證緩存區(qū)中的 offset 值是否和 Slave 節(jié)點(diǎn)發(fā)送的 offset 相同:

  • 相同: 返回 offset 值相同,不進(jìn)行復(fù)制操作;
  • 不相同: 發(fā)送 CONTINUE offset 命令(注意:這里的 offset 是 Master 節(jié)點(diǎn)緩存區(qū)記錄的 offset 值,不是 Slave 節(jié)點(diǎn)傳遞的 offset 值);

④ Master 節(jié)點(diǎn)從復(fù)制緩存區(qū)拷貝數(shù)據(jù),從 Slave 節(jié)點(diǎn)發(fā)送的 offset 開始,到 Master 節(jié)點(diǎn)緩存區(qū)記錄的 offset 結(jié)束,將這個范圍內(nèi)的數(shù)據(jù)給 Slave 節(jié)點(diǎn)。

五、Redis 集群相關(guān)概念

Redis 集群中的一致性

Redis 在官方文檔中提及,其并不能保證數(shù)據(jù)的強(qiáng)一致性,即 Redis 集群在特定的條件下寫入的數(shù)據(jù)可能會丟失,主要原因是因?yàn)?Redis 集群使用了異步復(fù)制模式,其寫入的操作過程如下:

執(zhí)行順序如下:

① 客戶端向任意一臺主節(jié)點(diǎn)寫入一條命令;

② 主節(jié)點(diǎn)對向客戶端回復(fù)命令執(zhí)行的狀態(tài);

③ 主節(jié)點(diǎn)將寫操作命令傳遞給他的從節(jié)點(diǎn);

Redis 集群對性能和一致性之間做出權(quán)衡,設(shè)置主節(jié)點(diǎn)在接收到客戶端寫命令后再將執(zhí)行的命令發(fā)送到各個從節(jié)點(diǎn)進(jìn)行同步,這個過程是異步操作,且主節(jié)點(diǎn)不會等待從節(jié)點(diǎn)回復(fù)信息就立即回復(fù)客戶端命令的執(zhí)行狀態(tài)。這樣減少同步操作,可以很大提高系統(tǒng)的執(zhí)行速度,避免等待從節(jié)點(diǎn)回復(fù)消息這個過程成為系統(tǒng)性能的瓶頸。

然而,因?yàn)橹鞴?jié)點(diǎn)不等待從節(jié)點(diǎn)收到信息后進(jìn)行回復(fù),就將命令的執(zhí)行狀態(tài)回復(fù)給了客戶端,那么在節(jié)點(diǎn)出現(xiàn)問題時(shí)很可能導(dǎo)致出現(xiàn)數(shù)據(jù)丟失問題,比如客戶端向主節(jié)點(diǎn)發(fā)送一條命令,然后主節(jié)點(diǎn)將該命令異步發(fā)送到它的從節(jié)點(diǎn)進(jìn)行數(shù)據(jù)備份,然后立即回復(fù)客戶端命令的執(zhí)行狀態(tài)。如果在這個過程中,主節(jié)點(diǎn)出現(xiàn)問導(dǎo)致宕機(jī),且從節(jié)點(diǎn)在處理主節(jié)點(diǎn)發(fā)送過來的同步數(shù)據(jù)時(shí),也發(fā)生錯誤。這時(shí)正好趕上主節(jié)點(diǎn)宕機(jī)等不可用情況,那么從節(jié)點(diǎn)將轉(zhuǎn)換為新的主節(jié)點(diǎn),在之前主節(jié)點(diǎn)執(zhí)行的命令將丟失。

Redis 集群間通信機(jī)制

在 Redis 集群中,數(shù)據(jù)節(jié)點(diǎn)提供兩個 TCP 端口,在配置防火墻時(shí)需要同時(shí)開啟下面兩類端口:

  • 普通端口: 即客戶端訪問端口,如默認(rèn)的 6379;
  • 集群端口: 普通端口號加 10000,如 6379 的集群端口為 16379,用于集群節(jié)點(diǎn)之間的通訊;

集群的節(jié)點(diǎn)之間通訊采用 Gossip 協(xié)議,節(jié)點(diǎn)根據(jù)固定頻率(每秒10次)定時(shí)任務(wù)進(jìn)行判斷,當(dāng)集群狀態(tài)發(fā)生變化,如增刪節(jié)點(diǎn)、槽狀態(tài)變更時(shí),會通過節(jié)點(diǎn)間通訊同步集群狀態(tài),使集群收斂。集群間發(fā)送的 Gossip 消息有下面五種消息類型:

  • MEET: 在節(jié)點(diǎn)握手階段,對新加入的節(jié)點(diǎn)發(fā)送 meet 消息,請求新節(jié)點(diǎn)加入當(dāng)前集群,新節(jié)點(diǎn)收到消息會回復(fù) pong 消息;
  • PING: 節(jié)點(diǎn)之間互相發(fā)送 ping 消息,收到消息的會回復(fù) pong 消息。ping 消息內(nèi)容包含本節(jié)點(diǎn)和其他節(jié)點(diǎn)的狀態(tài)信息,以此達(dá)到狀態(tài)同步;
  • PONG: pong 消息包含自身的狀態(tài)數(shù)據(jù),在接收到 ping 或 meet 消息時(shí)會回復(fù) pong 消息,也會主動向集群廣播 pong 消息;
  • FAIL: 當(dāng)一個主節(jié)點(diǎn)判斷另一個主節(jié)點(diǎn)進(jìn)入 fail 狀態(tài)時(shí),會向集群廣播這個消息,接收到的節(jié)點(diǎn)會保存該消息并對該 fail 節(jié)點(diǎn)做狀態(tài)判斷;
  • PUBLISH: 當(dāng)節(jié)點(diǎn)收到 publish 命令時(shí),會先執(zhí)行命令,然后向集群廣播 publish 消息,接收到消息的節(jié)點(diǎn)也會執(zhí)行 publish 命令;

Redis 集群失敗狀態(tài)

在 Redis 集群模式下也不可能百分百保證集群可用性,當(dāng)發(fā)生不可預(yù)知的事件導(dǎo)致 Redis 集群將進(jìn)入失敗狀態(tài),在這種狀態(tài)下 Redis 集群將不能正常提供服務(wù)。其中進(jìn)入失敗狀態(tài)的條件主要為:

① 全部節(jié)點(diǎn)都宕機(jī),集群將進(jìn)入 fail 狀態(tài);

② 半數(shù)以上主節(jié)點(diǎn)不可用,集群將進(jìn)入 fail 狀態(tài);

③ 任意主節(jié)點(diǎn)掛掉,且該主節(jié)點(diǎn)沒有對應(yīng)的從節(jié)點(diǎn)或者從節(jié)點(diǎn)也全部掛掉,集群將進(jìn)入 fail 狀態(tài);

Redis 集群重新分片機(jī)制

Redis 集群重新分片(新增/移除節(jié)點(diǎn))機(jī)制:

新增節(jié)點(diǎn):別的節(jié)點(diǎn)上的槽分一些出來給新的節(jié)點(diǎn)

刪除節(jié)點(diǎn):刪除節(jié)點(diǎn)的槽分給別的節(jié)點(diǎn)

但這些操作是需要手動完成的,可以在不停止服務(wù)器的情況下執(zhí)行。

Redis 集群的不足

復(fù)制結(jié)構(gòu)只支持單層結(jié)構(gòu),不支持樹型結(jié)構(gòu)。

不支持多數(shù)據(jù)庫,只能使用 0 數(shù)據(jù)庫,執(zhí)行 select 0 命令;

鍵是數(shù)據(jù)分區(qū)的最小粒度,不能將一個很大的鍵值對映射到不同的節(jié)點(diǎn);

鍵事務(wù)支持有限,當(dāng)多個鍵分布在不同節(jié)點(diǎn)時(shí)無法使用事務(wù),同一節(jié)點(diǎn)才能支持事務(wù);

鍵的批量操作支持有限,比如 mset, mget 命令,如果多個鍵映射在不同的槽中,就不能正常使用這些命令了;

Redis 群集配置參數(shù)

我們即將創(chuàng)建一個示例集群部署。在繼續(xù)之前,讓我們介紹Redis Cluster在redis.conf文件中引入的配置參數(shù)。

cluster-config-file: 設(shè)置 Redis 集群配置信息及狀態(tài)的存儲位置,該文件由 Redis 集群生成,我們只能指定其存儲的位置。

cluster-node-timeout: 設(shè)置 Redis 群集節(jié)點(diǎn)的通信的超時(shí)時(shí)間;

cluster-migration-barrier: 主節(jié)點(diǎn)需要的最小從節(jié)點(diǎn)數(shù),只有達(dá)到這個數(shù),主節(jié)點(diǎn)失敗時(shí),它從節(jié)點(diǎn)才會進(jìn)行遷移。

cluster-enabled: 是否開啟 Redis 集群模式。

yes:啟用 Redis 群集;

no:不啟用集群模式;

cluster-require-full-coverage: 設(shè)置集群可用性。

yes:表示當(dāng)負(fù)責(zé)一個插槽的主庫下線,且沒有相應(yīng)的從庫進(jìn)行故障恢復(fù)時(shí),集群不可用,下面論證該情況。

no:表示當(dāng)負(fù)責(zé)一個插槽的主庫下線且沒有相應(yīng)的從庫進(jìn)行故障恢復(fù)時(shí),集群仍然可用,下面論證該情況。

cluster-slave-validity-factor:

0:則無論從節(jié)點(diǎn)與主節(jié)點(diǎn)失聯(lián)多久,從節(jié)點(diǎn)都會嘗試升級成主節(jié)點(diǎn)。

正數(shù):則 cluster-node-timeout * cluster-slave-validity-factor 得到的時(shí)間,是從節(jié)點(diǎn)與主節(jié)點(diǎn)失聯(lián)后,此從節(jié)點(diǎn)數(shù)據(jù)有效的最長時(shí)間,超過這個時(shí)間,從節(jié)點(diǎn)不會啟動故障遷移。假設(shè) cluster-node-timeout=5cluster-slave-validity-factor=10,則如果從節(jié)點(diǎn)跟主節(jié)點(diǎn)失聯(lián)超過50秒,此從節(jié)點(diǎn)不能成為主節(jié)點(diǎn)。

六、Docker 部署 Redis 集群

1、Redis 部署機(jī)器分配

這里對待部署的 Redis 集群的節(jié)點(diǎn)進(jìn)行分配,將其部署到不同的機(jī)器上,安排如下:

2、創(chuàng)建數(shù)據(jù)存儲目錄

提前創(chuàng)建好用于存儲 Redis 的配置文件和持久化數(shù)據(jù)的目錄:

第一臺服務(wù)器 192.168.2.11 中執(zhí)行創(chuàng)建存儲目錄命令:

$ mkdir -p /var/lib/redis/7000 & mkdir -p /var/lib/redis/7003

第二臺服務(wù)器 192.168.2.12 中執(zhí)行創(chuàng)建存儲目錄命令:

$ mkdir -p /var/lib/redis/7001 & mkdir -p /var/lib/redis/7004

第三臺服務(wù)器 192.168.2.13 中執(zhí)行創(chuàng)建存儲目錄命令:

$ mkdir -p /var/lib/redis/7002 & mkdir -p /var/lib/redis/7005

3、創(chuàng)建 Redis 配置文件

第一臺服務(wù)器 192.168.2.11 配置文件:

## 7000 端口配置文件
$ cat > /var/lib/redis/7000/redis.conf << EOF
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize no
protected-mode no
pidfile  /data/redis.pid
EOF
 
## 7003 端口配置文件
$ cat > /var/lib/redis/7003/redis.conf << EOF
port 7003
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize no
protected-mode no
pidfile  /data/redis.pid
EOF

第二臺服務(wù)器 192.168.2.12 配置文件

## 7001 端口配置:redis.conf
$ cat > /var/lib/redis/7001/redis.conf << EOF
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize no
protected-mode no
pidfile  /data/redis.pid
EOF
 
## 7004 端口配置:redis-7004.conf
$ cat > /var/lib/redis/7004/redis.conf << EOF
port 7004
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize no
protected-mode no
pidfile  /data/redis.pid
EOF

第三臺服務(wù)器 192.168.2.13 配置文件

## 7002 端口配置:redis-7002.conf
$ cat > /var/lib/redis/7002/redis.conf << EOF
port 7002
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize no
protected-mode no
pidfile  /data/redis.pid
EOF
 
## 7005 端口配置:redis-7005.conf
$ cat > /var/lib/redis/7005/redis.conf << EOF
port 7005
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize no
protected-mode no
pidfile  /data/redis.pid
EOF

4、提前拉取 Redis 鏡像

三臺服務(wù)器中提前拉取 Redis 鏡像,避免在執(zhí)行運(yùn)行時(shí)候還得拉取鏡像,導(dǎo)致運(yùn)行慢。

$ docker pull redis:6.0.8

5、運(yùn)行啟動 Redis 鏡像

三臺服務(wù)器分別執(zhí)行 Docker 運(yùn)行命令來啟動 Redis 鏡像。這里需要注意的是,不同服務(wù)器間的 Docker 是不能相互通信的,所有這里我們設(shè)置啟動的容器網(wǎng)絡(luò)模式為 host 模式,這樣容器不會創(chuàng)建虛擬網(wǎng)卡,而是使用宿主機(jī)的網(wǎng)絡(luò)。

  • -d:設(shè)置容器后臺運(yùn)行;
  • -v:指定掛載的宿主機(jī)存儲目錄;
  • --name:指定運(yùn)行后的容器名稱;
  • --cpus:指定容器使用 CPU 數(shù)量;
  • --memory:限制容器使用內(nèi)存數(shù)量;
  • --memory-swap:指定交換內(nèi)存大小,這里設(shè)置為 0,即不用交換內(nèi)存;
  • --net:指定 Docker 使用的網(wǎng)絡(luò)模式;
  • --restart:指定 Docker 重啟時(shí)容器的重啟策略;
  • --privileged:設(shè)置容器擁有特權(quán),能夠獲取宿主機(jī) Root 權(quán)限;

第一臺服務(wù)器 192.168.2.11 執(zhí)行如下命令

## 運(yùn)行 Redis 鏡像 7000 端口 
$ docker run -d -v /var/lib/redis/7000:/data \

--cpus=1 --memory=2GB --memory-swap=0 \

--privileged=true \

--restart=always \

--net host \

--name redis-7000 \

redis:6.0.8 redis-server /data/redis.conf
 
## 運(yùn)行 Redis 鏡像 7003 端口 
$ docker run -d -v /var/lib/redis/7003:/data \

--cpus=1 --memory=2GB --memory-swap=0 \

--privileged=true \

--restart=always \

--net host \

--name redis-7003 \

redis:6.0.8 redis-server /data/redis.conf

第二臺服務(wù)器 192.168.2.12 執(zhí)行如下命令

## 運(yùn)行 Redis 鏡像 7001 端口 
$ docker run -d -v /var/lib/redis/7001:/data \

--cpus=1 --memory=2GB --memory-swap=0 \

--privileged=true \

--restart=always \

--net host \

--name redis-7001 \

redis:6.0.8 redis-server /data/redis.conf
 
## 運(yùn)行 Redis 鏡像 7004端口 
$ docker run -d -v /var/lib/redis/7004:/data \

--cpus=1 --memory=2GB --memory-swap=0 \

--privileged=true \

--restart=always \

--net host \

--name redis-7004 \

redis:6.0.8 redis-server /data/redis.conf

第三臺服務(wù)器 192.168.2.13 執(zhí)行如下命令:

## 運(yùn)行 Redis 鏡像 7002 端口 
$ docker run -d -v /var/lib/redis/7002:/data \

--cpus=1 --memory=2GB --memory-swap=0 \

--privileged=true \

--restart=always \

--net host \

--name redis-7002 \

redis:6.0.8 redis-server /data/redis.conf
 
## 運(yùn)行 Redis 鏡像 7005 端口 
$ docker run -d -v /var/lib/redis/7005:/data \

--cpus=1 --memory=2GB --memory-swap=0 \

--privileged=true \

--restart=always \

--net host \

--name redis-7005 \

redis:6.0.8 redis-server /data/redis.conf

6、創(chuàng)建 Redis 集群

隨意進(jìn)入一臺服務(wù)器,使用 Redis 鏡像的 redis-cli 工具執(zhí)行創(chuàng)建集群命令使各個 Redis 組成集群,這里本人進(jìn)入第一臺服務(wù)器 192.168.2.11 中,使用端口為 7000 的 Redis 端鏡像,可以執(zhí)行下面命令:

-p:指定連接 Redis 的端口;

create:創(chuàng)建 Redis 集群;

--cluster:使用 Redis 集群模式命令;

--cluster-replicas:指定副本數(shù)(slave 數(shù)量);

$ docker exec -it redis-7000 \

redis-cli -p 7000 --cluster create \

192.168.2.11:7000 192.168.2.12:7001 192.168.2.13:7002 \

192.168.2.11:7003 192.168.2.12:7004 192.168.2.13:7005 \

--cluster-replicas 1

然后會看到下面信息:

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.2.12:7004 to 192.168.2.11:7000
Adding replica 192.168.2.13:7005 to 192.168.2.12:7001
Adding replica 192.168.2.11:7003 to 192.168.2.13:7002
M: 5e50824c55d4df42db4d2987796f0c0b468c273f 192.168.2.11:7000
   slots:[0-5460] (5461 slots) master
M: 36565e0273fd62921aa1f2d85c5f7ac98a5b9466 192.168.2.12:7001
   slots:[5461-10922] (5462 slots) master
M: 0cc1aaf960defae7332e9256dd25ee5e5c99e65f 192.168.2.13:7002
   slots:[10923-16383] (5461 slots) master
S: 42d6e3979395ba93cd1352b6d17044f6b25d9379 192.168.2.11:7003
   replicates 0cc1aaf960defae7332e9256dd25ee5e5c99e65f
S: ac5d34b57a8f73dabc60d3a56469055ec64fcde7 192.168.2.12:7004
   replicates 5e50824c55d4df42db4d2987796f0c0b468c273f
S: 470b7ff823f10a309fb07311097456210506f6d8 192.168.2.13:7005
   replicates 36565e0273fd62921aa1f2d85c5f7ac98a5b9466
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 192.168.2.11:7000)
M: 5e50824c55d4df42db4d2987796f0c0b468c273f 192.168.2.11:7000
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 470b7ff823f10a309fb07311097456210506f6d8 192.168.2.13:7005
   slots: (0 slots) slave
   replicates 36565e0273fd62921aa1f2d85c5f7ac98a5b9466
S: 42d6e3979395ba93cd1352b6d17044f6b25d9379 192.168.2.11:7003
   slots: (0 slots) slave
   replicates 0cc1aaf960defae7332e9256dd25ee5e5c99e65f
S: ac5d34b57a8f73dabc60d3a56469055ec64fcde7 192.168.2.12:7004
   slots: (0 slots) slave
   replicates 5e50824c55d4df42db4d2987796f0c0b468c273f
M: 0cc1aaf960defae7332e9256dd25ee5e5c99e65f 192.168.2.13:7002
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: 36565e0273fd62921aa1f2d85c5f7ac98a5b9466 192.168.2.12:7001
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

7、查看集群信息

進(jìn)入 Redis 鏡像內(nèi)部并折傭 redis-cli 命令:

-p:指定連接 Redis 的端點(diǎn);

-c:使用集群模式;

$ docker exec -it redis-7000 redis-cli -p 7000 -c

查看集群信息:

> cluster info
 
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:866
cluster_stats_messages_pong_sent:854
cluster_stats_messages_sent:1720
cluster_stats_messages_ping_received:849
cluster_stats_messages_pong_received:866
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:1720

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

> cluster nodes
 
470b7ff823f10a309fb07311097456210506f6d8 192.168.2.13:7005@17005 slave 36565e0273fd62921aa1f2d85c5f7ac98a5b9466 0 1600267217000 2 connected
42d6e3979395ba93cd1352b6d17044f6b25d9379 192.168.2.11:7003@17003 slave 0cc1aaf960defae7332e9256dd25ee5e5c99e65f 0 1600267218171 3 connected
ac5d34b57a8f73dabc60d3a56469055ec64fcde7 192.168.2.12:7004@17004 slave 5e50824c55d4df42db4d2987796f0c0b468c273f 0 1600267216161 1 connected
0cc1aaf960defae7332e9256dd25ee5e5c99e65f 192.168.2.13:7002@17002 master - 0 1600267218070 3 connected 10923-16383
36565e0273fd62921aa1f2d85c5f7ac98a5b9466 192.168.2.12:7001@17001 master - 0 1600267217163 2 connected 5461-10922
5e50824c55d4df42db4d2987796f0c0b468c273f 192.168.2.11:7000@17000 myself,master - 0 1600267217000 1 connected 0-5460

參考地址:

http://www.redis.cn/topics/cluster-tutorial.html

http://www.redis.cn/topics/cluster-spec.html

https://jasonkayzk.github.io

https://www.cnblogs.com/kevingrace/p/5685332.html

到此這篇關(guān)于通過Docker部署Redis 6.x集群的方法的文章就介紹到這了,更多相關(guān)Docker部署Redis 6.x集群內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

標(biāo)簽:荊門 面試通知 朝陽 雞西 遵義 運(yùn)城 隴南 連云港

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《通過Docker部署Redis 6.x集群的方法》,本文關(guān)鍵詞  通過,Docker,部署,Redis,6.x,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《通過Docker部署Redis 6.x集群的方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于通過Docker部署Redis 6.x集群的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    伊人精品久久久久7777| 日本一区免费视频| 久久久久久久网站| 91久久极品少妇xxxxⅹ软件| 免费精品99久久国产综合精品| 一本色道婷婷久久欧美| 推川ゆうり中文亚洲二区| 人人做人人爽| 蜜臀av午夜一区二区三区| 日日狠狠久久偷偷四色综合免费| 真实国产乱子伦精品一区二区三区| 日本黄大片一区二区三区| 欧美色图中文字幕| 黑人玩弄人妻一区二区三区| 涩涩网站在线看| 欧美一级夜夜爽| 青青草视频在线免费直播| 国产a级免费视频| 欧美日韩在线精品一区二区三区激情综| 国产精品视频在线看| 久久久国产精品人人片| 成人欧美在线观看| 精品一区二区三区免费爱| 国产一级黄色录像| 久久av免费| 蜜臀av在线播放一区二区三区| 日韩福利视频在线观看| 国产日韩欧美一区二区三区| 嗯~啊~轻一点视频日本在线观看| 欧美性猛交xxxx乱大交少妇| 可以免费在线看黄的网站| 国产精品激情自拍| 69xxxx国产| 欧美视频福利| 精品在线91| 成人av电影免费在线播放| 亚洲自拍偷拍欧美| www视频在线免费观看| 成年人福利网站| 国产视频精品网| 青檬在线电视剧在线观看| 综合毛片免费视频| 亚洲第一av网| 国产午夜精品久久久| 日韩人妻无码一区二区三区99| 亚洲综合激情小说| 国产精品久久久久久久久久久久久久久| 五月天亚洲综合情| 91国产视频在线| 91福利在线尤物| 中字幕一区二区三区乱码| 91亚洲精品久久久| 精品日本高清在线播放| 国产日韩精品一区二区| 永久免费未满蜜桃| 精品入口麻豆传煤| 亚洲AV无码国产精品午夜字幕| 久久综合给合久久狠狠色| 亚洲成av人片在线观看www| 99电影在线观看| mm131国产精品| www成人在线观看| 国产精品影院在线观看| 欧美日韩五区| 精品一区二区三区免费播放| 久久久午夜精品福利内容| 琪琪一区二区三区| 中日韩一区二区三区| 国产激情综合五月久久| 国产精品久久久久久久久图文区| 成人精品免费网站| 亚洲美女毛片| 国产一区二区精品久久| 可以在线观看av的网站| 免费不卡中文字幕在线| 亚洲第一精品夜夜躁人人爽| 麻豆极品一区二区三区| 色呦呦中文字幕| 无码国产精品一区二区高潮| 俄罗斯精品一区二区三区| 亚洲欧美成人一区二区在线电影| 亚洲视频 欧洲视频| 致1999电视剧免费观看策驰影院| 中文网丁香综合网| 蜜臀久久久久久999| 在线观看福利电影| 日韩一区二区在线观看视频播放| 中文字幕亚洲精品在线观看| 成人免费网址在线| 久久综合九九| 日韩高清在线不卡| 羞羞的视频在线观看| 亚洲国产日韩欧美一区二区三区| 91福利区一区二区三区| 国产成人精品亚洲| 你懂的免费在线观看| 免费在线观看一级片| 亚洲va久久久噜噜噜久久天堂| 日韩欧美亚洲一区| 亚洲av永久无码国产精品久久| 97色婷婷成人综合在线观看| www日韩在线观看| 国产一区二区小视频| 国产亚洲精品一区二区在线观看| 美女久久精品| 久久www成人_看片免费不卡| 精品久久久久久久久久久久久久久久| 欧美中文字幕一区二区| 久久新电视剧免费观看| 欧美成人免费在线| 青青草免费观看视频| 美女精品视频一区| 色婷婷久久一区二区三区麻豆| 国产免费又粗又猛又爽| 天天做夜夜做人人爱精品| 精品亚洲男同gayvideo网站| 中文字幕在线永久在线视频| 亚洲色成人一区二区三区小说| 男女小视频在线观看| 国产视频手机在线播放| www.91popny.com| 亚洲v在线看| www.亚洲自拍| 久久久蜜臀国产一区二区| 日本激情视频网站| 日韩电影在线看| 亚洲高清视频在线观看| 国产欧美亚洲日本| 在线中文字幕一区二区| 91日本在线视频| 99国产精品久久久久99打野战| 国产哺乳奶水91在线播放| 成人午夜激情视频| 国产精品xxxav免费视频| 色8久久人人97超碰香蕉987| 欧美成人久久电影香蕉| 久热成人在线视频| 成人视屏在线观看| 日本中文字幕在线看| 99久久免费精品国产72精品九九| 97福利网站在线观看视频| 波多一区二区| 欧美aaa大片视频一二区| 国产精品白丝在线| 成人写真视频| 最近中文字幕大全中文字幕免费| 亚洲爱情岛论坛永久| 午夜美女久久久久爽久久| 日韩和欧美的一区二区| 亚洲图片小说网| 久久在线观看| 成人免费在线视频| 亚洲高清在线精品| 天堂社区 天堂综合网 天堂资源最新版| 日韩不卡一区二区| 亚洲精品国偷拍自产在线观看蜜桃| 手机在线视频一区| 日本免费高清一区二区| 天堂网www在线网| 国产一区二区免费| 久久综合九色综合97_久久久| 国产精品国码视频| 欧美人妻一区二区| 九九热最新地址| 亚洲欧美日韩综合国产aⅴ| 成人激情小说网站| 在线播放日韩| 久久精品免费av| 亚洲国产精品va在线| 亚洲三级观看| 亚洲欧美自偷自拍另类| 亚洲天堂av一区| 久久精品99久久| 99精品国产99久久久久久97| 亚洲曰韩产成在线| 国产主播精品| aa片在线观看视频在线播放| 激情美女网站| 色婷婷久久久亚洲一区二区三区| 欧美成人小视频| 真实原创一区二区影院| 992tv在线观看免费进| 日本一本草久p| 国产亚洲精品v| 日本性视频网| 欧美性感一区二区三区| 一级毛片高清视频| 77成人影视| 伊人影院综合在线| 久久精品水蜜桃av综合天堂| 91免费国产精品| 很黄很a的视频| 精品99re| 中文av免费观看| 人妻无码一区二区三区| 日日欢夜夜爽一区| 啊v视频在线一区二区三区| 青青草观看免费视频在线| 国产www免费观看| 免费精品在线视频| 欧美日韩 一区二区三区| 日韩亚洲欧美在线| av免费在线免费观看| 欧美夫妇交换xxx| 精品一区二区三区四区在线| 中文字幕亚洲情99在线| 日韩美女视频在线观看| 黄色小说综合网站| x88av蜜桃臀一区二区| 日韩中文字幕视频| 牛夜精品久久久久久久| 亚洲午夜精品久久| 97久久国产精品| 666欧美在线视频| 日韩精品亚洲专区| 色伊人久久综合中文字幕| 欧美四级在线| 久操精品在线| 国产精品久久久久久久久久久新郎| 撸视在线观看免费视频| 精品成人av| 成人爽a毛片一区二区| 亚洲系列中文字幕| 亚洲免费av网| 国产精品国模在线| 超免费在线视频| 国产传媒在线视频| 亚洲先锋影音| 久久综合狠狠综合久久综合88| 久久精品视频免费观看| 91嫩草精品| 欧美人狂配大交3d怪物一区| 亚洲欧美春色| 黄色一级片在线观看| 亚洲国产成人在人网站天堂| 无夜福利视频观看| jizz欧美性11| 国内精品在线观看视频| 欧美在线视频一区二区三区| 日韩成人av影视| 国产伦精品一区二区三区免费| 色呦呦网站在线观看| 日本一区精品| 成人一区二区免费视频| av成人福利| av激情综合网| 婷婷综合在线视频| 在线观看视频91| 久久久久女教师免费一区| 少妇精品一区二区| 日韩经典一区二区| 日本不卡不码高清免费观看| 久久av资源网站| 亚洲精品午夜| 不卡的av在线播放| 91麻豆精品91久久久久久清纯| 国产精品在线看| 国产特级嫩嫩嫩bbb| 欧美国产激情| 亚洲欧美另类久久久精品| 日韩 欧美 精品| 久久久精品视频免费观看| 国产毛片一区二区| 美女爆乳18禁www久久久久久| 蜜臀视频一区二区三区| 一区二区三区四区精品在线视频| 欧美一区二区三区四区在线观看地址| 欧美日本视频在线| а_天堂中文在线| 亚洲国产成人私人影院tom| 国产精品视频首页| 精品丝袜在线| 久久久久久久国产精品| 精品一区二区三区四区五区| 性色一区二区三区| 日韩电影免费在线| 视频一区欧美| 91精品国产成人观看| 色综合天天综合网天天看片| 91黄色在线视频| 在线中文字幕观看| 国产一区视频在线播放| 亚洲欧美国产一区二区三区| 免费人成年激情视频在线观看| 欧美一级爽aaaaa大片| 国产美女福利视频| 国产在线成人精品午夜| 123成人网| 少妇视频在线播放| 可以直接看的无码av| 成人动漫一区二区三区| 一区二区精品伦理...| 国精品日韩欧美一区二区三区| 超碰97免费观看| 国产一区二区三区不卡在线观看| 久久久久久久久久一级| 国产在线播放精品| 亚洲二区在线视频| 日本不卡在线视频| 欧美成人三级在线| xxxxhd欧美精品| aa在线免费观看| av在线不卡网| 国产精品日韩欧美| 国产毛片久久| 2018日韩中文字幕| 在线观看免费成人| 亚洲国产三级在线| 夜夜嗨av一区二区三区网站四季av| 欧美日韩亚洲系列| 一本色道88久久加勒比精品| 久久色免费在线视频| av手机在线观看| 久久99精品久久久久久青青日本| 免费观看精品视频| 欧美午夜精品一区二区三区| 国产欧美一区二区精品仙草咪| 日韩专区中文字幕一区二区| 精品人妻二区中文字幕| 久久综合九色综合欧美98| 亚洲欧美日韩一区二区三区四区| av激情综合网| 国产成人久久久久| 成人免费视频在线观看超级碰| 欧美日韩一卡| 亚洲视频在线免费| 精品中文av资源站在线观看| 国产精成人品2018|