首頁 > 軟體

基於Redis6.2.6版本部署Redis Cluster叢集的問題

2022-04-01 13:03:43

1.Redis6.2.6簡介以及環境規劃

在Redis6.x版本中主要增加了多執行緒的新特性,多線性對於高並行場景是非常有必要的。

Redis6.x新特性如下:

  • 多執行緒IO
  • 重新設計了使用者端快取功能
  • RESP3協定
  • 支援SSL
  • ACL許可權控制
  • 提升了RDB紀錄檔載入速度
  • 釋出官方的Redis叢集代理模組 Redis Cluster proxy

Redis Cluster叢集原理可以檢視之前釋出的文章。

環境規劃:

IP主機名埠號節點
192.168.20.10redis-cluster6701master
192.168.20.10redis-cluster6702slave—>6705的master
192.168.20.10redis-cluster6703master
192.168.20.10redis-cluster6704slave—>6701的master
192.168.20.10redis-cluster6705master
192.168.20.10redis-cluster6706slave—>6703的master

架構圖:

Reids叢集採用三主三從交叉複製架構,由於伺服器數量有限,在一臺機器中模擬出叢集的效果,在實際生產環境中,需要準備三臺機器,每臺機器中分別部署兩臺Redis節點,一主一從,交叉備份。

2.二進位制安裝Redis程式

2.1.二進位制安裝redis6.2.6

1.下載reids
[root@k8s-master1 /data/]# wget https://download.redis.io/releases/redis-6.2.6.tar.gz

2.解壓並安裝redis
[root@k8s-master1 /data/]# tar xf redis-6.2.6.tar.gz
[root@k8s-master1 /data/]# cd redis-6.2.6
[root@k8s-master1 /data/redis-6.2.6]# make

2.2.建立Reids Cluster叢集目錄

1.建立Redis Cluster各叢集節點的組態檔存放路徑
[root@k8s-master ~]# mkdir /data/redis-6.2.6-cluster/{bin,conf,data,var,logs} -p
[root@k8s-master ~]# ll /data/redis-6.2.6-cluster/
總用量 0
drwxr-xr-x 2 root root 6 3月  31 15:36 bin				#可執行檔案
drwxr-xr-x 2 root root 6 3月  31 15:36 conf				#組態檔
drwxr-xr-x 2 root root 6 3月  31 15:36 data				#資料檔案
drwxr-xr-x 2 root root 6 3月  31 15:36 log				#紀錄檔檔案
drwxr-xr-x 2 root root 6 3月  31 15:36 var				#pid檔案

2.準備redis可執行命令
[root@k8s-master1 /data/redis-6.2.6]# cp src/redis-benchmark /data/redis-6.2.6-cluster/bin
[root@k8s-master1 /data/redis-6.2.6]# cp src/redis-check-aof /data/redis-6.2.6-cluster/bin
[root@k8s-master1 /data/redis-6.2.6]# cp src/redis-check-rdb /data/redis-6.2.6-cluster/bin
[root@k8s-master1 /data/redis-6.2.6]# cp src/redis-cli /data/redis-6.2.6-cluster/bin
[root@k8s-master1 /data/redis-6.2.6]# cp src/redis-sentinel /data/redis-6.2.6-cluster/bin
[root@k8s-master1 /data/redis-6.2.6]# cp src/redis-server /data/redis-6.2.6-cluster/bin
[root@k8s-master1 /data/redis-6.2.6]# cp src/redis-trib.rb /data/redis-6.2.6-cluster/bin

3.設定Redis Cluster三主三從交叉複製叢集

3.1.準備六個節點的redis組態檔

redis6.2.6版本組態檔所有內容如下,主要設定帶註釋的行。

