陆小曼|redis cluster搭建实践(非常详细,值得收藏)

【陆小曼|redis cluster搭建实践(非常详细,值得收藏)】一、Redis Cluster(Redis集群)简介

  • redis是一个开源的key value存储系统 , 受到了广大互联网公司的青睐 。
  • redis集群采用P2P模式 , 是完全去中心化的 , 不存在中心节点或者代理节点;
  • redis集群是没有统一的入口的 , 客户端(client)连接集群的时候连接集群中的任意节点(node)即可 , 集群内部的节点是相互通信的(PING-PONG机制) , 每个节点都是一个redis实例;
  • 为了实现集群的高可用 , 即判断节点是否健康(能否正常使用) , redis-cluster有这么一个投票容错机制:如果集群中超过半数的节点投票认为某个节点挂了 , 那么这个节点就挂了(fail) 。 这是判断节点是否挂了的方法;
  • 那么如何判断集群是否挂了呢? -> 如果集群中任意一个节点挂了 , 而且该节点没有从节点(备份节点) , 那么这个集群就挂了 。 这是判断集群是否挂了的方法;
  • 那么为什么任意一个节点挂了(没有从节点)这个集群就挂了呢? -> 因为集群内置了16384个slot(哈希槽) , 并且把所有的物理节点映射到了这16384[0-16383]个slot上 , 或者说把这些slot均等的分配给了各个节点 。 当需要在Redis集群存放一个数据(key-value)时 , redis会先对这个key进行crc16算法 , 然后得到一个结果 。 再把这个结果对16384进行求余 , 这个余数会对应[0-16383]其中一个槽 , 进而决定key-value存储到哪个节点中 。 所以一旦某个节点挂了 , 该节点对应的slot就无法使用 , 那么就会导致集群无法正常工作 。
  • 综上所述 , 每个Redis集群理论上最多可以有16384个节点 。
二、集群搭建需要的环境2.1 Redis集群至少需要3个节点 , 因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了 , 所以2个节点无法构成集群 。2.2 要保证集群的高可用 , 需要每个节点都有从节点 , 也就是备份节点 , 所以Redis集群至少需要6台服务器 。 因为我没有那么多服务器 , 也启动不了那么多虚拟机 , 所在这里搭建的是伪分布式集群 , 即一台服务器虚拟运行6个redis实例 , 修改端口号为(7001-7006) , 当然实际生产环境的Redis集群搭建和这里是一样的 。 2.3 安装ruby三、集群搭建具体步骤如下(注意要关闭防火墙)3.1 在usr/local目录下新建redis-cluster目录 , 用于存放集群节点
陆小曼|redis cluster搭建实践(非常详细,值得收藏)3.2 把redis目录下的bin目录下的所有文件复制到/usr/local/redis-cluster/redis01目录下 , 不用担心这里没有redis01目录 , 会自动创建的 。 操作命令如下(注意当前所在路径):
cp -r redis/bin/ redis-cluster/redis011
陆小曼|redis cluster搭建实践(非常详细,值得收藏)3.3 删除redis01目录下的快照文件dump.rdb , 并且修改该目录下的redis.cnf文件 , 具体修改两处地方:一是端口号修改为7001 , 二是开启集群创建模式 , 打开注释即可 。 分别如下图所示:删除dump.rdb文件
陆小曼|redis cluster搭建实践(非常详细,值得收藏)修改端口号为7001,默认是6379
陆小曼|redis cluster搭建实践(非常详细,值得收藏)将cluster-enabled yes 的注释打开
陆小曼|redis cluster搭建实践(非常详细,值得收藏)3.4 将redis-cluster/redis01文件复制5份到redis-cluster目录下(redis02-redis06) , 创建6个redis实例 , 模拟Redis集群的6个节点 。 然后将其余5个文件下的redis.conf里面的端口号分别修改为7002-7006 。 分别如下图所示:创建redis02-06目录