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