bind 0.0.0.0
protected-mode no				#關閉保護模式
port 6701						#埠號
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes						#後臺執行
pidfile /data/redis-6.2.6-cluster/var/redis_6701.pid				#pid存放
loglevel notice
logfile /data/redis-6.2.6-cluster/logs/redis_6701.log				#紀錄檔存放路徑
databases 16
always-show-logo yes												#是否顯示總紀錄檔
set-proc-title yes
proc-title-template "{title} {listen-addr} {server-mode}"
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename redis_6701.rdb												#持久化資料檔名稱
rdb-del-sync-files no
dir /data/redis-6.2.6-cluster/data										#持久化資料檔案存放路徑
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
lazyfree-lazy-user-flush no
oom-score-adj no
oom-score-adj-values 0 200 800
disable-thp yes
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
cluster-enabled yes										#開啟叢集模式
cluster-config-file nodes_6701.conf						 #叢集模式組態檔名稱
cluster-node-timeout 15000								#叢集超時時間
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes

1.複製二進位制中的組態檔

[root@k8s-master redis-6.2.6]# cp redis.conf /data/redis-6.2.6-cluster/conf/

2.Reids 6701節點組態檔內容

[root@k8s-master conf]# vim redis_6701.conf
bind 0.0.0.0					#監聽地址
protected-mode no				#關閉保護模式
port 6701						#埠號
daemonize yes						#後臺執行
pidfile /data/redis-6.2.6-cluster/var/redis_6701.pid				#pid存放路徑
logfile /data/redis-6.2.6-cluster/logs/redis_6701.log				#紀錄檔存放路徑
always-show-logo yes											 #是否顯示總紀錄檔
dbfilename redis_6701.rdb												#持久化資料檔名稱
dir /data/redis-6.2.6-cluster/data										#持久化資料檔案存放路徑
cluster-enabled yes										#開啟叢集模式
cluster-config-file nodes_6701.conf						 #叢集模式組態檔名稱
cluster-node-timeout 15000								#叢集超時時間

3.Reids 6702節點組態檔內容

[root@k8s-master conf]# vim redis_6702.conf
bind 0.0.0.0					#監聽地址
protected-mode no				#關閉保護模式
port 6702						#埠號
daemonize yes						#後臺執行
pidfile /data/redis-6.2.6-cluster/var/redis_6702.pid				#pid存放路徑
logfile /data/redis-6.2.6-cluster/logs/redis_6702.log				#紀錄檔存放路徑
always-show-logo yes											 #是否顯示總紀錄檔
dbfilename redis_6702.rdb												#持久化資料檔名稱
dir /data/redis-6.2.6-cluster/data										#持久化資料檔案存放路徑
cluster-enabled yes										#開啟叢集模式
cluster-config-file nodes_6702.conf						 #叢集模式組態檔名稱
cluster-node-timeout 15000								#叢集超時時間

4.Reids 6703節點組態檔內容

[root@k8s-master conf]# vim redis_6702.conf
bind 0.0.0.0					#監聽地址
protected-mode no				#關閉保護模式
port 6703						#埠號
daemonize yes						#後臺執行
pidfile /data/redis-6.2.6-cluster/var/redis_6703.pid				#pid存放路徑
logfile /data/redis-6.2.6-cluster/logs/redis_6703.log				#紀錄檔存放路徑
always-show-logo yes											 #是否顯示總紀錄檔
dbfilename redis_6703.rdb												#持久化資料檔名稱
dir /data/redis-6.2.6-cluster/data										#持久化資料檔案存放路徑
cluster-enabled yes										#開啟叢集模式
cluster-config-file nodes_6703.conf						 #叢集模式組態檔名稱
cluster-node-timeout 15000		

5.Reids 6704節點組態檔內容

