• Redis集群(三)Cluster集群


    在哨兵模式中,仍然只有一个Master节点,当并发写请求较大时,无法缓解写的压力,在3.0版本Redis-Cluster出现解决了这个问题

    Redis-Cluster集群特点:

      1)由多个Redis服务器组成的分布式网络服务集群

      2)集群之中由多个Master主节点,每一个主节点都可读可写

      3)节点之间相互通信,两两相连

      4)Redis集群无中心节点

    在Redis-Cluster集群中,可以为每一个主节点添加从结点,主节点和从结点遵循主从模型的特性(添加从节点可以扩展系统的读性能)

    Redis-Cluster集群的故障转移机制:

      Redis-Cluster集群的故障转移机制和Redis Sentinel基本一样,区别在于Redis-Cluster集群的故障转移是由集群中其他在线的主节点负责进行的,所以集群不必另外使用Redis Sentinel

    Redis-Cluster集群分片策略:

      分片策略主要是解决key存储位置的

      集群将整个数据库分为16384个槽位(solt),所有的key-value数据都存储在这些solt的某一个中,而一个槽位可以存放多个数据,key的槽位计算公式为:slot_number=crc16(key)%16384,其中crc16为16位循环冗余校验和函数。

      集群中的每个主节点都可以处理0个至16383个槽,当16384个槽都有某个节点在负责处理时,集群进入上线状态(反之则处于瘫痪状态),并开始处理客户端发送的数据命令请求。

     Redis-Cluster集群redirect

      由于Redis集群无中心节点,请求会随机发给任意主节点:

      

      主节点只会处理自己负责槽位的命令请求,其它槽位的命令请求,该主节点会返回客户端一个转向错误;

      客户端根据错误中包含的地址和端口重新向正确的负责的主节点发起命令请求。

    配置流程:

    1.环境搭建

      1.1安装ruby环境

     

      1.2安装ruby和redis的接口程序,利用xftp将redis-3.0.0.gem拷贝至/usr/local下安装

    2.集群的规划

      由于物理机数量有限,本文将采用同一台主机构建一个伪分布式集群,以不同端口表示不同的redis节点:

      主节点:192.168.93.4:7001 192.168.93.4:7002 192.168.93.5:7003

      从结点:192.168.93.4:7004 192.168.93.4:7005 192.168.93.5:7006

      在/usr/local/下创建redis-cluster目录,7001~7006

    3.将redis解压路径下的配置文件redis.conf,依次拷贝到7001~7006目录中,并修改(port、bind、protected-mode、cluster)

    建议配置(daemonized  yes 后台启动,logfile  /usr/local/redis/redis-cluster/700X/node.log日志输出位置)

    7001的配置

    其他节点配置同7001

    4.指定各个节点的配置文件启动客户端

    5.执行创建集群的命令(进入redis安装源码src下)

    创建成功

    利用客户端查看集群信息

    -c表示以集群方式连接redis

    -h指定ip地址,

    -p指定端口号

    cluster nodes 查询集群结点信息;

    cluster info 查询集群状态信。

    添加主节点:

    下面是添加一个master主节点添加7007节点,添加一个“7007”目录作为新节点,配置信息同前面7001~7006配置

     

    通过客户端7007发现已加入到集群中

    为7007节点分配hash槽,才能存储数据

     1)先连上集群

    2)输入hash槽的数量

    3)输入7007节点的id值

    4)输入分配槽点的源节点id

    输入all则为从每一主节点中分配

    5)同意分配计划,或取消重新分配

    通过客户端查看集群状态

     添加从节点(先配置7008的基础信息,同上7001~7007)

    到src目录下添加从节点

    添加成功

    通过客户端查看集群状态

  • 相关阅读:
    html-关于IE浏览器兼容性的问题,还有浏览器一直加载的问题。
    MyEclipse2015 javaweb项目从svn检出后变成java项目,clean之后不能编译,解决办法是
    Netty4 initAndRegister 解析
    Netty源码分析之NioEventLoop(转)
    深入NIO Socket实现机制(转)
    Netty组件介绍(转)
    Netty4 ServerBootstrap 初始化channelFactory ReflectiveChannelFactory
    netty4 ServerBootstrap.bind(port) debug
    Netty4详解三:Netty架构设计(转)
    主流开源流媒体服务器有哪些?(转)
  • 原文地址:https://www.cnblogs.com/lch-Hao/p/10961617.html
Copyright © 2020-2023  润新知