您好,登錄后才能下訂單哦!
updated: 09/05/2019
Redis Cluster 的主要特點如下:
本文以部署一個可實現高可用的最小集群為例,集群部署在三臺主機上,包含 M1、M2、M3、S1、S2、S3 六個節點。
M1、M2、M3 為主節點對應 Redis 實例:7000,7001,7002
S1、S2、S3 為從節點對應 Redis 實例:7003,7004,7005
主從節點交叉連接,對應關系為:
M1 -> S2
M2 -> S3
M3 -> S1
系統環境:
主機 | IP | 節點-角色-實例(端口) |
---|---|---|
redis1 | 192.168.0.100 | M1-master-7000、S1-slave-7003 |
redis2 | 192.168.0.101 | M2-master-7001、S2-slave-7004 |
redis3 | 192.168.0.102 | M3-master-7002、S3-slave-7005 |
分別在三臺主機上編譯安裝 redis 5.0.4 版本。
安裝完畢建議將 redis bin 目錄加入 PATH 環境變量
參考步驟 4.1 - 4.3,分別在三臺主機上進行 Redis 集群配置。
創建集群各節點配置和數據目錄。
mkdir -p /data/redis-cluster/{7000,7001}
以 redis1 為例,目錄結構如下:
/data/redis-cluster/
├── 7000
│?? ├── redis.conf # redis 實例配置文件
│?? └── nodes.conf # redis 集群節點的配置文件(由集群自動創建)
└── 7003
│?? ├── redis.conf # redis 實例配置文件
│?? └── nodes.conf # redis 集群節點的配置文件(由集群自動創建)
分別復制 redis 源碼目錄下的 redis.conf 至節點配置和數據目錄。
編輯 redis 實例配置文件中的各項配置。redis 默認未開啟集群功能,需修改下面幾個配置開啟:
port 7000
bind 0.0.0.0 # 允許其他主機連接
dir /data/redis-cluster/7000 # 節點實例配置目錄
cluster-enabled yes # 開啟集群
cluster-config-file nodes.conf # 集群配置文件
cluster-node-timeout 5000 # 超時時間
appendonly yes # 并開啟AOF模式
請根據生產環境性能需求和實際部署情況修改相關配置項,注意每個節點的實例配置文件中端口不同。
根據情況修改服務器防火墻配置,允許 Redis 主機互相連接 7000-7005, 17000-17005 端口,允許所有業務服務器連接 Redis 服務器的 7000-7005 端口。
分別在三臺主機上啟動全部 6 個 redis 節點實例,啟動時指定配置文件為各自節點配置目錄中的 redis.conf。
在任意一臺 redis 節點主機上執行如下命令啟動集群:
redis-cli --cluster create \
--cluster-replicas 1 \
192.168.0.100:7000 \
192.168.0.100:7001 \
192.168.0.101:7002 \
192.168.0.101:7003 \
192.168.0.102:7004 \
192.168.0.102:7005
注意修改命令中的 IP 為 redis 節點實例端口對應的真實主機 IP。
根據提示輸入yes
,出現下列信息則表示集群創建成功。
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
在任意一個 redis 節點的主機上執行以下命令:
# redis-cli -c -h 192.168.0.100 -p 7000 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:101
cluster_stats_messages_pong_sent:98
cluster_stats_messages_sent:199
cluster_stats_messages_ping_received:93
cluster_stats_messages_pong_received:101
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:199
在任意一個 redis 節點的主機上執行以下命令,列出集群當前已知的所有節點(node),以及這些節點的相關信息。
# redis-cli -c -h 192.168.0.100 -p 7000 cluster nodes
輸出類似以下信息:
50725018cd7f5f20214b0ed462975258397dfe29 192.168.0.102:7005@17005 slave 39e335386bb48f012f433287ed853174009114e5 0 1554876136000 6 connected
8874f69c2f5747cce3a02387167a00cdaba43d3c 192.168.0.100:7001@17001 master - 0 1554876137380 2 connected 5461-10922
c9cb48efbc1a83098cb730a5295402d9cdb343c2 192.168.0.101:7003@17003 slave 917301c74a9ed1ed52918b8e4c7f88de9743c361 0 1554876136375 4 connected
5633e918818033552b1adc089d99fbe9bcf36589 192.168.0.102:7004@17004 slave 8874f69c2f5747cce3a02387167a00cdaba43d3c 0 1554876136072 5 connected
917301c74a9ed1ed52918b8e4c7f88de9743c361 192.168.0.100:7000@17000 myself,master - 0 1554876136000 1 connected 0-5460
39e335386bb48f012f433287ed853174009114e5 192.168.0.101:7002@17002 master - 0 1554876136878 3 connected 10923-16383
在任意一個 redis 節點的主機上執行以下命令,顯示集群當前所有數據槽的分配情況。
# redis-cli -c -h 192.168.0.100 -p 7000 cluster slots
輸出類似以下信息:
1) 1) (integer) 5461
2) (integer) 10922
3) 1) "127.0.0.1"
2) (integer) 7001
4) 1) "127.0.0.1"
2) (integer) 7004
2) 1) (integer) 0
2) (integer) 5460
3) 1) "127.0.0.1"
2) (integer) 7000
4) 1) "127.0.0.1"
2) (integer) 7003
3) 1) (integer) 10923
2) (integer) 16383
3) 1) "127.0.0.1"
2) (integer) 7002
4) 1) "127.0.0.1"
2) (integer) 7005
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。