[root@k8s-master conf]# vim redis_6702.conf
bind 0.0.0.0					#監聽地址
protected-mode no				#關閉保護模式
port 6704						#埠號
daemonize yes						#後臺執行
pidfile /data/redis-6.2.6-cluster/var/redis_6704.pid				#pid存放路徑
logfile /data/redis-6.2.6-cluster/logs/redis_6704.log				#紀錄檔存放路徑
always-show-logo yes											 #是否顯示總紀錄檔
dbfilename redis_6704.rdb												#持久化資料檔名稱
dir /data/redis-6.2.6-cluster/data										#持久化資料檔案存放路徑
cluster-enabled yes										#開啟叢集模式
cluster-config-file nodes_6704.conf						 #叢集模式組態檔名稱
cluster-node-timeout 15000		

6.Reids 6705節點組態檔內容

[root@k8s-master conf]# vim redis_6702.conf
bind 0.0.0.0					#監聽地址
protected-mode no				#關閉保護模式
port 6705						#埠號
daemonize yes						#後臺執行
pidfile /data/redis-6.2.6-cluster/var/redis_6705.pid				#pid存放路徑
logfile /data/redis-6.2.6-cluster/logs/redis_6705.log				#紀錄檔存放路徑
always-show-logo yes											 #是否顯示總紀錄檔
dbfilename redis_6705.rdb												#持久化資料檔名稱
dir /data/redis-6.2.6-cluster/data										#持久化資料檔案存放路徑
cluster-enabled yes										#開啟叢集模式
cluster-config-file nodes_6705.conf						 #叢集模式組態檔名稱
cluster-node-timeout 15000		

7.Reids 6706節點組態檔內容

[root@k8s-master conf]# vim redis_6702.conf
bind 0.0.0.0					#監聽地址
protected-mode no				#關閉保護模式
port 6706						#埠號
daemonize yes						#後臺執行
pidfile /data/redis-6.2.6-cluster/var/redis_6706.pid				#pid存放路徑
logfile /data/redis-6.2.6-cluster/logs/redis_6706.log				#紀錄檔存放路徑
always-show-logo yes											 #是否顯示總紀錄檔
dbfilename redis_6706.rdb												#持久化資料檔名稱
dir /data/redis-6.2.6-cluster/data										#持久化資料檔案存放路徑
cluster-enabled yes										#開啟叢集模式
cluster-config-file nodes_6706.conf						 #叢集模式組態檔名稱
cluster-node-timeout 15000		

3.2.將六個節點全部啟動

1)啟動redis各個節點

[root@k8s-master ~]# /data/redis-6.2.6-cluster/bin/redis-server /data/redis-6.2.6-cluster/conf/redis_6701.conf 
[root@k8s-master ~]# /data/redis-6.2.6-cluster/bin/redis-server /data/redis-6.2.6-cluster/conf/redis_6702.conf 
[root@k8s-master ~]# /data/redis-6.2.6-cluster/bin/redis-server /data/redis-6.2.6-cluster/conf/redis_6703.conf 
[root@k8s-master ~]# /data/redis-6.2.6-cluster/bin/redis-server /data/redis-6.2.6-cluster/conf/redis_6704.conf 
[root@k8s-master ~]# /data/redis-6.2.6-cluster/bin/redis-server /data/redis-6.2.6-cluster/conf/redis_6705.conf 
[root@k8s-master ~]# /data/redis-6.2.6-cluster/bin/redis-server /data/redis-6.2.6-cluster/conf/redis_6706.conf

2)檢視啟動的程序

[root@k8s-master ~]# ps aux | grep redis
root     22166  0.2  0.0 164964  3208 ?        Ssl  16:17   0:00 /data/redis-6.2.6-cluster/bin/redis-server 0.0.0.0:6701 [cluster]
root     22179  0.2  0.0 164964  3212 ?        Ssl  16:17   0:00 /data/redis-6.2.6-cluster/bin/redis-server 0.0.0.0:6702 [cluster]
root     22235  0.2  0.0 164964  3216 ?        Ssl  16:17   0:00 /data/redis-6.2.6-cluster/bin/redis-server 0.0.0.0:6703 [cluster]
root     23748  0.1  0.0 164964  3220 ?        Ssl  16:18   0:00 /data/redis-6.2.6-cluster/bin/redis-server 0.0.0.0:6704 [cluster]
root     24093  0.1  0.0 164964  3224 ?        Ssl  16:19   0:00 /data/redis-6.2.6-cluster/bin/redis-server 0.0.0.0:6705 [cluster]
root     24513  0.0  0.0 164964  3212 ?        Ssl  16:19   0:00 /data/redis-6.2.6-cluster/bin/redis-server 0.0.0.0:6706 [cluster]

