大数据开发:Redis 3.0集群模式的三个重点
Redis 3.0开始引入集群模式,面对分布式环境当中的各种数据处理需求,集群模式高可用、可扩展性、分布式、容错等特性,显然是更加具有竞争力的。今天的大数据开发学习分享,我们就主要来讲讲Redis3.0集群模式的三个重点。
Redis集群模式
集群模式是社区版推出的Redis分布式集群解决方案,主要解决Redis分布式方面的需求,比如,当遇到单机内存,并发和流量等瓶颈的时候,Redis Cluster能起到很好的负载均衡的目的。
集群模式主要三个重要点,分别是槽指派、重新分片、故障转移。
槽指派
Redis集群采用虚拟槽分区,所有的键根据哈希函数映射到0~16383个整数槽内,每个节点负责维护一部分槽以及槽所印映射的键值数据。只有当redis所有的槽(16384)都被分配完了系统才能跑起来。
如果集群中的master没有slave节点,则master挂掉后整个集群就会进入fail状态,因为集群的slot映射不完整。如果集群超过半数以上的master挂掉,无论是否有slave,集群都会进入fail状态。
系统可以通过CRC16(KEY)&16348=slot计算出哪个槽(slot)在那个节点上。
集群内的每个节点又会有一个数据结构存储整个集群内的节点信息。槽指派的信息是分了两种方式,保存在结构体里面:
数组:如果需要判断一个节点负责的槽,只需要获取一个数组判断。
列表:如果找某一个槽是哪个节点负责的,可以用列表查找。
重新分片
重新分片是指将已经指派了的槽重新进行分配给节点。
主要流程
重新分片是指已指派给了节点的槽指派给另一个节点,同时,键值跟随移动,线上执行,无需下线,可用redis-trib进行搭建配置。
过程主要是将槽的键值从源节点迁到目标节点。并向集群中发送命令,将槽中指向目标节点。
其中可能会有访问问题,因为数据进行了迁移,所以访问数据时会先查看数据是否在源节点的数据库,如果是则直接返回,否则会查看是否正在迁移槽;如果正在迁移槽则可能在目标节点,否则这个key就不存在。
故障转移
跟sentinel模式有相似之处,主要是多了个重新分片过程,而且sentinel是通过sentinel来监测和处理节点节点的状态和故障,而集群模式是节点自己相互监测。
故障迁移主要有以下三个部分——
1)发现故障点
集群内的节点会向其他的节点发送ping命令,如果未按时返回pong命令(答复),则这个节点会被标记为疑似下线(类似sentinel的主观下线),如果一半以上的节点都认为这个节点下线了,则这个节点就会被集群广播(类似sentinel中的客观下线),各个节点都会修改配置把这个节点真正下线。大家收到消息后都会把自己维护的结构体里的主节点X标记为已下线
2)从节点选举
当从节点发现自己的主节点下线后,会广播要求自己选为新的主节点(有槽指派的才有投票权,也就是主节点),投票者会给收到申请的第一个节点投票,超过半数则这个节点就会成为主节点。
3)故障迁移
新当选的从节点执行SLAVEOF no one,修改成主节点,使自己成为主节点,槽指派给自己,并向集群发命令,通知其他节点自己已经变成主节点了,负责哪些槽指派。新的主节点开始处理自己负责的槽的命令。
关于大数据开发学习,Redis 3.0集群模式的三个重点,以上就为大家做了简单的讲解了。Redis集群模式,在实际开发当中也是最常使用的,在学习阶段要去吃透才行。