微服务学习笔记--高级篇--(Redis哨兵)

这篇具有很好参考价值的文章主要介绍了微服务学习笔记--高级篇--(Redis哨兵)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Redis哨兵

  • 哨兵的作用和原理
  • 搭建哨兵集群
  • RedisTemplate的哨兵模式

哨兵的作用

Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。哨兵的结构和作用如下:

  • 监控:Sentinel会不断检查master和slave是否按预期工作
  • 自动故障恢复:如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后也以新的master为主
  • 通知:Sentinel充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis的客户端
服务状态监控

Sentinel基于心跳机制检测服务状态,每隔1秒向集群的每个实例发送ping命令:

  • 主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线。
  • 客观下线:若超过执行数量(quorum)的sentinel都认为该实例主观下线,则该实例客观下线。quorum值最好超过Sentinel实例数量的一半。
选举新的master

一旦发生故障,sentinel需要在salve选择一个作为新的master,选择依据是这样的:

  • 首先会判断slave节点与master节点断开时间长短,乳沟超过指定值(down-after-milliseconds*10)则会排除该slave节点
  • 然后判断slave节点的slave-priority值,越小优先级越高,如果是0则永不参与选举
  • 如果slave-prority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高
  • 最后是判断slave节点运行id大小,越小优先级越高
如何实现故障转移

当选中了其中一个slave为新的master后(例如slave),故障的转移步骤如下:

  • sentinel给备选的slave1节点发送slaveof no one命令,让该节点成为master
  • sentinel给所有其它slave发送slaveof 192.168.150.101 7002命令,让这些slave成为新的master的从节点,开始从新的master上同步数据。
  • 最后,sentinel将故障节点标记为slave,当故障节点恢复后会自动成为新的master的slave节点

总结

Sentinel的三个作用是什么?

  • 监控
  • 故障转移
  • 通知

Sentinel如何判断一个redis实例是否健康?

  • 每个1秒发送一次ping命令,如果超过一定时间没有相向则认为是主观下线
  • 如果大多数sentinel都认为实例主观下线,则判定服务下线

故障转移步骤有哪些??

  • 首先选定一个slave作为新的master,执行slaveof no one
  • 然后让所有节点都执行slaveof 新master
  • 修改故障节点配置,添加slaveof新master

搭建哨兵集群

1.1集群结构

搭建一个三节点形成的Sentinel集群,来监管之前的Redis主从集群

三个sentinel实例信息如下:

节点 IP PORT
s1 192.168.150.101 27001
s2 192.168.150.101 27002
s3 192.168.150.101 27003
1.2准备实例和配置

要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。

我们创建三个文件夹,名字分别叫s1,s2,s3

# 进入/tmp目录
cd /tmp
# 创建目录
mkdir s1 s2 s3

然后我们在s1目录创建一个sentinel.conf文件,添加下面的内容:

port 27001
sentinel announce-ip 192.168.150.101
sentinel monitor mymaster 192.168.150.101 7001 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
dir "/tmp/s1"

解读:

  • port 27001:是当前sentinel实例的端口
  • sentinel monitor mymaster 192.168.150.101 7001 2:指定主节点信息
mymaster:主节点名称,自定义,任意写
192.168.150.101 7001:主节点的ip和端口
2:选举master时的quorum值

然后将s1/sentinel.conf文件拷贝到s2、s3两个目录中(在/tmp目录执行下列命令):

# 方式一:逐个拷贝
cp s1/sentinel.conf s2
cp s1/sentinel.conf s3
# 方式二:管道组合命令,一键拷贝
echo s2 s3 | xargs -t -n 1 cp s1/sentinel.conf

修改s2、s3两个文件夹内的配置文件,将端口分别修改为27002、27003

sed -i -e 's/27001/27002/g' -e 's/s1/s2/g' s2/sentinel.conf
sed -i -e 's/27001/27003/g' -e 's/s1/s3/g' s3/sentinel.conf
1.3启动

为了方便查看日志,打开3个ssh窗口,分别启动3个redis实例,启动命令:

# 第1个
redis-sentinel s1/sentinel.conf
# 第2个
redis-sentinel s2/sentinel.conf
# 第3个
redis-sentinel s3/sentinel.conf

RedisTemplate的哨兵模式

RedisTemplate的哨兵模式

在Sentinel集群监管下的Redis主从集群,其节点会因为自动故障转移而发生变化,Redis的客户端必须感知这种变化,及时更新连接信息。Spring的RedisTemplate底层利用lettuce实现了节点的感知和自动切换。

1.在pom文件中引入redis的starter依赖:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.然后在配置文件application.yml中指定sentinel相关信息:

spring:
  redis:
    sentinel:
      master: mymaster #指定master名称 因为sentinel.conf中配置的master的名字是mymaster
      nodes: # 指定redis-sentinel集群信息
      	- 192.168.150.101:27001
      	- 192.168.150.101:27002
      	- 192.168.150.101:27003

