houbin 发表于 2018-11-4 11:09:30

Redis Cluster集群搭建测试

  # Redis Clutser #
  ## 一、Redis Cluster集群 ##
  参考资料:
  http://www.cnblogs.com/lykxqhh/p/5690923.html
  Redis集群搭建的方式有多种,例如使用zookper等,但从redis3.0之后版本支持redis cluster集群,Redis Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。其redis cluster架构图如下:

  其结构特点:
  1、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
  2、节点的fail机制是通过集群中超过半数的节点检测失效时才生效。
  3、客户端与redis节点直连,不需要中间件proxy层。客户端不需要连接集群所有节点,连接集群中其中一和可用节点即可。
  4、redis cluster把所有的物理节点映射到slot上(不一定平均分配),cluster负责维护nodeslotvalue。
  5、Redis集群预分配好16384个桶,当需要在Redis集群中放置一个key-value时,根据CRC16(key)mod 16384的值,决定一个key放到哪个桶中。
  1、redis cluster节点分配
  ----------
  现在我们是三个主节点分别是A、B、C三个节点,他们可以是一台机器上的三个端口,也可以是三台不同的服务器。那么,采用哈希槽(hash slot)的方式来分配16384个slot的话,它们三个节点分别承担的slot区间是:
  节点A覆盖0-5460;
  节点B覆盖5461-10922;
  节点C覆盖10923-16384.
  获取数据:
  如果存入一个值,按照redis clsuter哈希槽的算法:CRC16('key')%16384=6782。那么就会把这个key分配存储在B上了。同样,当我连接(A、B、C)任何一个节点想获取'key'这个key时,也会这样的算法,然后内部跳转到B节点上获取数据。
  新增一个主节点:
  新增一个主节点D,redis cluster的这种做法是从各个节点的前面各拿取一部分slot到D上,我会在接下来的实践中实验。大致就会变成这样:
  A节点覆盖1365-5460;
  B节点覆盖6827-10922;
  C节点覆盖12888-16384;
  D节点覆盖0-1364,5461-6826,10923-12287
  同样删除一个节点也是类似,移动完成后就可以删除这个节点了。
  2、Redis Cluster主从模式
  ----------
  redis cluster为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提取数据存储,从节点则是从主节点拉去数据备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉。
  上面那个例子里,集群有ABC三个主节点,如果这三个节点都没有加入从节点,如果B挂掉了,我们就无法访问整个集群了。A和B的slot也无法访问了。
  所以我们在集群建立的时候,一定要为每个主节点都添加了从节点,比如像这样,集群包含主节点A、B、C以及从节点A1、B1、C1,那么即使B挂掉系统也可以继续正确工作。
  B1节点替代了B节点,所以Redis集群将会选择B1节点作为新的主节点,集群将会继续正确地提供服务。当B重新开启后,它就会变成B1的从节点。
  不过需要注意,如果节点B和B1同时挂掉了,Redis集群就无法正确地提供服务了。
  ## 二、redis集群的搭建 ##
  集群中至少应该有奇数个节点,所以至少有三个节点,每个节点至少有一个备份节点,所以下面使用6节点(主节点、备份节点由redis-cluster集群确定)。
  下面使用redis-3.2.5.tar.gz
  1、安装redis节点指定端口
  ----------
  实验环境:
  10.69.213.127 bj05-ops-mongodb04.test.gomeplus.com
  cd /opt
  wget http://download.redis.io/releases/redis-3.2.5.tar.gz
  tar -zxf redis-3.2.5.tar.gz
  cd redis-3.2.5
  make PREFIX=/usr/local/redis install
  mkdir -p /gomeo2o/data/redis/9000/db
  mkdir -p /gomeo2o/logs/redis/9000
  mkdir -p /usr/local/redis/etc
  rm -rf /usr/sbin/redis-*
  cat > /usr/local/redis/etc/redis_9000.conf/etc/sysctl.conf
  echo never > /sys/kernel/mm/transparent_hugepage/enabled
  sysctl -p
  cat >>/etc/rc.local
页: [1]
查看完整版本: Redis Cluster集群搭建测试