Redis集群模式-Cluster

  • Post author:
  • Post category:其他


Redis集群详解

Redis有三种集群模式,分别是:

* 主从模式

* Sentinel模式

* Cluster模式

三种集群模式各有特点,下面我只讲集群模式

Redis官网:https://redis.io/ ,最新版本6.2,需要的自行去下载

Cluster模式



Cluster模式介绍

1、采用去中心化的思想,没有中心节点的说法,它使用hash slot方式将16348个hash slot覆盖到所有节点上,对于存储的每个key值,使用CRC16(KEY)&16348=slot得到他对应的hash slot,

并在访问key的时候就去找他的hash slot在哪一个节点上,然后由当前访问节点从实际被分配了这个hash slot的节点去取数据,节点之间使用轻量协议通信 减少带宽占用 性能很高,自动实现负载均衡与高可用,自动实现failover并且支持动态扩展。

2、其内部中也需要配置主从,并且内部也是采用哨兵模式,如果有半数节点发现某个异常节点,共同决定更改异常节点的状态,如果改节点是主节点,则对应的从节点自动顶替为主节点,当原先的主节点上线后,则会变为从节点。

如果集群中的master没有slave节点,则master挂掉后整个集群就会进入fail状态,因为集群的slot映射不完整。如果集群超过半数以上的master挂掉,无论是否有slave,集群都会进入fail状态。

cluster可以说是sentinel和主从模式的结合体,通过cluster可以实现主从和master重选功能,所以如果配置两个副本三个分片的话,就需要六个Redis实例。因为Redis的数据是根据一定规则分配到cluster的不同机器的,当数据量过大时,可以新增机器进行扩容。

使用集群,需要将redis配置文件中的cluster-enable配置打开。每个集群中至少需要三个主数据库才能正常运行,新增节点非常方便。

cluster集群特点:

* 多个redis节点网络互联,数据共享

* 所有的节点都是一主一从(也可以是一主多从),其中从不提供服务,仅作为备用

* 不支持同时处理多个key(如MSET/MGET),因为redis需要把key均匀分布在各个节点上,
  并发量很高的情况下同时创建key-value会降低性能并导致不可预测的行为
  
* 支持在线增加、删除节点

* 客户端可以连接任何一个主节点进行读写


Cluster模式搭建


1、环境准备:

cd /home/toms/soft/redis/redis-cluster/ 
  1.创建目录
    /home/toms/soft/redis/redis-cluster/1001

    /home/toms/soft/redis/redis-cluster/1002

      /home/toms/soft/redis/redis-cluster/1003

    /home/toms/soft/redis/redis-cluster/1004

    /home/toms/soft/redis/redis-cluster/1005

    /home/toms/soft/redis/redis-cluster/1006

  2.修改redis.conf
    cd /home/toms/soft/redis/redis-cluster/1001

    vim redis.conf

    #修改如下键值对 并保存退出

复制代码
################################## NETWORK #####################################
#bind 127.0.0.1
protected-mode no
port 1001
################################# GENERAL #####################################
daemonize yes
pidfile "/var/run/redis_1001.pid"
logfile "/home/toms/soft/redis/redis-cluster/1001/log/redis.log"
################################ SNAPSHOTTING  ################################
dir "/home/toms/soft/redis/redis-cluster/1001/data"
################################ REDIS CLUSTER  ###############################
cluster-enabled yes
cluster-config-file nodes-1001.conf
cluster-node-timeout 15000
################################## SECURITY ###################################
requirepass "password"

备注:其他几个实例的配置文件修改同上配置即可,挨个改成对应端口信息


2、集群启动

1、使用redis-server    /usr/software/redis/redis-cluster/1001/redis.conf  …将所有节点挨个启动

2、启动后我们就可以创建集群,


注意:

在redis5.0后 创建集群统一使用redis-cli,以前的版本使用redis-trib.rb,但是需要安装ruby软件相对复杂,相比之前的版本5.0不需要安装额外的软件。具体的可以参照redis官方网站查看解释


https://redis.io/topics/cluster-tutorial

创建集群命令:其中 cluster-replicas 1  代表  一个master后有几个slave,1代表为1个slave节点

  redis-cli --cluster create 127.0.0.1:1001  127.0.0.1:1002 127.0.0.1:1003 127.0.0.1:1004 127.0.0.1:1005 127.0.0.1:1006 --cluster-replicas 1 -a password 

集群自动分配结果如下:



3、验证集群是否创建成功

首先查看一下主从配对情况

执行 :redis-cli -c -p 1001 -a password

数据自动分配到1002节点,连接也转移到1002 节点


4、验证故障转移

结论是主节点故障后,下挂从节点会升级成主节点,并接替主节点的槽位。旧主节点上线后,也只能作为其从节点。

kill 掉1001进程 ,发现其从节点1004转为了master

重新启动1001,其变成slave节点



版权声明:本文为u012272367原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。