写点什么

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

作者:jiangxl
  • 2022 年 5 月 18 日
  • 本文字数:8092 字

    阅读完需:约 27 分钟

基于 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 集群原理可以查看之前发布的文章。


环境规划:



架构图:


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/总用量 0drwxr-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.0protected-mode no        #关闭保护模式port 6701            #端口号tcp-backlog 511timeout 0tcp-keepalive 300daemonize yes            #后台运行pidfile /data/redis-6.2.6-cluster/var/redis_6701.pid        #pid存放loglevel noticelogfile /data/redis-6.2.6-cluster/logs/redis_6701.log        #日志存放路径databases 16always-show-logo yes                        #是否显示总日志set-proc-title yesproc-title-template "{title} {listen-addr} {server-mode}"stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yesdbfilename redis_6701.rdb                        #持久化数据文件名称rdb-del-sync-files nodir /data/redis-6.2.6-cluster/data                    #持久化数据文件存放路径replica-serve-stale-data yesreplica-read-only yesrepl-diskless-sync norepl-diskless-sync-delay 5repl-diskless-load disabledrepl-disable-tcp-nodelay noreplica-priority 100acllog-max-len 128lazyfree-lazy-eviction nolazyfree-lazy-expire nolazyfree-lazy-server-del noreplica-lazy-flush nolazyfree-lazy-user-del nolazyfree-lazy-user-flush nooom-score-adj nooom-score-adj-values 0 200 800disable-thp yesappendonly noappendfilename "appendonly.aof"appendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mbaof-load-truncated yesaof-use-rdb-preamble yeslua-time-limit 5000cluster-enabled yes                    #开启集群模式cluster-config-file nodes_6701.conf             #集群模式配置文件名称cluster-node-timeout 15000                #集群超时时间slowlog-log-slower-than 10000slowlog-max-len 128latency-monitor-threshold 0notify-keyspace-events ""hash-max-ziplist-entries 512hash-max-ziplist-value 64list-max-ziplist-size -2list-compress-depth 0set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64hll-sparse-max-bytes 3000stream-node-max-bytes 4096stream-node-max-entries 100activerehashing yesclient-output-buffer-limit normal 0 0 0client-output-buffer-limit replica 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60hz 10dynamic-hz yesaof-rewrite-incremental-fsync yesrdb-save-incremental-fsync yesjemalloc-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.confbind 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.confbind 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.confbind 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.confbind 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.confbind 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.confbind 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 redisroot     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 6701127.0.0.1:6701> CLUSTER MEET 192.168.20.10 6702OK127.0.0.1:6701> CLUSTER MEET 192.168.20.10 6703OK127.0.0.1:6701> CLUSTER MEET 192.168.20.10 6704OK127.0.0.1:6701> CLUSTER MEET 192.168.20.10 6705OK127.0.0.1:6701> CLUSTER MEET 192.168.20.10 6706OK
127.0.0.1:6701> CLUSTER NODES1de9d406a489e3aedc2f7743114f21700de5d151 192.168.20.10:6702@16702 master - 0 1648715495901 1 connectedf1d6f55a4a66fb97b3be2dff70cf0b8984a9de42 192.168.20.10:6704@16704 master - 0 1648715494000 0 connected14bd716bdc2726bfbf39eb14c88f072970059676 192.168.20.10:6706@16706 master - 0 1648715494894 5 connected7eb4466a8558ab389a9d92d115d5b420fa2a8ffc 192.168.20.10:6701@16701 myself,master - 0 1648715494000 2 connectedb7e93e3f3925c6db664afc59cb08c2abced2933d 192.168.20.10:6703@16703 master - 0 1648715494000 3 connectedc502c900224a0ae6173631746de92d012bd43da3 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 6701127.0.0.1:6701> CLUSTER INFOcluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:6cluster_size:3cluster_current_epoch:5cluster_my_epoch:2cluster_stats_messages_ping_sent:248cluster_stats_messages_pong_sent:246cluster_stats_messages_meet_sent:5cluster_stats_messages_sent:499cluster_stats_messages_ping_received:246cluster_stats_messages_pong_received:253cluster_stats_messages_received:499
复制代码


