zoukankan      html  css  js  c++  java
  • Redis Cluster架构和设计机制简单介绍

    之前另一篇文章也介绍了 Redis Cluster (link,在文章的后半部分)

    今天看到这一篇,简单说一下(http://hot66hot.iteye.com/blog/2050676)

    作者的目标:Redis Cluster will support up to ~1000 nodes. 赞...

    目前redis支持的cluster特性(已测试):

    1):节点自动发现

    2):slave->master 选举,集群容错

    3):Hot resharding:在线分片

    4):集群管理:cluster xxx

    5):基于配置(nodes-port.conf)的集群管理

    6):ASK 转向/MOVED 转向机制.

    1)redis-cluster架构图

    架构细节:

    (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

    (2)节点的fail是通过集群中超过半数的master节点检测失效时才生效.

    (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

    (4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->key

    2) redis-cluster选举:容错

    (1)选举过程是集群中所有master参与,如果半数以上master节点与故障节点通信超过(cluster-node-timeout),认为该节点故障,自动触发故障转移操作.

    (2):什么时候整个集群不可用(cluster_state:fail)? 

        a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完整时进入fail状态.

    ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.

        b:如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态.

    ps:当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误

    二:redis cluster的使用

    忽略。现在基本用单机版Redis,通过master-slave + (Partition 或者 Pre-sharding) 方式来进行。挺好。

    redis-cluster客户端的一些坑.

    1)cluster环境下slave默认不接受任何读写操作,在slave执行readonly命令后,可执行读操作

    2)client端不支持多key操作(mget,mset等),但当keys集合对应的slot相同时支持mget操作见:hash_tag

    3)不支持多数据库,只有一个db,select 0。

    4)JedisCluster 没有针对byte[]的API,需要自己扩展(附件是我加的基于byte[]的BinaryJedisCluster  api)

  • 相关阅读:
    AOC的服务还不错
    浅谈Java、MySQL的中文排序问题
    祝cnBlogs的Blogger们新年快乐!
    GT 3.9.4以及今天的工作
    堆排序
    桶排序
    常用排序算法稳定性分析
    VS2010远程调试环境配置详解
    基数排序
    如何修改数据库的服务器名称
  • 原文地址:https://www.cnblogs.com/charlesblc/p/6033570.html
Copyright © 2011-2022 走看看