Java中的Redis 哨兵高可用性

liuyong00 2019-12-30

让我们探索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配置文件示例如下所示:

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独自完成了此任务。

相关推荐

HappinessCat / 0评论 2020-02-12