基于Redis6.2.6版本部署Redis Cluster集群

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 基于Redis6.2.6版本部署Redis Cluster集群文章目录基于Redis6.2.6版本部署Redis Cluster集群1.Redis6.2.6简介以及环境规划2.二进制安装Redis程序2.1.二进制安装redis6.2.62.2.创建Reids Cluster集群目录3.配置Redis Cluster三主三从交叉复制集群3.1.准备六个节点的redis配置文件3.2.将六个节点全部启动3.3.配置集群节点之间相互发现3.4.为集群中的充当Master的节点分配槽位3.5.配置三主三从交叉复制模式4.快速搭建Redis Cluster集群

1.Redis6.2.6简介以及环境规划

在Redis6.x版本中主要增加了多线程的新特性,多线性对于高并发场景是非常有必要的。


Redis6.x新特性如下:

多线程IO

重新设计了客户端缓存功能

RESP3协议

支持SSL

ACL权限控制

提升了RDB日志加载速度

发布官方的Redis集群代理模块 Redis Cluster proxy

Redis Cluster集群原理可以查看之前发布的文章。

环境规划:image.png架构图:

Reids集群采用三主三从交叉复制架构,由于服务器数量有限,在一台机器中模拟出集群的效果,在实际生产环境中,需要准备三台机器,每台机器中分别部署两台Redis节点,一主一从,交叉备份。

2.二进制安装Redis程序

2.1.二进制安装redis6.2.6

1.下载reids
[root@redis-cluster /data/]# wget https://download.redis.io/releases/redis-6.2.6.tar.gz
2.解压并安装redis
[root@redis-cluster /data/]# tar xf redis-6.2.6.tar.gz
[root@redis-cluster /data/]# cd redis-6.2.6
[root@redis-cluster /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@redis-cluster /data/redis-6.2.6]# cp src/redis-benchmark /data/redis-6.2.6-cluster/bin
[root@redis-cluster /data/redis-6.2.6]# cp src/redis-check-aof /data/redis-6.2.6-cluster/bin
[root@redis-cluster /data/redis-6.2.6]# cp src/redis-check-rdb /data/redis-6.2.6-cluster/bin
[root@redis-cluster /data/redis-6.2.6]# cp src/redis-cli /data/redis-6.2.6-cluster/bin
[root@redis-cluster /data/redis-6.2.6]# cp src/redis-sentinel /data/redis-6.2.6-cluster/bin
[root@redis-cluster /data/redis-6.2.6]# cp src/redis-server /data/redis-6.2.6-cluster/bin
[root@redis-cluster /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的主节点。

架构图如下:

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
存储 NoSQL 算法
09- Redis分片集群中数据是怎么存储和读取的 ?
Redis分片集群使用哈希槽分区算法,包含16384个槽(0-16383)。数据存储时,通过CRC16算法对key计算并模16383,确定槽位,进而分配至对应节点。读取时,根据槽位找到相应节点直接操作。
66 12
|
1月前
|
NoSQL Linux Redis
06- 你们使用Redis是单点还是集群 ? 哪种集群 ?
**Redis配置:** 使用哨兵集群,结构为1主2从,加上3个哨兵节点,总计分布在3台Linux服务器上,提供高可用性。
365 0
|
1天前
|
存储 监控 NoSQL
Redis哨兵&分片集群
Redis哨兵&分片集群
6 0
|
3天前
|
NoSQL 算法 Java
深入浅出Redis(八):Redis的集群模式
深入浅出Redis(八):Redis的集群模式
|
8天前
|
NoSQL Redis
透视Redis集群:心跳检测如何维护高可用性
Redis心跳检测保障集群可靠性,通过PING命令检测主从连接状态,预防数据丢失。当连接异常时,自动触发主从切换。此外,心跳检测辅助实现`min-slaves-to-write`和`min-slaves-max-lag`策略,避免不安全写操作。还有重传机制,确保命令无丢失,维持数据一致性。合理配置心跳检测,能有效防止数据问题,提升Redis集群的高可用性。关注“软件求生”获取更多Redis知识!
109 10
透视Redis集群:心跳检测如何维护高可用性
|
11天前
|
监控 NoSQL 算法
Redis集群模式:高可用性与性能的完美结合!
小米探讨Redis集群模式,通过一致性哈希分散负载,主从节点确保高可用性。节点间健康检测、主备切换、数据复制与同步、分区策略和Majority选举机制保证服务可靠性。适合高可用性及性能需求场景,哨兵模式则适用于简单需求。一起学习技术的乐趣!关注小米微信公众号“软件求生”获取更多内容。
44 11
Redis集群模式:高可用性与性能的完美结合!
|
12天前
|
监控 NoSQL Redis
|
16天前
|
NoSQL Redis Docker
使用Docker搭建Redis主从集群
使用Docker搭建Redis主从集群
32 1
|
17天前
|
存储 NoSQL 算法
Redis 搭建分片集群
Redis 搭建分片集群
27 2
|
17天前
|
监控 NoSQL 算法
Redis 搭建哨兵集群
Redis 搭建哨兵集群
21 1