相信小伙伴们都搭建过集群,这篇文章是我工作之余编写出来的,希望能给给位初学者一点帮助。
本篇文章在借助了csdn上的诸多博客和自己实践的基础上编写
废话不多说,开始。
1.一个问题,为什么要通过redis-cluster搭建集群?它的优势何在?
redis搭建集群一个有三种方式,主从复制,哨兵模式和我们的redis-cluster集群。主从复制的确解决了服务器的压力,它将写的操作交给我们的master主机,而读的操作交予了我们的slave.读写分离,很不错。
但是,这里有个问题,我们的slave挂掉了没关系,我们还有别的slave可以用,如果master挂掉了呢?这时候写操作不被允许,这就导致系统的可用性变差。但我们要将一台slave挂载到master上面时,会进行全量复制,此时如果多台slave同时启动挂载,会导致master IO剧增。
哨兵模式,通过启动哨兵监控master,如果这个master挂掉了,会选择其地下的slave作为新的master,我们原来的master从泉水出来之后,会作为slave挂载到新的master下面。通常哨兵也要搭个集群,防止哨兵无了,哨兵没了,这个集群又变成了主从复制。来介绍一下缺点吧,大家会问,已经有哨兵了,这个集群就具有高可用性了,还有什么不满足的。这里有个问题就是,你的那些master和slave都存储一样的数据,不是浪费吗?万一我的写操作较多,也没多大提升性能吧?
没错,这里引入redis-cluster,这里提供多个master和其对应的slave,这时候读写都快了吧,我的master中的数据也不一样了,内存利用效率也提高了。
2.redis-cluster的特点
1.所有的redis
节点彼此互联(PING
-PONG
机制),内部使用二进制协议优化传输速度和带宽。
2.节点的fail
是通过集群中超过半数的节点检测失效时才生效。
3.客户端与redis
节点直连,不需要中间代理层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
4.redis-cluster
把所有的物理节点映射到[0-16383
]slot
上,并负责维护
redis集群中内置16383个hash槽,当我们的key进来时,会通过redis的一个crc16算法算出一个结果,再将这个结果对163