3.配置主从读写分离

@Bean
public LettuceClientConfigurationBuilderCustomizer configurationBuilderCustomizer(){
	return configBuilder -> configBuilder.readFrom(ReadFrom.REPLICA_PREFRED);
}

这里的ReadFrom是配置Redis的读取策略,是一个枚举,包括下面选择:文章来源地址https://www.toymoban.com/news/detail-482145.html

  • MASTER:从主节点读取
  • MASTER_PREFERRED:优先从master节点读取,master不可用才读取replica
  • REPLICA:从slave(replica)节点读取
  • REPLICA_PREFERRED:优先从slave(replica)节点读取,所有的slave都不可以用才读取master

到了这里,关于微服务学习笔记--高级篇--(Redis哨兵)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 学习笔记-微服务高级(黑马程序员)

    测试软件 jmeter 雪崩问题 个微服务往往依赖于多个其它微服务,服务提供者I发生了故障,依赖于当前服务的其它服务随着时间的推移形成级联失败 超时处理 设定超时时间,请求超过一定时间没有响应就返回错误信息 仓壁模式 限定每个业务能使用的线程数,避免耗尽整个tom

    2024年04月25日
    浏览(56)
  • 【Redis7学习日记】——复制、哨兵、集群

    设置多个 Redis 数据库, master 以写为主, slave 以读为主 当 master 数据库发生变化时,自动将新数据以异步的方式同步到与它关联的 slave 数据库中 功能概述: 实现了读写分离、容灾恢复、数据备份,以及通过水平扩容来支持高并发 那我们如何来使用呢? 通过配置 slave 从库来

    2023年04月08日
    浏览(45)
  • 服务(第二十六篇)redis的主从复制、哨兵、集群

    主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。 原理: 主从关系确定好后,开启从节点时,会发送一个sync的同步命令给主节点,主节点接收到后会把redis内存

    2024年02月06日
    浏览(86)
  • 微服务学习笔记--高级篇--(多级缓存意义及JVM进程缓存)

    亿级流量的缓存方案 传统缓存的问题 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,存在下面的问题: 请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈 Redis缓存失效时,会对数据库产生冲击 多级缓存方案 多级缓存就是充分利用请求处

    2024年02月09日
    浏览(41)
  • 从小白到大神之路之学习运维第41天---第三阶段---Redis高可用集群(redis 的主从复制、redis的哨兵模式操作)

    第三阶段基础 时  间:2023年6月15日 参加人:全班人员 内  容: Redis高可用集群 目录 一、redis主从复制原理介绍 主从复制特点: 主从复制实现原理: 二、主从复制实现操作(多机实例实现)   前提配置: 主库操作: 从库一操作: 从库二操作: 主库变化: 验  证: 三、

    2024年02月09日
    浏览(63)
  • Redis系统学习(高级篇)-Redis持久化-AOF方式

    目录 一、是什么AOF? 二、AOF如何开启 以及触发策略有哪些 三、AOF文件重写 四、AOF与RDB对比 就是通过每次记录写操作,最终通过来依次这些命令来达到恢复数据的目的 save \\\"\\\"可以关闭掉RDB appendonly yes 开启AOF 触发策略有: 1. 每一次的执行命令都会被记录 appendfsync always 2.先将

    2024年02月05日
    浏览(42)
  • Redis——哨兵模式(docker部署redis哨兵)+缓存穿透和雪崩

    自动选取主机的模式。 主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。Redis从2.8开始正式提供了Sentinel(哨兵)架

    2024年02月12日
    浏览(36)
  • 【Redis7】 Redis7 哨兵(重点:哨兵运行流程和选举原理)

     【大家好,我是爱干饭的猿,本文重点介绍Redis7 哨兵,重点:哨兵运行流程和选举原理。 后续会继续分享Redis7和其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】 上一篇文章:《【Redis7】Redis7 主从复制(重点:主从复制原理)》 目录 🥞1. 哨兵 1.1 概述

    2024年02月01日
    浏览(38)
  • 【Redis】Redis哨兵模式

    Redis主从模式当主服务器宕机后,需要手动把一台从服务器切换为主服务器,需要人工干预费事费力,为了解决这个问题出现了哨兵模式。 哨兵模式是是一个管理多个 Redis 实例的工具,它可以实现对 Redis 的监控、通知、自动故障转移,是Redis实现高可用的方案。哨兵模式能够

    2024年02月12日
    浏览(38)
  • redis 搭建哨兵模式 一主两从三哨兵

      部署redis哨兵模式 [Redis之主从,哨兵,集群的搭建部署] 哨兵的核心功能:在主从复制的基础上,哨兵引入了主节点的自动故障转移 1、哨兵模式原理: 哨兵:是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的Master 并将所有

    2024年02月01日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包