标签:sub 判断 des 讲解 解决方案 进入 操作 适用于 not
上个文章已经实现了 Redis 的读写分离,一主多从的结构已经搭建起来了,主节点负责写数据,从节点负责读数据,那么现在有个问题:如果主节点挂了,怎么办呢?
Redis 提供了一种解决方案:Sentinel 哨兵模式。通过它可以实现:当主节点挂了以后,多个从节点会选出一个节点当主节点。
以 Windows 系统为例,现在有三个一样的程序,首先实现读写分离,参照上一篇文章实现即可:https://www.cnblogs.com/jwen1994/p/12257958.html
然后每个 Redis 目录下都新建一个:sentinel.conf 文件
主节点下的文件内容如下:
#当前Sentinel服务运行的端口 port 26379 #master #Sentinel去监视一个名为mymaster的主redis实例,这个主实例的IP地址为本机地址127.0.0.1,端口号为6379, #而将这个主实例判断为失效至少需要2个 Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行 sentinel monitor mymaster 127.0.0.1 6379 1 #指定了Sentinel认为Redis实例已经失效所需的毫秒数。当 实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。 #只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行 sentinel down-after-milliseconds mymaster 5000 #指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长 sentinel config-epoch mymaster 12 #如果在该时间(ms)内未能完成failover操作,则认为该failover失败 sentinel leader-epoch mymaster 13
从节点下的文件内容如下:
#当前Sentine2服务运行的端口 port 26479 #slave1 sentinel monitor mymaster 127.0.0.1 6379 1 sentinel down-after-milliseconds mymaster 5000 sentinel config-epoch mymaster 12 sentinel leader-epoch mymaster 13
我们通过两个命令,去启动 Redis 和 Sentinel (每个 Redis 节点都去使用命令去启动)
F:\redis>redis-server.exe redis.windows.conf
F:\redis>redis-server.exe sentinel.conf --sentinel
这样就成功了,如果主节点挂了,多个从节点会选出一个节点当主节点。
参考文章:https://blog.csdn.net/ITLTX1024/article/details/100665452
如果认为干预该怎么实现从节点变主节点呢?通过以下两个命令
slaveof no one # 取消主备,变更为主节点
slaveof 新host 新节点 # 将其他节点设置为新主节点的备份节点
sentinel 还有其他配置:
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
命令讲解
如果从服务器被设置为允许使用过期数据集, 那么你可能不希望所有从服务器都在同一时间向新的主服务器发送同步请求, 因为尽管复制过程的绝大部分步骤都不会阻塞从服务器, 但从服务器在载入主服务器发来的 RDB 文件时, 仍然会造成从服务器在一段时间内不能处理命令请求: 如果全部从服务器一起对新的主服务器进行同步, 那么就可能会造成所有从服务器在短时间内全部不可用的情况出现
冷备
1)概念:冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库
2)优点:
3)缺点:
热备
1)概念:热备份是在数据库运行的情况下,采用archivelog mode方式备份数据库的方法
2)优点:
3)缺点
主观下线:
1)概念
主观下线(Subjectively Down, 简称 SDOWN)指的是单个 Sentinel 实例对服务器做出的下线判断
2)主管下线特点:
如果一个服务器没有在 master-down-after-milliseconds 选项所指定的时间内,对向它发送 PING 命令的 Sentinel 返回一个有效回复(valid reply), 那么 Sentinel 就会将这个服务器标记为主观下线。服务器对 PING 命令的有效回复可以是以下三种回复的其中一种:
客观下线
1)概念:
指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断, 并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后, 得出的服务器下线判断。 (一个 Sentinel 可以通过向另一个 Sentinel 发送 SENTINEL is-master-down-by-addr 命令来询问对方是否认为给定的服务器已下线。)
2)客观下线特点:
从主观下线状态切换到客观下线状态并没有使用严格的法定人数算法(strong quorum algorithm), 而是使用了流言协议: 如果 Sentinel 在给定的时间范围内, 从其他 Sentinel 那里接收到了足够数量的主服务器下线报告, 那么 Sentinel 就会将主服务器的状态从主观下线改变为客观下线。 如果之后其他 Sentinel 不再报告主服务器已下线,那么客观下线状态就会被移除。
3)客观下线注意点:
客观下线条件只适用于主服务器:对于任何其他类型的 Redis 实例, Sentinel 在将它们判断为下线前不需要进行协商,所以从服务器或者其他 Sentinel 永远不会达到客观下线条件。 只要一个 Sentinel 发现某个主服务器进入了客观下线状态, 这个 Sentinel 就可能会被其他 Sentinel 推选出, 并对失效的主服务器执行自动故障迁移操作。
步骤一:引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
步骤二:引入 yml 配置
redis:
sentinel:
master: redis_master_group1 #mymaster
nodes: 172.16.244.133:26379
步骤三:启动 Spring Boot 服务,发送请求看配置是否有效
标签:sub 判断 des 讲解 解决方案 进入 操作 适用于 not
原文地址:https://www.cnblogs.com/jwen1994/p/12259744.html