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:
1 redis-sentinel /path/to/sentinel.conf
其中“ /path/to/sentinel.conf”是 Sentinel 配置文件的路径。
借助redis-server 可执行文件,你可以使用以下命令运行Redis Sentinel:
1 redis-server /path/to/sentinel.conf --sentinel
请注意,在两种情况下,都必须提供指向Sentinel 配置文件的链接。 运行 Redis Sentinel 时需要使用配置文件,以便在系统重新启动时保存系统的当前状态。
Redis Sentinel 配置文件示例如下所示:
1 sentinel monitor mymaster 127.0.0.1 6379 2 2 3 sentinel down-after-milliseconds mymaster 60000 4 5 sentinel failover-timeout mymaster 180000 6 7 sentinel parallel-syncs mymaster 1 8 9 sentinel monitor resque 192.168.1.3 6380 4 10 11 sentinel down-after-milliseconds resque 10000 12 13 sentinel failover-timeout resque 180000 14 15 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 一起使用的可行性。
1 package redis.demo; 2 3 import org.redisson.Redisson; 4 5 import org.redisson.api.RBucket; 6 7 import org.redisson.api.RedissonClient; 8 9 /** 10 11 * Redis Sentinel Java example 12 13 * 14 15 */ 16 17 public class Application 18 19 { 20 21 public static void main(String[] args ) 22 23 { 24 25 Config config = new Config(); 26 27 config.useSentinelServers() 28 29 .addSentinelAddress("redis://127.0.0.1:6379") 30 31 .setMasterName("myMaster"); 32 33 RedissonClient redisson = Redisson.create(config); 34 35 // perform operations 36 37 // implements java.util.concurrent.ConcurrentMap 38 39 RMap<String, String> map = redisson.getMap("simpleMap"); 40 41 map.put("mapKey", "This is a map value"); 42 43 String mapValue = map.get("mapKey"); 44 45 System.out.println("stored map value:" + mapValue); 46 47 // implements java.util.concurrent.locks.Lock 48 49 RLock lock = redisson.getLock("simpleLock"); 50 51 lock.lock(); 52 53 try { 54 55 // do some actions 56 57 } finally { 58 59 lock.unlock(); 60 61 } 62 63 redisson.shutdown(); 64 65 } 66 67 }
总结
请务必注意,Redisson 用户必须指定至少一台 Redis Sentinel 服务器和至少一台 Redis 主节点。 启动后,Redisson 继续监视 Redis Sentinel 中可用的主节点和从节点以及 Sentinel 节点的列表。 这意味着用户无需监视 Redis 拓扑的状态即可处理故障转移情况; Redisson 独自完成了此任务。