提到哨兵我们第一个印象就是和安全保卫方面相关的。那么在Redis中也是一样的,它也是保卫Redis的运行安全的。 为了解决以上各种问题,于是Redis在2.8版本之后提供了Redis Sentinel(哨兵)功能来解决这种问题。所以这一篇中我们主要介绍Redis Sentinel的详细使用。 如果被标识的节点是主节点,它会和其它的Sentinel节点进行商量,并且当大多数Sentinel节点都认为主节点不可用时,它们会选举出一个Sentinel节点来完成自动故障转移功能,同时Redis Sentinel ---- 部署Sentinel节点 下面我们看一下Sentinel节点的具体配置: 1.配置Sentinel节点 port 26379 sentinel monitor mymaster 127.0.0.1 ---- 2.启动Sentinel节点 Sentinel节点的启动方法有两种: 方法一:使用redis-sentinal命令: redis-sentinel redis-sentinel-26379.conf
--sentinel 配置文件: sentinel monitor mymaster 127.0.0.1 6379 2 //主服务器名称 ip port 判定失效投票数 sentinel down-after-milliseconds mymaster 60000 //sentinel判定服务器失效所需的毫秒数 sentinel failover-timeout mymaster 180000 //故障转移时限 sentinel parallel-syncs :监视相同主机的sentinel实例,通过订阅发布功能实现相互发现,频道: _sentinel_:hello 从服务器发现:sentinel实例通过询问主服务来获取其下从属服务器信息: 发现流程 | sentinel 从订阅的 主从服务器 sentinel:hello 频道 获取监视的sentinel信息 从订阅的 主从服务器 sentinel:hello 哨兵是为了解决单点故障问题
Redis 哨兵模式(Sentinel)就是一个自动地监控处理 redis 间故障节点转移工作的一个「东西」,准确来说,Sentinel 其实是一个 redis 服务端程序,只不过运行在特殊的模式下,不提供数据存储服务 一、什么是哨兵(Sentinel) Sentinel 其实也是一个 redis 的服务端程序,它也会定时执行 serverCron 函数,只是里面其他的程序用不到,用到的是对普通 redis 节点的监控以及故障转移模块 第四步,启动 Sentinel: 使用命令,redis-sentinel [config],启动三个 sentinel。 ? 二、Sentinel 如何工作的 当我们使用命令 redis-sentinel 启动 sentinel 的时候, int main(int argc, char **argv) { 。。。。。 如果是以 sentinel 启动,则会进行一个 sentinel 的初始化操作。
(哨兵)机制,可以实现自动化的故障转移,无需人工介入。 一:什么是Sentinel(哨兵) Sentinel是一中运行模式,不提供任何的读写过程,它只负责运行特殊的Redis命令执行自动化的故障转移。 /path/to/sentinel.conf --sentinel Redis的源码中sentinel.conf 就是用来配置Sentinel的 // 指定要监视的 master // 127.0.0.1 6379 2 // master 节点宕机多长时间才会被 sentinel 认为是失效 sentinel down-after-milliseconds mymaster 60000 sentinel 这样做的目的是为了 防止误判,毕竟故障转移的开销还是比较大的,这也是为什么 Redis 官方推荐部署多个 sentinel 节点 (哨兵集群)。
在Redis安装目录下有一个sentinel.conf文件,copy一份进行修改 # 禁止保护模式 protected-mode no # 配置监听的主服务器,这里sentinel monitor代表监控 服务器密码 # sentinel auth-pass <master-name> <password> sentinel auth-pass mymaster 123456 上述关闭了保护模式,便于测试 /redis.conf # 启动哨兵进程 ./redis-sentinel ../sentinel.conf 注意启动的顺序。 sentinel down-after-milliseconds配置项只是一个哨兵在超过规定时间依旧没有得到响应后,会自己认为主机不可用。对于其他哨兵而言,并不是这样认为。 哨兵会记录这个消息,当拥有认为主观下线的哨兵达到sentinel monitor所配置的数量时,就会发起一次投票,进行failover,此时哨兵会重写Redis的哨兵配置文件,以适应新场景的需要。
M 个哨兵节点(Sentinel):通常为奇数个(如 3 个或 5 个),分布在不同的机器/网络分区上,用于监控和决策。 判定主节点客观下线 当某个哨兵认为主节点“主观下线”后,它会向其他哨兵节点发送 SENTINEL is-master-down-by-addr 命令,询问它们是否也认为该主节点已下线。 发布新配置 故障转移完成后,领导者哨兵会向所有哨兵节点广播新的主节点地址和配置纪元。所有哨兵会更新自己的配置。 客户端连接到哨兵集群时,哨兵会返回当前有效的主节点地址,客户端据此进行连接。 客户端向哨兵请求当前的主节点地址(SENTINEL get-master-addr-by-name <master-name>)。 哨兵返回当前有效的主节点地址和端口。 哨兵的 Quorum 数通常设置为 哨兵总数/2 + 1(例如 3 个哨兵,quorum 设为 2)。 哨兵节点不需要强大的硬件,但必须保证网络连通性良好。
Redis Sentinel哨兵模式部署主从模式的弊端就是不具备高可用性,当master挂掉以后,Redis将不能再对外提供写入操作,因此sentinel模式应运而生。 sentinel中文含义为哨兵,顾名思义,它的作用就是监控redis集群的运行状况,此模式具有如下一些特点:sentinel模式是建立在主从模式的基础上,如果只有一个Redis节点,sentinel就没有任何意义 sentinel配置的时候,sentinel之间也会自动监控;当主从模式配置密码时,sentinel也会同步将配置信息修改到配置文件中;一个sentinel或sentinel集群可以管理多个主从Redis ,多个sentinel也可以监控同一个redis;sentinel最好不要和Redis部署在同一台机器,不然Redis的服务器挂了以后,sentinel也可能会挂掉。 /sentinel"# 判断master失效至少需要2个sentinel同意,建议设置为n/2+1,n为sentinel个数# sentinel monitor <master-name> <ip> <
01 哨兵 先看下维基百科对其定义: In computer programming, a sentinel value (also referred to as a flag value, trip 简单来说,哨兵是在循环或迭代算法中用来标志终止条件的值。 下面看下一个典型的哨兵用法的例子。 02 线性搜索 线性搜索是指在给定数组中从头搜索,直到找到一个与target相等的索引。 上面的算法,如何用哨兵进行优化呢? 03 带哨兵的线性搜索 添加一个元素Ln(也就是哨兵)到数组中,假如初始数组中没有查找到T元素,则搜索将会到达哨兵处。 基本算法思路: Set i to 0. 可以看到,加入哨兵后,每次不用去检查是否 i < n,这样会提升算法的执行效率。 以上,哨兵作用的一个简单典型的例子,如有疏漏,请指正。
redis集群——哨兵机制(sentinel) 上一篇文章有讲到redis的主从复制《https://blog.csdn.net/weixin_40413961/article/details/123463661 说到这里突然有一点感悟:“冗余是可靠性保证的最有效的方式之一” 哨兵集群 基于 pub/sub 机制的哨兵集群组成 哨兵首先是监听主库 :通过这个配置:sentinel monitor 哨兵实例之间可以相互发现 主库上有一个名为“sentinel:hello”的频道,不同哨兵就是通过它来相互发现,实现互相通信的。 还有一个问题是哨兵是如何监听从库的呢,因为从库也有坏掉的时候通过哨兵的主关判断就能下线更换。 哨兵通过info命令请求主库主库就会把从库列表返回给主库。其他的哨兵也一样。 (具体命令就不细聊了,可以搜索看看) 好了,有了 pub/sub 机制,哨兵和哨兵之间、哨兵和从库之间、哨兵和客户端之间就都能建立起连接了,再加上我们上节课介绍主库下线判断和选主依据,哨兵集群的监控、选主和通知三个任务就基本可以正常工作了
本文介绍在Sentinel哨兵遥感影像数据官网中,下载已经经过大气校正的Sentinel-2L2A级遥感影像产品的方法。 由欧洲航天局发射的Sentinel-2(哨兵2号)卫星的遥感影像具有空间分辨率高、重返周期小等特点,因此得以广泛应用;在我们之前的文章中,就曾提及这一系列遥感影像的下载方法。 其中,因为我们需要下载Sentinel-2的2级产品,因此就选中“Sentinel-2 L2A”这一卫星,表示我们将要下载L2A级的Sentinel-2数据产品;如下图所示。 此外有一点需要注意:如果需要下载某个时间范围内的所有Sentinel-2数据产品,那么需要选择“TIME RANGE”中最下面一行小字,如下图所示。 此外,通过这个下面的另外2个文件,还可以打开Sentinel数据自带的地物类型分类数据。 至此,大功告成。
所以更多时候,我们优先考虑哨兵(sentinel) 模式。 Redis sentinel是Redis高可用实现方案:故障发现、故障自动转移、配置中心、客户端通知。 从Redis的2.6版本开始提供的,但是当时这个版本的模式是不稳定的,直到Redis的2.8版本以后,这个哨兵模式才稳定下来,在生产环境中,如果想要使用Redis的哨兵模式,也会尽量使用Redis的2.8 哨兵虽然有一个单独的可执行文件Redis-sentinel ,但实际上它只是一个运行在特殊模式下的 Redis服务器,你可以在启动一个普通Redis服务器时通过给定--sentinel选项来启动哨兵,哨兵的一些设计思路和 这是依靠的第二种定时:每两秒,sentinel之间进行“商量”(一个 sentinel 可以通过向另一个 sentinel 发送 SENTINEL is-master-down-by-addr 命令来询问对方是否认为给定的服务器已下线 sentinel采用了Raft协议实现了sentinel间选举Leader的算法,不过也不完全跟论文描述的步骤一致。sentinel集群运行过程中故障转移完成,所有sentinel又会恢复平等。
MySQL PostgreSQL MongoDB Redis(本章节) Etcd 上个小节我们介绍了哨兵(Sentinel)原理,本小节就通过一个搭建一个实际可行的哨兵集群。 vi /etc/redis-sentinel.conf # 哨兵端口 port 26379 # 后台运行 daemonize yes # 日志文件 logfile "/var/log/redis/ 2:quorum值(至少需要2个哨兵同意才能判定客观下线) sentinel monitor mymaster 192.168.31.195 6379 2 # 主节点密码(如果设置了requirepass mymaster 1 # 绑定IP(改为当前节点的IP) bind 192.168.31.195 启动哨兵 如果是通过yum安装的Redis,则会附带哨兵(Sentinel)的服务,可以直接使用systemctl systemctl start redis-sentinel systemctl enable redis-sentinel 查看哨兵信息 redis-cli -h 192.168.31.195 -p
在上一篇博客----Redis详解(八)------ 主从复制,我们简单介绍了Redis的主从架构,但是这种主从架构存在一个问题,当主服务器宕机,从服务器不能够自动切换成主服务器,为了解决这个问题,我们又介绍了哨兵模式 最好将各个节点的masterauth和requirepass设置为相同的密码;如果不设置为相同的,要注意slave节点masterauth和master节点requirepass的对应关系. 4、搭建哨兵模式 123 后面的123表示密码.注意这行配置要配置到 sentinel monitor mymaster ip port 后面,因为名称 mymaster要先定义. ②、启动哨兵 redis-sentinel mymaster 192.168.14.103 6381 2 配置了. 5、Java客户端连接哨兵集群 这里通过springboot项目来连接,代码地址如下: https://github.com ,Sentinel 内部维护了一个主题队列,用来保存Redis的节点信息,并实时更新,客户端订阅了这个主题,然后实时的去获取这个队列的Redis节点信息. 7、哨兵模式工作原理 ①、三个定时任务
环境 本次实验使用3个节点,三个sentinel+redis(一主两从) IP 角色 192.168.1.54 sentinel-01 192.168.1.58 sentinel-02 192.168.1.94 (三个节点配置相同) vim /etc/redis-sentinel.conf port 26379 protected-mode no # 禁用保护模式 sentinel monitor mymaster 60000就是60秒 sentinel down-after-milliseconds mymaster 10000 # 哨兵服务器执行转移后,允许多少台slave服务器对新master服务器进行连接 ,这个是为了减轻服务压力 sentinel parallel-syncs mymaster 1 # 故障转移的超时时间 sentinel failover-timeout mymaster 60000 replication # 查看 sentinel 状态 redis-cli -h 192.168.1.54 -p 26379 info sentinel
在上一篇博客,我们已经知道怎么搭建一个redis主从复制集群,但是主从集群如果出现服务器宕机的情况,是不会自动选举master的,所以需要搭建更加高可用的集群模式,哨兵模式,哨兵集群会自动监控,如果出现 实验环境 CentOS7 Xshell6 XFtp6 Redis6.2.2 主从关系 主节点:192.168.65.109 从节点1:192.168.66.149 从节点2:192.168.66.108 哨兵也是 3个,3个节点都搭建一个哨兵,所以架构是“一主二从三哨兵“这种模式 修改配置文件 先复制一下sentinel.conf配置文件到统一的config目录 # 到配置文件目录 cd /usr/local/redis 2584984" 29) "config-epoch" 30) "67" 31) "num-slaves" # 从节点数量 32) "2" 33) "num-other-sentinels" # 其它哨兵数量 /#sentinel-api 验证哨兵选举 现在模拟主节点关闭 [root@localhost src]# redis-cli -p 6379 127.0.0.1:6379> info replication
Redis的集群方案大致有三种:1)redis cluster集群方案;2)master/slave主从方案;3)哨兵模式来进行主从替换以及故障恢复。 一、sentinel哨兵模式介绍 Sentinel(哨兵)是用于监控redis集群中Master状态的工具,sentinel哨兵模式已经被集成在redis2.4之后的版本中。 Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时 Sentinel工作方式(每个Sentinel实例都执行的定时任务): 1)每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个PING命令 二、redis-sentinel哨兵模式集群环境部署记录
在学习 Redis 之前,我们需要先搭建一套哨兵环境。机器有限,实现目标是一台机器上搭建 6 个节点,构成一主两从三哨兵集群模式。 /redis-6.0.9/src/redis-cli -p 6479 info Replication 配置哨兵集群 将哨兵配置文件分别复制到 sentinel26380 sentinel26381 sentinel26382,需要注意的是每个文件的端口配置以及 sentinel monitor mymaster 172.16.90.152 6479 2 中最后的数字 2,哨兵集群汇总每个节点必须一致 .pid # sentinel监控的master的名字叫做mymaster,初始地址为 127.0.0.1 6380,2代表两个及以上哨兵认定为死亡,才认为是真的死亡 sentinel monitor mymaster 172.16.90.152 6479 2 启动哨兵集群 .
主要有以下作用 监控检查:检查主从服务器是否运行正常 消息通知:通过API向管理员或者其他应用程序发送故障通知 自动故障迁移:主从切换 故障转移(sentinel领导者节点完成) 1,从slave节点中选出一个 2.1 Redis Sentinel本身也是一个分布式系统 试想如果用来保障redis集群高可用的哨兵是单机的,然后哨兵挂了,redis也挂了,这tm是何等卧槽? 2.3.3 哨兵集群的自动发现机制 哨兵互相之间的发现,是通过redis的pub/sub系统实现的,每个哨兵都会往__sentinel__:hello这个channel里发送一个消息,这时候所有其他哨兵都可以消费到这个消息 ,并感知到其他的哨兵的存在 每隔两秒钟,每个哨兵都会往自己监控的某个master+slaves对应的__sentinel__:hello channel里发送一个消息,内容是自己的host、ip和runid 还有对这个master的监控配置 每个哨兵也会去监听自己监控的每个master+slaves对应的__sentinel__:hello channel,然后去感知到同样在监听这个master+slaves
2个哨兵决定sentinel monitor mymaster 192.168.183.138 6379 2#主节点密码in xxx7、启动主节点和哨兵[root@localhost redis-6.2.4 1:bind 192.168.183.139从2:bind 192.168.183.140分贝配置哨兵配置文件vim sentinel.conf----------------------------- 2个哨兵决定sentinel monitor mymaster 192.168.192.128 6379 2#主节点密码sentinel auth-pass mymaster xxx10、启动从1、从2 3,这样哨兵模式就搭建完成了。 14、 哨兵模式优缺点Redis Sentinel 是用于监控和管理Redis主从复制环境的工具。它自动检测主服务器故障并执行故障转移。优点:1、自动故障检测和转移。2、高可用性。
备注:redis sentinel建议使用redis2.8版本以上 redis sentinel是一个分布式架构,包含若干个sentinel节点和redis数据节点。 每个sentinel节点会监控其余的节点,当它发现节点不可达时会做下线处理,如果被标识的是主节点,它还会和其它sentinel节点协商,当大多数节点认为主节点不可达时,他们会选举出一个sentinel节点作为领导者负责故障转移的工作 2)每个Sentinel节点通过定期监控发现主节点出现了故障。 ? 3)多个Sentinel节点对主节点的故障达成一致,选举出sentinel-3节点作为领导者负责故障转移。 ? 从以上流程可以看出redis sentinel具有以下功能: 监控:Sentinel节点会定期检测Redis数据节点、其余Sentinel节点是否可达。 配置提供者:在Redis Sentinel结构中,客户端在初始化的时候连接的是Sentinel节点集合,从中获取主节点信息。