天马行空网站建设,wordpress主题开拓右边栏,武鸣住房和城乡规划建设局网站,网站建设栏目怎么介绍目录
3.Redis哨兵
3.1.哨兵原理
3.1.1.集群结构和作用
3.1.2.集群监控原理
3.1.3.集群故障恢复原理
3.1.4.小结
3.2.搭建哨兵集群
3.3.RedisTemplate
3.3.1.导入Demo工程
3.3.2.引入依赖
3.3.3.配置Redis地址
3.3.4.配置读写分离
3.Redis哨兵
Redis提供了哨兵Sentinel机制来实现主从集群的自动故障恢复。
3.1.哨兵原理
3.1.1.集群结构和作用
哨兵的结构如图 哨兵的作用如下 监控Sentinel 会不断检查您的master和slave是否按预期工作 自动故障恢复如果master故障Sentinel会将一个slave提升为master。当故障实例恢复后也以新的master为主 通知Sentinel充当Redis客户端的服务发现来源当集群发生故障转移时会将最新信息推送给Redis的客户端 3.1.2.集群监控原理
Sentinel基于心跳机制监测服务状态每隔1秒向集群的每个实例发送ping命令
•主观下线如果某sentinel节点发现某实例未在规定时间响应则认为该实例主观下线。
•客观下线若超过指定数量quorum的sentinel都认为该实例主观下线则该实例客观下线。quorum值最好超过Sentinel实例数量的一半。 3.1.3.集群故障恢复原理
一旦发现master故障sentinel需要在salve中选择一个作为新的master选择依据是这样的 首先会判断slave节点与master节点断开时间长短如果超过指定值down-after-milliseconds * 10则会排除该slave节点 然后判断slave节点的slave-priority值越小优先级越高如果是0则永不参与选举 如果slave-prority一样则判断slave节点的offset值越大说明数据越新优先级越高 最后是判断slave节点的运行id大小越小优先级越高。 当选出一个新的master后该如何实现切换呢
流程如下 sentinel给备选的slave1节点发送slaveof no one命令让该节点成为master sentinel给所有其它slave发送slaveof 192.168.150.101 7002 命令让这些slave成为新master的从节点开始从新的master上同步数据。 最后sentinel将故障节点标记为slave当故障节点恢复后会自动成为新的master的slave节点 3.1.4.小结
Sentinel的三个作用是什么 监控 故障转移 通知
Sentinel如何判断一个redis实例是否健康 每隔1秒发送一次ping命令如果超过一定时间没有相向则认为是主观下线 如果大多数sentinel都认为实例主观下线则判定服务下线
故障转移步骤有哪些 首先选定一个slave作为新的master执行slaveof no one 然后让所有节点都执行slaveof 新master 修改故障节点配置添加slaveof 新master 3.2.搭建哨兵集群
3.3.RedisTemplate
在Sentinel集群监管下的Redis主从集群其节点会因为自动故障转移而发生变化Redis的客户端必须感知这种变化及时更新连接信息。Spring的RedisTemplate底层利用lettuce实现了节点的感知和自动切换。
下面我们通过一个测试来实现RedisTemplate集成哨兵机制。
3.3.1.导入Demo工程
首先我们引入课前资料提供的Demo工程 3.3.2.引入依赖
在项目的pom文件中引入依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId
/dependency 3.3.3.配置Redis地址
然后在配置文件application.yml中指定redis的sentinel相关信息
spring:redis:sentinel:master: mymasternodes:- 192.168.88.160:27001- 192.168.88.160:27002- 192.168.88.160:27003 3.3.4.配置读写分离
在项目的启动类中添加一个新的bean
Bean
public LettuceClientConfigurationBuilderCustomizer clientConfigurationBuilderCustomizer(){return clientConfigurationBuilder - clientConfigurationBuilder.readFrom(ReadFrom.REPLICA_PREFERRED);
} 这个bean中配置的就是读写策略包括四种 MASTER从主节点读取 MASTER_PREFERRED优先从master节点读取master不可用才读取replica REPLICA从slavereplica节点读取 REPLICA _PREFERRED优先从slavereplica节点读取所有的slave都不可用才读取master