3)檢視各個節點生成的檔案

3.3.設定叢集節點之間相互發現

在任意一個節點中操作即可。

[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6701
127.0.0.1:6701> CLUSTER MEET 192.168.20.10 6702
OK
127.0.0.1:6701> CLUSTER MEET 192.168.20.10 6703
OK
127.0.0.1:6701> CLUSTER MEET 192.168.20.10 6704
OK
127.0.0.1:6701> CLUSTER MEET 192.168.20.10 6705
OK
127.0.0.1:6701> CLUSTER MEET 192.168.20.10 6706
OK
127.0.0.1:6701> CLUSTER NODES
1de9d406a489e3aedc2f7743114f21700de5d151 192.168.20.10:6702@16702 master - 0 1648715495901 1 connected
f1d6f55a4a66fb97b3be2dff70cf0b8984a9de42 192.168.20.10:6704@16704 master - 0 1648715494000 0 connected
14bd716bdc2726bfbf39eb14c88f072970059676 192.168.20.10:6706@16706 master - 0 1648715494894 5 connected
7eb4466a8558ab389a9d92d115d5b420fa2a8ffc 192.168.20.10:6701@16701 myself,master - 0 1648715494000 2 connected
b7e93e3f3925c6db664afc59cb08c2abced2933d 192.168.20.10:6703@16703 master - 0 1648715494000 3 connected
c502c900224a0ae6173631746de92d012bd43da3 192.168.20.10:6705@16705 master - 0 1648715494000 4 connected

操作完成後會同步各節點的叢集組態檔中。

3.4.為叢集中的充當Master的節點分配槽位

1)分配槽位