3)查看集群中的节点信息


虽然现在槽位已经分配完毕,但是当下集群中所有的节点都处于 Master 角色,还是无法使用。


127.0.0.1:6701> CLUSTER NODES1de9d406a489e3aedc2f7743114f21700de5d151 192.168.20.10:6702@16702 master - 0 1648715802089 1 connectedf1d6f55a4a66fb97b3be2dff70cf0b8984a9de42 192.168.20.10:6704@16704 master - 0 1648715802000 0 connected14bd716bdc2726bfbf39eb14c88f072970059676 192.168.20.10:6706@16706 master - 0 1648715802000 5 connected7eb4466a8558ab389a9d92d115d5b420fa2a8ffc 192.168.20.10:6701@16701 myself,master - 0 1648715803000 2 connected 0-5461b7e93e3f3925c6db664afc59cb08c2abced2933d 192.168.20.10:6703@16703 master - 0 1648715803095 3 connected 5462-10922c502c900224a0ae6173631746de92d012bd43da3 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@16701b7e93e3f3925c6db664afc59cb08c2abced2933d 192.168.20.10:6703@16703c502c900224a0ae6173631746de92d012bd43da3 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 6702127.0.0.1:6702> CLUSTER REPLICATE c502c900224a0ae6173631746de92d012bd43da3OK
2.配置6704节点复制6701节点,充当6701 master节点的slave[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6704127.0.0.1:6704> CLUSTER REPLICATE 7eb4466a8558ab389a9d92d115d5b420fa2a8ffcOK
3.配置6706节点复制6703节点,充当6703 master节点的slave[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6706127.0.0.1:6706> CLUSTER REPLICATE b7e93e3f3925c6db664afc59cb08c2abced2933dOK
复制代码


3)查看集群节点信息


已经是三主三从交叉复制集群模式了。


[root@redis-cluster ~]# /data/redis-6.2.6-cluster/bin/redis-cli -p 6701127.0.0.1:6701> CLUSTER NODES1de9d406a489e3aedc2f7743114f21700de5d151 192.168.20.10:6702@16702 slave c502c900224a0ae6173631746de92d012bd43da3 0 1648716239215 4 connectedf1d6f55a4a66fb97b3be2dff70cf0b8984a9de42 192.168.20.10:6704@16704 slave 7eb4466a8558ab389a9d92d115d5b420fa2a8ffc 0 1648716236175 2 connected14bd716bdc2726bfbf39eb14c88f072970059676 192.168.20.10:6706@16706 slave b7e93e3f3925c6db664afc59cb08c2abced2933d 0 1648716238000 3 connected7eb4466a8558ab389a9d92d115d5b420fa2a8ffc 192.168.20.10:6701@16701 myself,master - 0 1648716237000 2 connected 0-5461b7e93e3f3925c6db664afc59cb08c2abced2933d 192.168.20.10:6703@16703 master - 0 1648716238192 3 connected 5462-10922c502c900224a0ae6173631746de92d012bd43da3 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 - 5460Master[1] -> Slots 5461 - 10922Master[2] -> Slots 10923 - 16383Adding replica 192.168.20.10:6705 to 192.168.20.10:6701Adding replica 192.168.20.10:6706 to 192.168.20.10:6702Adding replica 192.168.20.10:6704 to 192.168.20.10:6703
复制代码


6701、6702、6703 节点为主节点,6704、6705、6706 节点为从节点。


6704 复制 6703 的主节点、6705 复制 6701 的主节点、6706 复制 6702 的主节点。


架构图如下:



用户头像

jiangxl

关注

还未添加个人签名 2022.04.27 加入

还未添加个人简介

评论

发布
暂无评论
基于Redis6.2.6版本部署Redis Cluster集群_jiangxl_InfoQ写作社区