Spring Data Redis:Sentinel的高可用性
1.概述
为了使Redis具有高可用性,我们可以使用Spring Data Redis对Redis Sentinel的支持。 借助Sentinel,我们可以创建自动抵御某些故障的Redis部署。
Redis Sentinel还提供其他附带任务,例如监视,通知,并充当客户端的配置提供程序。
在较高级别,Sentinel的功能是:
- 自动故障转移 。 当主服务器无法正常工作时,Sentinel会为我们启动故障转移过程,将从服务器升级为主服务器。 此外,其他从属服务器也被重新配置为使用新的主服务器,并且使用Redis服务器的应用程序将被告知要使用的新地址。
- 配置源 。 故障转移发生时,Sentinels将报告新地址。 这是因为Sentinel充当客户端的授权来源。 客户端进行服务发现时,它们会连接到Sentinels,以请求负责给定服务的当前Redis主服务器的地址。
- 监控 。 Sentinel会定期检查我们的主实例和从实例是否按预期工作。
- 通知 。 可以将Sentinel配置为在Redis实例之一发生错误时通知各种目标。 这些目标包括其他应用程序,系统管理员或API。
2.如何运行前哨
自Redis 2.8起,Redis附带了Sentinel的稳定版本。
启动Sentinel非常容易。 当我们在上一篇文章中回顾Spring Data Redis(使用Spring Boot)时,我们在Mac上使用homebrew安装了Redis。 此命令使我们可以在该安装中运行Sentinel:
redis-sentinel /path/to/sentinel.conf
如果我们使用的是redis-sentinel可执行文件(或者如果有一个使用该名称的符号链接到redis-server的可执行文件),那么我们也可以使用上述命令运行Sentinel。
另外,我们可以使用redis-server可执行文件并以Sentinel模式启动它,如下所示:
redis-server /path/to/sentinel.conf --sentinel
3.部署Sentinel之前需要了解的关键概念
在部署到Sentinel之前,我们应该检查的一些概念包括:
- 我们至少需要三个Sentinel实例才能进行持久的Redis部署。
- 我们应该将三个Sentinel实例放置在据信会独立而不是一起失败的计算机或虚拟机中。 例如,这可能意味着不同的可用区。
- Redis使用异步复制,因此即使在使用Sentinel时,Redis也不能保证在故障期间会保持接收到的写入。 但是,我们可以部署Sentinel来减少写入丢失的时间。
- 任何高可用性设置都必须定期进行测试,并且Sentinel不变。 我们需要在开发环境和生产环境中进行测试。 通过计划和测试故障,我们可以限制故障。
4. Spring数据中的配置
当我们使用基于Sentinels的配置时,我们不会向Spring Data Redis提供Redis主机/端口信息。 相反,我们提供了主服务器的属性和Sentinel URL列表。 每个Sentinel进程都有其自己的配置文件,该文件列出了主Redis服务器,例如:
sentinel monitor themaster 127.0.0.1 6379 2
sentinel down-after-milliseconds themaster 60000
sentinel failover-timeout themaster 180000
sentinel parallel-syncs themaster 1
一旦配置好了主服务器,从服务器和Sentinels,我们就需要在应用程序中更改spring数据redis配置,以与哨兵一起工作。
4.1 Java配置
可以使用Jedis和Lettuce来完成Java配置:
/*** Jedis*/
@Bean
public RedisConnectionFactory jedisConnectionFactory() {RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration().master("themaster").sentinel("127.0.0.1", 26579).sentinel("127.0.0.1", 26580);return new JedisConnectionFactory(sentinelConfig);
}/*** Lettuce*/
@Bean
public RedisConnectionFactory lettuceConnectionFactory() {RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration().master("themaster").sentinel("127.0.0.1", 26579).sentinel("127.0.0.1", 26580);return new LettuceConnectionFactory(sentinelConfig);
}
4.2属性配置
ProperySource (例如application.properties )可用于配置。 例如,如果我们使用本地主机:
spring.redis.sentinel.master= themaster # Name of our Redis server.
spring.redis.sentinel.nodes= localhost:26579, localhost:26580, localhost:26581 # Comma-separated list of host:port pairs.
5.结论
今天,我们回顾了如何通过使用Sentinel使用Redis实现高可用性,以及Spring Data Redis如何在Spring应用程序中支持这一点。 有关Sentinel的更多信息, Redis网站是一个很好的来源。
在我的网站上,还有从Spring Data Redis和Spring Boot开始的信息以及有关Spring Framework的几篇文章。
翻译自: https://www.javacodegeeks.com/2019/01/spring-data-redis-high-availability-sentinel.html
Spring Data Redis:Sentinel的高可用性相关推荐
- Spring Data Redis 正确使用姿势
课程简介 本课程主要讲解常规 Redis 的写法,Redis 和 Spring 的结合使用,即 Spring Data Redis,以及 Redis 在工作中的正确使用姿势,Redis 和 Sprin ...
- Spring Boot使用Spring Data Redis操作Redis(单机/集群)
说明:Spring Boot简化了Spring Data Redis的引入,只要引入spring-boot-starter-data-redis之后会自动下载相应的Spring Data Redis和 ...
- Java Spring Data Redis实战与配置参数详解 application.properties...
Redis作为开源分布式高并发缓存,使用范围非常广泛,主流互联网公司几乎都在使用. Java Spring Boot 2.0实战开发Redis缓存可以参考下面的步骤,Redis安装可以直接使用Linu ...
- spring data redis 配置
参考:http://www.linuxidc.com/Linux/2015-04/116798.htm 纠结了半天,最终还是放弃使用spring data redis.因为它好像是不支持读写分离的. ...
- Java Spring Data Redis实战与配置参数详解 application.properties
Redis作为开源分布式高并发缓存,使用范围非常广泛,主流互联网公司几乎都在使用. Java Spring Boot 2.0实战开发Redis缓存可以参考下面的步骤,Redis安装可以直接使用Linu ...
- Spring认证中国教育管理中心-Spring Data Redis框架教程三
原标题:Spring认证中国教育管理中心-Spring Data Redis框架教程三 10.15.支持类 Packageorg.springframework.data.redis.support提 ...
- Spring data redis 异常
2019独角兽企业重金招聘Python工程师标准>>> spring 集成 spring-data-redis 版本: spring低版本 + spring-data-redis 高 ...
- 使用Spring Data Redis操作Redis(集群版)
说明:请注意Spring Data Redis的版本以及Spring的版本!最新版本的Spring Data Redis已经去除Jedis的依赖包,需要自行引入,这个是个坑点.并且会与一些低版本的Sp ...
- Redis - Spring Data Redis 操作 Jedis 、Lettuce 、 Redisson
文章目录 官网 Jedis VS Lettuce Jedis Code POM依赖 配置文件 配置类 单元测试 Lettuce Code Redisson Code POM依赖 配置文件 配置类 单元 ...
最新文章
- Hbase API中常用类介绍和使用
- C++求tree树的高度(附完整源码)
- php.ini mysql扩展_PHP安装mysql.so扩展及相关PHP.ini 配置参数说明
- cf1562E. Rescue Niwen!
- P4564-[CTSC2018]假面【期望dp】
- yii2通过url访问类中的方法_每日学点---nginx变量使用方法详解(3)
- 小米研发类Kindle电子阅读器
- Hi3519 设置crop动态调节输出分辨率
- Docker服务以及容器如何设置自动启动
- PDF怎么删除空白页?必备PDF页面删除技巧
- uniapp swiper组件被内容撑开
- matlab数理统计工具箱,Matlab数理统计工具箱
- dwg格式文件怎么打开
- 写给大忙人的模电复习资料(001)
- 配置系统未能初始化 错误的解决方案
- 最浅显易懂kerberos认证和黄金白银票据
- 玩转数据可视化之R语言ggplot2:(八)ggplot2绘制空间地理数据图
- 基于RedHatEnterpriseLinux V7(RHEL7)下SPEC CPU 2006环境搭建以及测试流程(之一)——介绍、安装准备、安装、config文件以及运行脚本介绍
- python filter和map的区别_js中filter和map的区别
- python一个文件夹的文件移动到另外一个文件夹
热门文章
- 2021牛客暑期多校训练营7 J-xay loves Floyd(最短路+bitset优化集合交)
- [XSY3382] 专家系统(二分+线段树)
- 编译原理(二)之语法分析
- 分布式之redis复习精讲
- 浅谈MySQL的B树索引与索引优化
- 浅析负载均衡的6种算法,Ngnix的5种算法
- Hibernate: You have an error in your SQL syntax; check the manual that corresponds to your MySQL
- JavaScript操作BOM简单案例
- vue插槽面试题_VUE面试题解析,半年出一篇,建议收藏!
- android查看wifi是否双频,Android判断wifi是5G还是2.4G