redis集群

  • redis集群原理

    由于redis是内存型数据库,因此想承载大量的缓存需要加集群,redis集群实现原理是一致性哈希,即把key先做hash运算,得到一个32位的整数,然后对redis的slot总数取模,再把key放到slot对应的redis节点上。若当前连接的redis节点上不存在要查询的key,此时会自动重定向key所在的redis节点,因此redis集群不支持涉及多个key的命令,例如集合取交集。

  • redis集群搭建

    由于redis集群采用投票容错机制,即有一半以上投票某个master节点挂了,才认为此节点不可用,需要用相应的slave节点替换,因此 redis集群至少需要3个master和3个slave节点,为了方便演示采用一个虚拟机同时启动6个实例的方式。

    1. 启动6个实例

     mkdir redis-cluster
     cd redis-cluster
     mkdir redis1
     cp redis-server redis1
     cp redis.conf redis1
     依次6份复制redis1
     把redis.conf配置项cluster-enabled设置为yes,port改为7701、7702...7706
     最后依次启动redis-server
    

    2. 创建集群

     redis-cli --cluster create 127.0.0.1:7701 127.0.0.1:7702 127.0.0.1:7703 127.0.0.1:7704 127.0.0.1:7705 127.0.0.1:7706 --cluster-replicas 1
    
  • 添加节点

    1. 添加主节点到集群

    redis-cli --cluster add-node 127.0.0.1:7707 127.0.0.1:7701

    2. 分配哈希槽

    redis-cli --cluster reshard 127.0.0.1:7701
    可选择分配多少哈希槽,以及分配方式

    3. 添加从节点到集群

    redis-cli --cluster add-node 127.0.0.1:7708 127.0.0.1:7701

    4. 构建主从关系

    登录到7708:redis-cli -c -p 7708
    执行集群复制命令:cluster replicate fccadebeb5b769bd084369e5cbe391979fb53b40
    fccadebeb5b769bd084369e5cbe391979fb53b40为7707的节点id

  • 删除节点

    1. 重分配哈希槽

    redis-cli --cluster reshard 127.0.0.1:7701
    源节点选择7707,哈希槽个数选择全部,接受节点随机选一个即可

    2. 删除主节点、从节点

    redis-cli --cluster del-node 127.0.0.1:7701 masterID
    redis-cli --cluster del-node 127.0.0.1:7701 slaveID
    masterID为主节点id,slaveID为从节点的id

标签: none

添加新评论