哨兵服务器?哨兵模式有什么用
玩转Redis的高可用(主从、哨兵、集群)
所谓的高可用,也叫 HA(High Availability),是分布式系统架构设计中必须考虑的因素之一,它是保证系统SLA的重要指标。Redis高可用的主要有三种模式:主从模式,哨兵模式和集群模式。
Redis提供了 Redis提供了复制(replication)功能,当一台 redis数据库中的数据发生了变化,这个变化会被自动地同步到其他的 redis机器上去。
Redis多机器部署时,这些机器节点会被分成两类,一类是主节点(master节点),一类是从节点(slave节点)。一般主节点可以进行读、写操作,而从节点只能进行读操作。一个主节点可以有多个从节点,但是一个从节点只会有一个主节点,也就是所谓的一主多从结构。
·支持主从复制,主机会自动将数据同步到从机,可以进行读写分离;
· Master是以非阻塞的方式为主 Slaves提供服务。所以在 Master-Slave同步期间,客户端仍然可以提交查询或修改请求;
· Slave同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据。
· Redis不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的 IP才能恢复;
·主机宕机,宕机前有部分数据未能及时同步到从机,切换 IP后面还会引入数据不一致的问题,降低了系统的可用性;
· Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂;
· Redis的主节点和从节点中的数据是一样的,降低的内存的可用性
实际生产中,我们优先考虑哨兵模式。这种模式下,master宕机,哨兵会自动选举 master并将其他的 slave指向新的 master。
在主从模式下,redis同时提供了哨兵命令 redis-sentinel,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵进程向所有的 redis机器人发送命令,等待 Redis服务器响应,从而监控运行的多个 Redis实例。一般为了便于决策选举,使用奇数个哨兵。多个哨兵构成一个哨兵集群,哨兵直接也会相互通信,检查哨兵是否正常运行,同时发现 master战机哨兵之间会进行决策选举新的 master
哨兵模式的作用:
·通过发送命令,让 Redis服务器返回监控其运行状态,包括主服务器和从服务器;
·然而一个哨兵进程对 Redis服务器进行监控,也可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多种哨兵模式。
哨兵很像 kafka集群中的 zookeeper的功能。
·哨兵模式是基于主从模式的,所有主从的优点,哨兵模式都具有。
·主从可以自动切换,系统更健壮,可用性更高。
·具有主从模式的缺点,每台机器上的数据是一样的,内存的可用性较低。
· Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。
Redis集群模式本身没有使用一致性 hash算法,而是使用 slots插槽。
Redis哨兵模式基本已经可以实现高可用,读写分离,但是在这种模式下每台 Redis服务器都存储相同的数据,很浪费内存,所以在 redis3.0上加入了 Cluster集群模式,实现了 Redis的分布式存储,对数据进行分片,也就是说每台 Redis节点上存储不同的内容;每个节点都会通过集群总线(cluster bus),与其他的节点进行通信。通讯时使用特殊的端口号,即对外服务端口号加 10000。例如如果某个 node的端口号是 6379,那么它与其它 nodes通信的端口号是 16379。nodes之间的通信采用特殊的二进制协议。
对客户端来说,整个 cluster被看做是一个整体,客户端可以连接任意一个 node进行操作,就像操作单一 Redis实例一样,当客户端操作的时候 key没有分配到该 node上时,Redis会返回转向指令,指向正确的 node,这有点儿像浏览器页面的 302 redirect跳转。
根据官方推荐,集群部署至少要 3台以上的 master节点,最好使用 3主 3从六个节点的模式。
在 Redis的每一个节点上,都有这么两个东西,一个是插槽(slot),它的的取值范围是:0-16383,可以从上面 redis-trib.rb执行的结果看到这 16383个 slot在三个 master上的分布。还有一个就是 cluster,可以理解为是一个集群管理的插件,类似的哨兵。
当我们的存取的 Key到达的时候,Redis会根据 crc16的算法对计算后得出一个结果,然后把结果和 16384求余数,这样每个 key都会对应一个编号在 0-16383之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。
为了保证高可用, redis-cluster集群引入了主从模式,一个主节点对应一个或者多个从节点。当其它主节点 ping主节点 master 1时,如果半数以上的主节点与 master 1通信超时,那么认为 master 1宕机了,就会启用 master 1的从节点 slave 1,将 slave 1变成主节点继续提供服务。
如果 master 1和它的从节点 slave 1都宕机了,整个集群就会进入 fail状态,因为集群的 slot映射不完整。如果集群超过半数以上的 master挂掉,无论是否有 slave,集群都会进入 fail状态。
redis-cluster采用去中心化的思想,没有中心节点的说法,客户端与 Redis节点直连,不需要中间代理层,客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
对 redis集群的扩容就是向集群中添加机器,缩容就是从集群中删除机器,并重新将 16383个 slots分配到集群中的节点上(数据迁移)。
扩缩容也是使用集群管理工具 redis-tri.rb。
扩容时,先使用 redis-tri.rb add-node将新的机器加到集群中,这是新机器虽然已经在集群中了,但是没有分配 slots,依然是不起做用的。在使用 redis-tri.rb reshard进行分片重哈希(数据迁移),将旧节点上的 slots分配到新节点上后,新节点才能起作用。
缩容时,先要使用 redis-tri.rb reshard移除的机器上的 slots,然后使用 redis-tri.rb add-del移除机器。
采用去中心化思想,数据按照 slot存储分布在多个节点,节点间数据共享,可动态调整数据分布;
可扩展性:可线性扩展到 1000多个节点,节点可动态添加或删除;
高可用性:部分节点不可用时,集群仍可用。通过增加 Slave做 standby数据副本,能够实现故障自动 failover,节点之间通过 gossip协议交换状态信息,用投票机制完成 Slave到 Master的角色提升;
降低运维成本,提高系统的扩展性和可用性。
1.Redis Cluster是无中心节点的集群架构,依靠 Goss协议(谣言传播)协同自动化修复集群的状态。但 GosSIp有消息延时和消息冗余的问题,在集群节点数量过多的时候,节点之间需要不断进行 PING/PANG通讯,不必须要的流量占用了大量的网络资源。虽然 Reds4.0对此进行了优化,但这个问题仍然存在。
2.数据迁移问题
Redis Cluster可以进行节点的动态扩容缩容,这一过程,在目前实现中,还处于半自动状态,需要人工介入。在扩缩容的时候,需要进行数据迁移。
而 Redis为了保证迁移的一致性,迁移所有操作都是同步操作,执行迁移时,两端的 Redis均会进入时长不等的阻塞状态,对于小 Key,该时间可以忽略不计,但如果一旦 Key的内存使用过大,严重的时候会接触发集群内的故障转移,造成不必要的切换。
主从模式:master节点挂掉后,需要手动指定新的 master,可用性不高,基本不用。
哨兵模式:master节点挂掉后,哨兵进程会主动选举新的 master,可用性高,但是每个节点存储的数据是一样的,浪费内存空间。数据量不是很多,集群规模不是很大,需要自动容错容灾的时候使用。
集群模式:数据量比较大,QPS要求较高的时候使用。 Redis Cluster是 Redis 3.0以后才正式推出,时间较晚,目前能证明在大规模生产环境下成功的案例还不是很多,需要时间检验。
哨兵模式是什么意思
哨兵模式是一种安全保护状态或模式,主要用于增强设备或系统的安全性。
哨兵模式通常在设备或系统受到潜在威胁时自动启动。当处于哨兵模式时,系统会采取一系列措施来保护数据安全和设备安全。这种模式的核心在于预防潜在的安全风险,确保设备和数据不受损害。以下是关于哨兵模式的
1.基本定义:哨兵模式可以被视为一种防御状态,类似于人类社会中保安或哨兵在警戒时的状态。一旦设备或系统检测到异常行为或潜在威胁,就会进入哨兵模式。这种模式通常用于计算机、服务器、网络设备等。
2.功能特点:在哨兵模式下,系统会加强安全防护措施。这可能包括增强防火墙、启动实时监控、限制未经授权的访问等。此外,系统还可能进行自动更新,以应对新出现的安全威胁。
3.实际应用:在现代社会中,许多设备都具备进入哨兵模式的功能。例如,某些智能家居设备在检测到异常活动时会自动进入哨兵模式,关闭不必要的端口并加强安全防护。智能手机和电脑在检测到恶意软件或异常行为时,也可能会自动启动哨兵模式以保护用户数据。
4.重要性:哨兵模式的重要性在于其能主动识别并应对潜在的安全风险。在网络安全形势日益严峻的背景下,启用哨兵模式能够极大地提高设备的安全性,保护用户的数据不受损害。
总的来说,哨兵模式是一种重要的安全保护状态,能够在面对潜在威胁时增强设备或系统的安全性。通过采取一系列措施来预防安全风险,哨兵模式在现代社会中被广泛应用,并发挥着重要作用。
什么是redis哨兵模式
哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。
Sentinel(哨兵)是Redis的高可用性解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。(推荐学习:Redis视频教程)
主要功能
1、不时地监控redis是否按照预期良好地运行;
2、如果发现某个redis节点运行出现状况,能够通知另外一个进程(例如它的客户端);
3、能够进行自动切换。当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中的一个来作为新的master,其它的slave节点会将它所追随的master的地址改为被提升为master的slave的新地址。
4、哨兵为客户端提供服务发现,客户端链接哨兵,哨兵提供当前master的地址然后提供服务,如果出现切换,也就是master挂了,哨兵会提供客户端一个新地址。
更多redis相关技术知识,请访问Redis使用入门教程栏目学习!