Java中的Redis 哨兵高可用性
让我们探索Redis Sentinel,看看如何在Java上运行它,一起来看看,最近get了很多新知识,分享给大家参考学习。需要详细的java架构思维导图路线也可以评论获取!
什么是Redis哨兵?
在优锐课的java分享中讨论了,可用性是任何企业数据库中最重要的质量之一。用户必须保证他们可以访问所需的信息和见解,从而在工作中表现出色。
但是,确保数据库在需要时可用是一件容易的事,而做起来却容易。术语“高可用性”是指可以连续运行而不会出现故障的系统,该系统的时间长度比平均时间长。
Redis Sentinel是Redis的高可用性解决方案,Redis是一种开源的内存中数据结构存储,可用作非关系键值数据库。 Redis Sentinel的目标是通过三种不同的功能来管理Redis实例:监视你的Redis部署,在出现问题时发送通知,以及通过创建新的主节点自动处理故障转移过程。
作为分布式系统,Redis Sentinel旨在与其他Sentinel进程一起运行。这减少了在检测到主节点发生故障时出现误报的可能性,并且还为系统接种了任何单个进程的故障。
Redis Sentinel的创建者建议你至少有三个Sentinel实例,以便进行可靠的Sentinel部署。这些实例应分布在可能彼此独立故障的计算机之间,例如位于不同地理区域的计算机。
如何运行Redis 哨兵
运行Redis Sentinel将需要以下两个可执行文件之一:redis-sentinel或redis-server。
使用redis-sentinel可执行文件,你可以使用以下命令运行Redis Sentinel:
redis-sentinel /path/to/sentinel.conf
其中“ /path/to/sentinel.conf”是Sentinel配置文件的路径。
借助redis-server可执行文件,你可以使用以下命令运行Redis Sentinel:
redis-server /path/to/sentinel.conf --sentinel
请注意,在两种情况下,都必须提供指向Sentinel配置文件的链接。 运行Redis Sentinel时需要使用配置文件,以便在系统重新启动时保存系统的当前状态。
Redis Sentinel配置文件示例如下所示:
sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 60000 sentinel failover-timeout mymaster 180000 sentinel parallel-syncs mymaster 1 sentinel monitor resque 192.168.1.3 6380 4 sentinel down-after-milliseconds resque 10000 sentinel failover-timeout resque 180000 sentinel parallel-syncs resque 5
在此示例中,行``Sentinel Monitor <主组名称> <ip> <端口> <仲裁>''在给定的IP地址和端口号上定义了一个名为master-group-name的Sentinel主节点。 法定参数是必须就主节点不可访问这一事实达成共识的Sentinel进程数。
其他行定义以下设置:
“毫秒后下降”:定义将主节点视为不可达之后经过的毫秒数。
“ Sentinel故障转移超时”:定义Sentinel进程将尝试投票主节点的故障转移的时间。
“ sentinel parallel-syncs”:定义可以在故障转移后同时重新配置为使用同一主节点的从节点的数量。
在Java上连接到Redis Sentinel
对于Java程序员而言,坏消息是Redis Sentinel与Java兼容。 但是,好消息是Redis Sentinel和Java可以使用诸如Redisson的框架轻松地协同工作,Redisson是Redis的Java客户端,它使用许多熟悉的Java编程语言构造。 Redisson提供了数十种以分布式方式实现的Java对象,集合,锁和服务,从而允许用户在不同的应用程序和服务器之间共享它们。
以下代码示例演示了如何在Java中开始使用Redis Sentinel。 设置配置文件和Redisson客户端后,该应用程序执行一些基本操作以演示将Redis与Java一起使用的可行性。
package redis.demo; import org.redisson.Redisson; import org.redisson.api.RBucket; import org.redisson.api.RedissonClient; /** * Redis Sentinel Java example * */ public class Application { public static void main( String[] args ) { Config config = new Config(); config.useSentinelServers() .addSentinelAddress("redis://127.0.0.1:6379") .setMasterName("myMaster"); RedissonClient redisson = Redisson.create(config); // perform operations // implements java.util.concurrent.ConcurrentMap RMap<String, String> map = redisson.getMap("simpleMap"); map.put("mapKey", "This is a map value"); String mapValue = map.get("mapKey"); System.out.println("stored map value: " + mapValue); // implements java.util.concurrent.locks.Lock RLock lock = redisson.getLock("simpleLock"); lock.lock(); try { // do some actions } finally { lock.unlock(); } redisson.shutdown(); } }
总结
请务必注意,Redisson用户必须指定至少一台Redis Sentinel服务器和至少一台Redis主节点。 启动后,Redisson继续监视Redis Sentinel中可用的主节点和从节点以及Sentinel节点的列表。 这意味着用户无需监视Redis拓扑的状态即可处理故障转移情况; Redisson独自完成了此任务。
Java中的Redis 哨兵高可用性的更多相关文章
- 在java中使用redis
在java中使用redis很简单,只需要添加jedist.jar,通过它的api就可以了.而且,api和redis的语法几乎完全相同.以下简单的测试: 参考:http://www.runoob.com ...
- JAVA中使用Redis
上节讲解了如何在centos上安装redis,点击查看.本节我们学习在java中使用redis.需要将jedis-*.jar添加到classpath(点击下载),如果使用连接池还需要commons-p ...
- Redis入门教程(三)— Java中操作Redis
在Redis的官网上,我们可以看到Redis的Java客户端众多 其中,Jedis是Redis官方推荐,也是使用用户最多的Java客户端. 开始前的准备 使用jedis使用到的jedis-2.1.0. ...
- Redis笔记(六):Java中使用Redis
Java程序使用Redis 添加依赖包 Maven依赖方式 <dependency> <groupId>redis.clients</groupId> <ar ...
- java中使用redis --- Hash的简单应用
1.java代码 public class RedisTest01 { public static void main(String[] args) { // connect redis server ...
- java中使用 redis (转载)
jedis是一个著名的key-value存储系统,而作为其官方推荐的java版客户端jedis也非常强大和稳定,支持事务.管道及有jedis自身实现的分布式. 在这里对jedis关于事务.管道和分布式 ...
- Redis(2)用jedis实现在java中使用redis
昨天已经在windows环境下安装使用了redis. 下面准备在java项目中测试使用redis. redis官网推荐使用jedis来访问redis.所以首先准备了jedis的jar包,以及需要依赖的 ...
- Java中的Redis应用
1.配置redis集群 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <?xml version="1.0" encoding ...
- Java中操作Redis
一.server端安装 1.下载 https://github.com/MSOpenTech/redis 可看到当前可下载版本:redis2.6 下载后的文件为: 解压后,选择当前64位win7系统对 ...
随机推荐
- C++第一次作业(循环语句的使用)
一.知识点 循环结构 二.教学目的 掌握while和do...while循环语句在C++中的写法 三.教学内容 1.while语句 (1)执行顺序:先判断表达式(循环控制条件)的值,若表达式的值为tr ...
- 在 VirtualBox 安装 Centos Docker-CE
在 VirtualBox 安装 Centos Docker-CE 因为需要测试环境,安装了一个 CentosOS 7. 安装结束后发现没有 IP,开始以为是因为 NAT 设置问题. 把网络设置为桥联, ...
- Unity3D游戏开发之在Unity3D中视频播放功能的实现
版权声明:欢迎订阅公众号[5厘米的理想],愿生命里的每个小理想,都能成为生命里的小确幸.本文地址为: https://blog.csdn.net/qinyuanpei/article/details/ ...
- laravel 增加不存在数据库的字段
有时候您可能想要增加不存在数据库字段的属性数据.这时候只要定义一个获取器即可: public function getIsAdminAttribute() { return $this->att ...
- js循环遍历数组(对象)
1,for循环 对于循环应该是最常用的一种遍历方式了,通常用来遍历数组结构. let arr = [a,b,d];for (let i=0; i<arr.length; i++){ consol ...
- ORACLE SQL数据类型转换
ORACLE SQL数据类型转换 2019-04-07 22:35:53 广小白 阅读数 429更多 分类专栏: Oracle 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议, ...
- H3C 专线连接模型
- ubuntu netstat 查看端口占用情况
netstat 用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships ...
- POJ2752 Seek the Name, Seek the Fame 题解 KMP算法
题目链接:http://poj.org/problem?id=2752 题目大意:给你一个字符串 \(S\) ,如果它的一个前缀同时也是它的后缀,则输出这个前缀(后缀)的长度. 题目分析:next函数 ...
- spring mvc 接收表单 bean
spring MVC如何接收表单bean 呢? 之前项目中MVC框架一直用struts2,所以我也就按照struts2 的思维来思考 页面loginInput.jsp: <?xml versio ...