[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6701 cluster addslots {0..5461}
OK
[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6703 cluster addslots {5462..10922}
OK
[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6705 cluster addslots {10923..16383}
OK

2)檢視叢集狀態

分配完槽位之後叢集的狀態就會處於ok。

[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6701
127.0.0.1:6701> 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:5
cluster_my_epoch:2
cluster_stats_messages_ping_sent:248
cluster_stats_messages_pong_sent:246
cluster_stats_messages_meet_sent:5
cluster_stats_messages_sent:499
cluster_stats_messages_ping_received:246
cluster_stats_messages_pong_received:253
cluster_stats_messages_received:499

3)檢視叢集中的節點資訊

雖然現在槽位已經分配完畢,但是當下叢集中所有的節點都處於Master角色,還是無法使用。

127.0.0.1:6701> CLUSTER NODES
1de9d406a489e3aedc2f7743114f21700de5d151 192.168.20.10:6702@16702 master - 0 1648715802089 1 connected
f1d6f55a4a66fb97b3be2dff70cf0b8984a9de42 192.168.20.10:6704@16704 master - 0 1648715802000 0 connected
14bd716bdc2726bfbf39eb14c88f072970059676 192.168.20.10:6706@16706 master - 0 1648715802000 5 connected
7eb4466a8558ab389a9d92d115d5b420fa2a8ffc 192.168.20.10:6701@16701 myself,master - 0 1648715803000 2 connected 0-5461
b7e93e3f3925c6db664afc59cb08c2abced2933d 192.168.20.10:6703@16703 master - 0 1648715803095 3 connected 5462-10922
c502c900224a0ae6173631746de92d012bd43da3 192.168.20.10:6705@16705 master - 0 1648715804100 4 connected 10923-16383

接下來去設定三主三從交叉複製模式,讓沒有槽位的節點複製有槽位的節點,也就是主從關係。

3.5.設定三主三從交叉複製模式

1)獲取叢集主節點的資訊

[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6701  cluster nodes | egrep '6701|6703|6705'  | awk '{print $1,$2}'
7eb4466a8558ab389a9d92d115d5b420fa2a8ffc 192.168.20.10:6701@16701
b7e93e3f3925c6db664afc59cb08c2abced2933d 192.168.20.10:6703@16703
c502c900224a0ae6173631746de92d012bd43da3 192.168.20.10:6705@16705

2)設定交叉複製

1.設定6702節點複製6705節點,充當6705 master節點的slave
[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6702
127.0.0.1:6702> CLUSTER REPLICATE c502c900224a0ae6173631746de92d012bd43da3
OK
2.設定6704節點複製6701節點,充當6701 master節點的slave
[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6704
127.0.0.1:6704> CLUSTER REPLICATE 7eb4466a8558ab389a9d92d115d5b420fa2a8ffc
OK
3.設定6706節點複製6703節點,充當6703 master節點的slave
[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6706
127.0.0.1:6706> CLUSTER REPLICATE b7e93e3f3925c6db664afc59cb08c2abced2933d
OK

3)檢視叢集節點資訊

已經是三主三從交叉複製叢集模式了。

[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6701
127.0.0.1:6701> CLUSTER NODES
1de9d406a489e3aedc2f7743114f21700de5d151 192.168.20.10:6702@16702 slave c502c900224a0ae6173631746de92d012bd43da3 0 1648716239215 4 connected
f1d6f55a4a66fb97b3be2dff70cf0b8984a9de42 192.168.20.10:6704@16704 slave 7eb4466a8558ab389a9d92d115d5b420fa2a8ffc 0 1648716236175 2 connected
14bd716bdc2726bfbf39eb14c88f072970059676 192.168.20.10:6706@16706 slave b7e93e3f3925c6db664afc59cb08c2abced2933d 0 1648716238000 3 connected
7eb4466a8558ab389a9d92d115d5b420fa2a8ffc 192.168.20.10:6701@16701 myself,master - 0 1648716237000 2 connected 0-5461
b7e93e3f3925c6db664afc59cb08c2abced2933d 192.168.20.10:6703@16703 master - 0 1648716238192 3 connected 5462-10922
c502c900224a0ae6173631746de92d012bd43da3 192.168.20.10:6705@16705 master - 0 1648716237184 4 connected 10923-16383

4.快速搭建Redis Cluster叢集

前提條件需要先將6個節點搭建起來,再使用下面的命令快速將三主三從叢集部署起來。

[root@redis-cluster redis-6.2.6-cluster]# /data/redis-6.2.6-cluster/bin/redis-cli --cluster create 192.168.20.10:6701 192.168.20.10:6702 192.168.20.10:6703 192.168.20.10:6704 192.168.20.10:6705 192.168.20.10:6706 --cluster-replicas 1 
Can I set the above configuration? (type 'yes' to accept): yes
#--cluster起到的作用就是省掉了節點發現、分配槽位、交叉複製的過程,自動替我們分配。

從輸出資訊中我們清晰的看到主從的複製關係以及分配的槽位。

>>> 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.20.10:6705 to 192.168.20.10:6701
Adding replica 192.168.20.10:6706 to 192.168.20.10:6702
Adding replica 192.168.20.10:6704 to 192.168.20.10:6703

6701、6702、6703節點為主節點,6704、6705、6706節點為從節點。

6704複製6703的主節點、6705複製6701的主節點、6706複製6702的主節點。

架構圖如下:

到此這篇關於基於Redis6.2.6版本部署Redis Cluster叢集的文章就介紹到這了,更多相關Redis Cluster叢集部署內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com