目录
  • 1.Redis6.2.6简介以及环境规划
  • 2.二进制安装Redis程序
    • 2.1.二进制安装redis6.2.6
    • 2.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集群原理可以查看之前发布的文章。

    环境规划:

    架构图:

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

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

    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-scorehttp://www.cppcns.com-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]kuugtgbCjV
    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)查看各个节点生成的文件

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

    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
    14bd716bdc2726bfbf39ebkuugtgbCjV14c88f072970059676 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集群的问题

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

    基于Redis6.2.6版本部署Redis 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集群的问题

    到此这篇关于基于Redis6.2.6版本部署Redis Cluster集群的文章就介绍到这了,更多相关Redis Cluster集群部署内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!