基于Redis6.2.6版本部署Redis Cluster集群 #yyds干货盘点#

时人不识凌云木,直待凌云始道高。这篇文章主要讲述基于Redis6.2.6版本部署Redis Cluster集群 #yyds干货盘点#相关的知识,希望能为你提供帮助。
基于Redis6.2.6版本部署Redis Cluster集群@[TOC]
1.Redis6.2.6简介以及环境规划在Redis6.x版本中主要增加了多线程的新特性,多线性对于高并发场景是非常有必要的。
Redis6.x新特性如下:

  • 多线程IO
  • 重新设计了客户端缓存功能
  • RESP3协议
  • 支持SSL
  • ACL权限控制
  • 提升了RDB日志加载速度
  • 发布官方的Redis集群代理模块 Redis Cluster proxy
Redis Cluster集群原理可以查看之前发布的文章。
环境规划:
IP 主机名 端口号 节点
192.168.20.10 redis-cluster 6701 master
192.168.20.10 redis-cluster 6702 slave---> 6705的master
192.168.20.10 redis-cluster 6703 master
192.168.20.10 redis-cluster 6704 slave---> 6701的master
192.168.20.10 redis-cluster 6705 master
192.168.20.10 redis-cluster 6706 slave---> 6703的master
架构图:
Reids集群采用三主三从交叉复制架构,由于服务器数量有限,在一台机器中模拟出集群的效果,在实际生产环境中,需要准备三台机器,每台机器中分别部署两台Redis节点,一主一从,交叉备份。
基于Redis6.2.6版本部署Redis Cluster集群 #yyds干货盘点#

文章图片

2.二进制安装Redis程序 2.1.二进制安装redis6.2.6
1.下载reids [root@k8s-master1 /data/]# wget https://download.redis.io/releases/redis-6.2.6.tar.gz2.解压并安装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 root221660.20.0 1649643208 ?Ssl16:170:00 /data/redis-6.2.6-cluster/bin/redis-server 0.0.0.0:6701 [cluster] root221790.20.0 1649643212 ?Ssl16:170:00 /data/redis-6.2.6-cluster/bin/redis-server 0.0.0.0:6702 [cluster] root222350.20.0 1649643216 ?Ssl16:170:00 /data/redis-6.2.6-cluster/bin/redis-server 0.0.0.0:6703 [cluster] root237480.10.0 1649643220 ?Ssl16:180:00 /data/redis-6.2.6-cluster/bin/redis-server 0.0.0.0:6704 [cluster] root240930.10.0 1649643224 ?Ssl16:190:00 /data/redis-6.2.6-cluster/bin/redis-server 0.0.0.0:6705 [cluster] root245130.00.0 1649643212 ?Ssl16:190:00 /data/redis-6.2.6-cluster/bin/redis-server 0.0.0.0:6706 [cluster]

3)查看各个节点生成的文件
基于Redis6.2.6版本部署Redis Cluster集群 #yyds干货盘点#

文章图片

3.3.配置集群节点之间相互发现
【基于Redis6.2.6版本部署Redis Cluster集群 #yyds干货盘点#】在任意一个节点中操作即可。
[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 OK127.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

操作完成后会同步各节点的集群配置文件中。
基于Redis6.2.6版本部署Redis Cluster集群 #yyds干货盘点#

文章图片

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 6701cluster 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 OK2.配置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 OK3.配置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起到的作用就是省掉了节点发现、分配槽位、交叉复制的过程,自动替我们分配。

基于Redis6.2.6版本部署Redis Cluster集群 #yyds干货盘点#

文章图片

从输出信息中我们清晰的看到主从的复制关系以及分配的槽位。
> > > 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集群 #yyds干货盘点#

文章图片


    推荐阅读