Redis进阶--集群
目录
一、引言
二、介绍
三、搭建redis集群
四、故障
1.如果集群中有redis节点挂了会怎么样?
2.识别出某个节点是否挂了
3.集群宕机
五、集群扩容
六、总结
一、引言
本篇文章我们将介绍Redis服务器使用过程中的集群相关概念。
二、介绍
广义的集群:只要你是多个机器构成了一个分布式系统,都可以称为一个集群(主从结构)
狭义的集群:redis提供的集群模式,主要是为了解决存储空间不足的问题(拓展存储空间)
数据分片算法:
1.哈希求余:将key映射到整数,再针对数组长度进行求余,得到数据下标。一般是使用md5的计算方式
MD5的特性:
1.结果是定长的,结果都是固定长度
2.MD5
计算结果是分散的,两个字符串即使大部分相同,只要有一小点不同,结果的差别都是很大的
3.MD5计算结果是不可逆的
MD5不可逆,拿到MD5计算结果是不能算出原来的字符串的
2.一致性哈希算法:
一个圆盘,范围从0到2的32次方-1,利用哈希函数得到这个值之后放入到分片管辖区间
3.哈希槽分区算法(redis真正使用的)
共有16384个槽位,每个分片均匀地分配这些槽位。
三、搭建redis集群
在linux上,以.sh后缀结尾的文件,称为“shell脚本”
1.创建redis目录之后,再创建两个文件
2.使用脚本创建ip配置文件
四、故障
1.如果集群中有redis节点挂了会怎么样?
如果是从节点:没有什么实际影响,只不过会影响查询速度
如果是主节点:和之前哨兵的模式一样,会重新选举出一个leader,由leader选举出一个从节点变成主节点。
2.识别出某个节点是否挂了
1.A发送心跳包ping,B返回pong,这里的ping和pong除了message type属性不一致外,其他都一致(包含了集群的配置信息,该节点的id,该节点从属于哪个分片,是主节点还是从节点,从属于谁等)
2.每个节点,每秒钟都会随机给其他节点发送ping包,而不是全发
3.如果A给B发了ping,B没有回应pong,这时候A就会主动与B建立TCP连接,看能否连接成功,如果仍然失败,A就会把B设为PFAIL状态(相当于主观下线)
4.A判定B为PFAIL之后,会通过redis的Gossip协议,和其他节点进行沟通,去沟通B的状态
5.如果A发现很多节点都认为B为PFAIL之后,并且数目超过了总集群个数的一半,那么A就会把B标记为FAIL(客观下线),同时将这个信息同步给其他节点。
谁休眠时间短大概率会使新的主节点
3.集群宕机
1.某个分片,主节点和从节点都挂了
2.某个分片,主节点挂了,并且没有从节点
3.超过半数的master节点都挂了
五、集群扩容
添加了节点之后,从其他节点搬运部分槽
搬运过程中,如果有客户端进行访问,访问的是没搬运的key就可以访问,访问搬运的key可能会发生出错的情况
六、总结
本篇文章简单讲解了Redis中集群的使用,集群的使用情况是远远不如主从复制的,但是还是需要掌握,具体的命令也不用特意去背,要使用的时候去网上查阅即可,注意,集群扩容是十分谨慎的事情,要考虑好了再执行。