1. Redis集群方案
Redis Cluster 集群模式通常具有高可用、可擴展性、分布式、容錯等特性。Redis 分布式方案一般有兩種:
1.1 客戶端分區(qū)方案
客戶端就已經(jīng)決定數(shù)據(jù)會被存儲到哪個 redis 節(jié)點或者從哪個 redis 節(jié)點讀取數(shù)據(jù)。其主要思想是采用哈希算法將 Redis 數(shù)據(jù)的 key 進行散列,通過 hash 函數(shù),特定的 key會映射到特定的 Redis 節(jié)點上。
深入剖析Redis-Redis集群模式搭建與原理詳解
客戶端分區(qū)方案的代表為 Redis Sharding,Redis Sharding 是 Redis Cluster 出來之前,業(yè)界普遍使用的 Redis多實例集群方法。Java?的 Redis 客戶端驅動庫 Jedis,支持 Redis Sharding 功能,即 ShardedJedis 以及結合緩存池的 ShardedJedisPool。
優(yōu)點
不使用第三方中間件,分區(qū)邏輯可控,配置簡單,節(jié)點之間無關聯(lián),容易線性擴展,靈活性強。
缺點
客戶端無法動態(tài)增刪服務節(jié)點,客戶端需要自行維護分發(fā)邏輯,客戶端之間無連接共享,會造成連接浪費。
1.2. 代理分區(qū)方案
客戶端發(fā)送請求到一個代理組件,代理解析客戶端的數(shù)據(jù),并將請求轉發(fā)至正確的節(jié)點,最后將結果回復給客戶端。
優(yōu)點:簡化客戶端的分布式邏輯,客戶端透明接入,切換成本低,代理的轉發(fā)和存儲分離。 缺點:多了一層代理層,加重了架構部署復雜度和性能損耗。
深入剖析Redis-Redis集群模式搭建與原理詳解
代理分區(qū)主流實現(xiàn)的有方案有 Twemproxy 和 Codis。
1.2.1. Twemproxy
Twemproxy 也叫 nutcraker,是 twitter 開源的一個 redis 和 memcache 的中間代理服務器程序。Twemproxy 作為代理,可接受來自多個程序的訪問,按照路由規(guī)則,轉發(fā)給后臺的各個 Redis 服務器,再原路返回。Twemproxy 存在單點故障問題,需要結合 Lvs 和 Keepalived 做高可用方案。
深入剖析Redis-Redis集群模式搭建與原理詳解
優(yōu)點:應用范圍廣,穩(wěn)定性較高,中間代理層高可用。 缺點:無法平滑地水平擴容/縮容,無可視化管理界面,運維不友好,出現(xiàn)故障,不能自動轉移。
1.2.2. Codis
Codis 是一個分布式Redis 解決方案,對于上層應用來說,連接 Codis-Proxy 和直接連接原生的Redis-Server 沒有的區(qū)別。Codis 底層會處理請求的轉發(fā),不停機的進行數(shù)據(jù)遷移等工作。Codis 采用了無狀態(tài)的代理層,對于客戶端來說,一切都是透明的。
深入剖析Redis-Redis集群模式搭建與原理詳解
優(yōu)點
實現(xiàn)了上層 Proxy 和底層 Redis 的高可用,數(shù)據(jù)分片和自動平衡,提供命令行接口和 RESTful API,提供監(jiān)控和管理界面,可以動態(tài)添加和刪除Redis 節(jié)點。
缺點
部署架構和配置復雜,不支持跨機房和多租戶,不支持鑒權管理。
1.3. 查詢路由方案
客戶端隨機地請求任意一個 Redis 實例,然后由 Redis 將請求轉發(fā)給正確的 Redis 節(jié)點。Redis Cluster 實現(xiàn)了一種混合形式的查詢路由,但并不是直接將請求從一個 Redis 節(jié)點轉發(fā)到另一個 Redis 節(jié)點,而是在客戶端的幫助下直接重定向( redirected)到正確的 Redis 節(jié)點。
深入剖析Redis-Redis集群模式搭建與原理詳解
優(yōu)點
無中心節(jié)點,數(shù)據(jù)按照槽存儲分布在多個 Redis 實例上,可以平滑的進行節(jié)點擴容/縮容,支持高可用和自動故障轉移,運維成本低。
缺點
嚴重依賴 Redis-trib 工具,缺乏監(jiān)控管理,需要依賴 Smart Client (維護連接,緩存路由表,MultiOp 和 Pipeline 支持)。Failover 節(jié)點的檢測過慢,不如中心節(jié)點ZooKeeper 及時。Gossip 消息具有一定開銷。無法根據(jù)統(tǒng)計區(qū)分冷熱數(shù)據(jù)。
2. 數(shù)據(jù)分布
2.1. 數(shù)據(jù)分布理論
分布式數(shù)據(jù)庫首先要解決把整個數(shù)據(jù)集按照分區(qū)規(guī)則映射到多個節(jié)點的問題,即把數(shù)據(jù)集劃分到多個節(jié)點上,每個節(jié)點負責整體數(shù)據(jù)的一個子集。
深入剖析Redis-Redis集群模式搭建與原理詳解
數(shù)據(jù)分布通常有哈希分區(qū)和順序分區(qū)兩種方式,對比如下:
分區(qū)方式 特點 相關產(chǎn)品 哈希分區(qū) 離散程度好,數(shù)據(jù)分布與業(yè)務無關,無法順序訪問 Redis Cluster,Cassandra,Dynamo 順序分區(qū) 離散程度易傾斜,數(shù)據(jù)分布與業(yè)務相關,可以順序訪問 BigTable,HBase,Hypertable 由于 Redis Cluster 采用哈希分區(qū)規(guī)則,這里重點討論哈希分區(qū)。常見的哈希分區(qū)規(guī)則有幾種,下面分別介紹:
2.1.1. 節(jié)點取余分區(qū)
使用特定的數(shù)據(jù),如 Redis 的鍵或用戶ID,再根據(jù)節(jié)點數(shù)量N 使用公式:hash(key)% N 計算出哈希值,用來決定數(shù)據(jù)映射到哪一個節(jié)點上。
深入剖析Redis-Redis集群模式搭建與原理詳解
優(yōu)點
這種方式的突出優(yōu)點是簡單性,常用于數(shù)據(jù)庫的分庫分表規(guī)則。一般采用預分區(qū)的方式,提前根據(jù)數(shù)據(jù)量規(guī)劃好分區(qū)數(shù),比如劃分為 512 或 1024 張表,保證可支撐未來一段時間的數(shù)據(jù)容量,再根據(jù)負載情況將表遷移到其他數(shù)據(jù)庫中。擴容時通常采用翻倍擴容,避免數(shù)據(jù)映射全部被打亂,導致全量遷移的情況。
缺點
當節(jié)點數(shù)量變化時,如擴容或收縮節(jié)點,數(shù)據(jù)節(jié)點映射關系需要重新計算,會導致數(shù)據(jù)的重新遷移。
2.1.2. 一致性哈希分區(qū)
一致性哈??梢院芎玫慕鉀Q穩(wěn)定性問題,可以將所有的存儲節(jié)點排列在收尾相接的 Hash 環(huán)上,每個 key 在計算 Hash 后會順時針找到臨接的存儲節(jié)點存放。而當有節(jié)點加入或退出時,僅影響該節(jié)點在 Hash 環(huán)上順時針相鄰的后續(xù)節(jié)點。
深入剖析Redis-Redis集群模式搭建與原理詳解
優(yōu)點
加入和刪除節(jié)點只影響哈希環(huán)中順時針方向的相鄰的節(jié)點,對其他節(jié)點無影響。
缺點
加減節(jié)點會造成哈希環(huán)中部分數(shù)據(jù)無法命中。當使用少量節(jié)點時,節(jié)點變化將大范圍影響哈希環(huán)中數(shù)據(jù)映射,不適合少量數(shù)據(jù)節(jié)點的分布式方案。普通的一致性哈希分區(qū)在增減節(jié)點時需要增加一倍或減去一半節(jié)點才能保證數(shù)據(jù)和負載的均衡。
注意:因為一致性哈希分區(qū)的這些缺點,一些分布式系統(tǒng)采用虛擬槽對一致性哈希進行改進,比如 Dynamo 系統(tǒng)。
2.1.3. 虛擬槽分區(qū)
虛擬槽分區(qū)巧妙地使用了哈??臻g,使用分散度良好的哈希函數(shù)把所有數(shù)據(jù)映射到一個固定范圍的整數(shù)集合中,整數(shù)定義為槽(slot)。這個范圍一般遠遠大于節(jié)點數(shù),比如 Redis Cluster 槽范圍是 0 ~ 16383。槽是集群內數(shù)據(jù)管理和遷移的基本單位。采用大范圍槽的主要目的是為了方便數(shù)據(jù)拆分和集群擴展。每個節(jié)點會負責一定數(shù)量的槽,如圖所示:
深入剖析Redis-Redis集群模式搭建與原理詳解
當前集群有 5 個節(jié)點,每個節(jié)點平均大約負責 3276 個槽。由于采用高質量的哈希算法,每個槽所映射的數(shù)據(jù)通常比較均勻,將數(shù)據(jù)平均劃分到 5 個節(jié)點進行數(shù)據(jù)分區(qū)。Redis Cluster 就是采用虛擬槽分區(qū)。
節(jié)點1: 包含 0 到 3276 號哈希槽。 節(jié)點2:包含 3277 到 6553 號哈希槽。 節(jié)點3:包含 6554 到 9830 號哈希槽。 節(jié)點4:包含 9831 到 13107 號哈希槽。 節(jié)點5:包含 13108 到 16383 號哈希槽。
這種結構很容易添加或者刪除節(jié)點。如果增加一個節(jié)點 6,就需要從節(jié)點 1 ~ 5 獲得部分槽分配到節(jié)點 6 上。如果想移除節(jié)點 1,需要將節(jié)點 1 中的槽移到節(jié)點 2 ~ 5 上,然后將沒有任何槽的節(jié)點 1 從集群中移除即可。
由于從一個節(jié)點將哈希槽移動到另一個節(jié)點并不會停止服務,所以無論添加刪除或者改變某個節(jié)點的哈希槽的數(shù)量都不會造成集群不可用的狀態(tài).
2.2. Redis的數(shù)據(jù)分區(qū)
Redis Cluster 采用虛擬槽分區(qū),所有的鍵根據(jù)哈希函數(shù)映射到 0~16383 整數(shù)槽內,計算公式:slot = CRC16(key)& 16383。每個節(jié)點負責維護一部分槽以及槽所映射的鍵值數(shù)據(jù),如圖所示:
深入剖析Redis-Redis集群模式搭建與原理詳解
2.2.1. Redis虛擬槽分區(qū)的特點
解耦數(shù)據(jù)和節(jié)點之間的關系,簡化了節(jié)點擴容和收縮難度。 節(jié)點自身維護槽的映射關系,不需要客戶端或者代理服務維護槽分區(qū)元數(shù)據(jù)。 支持節(jié)點、槽、鍵之間的映射查詢,用于數(shù)據(jù)路由、在線伸縮等場景。
2.3. Redis集群的功能限制
Redis 集群相對單機在功能上存在一些限制,需要開發(fā)人員提前了解,在使用時做好規(guī)避。
key批量操作支持有限。
類似 mset、mget 操作,目前只支持對具有相同 slot 值的 key 執(zhí)行批量操作。對于映射為不同slot 值的 key 由于執(zhí)行 mget、mget 等操作可能存在于多個節(jié)點上,因此不被支持。
key事務操作支持有限。
只支持多key 在同一節(jié)點上的事務操作,當多個 key 分布在不同的節(jié)點上時無法使用事務功能。
key 作為數(shù)據(jù)分區(qū)的最小粒度
不能將一個大的鍵值對象如 hash、list 等映射到不同的節(jié)點。
不支持多數(shù)據(jù)庫空間
單機下的 Redis 可以支持 16 個數(shù)據(jù)庫(db0 ~ db15),集群模式下只能使用一個數(shù)據(jù)庫空間,即 db0。
復制結構只支持一層
從節(jié)點只能復制主節(jié)點,不支持嵌套樹狀復制結構。
3. Redis集群搭建
Redis-Cluster 是 Redis 官方的一個高可用解決方案,Cluster 中的 Redis 共有 2^14(16384) 個 slot槽。創(chuàng)建 Cluster 后,槽會平均分配到每個 Redis 節(jié)點上。
下面介紹一下本機啟動 6 個 Redis 的集群服務,并使用 redis-trib.rb 創(chuàng)建3主3從的集群。搭建集群工作需要以下三個步驟:
3.1. 準備節(jié)點
Redis 集群一般由多個節(jié)點組成,節(jié)點數(shù)量至少為 6 個,才能保證組成完整高可用的集群。每個節(jié)點需要開啟配置cluster-enabled yes,讓 Redis 運行在集群模式下。
Redis 集群的節(jié)點規(guī)劃如下:
節(jié)點名稱 端口號 是主是從 所屬主節(jié)點 redis-6379 6379 主節(jié)點 --- redis-6389 6389 從節(jié)點 redis-6379 redis-6380 6380 主節(jié)點 --- redis-6390 6390 從節(jié)點 redis-6380 redis-6381 6381 主節(jié)點 --- redis-6391 6391 從節(jié)點 redis-6381注意:建議為集群內所有節(jié)點統(tǒng)一目錄,一般劃分三個目錄:conf、data、log,分別存放配置、數(shù)據(jù)和日志相關文件。把 6 個節(jié)點配置統(tǒng)一放在 conf 目錄下。
3.1.1. 創(chuàng)建redis各實例目錄
$ sudo mkdir -p /usr/local/redis-cluster
$ cd /usr/local/redis-cluster
$ sudo mkdir conf data log
$ sudo mkdir -p data/redis-6379 data/redis-6389 data/redis-6380 data/redis-6390 data/redis-6381 data/redis-6391
復制代碼
3.1.2. redis配置文件管理
根據(jù)以下模板配置各個實例的 redis.conf,以下只是搭建集群需要的基本配置,可能需要根據(jù)實際情況做修改。
# redis后臺運行
daemonize yes
# 綁定的主機端口
bind 127.0.0.1
# 數(shù)據(jù)存放目錄
dir /usr/local/redis-cluster/data/redis-6379
# 進程文件
pidfile /var/run/redis-cluster/${自定義}.pid
# 日志文件
logfile /usr/local/redis-cluster/log/${自定義}.log
# 端口號
port 6379
# 開啟集群模式,把注釋#去掉
cluster-enabled yes
# 集群的配置,配置文件首次啟動自動生成
cluster-config-file /usr/local/redis-cluster/conf/${自定義}.conf
# 請求超時,設置10秒
cluster-node-timeout 10000
# aof日志開啟,有需要就開啟,它會每次寫操作都記錄一條日志
appendonly yes
復制代碼
redis-6379.conf
daemonize yes
bind 127.0.0.1
dir /usr/local/redis-cluster/data/redis-6379
pidfile /var/run/redis-cluster/redis-6379.pid
logfile /usr/local/redis-cluster/log/redis-6379.log
port 6379
cluster-enabled yes
cluster-config-file /usr/local/redis-cluster/conf/node-6379.conf
cluster-node-timeout 10000
appendonly yes
復制代碼
redis-6389.conf
daemonize yes
bind 127.0.0.1
dir /usr/local/redis-cluster/data/redis-6389
pidfile /var/run/redis-cluster/redis-6389.pid
logfile /usr/local/redis-cluster/log/redis-6389.log
port 6389
cluster-enabled yes
cluster-config-file /usr/local/redis-cluster/conf/node-6389.conf
cluster-node-timeout 10000
appendonly yes
復制代碼
redis-6380.conf
daemonize yes
bind 127.0.0.1
dir /usr/local/redis-cluster/data/redis-6380
pidfile /var/run/redis-cluster/redis-6380.pid
logfile /usr/local/redis-cluster/log/redis-6380.log
port 6380
cluster-enabled yes
cluster-config-file /usr/local/redis-cluster/conf/node-6380.conf
cluster-node-timeout 10000
appendonly yes
復制代碼
redis-6390.conf
daemonize yes
bind 127.0.0.1
dir /usr/local/redis-cluster/data/redis-6390
pidfile /var/run/redis-cluster/redis-6390.pid
logfile /usr/local/redis-cluster/log/redis-6390.log
port 6390
cluster-enabled yes
cluster-config-file /usr/local/redis-cluster/conf/node-6390.conf
cluster-node-timeout 10000
appendonly yes
復制代碼
redis-6381.conf
daemonize yes
bind 127.0.0.1
dir /usr/local/redis-cluster/data/redis-6381
pidfile /var/run/redis-cluster/redis-6381.pid
logfile /usr/local/redis-cluster/log/redis-6381.log
port 6381
cluster-enabled yes
cluster-config-file /usr/local/redis-cluster/conf/node-6381.conf
cluster-node-timeout 10000
appendonly yes
復制代碼
redis-6391.conf
daemonize yes
bind 127.0.0.1
dir /usr/local/redis-cluster/data/redis-6391
pidfile /var/run/redis-cluster/redis-6391.pid
logfile /usr/local/redis-cluster/log/redis-6391.log
port 6391
cluster-enabled yes
cluster-config-file /usr/local/redis-cluster/conf/node-6391.conf
cluster-node-timeout 10000
appendonly yes
復制代碼
3.2. 環(huán)境準備
3.2.1. 安裝Ruby環(huán)境
$ sudo brew install ruby
復制代碼
3.2.2. 準備rubygem redis依賴
$ sudo gem install redis
Password:
Fetching: redis-4.0.2.gem (100%)
Successfully installed redis-4.0.2
Parsing documentation for redis-4.0.2
Installing ri documentation for redis-4.0.2
Done installing documentation for redis after 1 seconds
1 gem installed
復制代碼
3.2.3. 拷貝redis-trib.rb到集群根目錄
redis-trib.rb 是 redis 官方推出的管理 redis集群的工具,集成在 redis 的源碼?src 目錄下,將基于 redis 提供的集群命令封裝成簡單、便捷、實用的操作工具。
$ sudo cp /usr/local/redis-4.0.11/src/redis-trib.rb /usr/local/redis-cluster
復制代碼
查看 redis-trib.rb 命令環(huán)境是否正確,輸出如下:
$ ./redis-trib.rb
Usage: redis-trib
create host1:port1 ... hostN:portN --replicas check host:port info host:port fix host:port --timeout reshard host:port --from --to --slots --yes --timeout --pipeline rebalance host:port --weight --auto-weights --use-empty-masters --timeout --simulate --pipeline --threshold add-node new_host:new_port existing_host:existing_port --slave --master-id del-node host:port node_id set-timeout host:port milliseconds call host:port command arg arg .. arg import host:port --from --copy --replace help (show this help) For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster. 復制代碼
redis-trib.rb 是 redis 作者用 ruby 完成的。redis-trib.rb命令行工具的具體功能如下:
命令 作用 create 創(chuàng)建集群 check 檢查集群 info 查看集群信息 fix 修復集群 reshard 在線遷移slot rebalance 平衡集群節(jié)點slot數(shù)量 add-node 將新節(jié)點加入集群 del-node 從集群中刪除節(jié)點 set-timeout 設置集群節(jié)點間心跳連接的超時時間 call 在集群全部節(jié)點上執(zhí)行命令 import 將外部redis數(shù)據(jù)導入集群 3.3. 安裝集群
3.3.1. 啟動redis服務節(jié)點
運行如下命令啟動 6 臺 redis 節(jié)點:
sudo redis-server conf/redis-6379.conf
sudo redis-server conf/redis-6389.conf
sudo redis-server conf/redis-6380.conf
sudo redis-server conf/redis-6390.conf
sudo redis-server conf/redis-6381.conf
sudo redis-server conf/redis-6391.conf
復制代碼
啟動完成后,redis 以集群模式啟動,查看各個 redis 節(jié)點的進程狀態(tài):
$ ps -ef | grep redis-server
0 1908 1 0 4:59下午 0:00.01 redis-server *:6379 [cluster]
0 1911 1 0 4:59下午 0:00.01 redis-server *:6389 [cluster]
0 1914 1 0 4:59下午 0:00.01 redis-server *:6380 [cluster]
0 1917 1 0 4:59下午 0:00.01 redis-server *:6390 [cluster]
0 1920 1 0 4:59下午 0:00.01 redis-server *:6381 [cluster]
0 1923 1 0 4:59下午 0:00.01 redis-server *:6391 [cluster]
復制代碼
在每個 redis 節(jié)點的 redis.conf 文件中,我們都配置了 cluster-config-file 的文件路徑,集群啟動時,conf 目錄會新生成集群節(jié)點配置文件。查看文件列表如下:
$ tree -L 3 .
.
├── appendonly.aof
├── conf
│ ├── node-6379.conf
│ ├── node-6380.conf
│ ├── node-6381.conf
│ ├── node-6389.conf
│ ├── node-6390.conf
│ ├── node-6391.conf
│ ├── redis-6379.conf
│ ├── redis-6380.conf
│ ├── redis-6381.conf
│ ├── redis-6389.conf
│ ├── redis-6390.conf
│ └── redis-6391.conf
├── data
│ ├── redis-6379
│ ├── redis-6380
│ ├── redis-6381
│ ├── redis-6389
│ ├── redis-6390
│ └── redis-6391
├── log
│ ├── redis-6379.log
│ ├── redis-6380.log
│ ├── redis-6381.log
│ ├── redis-6389.log
│ ├── redis-6390.log
│ └── redis-6391.log
└── redis-trib.rb
9 directories, 20 files
復制代碼
3.3.2. redis-trib關聯(lián)集群節(jié)點
按照從主到從的方式從左到右依次排列 6 個 redis 節(jié)點。
$ sudo ./redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6389 127.0.0.1:6390 127.0.0.1:6391
復制代碼
集群創(chuàng)建后,redis-trib 會先將 16384 個哈希槽分配到 3 個主節(jié)點,即 redis-6379,redis-6380 和 redis-6381。然后將各個從節(jié)點指向主節(jié)點,進行數(shù)據(jù)同步。
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:6379
127.0.0.1:6380
127.0.0.1:6381
Adding replica 127.0.0.1:6390 to 127.0.0.1:6379
Adding replica 127.0.0.1:6391 to 127.0.0.1:6380
Adding replica 127.0.0.1:6389 to 127.0.0.1:6381
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: ad4b9ffceba062492ed67ab336657426f55874b7 127.0.0.1:6379
slots:0-5460 (5461 slots) master
M: df23c6cad0654ba83f0422e352a81ecee822702e 127.0.0.1:6380
slots:5461-10922 (5462 slots) master
M: ab9da92d37125f24fe60f1f33688b4f8644612ee 127.0.0.1:6381
slots:10923-16383 (5461 slots) master
S: 25cfa11a2b4666021da5380ff332b80dbda97208 127.0.0.1:6389
replicates ad4b9ffceba062492ed67ab336657426f55874b7
S: 48e0a4b539867e01c66172415d94d748933be173 127.0.0.1:6390
replicates df23c6cad0654ba83f0422e352a81ecee822702e
S: d881142a8307f89ba51835734b27cb309a0fe855 127.0.0.1:6391
replicates ab9da92d37125f24fe60f1f33688b4f8644612ee
復制代碼
然后輸入 yes,redis-trib.rb 開始執(zhí)行節(jié)點握手和槽分配操作,輸出如下:
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 127.0.0.1:6379)
M: ad4b9ffceba062492ed67ab336657426f55874b7 127.0.0.1:6379
slots:0-5460 (5461 slots) master
1 additional replica(s)
M: ab9da92d37125f24fe60f1f33688b4f8644612ee 127.0.0.1:6381
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: 48e0a4b539867e01c66172415d94d748933be173 127.0.0.1:6390
slots: (0 slots) slave
replicates df23c6cad0654ba83f0422e352a81ecee822702e
S: d881142a8307f89ba51835734b27cb309a0fe855 127.0.0.1:6391
slots: (0 slots) slave
replicates ab9da92d37125f24fe60f1f33688b4f8644612ee
M: df23c6cad0654ba83f0422e352a81ecee822702e 127.0.0.1:6380
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: 25cfa11a2b4666021da5380ff332b80dbda97208 127.0.0.1:6389
slots: (0 slots) slave
replicates ad4b9ffceba062492ed67ab336657426f55874b7
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
復制代碼
執(zhí)行集群檢查,檢查各個 redis 節(jié)點占用的哈希槽(slot)的個數(shù)以及 slot覆蓋率。16384 個槽位中,主節(jié)點redis-6379、redis-6380 和 redis-6381 分別占用了 5461、5461 和 5462 個槽位。
3.3.3. redis主節(jié)點的日志
可以發(fā)現(xiàn),通過 BGSAVE 命令,從節(jié)點redis-6389 在后臺異步地從主節(jié)點redis-6379 同步數(shù)據(jù)。
$ cat log/redis-6379.log
1907:C 05 Sep 16:59:52.960 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1907:C 05 Sep 16:59:52.961 # Redis version=4.0.11, bits=64, commit=00000000, modified=0, pid=1907, just started
1907:C 05 Sep 16:59:52.961 # Configuration loaded
1908:M 05 Sep 16:59:52.964 * Increased maximum number of open files to 10032 (it was originally set to 256).
1908:M 05 Sep 16:59:52.965 * No cluster configuration found, I'm ad4b9ffceba062492ed67ab336657426f55874b7
1908:M 05 Sep 16:59:52.967 * Running mode=cluster, port=6379.
1908:M 05 Sep 16:59:52.967 # Server initialized
1908:M 05 Sep 16:59:52.967 * Ready to accept connections
1908:M 05 Sep 17:01:17.782 # configEpoch set to 1 via CLUSTER SET-CONFIG-EPOCH
1908:M 05 Sep 17:01:17.812 # IP address for this node updated to 127.0.0.1
1908:M 05 Sep 17:01:22.740 # Cluster state changed: ok
1908:M 05 Sep 17:01:23.681 * Slave 127.0.0.1:6389 asks for synchronization
1908:M 05 Sep 17:01:23.681 * Partial resynchronization not accepted: Replication ID mismatch (Slave asked for '4c5afe96cac51cde56039f96383ea7217ef2af41', my replication IDs are '037b661bf48c80c577d1fa937ba55367a3692921' and '0000000000000000000000000000000000000000')
1908:M 05 Sep 17:01:23.681 * Starting BGSAVE for SYNC with target: disk
1908:M 05 Sep 17:01:23.682 * Background saving started by pid 1952
1952:C 05 Sep 17:01:23.683 * DB saved on disk
1908:M 05 Sep 17:01:23.749 * Background saving terminated with success
1908:M 05 Sep 17:01:23.752 * Synchronization with slave 127.0.0.1:6389 succeeded
復制代碼
參考
《Redis 開發(fā)與運維》
另外送福利了,關于Redis的學習腦圖
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
當前題目:Redis集群模式搭建與原理詳解-創(chuàng)新互聯(lián)
文章位置:http://www.rwnh.cn/article22/icgjc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供微信公眾號、企業(yè)建站、虛擬主機、網(wǎng)站設計、App設計、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容