今天在学习中看到几个概念容易混淆,记录一下以备以后查阅。
目录
前言
今天在学习中看到几个概念我自己觉得容易混淆,记录一下以备以后查阅。
一、Redis是什么?
Redis是一个开源的键值存储系统,它以其高性能和灵活性而著称。Redis 不仅仅是一个简单的键值数据库,还支持多种数据结构,如字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(zset)、位图(bitmaps)、超日志(hyperloglogs)和地理空间索引(geospatial indexes)等。
二、redis高可用解决方案
1.主从复制架构
Redis单点部署不能保证数据的高可用,在这种情况下很容易想到的处理方法就是做数据备份,也就是把数据备份部署到其他节点上,也就通过redis复制进行数据冗余备份,保证服务的高可靠性。
下面是主从复制执行的步骤:
1.从redis服务器启动,与主redis建立连接
2.主节点接收到数据同步命令后, 会开一个fork子进程生成RDB数据快照。在开始备份RDB期间主节点会缓存客户端所有的写入操作命令。
3. RDB持久化完成后,主节点会将RDB文件和缓存的写入操作的命令发送给从节点,这就叫做复制。
4. 复制完成后,客户端每一个写入的命令都会同时同步给从节点。
5.如果主从断开连接重新连接后会根据断开之前最新的命令偏移量进行增量复制 。
2.哨兵(Sentinal)
哨兵是redis中非常重要的组件,主要是解决主从复制出现故障时需要认为干预的问题。主要用于监控主从复制架构中的主节点和从节点,并在主节点发生故障时进行自动故障转移。主要功能如下:
1.监控:负责监控Redis master和slave节点的健康状态。
2.消息通知:当检测到故障时,哨兵会发送报警给管理员。
3.故障转移:当master节点出现故障时,哨兵会自动选择一个slave节点提升为主节点,恢复服务。
4.配置更新:如果故障转移发生了,会更新client客户端配置,使客户端指向新的主节点。
3.如何保证主从复制架构的高可用
当主节点出现故障时,由 Redis Sentinel 自动完成故障发现和转移,并通知应用方,实现高可用性。为了增强 Sentinel 的高可用性,通常会部署多个 Sentinel 实例,形成一个 Sentinel 集群。如下图所示:
- 哨兵机制,建立多个哨兵节点(进程),共同监控数据节点的运行状态。
- 同时哨兵节点也相互通信,交换对主从节点的监控状况
- 每隔1秒每个哨兵项整个集群:Master节点+Slave节点+其他Sentinel节点,发送一次ping命令做一次心跳检查。
哨兵如何判断节点是否正常:
1.主观下线:一个哨兵判定节点down掉是主观下线。
2.客观下线:只有半数哨兵节点都主观判定节点down掉,此时多个哨兵节点交换主观判定结果,才会判定节点客观下线。
3.原理:那个哨兵节点最先判断出节点客观下线,就会在各个哨兵节点发起投票机制Raft算法(选举算法),最终被投为领导者的哨兵节点完成故障转移任务。
3.redis集群架构
为了解决单机 Redis 容量有限的问题,将数据按一定的规则分配到多台机器,内存/QPS不受限于单机,可受益于分布式集群高扩展性。通过添加服务器的数量,提供相同的服务,使服务器达到一个稳定、高效的状态。
Redis集群就是多个Redis节点一起工作的模式,没有代理节点和中心节点,各个节点平等。集群中的每个Redis实例都被视为一个节点。
Redis集群通过分片来保存数据库中的键值对,即整个数据库被分为多个槽(slot),每个键都属于这些槽中的一个,每个节点负责维护一部分槽以及槽所映射的键值数据。
Redis集群的特点
- 数据自动切分:集群能够自动将数据切分到多个节点上,实现数据的水平扩展。
- 高可用性:当集群中的某一个节点故障时,Redis集群能够继续处理客户端的请求,通过复制和故障转移机制来保证服务的可用性。
- 无中心化:Redis集群没有中心节点,任何一台Redis服务器都可以作为集群的入口,实现了去中心化的设计。
- 负载均衡:通过分片机制,集群能够自动实现数据的负载均衡,提高系统的整体性能。
Redis集群的槽位分配
- Redis集群有16384个哈希槽(slot),这些槽会分配给集群中的所有主节点,分配策略没有严格要求。
- 集群中的每个节点(master)负责一部分hash槽,当需要在Redis集群中放置一个key-value时,Redis会先对key使用CRC16算法算出一个结果,然后用结果对16384求余数,余数对应的槽即为该key所在的槽位。
- 集群会记录节点和槽的对应关系,客户端在存取数据时,会根据key的哈希槽找到对应的节点进行操作。
总结
1.主从模式用于redis的高可用
2.集群用于提高redis的并发量
3.哨兵用于监控主从模式中的各个节点状态,保证主从模式下redis节点故障自动转移。