Redis 学习-Redis Sentinel

主从服务,在主服务挂掉之后需要我们手动操作,重新设置其他服务来充当主服务。

而 sentinel 可以自动完成这一动作。

一、启动 redis 服务

启动 redis 服务可以查看前面章节,我们需要 1 主 2 从。

主 127.0.0.1:6379

从 127.0.0.1:6380、127.0.0.1:6381

 

二、启动 sentinel 服务

1. 配置文件 sentinel.conf

daemonize yes # 是否守护进程启动
pidfile "/var/run/redis-sentinel-26379.pid" # pid文件
logfile "26379.log" # 日志文件
dir "/usr/local/src/redis/redis-5.0.7/data" # 工作空间
sentinel monitor mymaster 127.0.0.1 6379 2 # redis 主节点的 ip 和端口,即使单机多实例也不能使用127.0.0.1

2. 启动服务

redis-sentinel sentinel.conf

3. 查看服务信息

redis-cli -p 26379 # 访问服务
info # 查看服务信息

4. 最少启动 3 个 sentinel 服务 

将配置文件分别复制出来端口号为 26380、26381的两个服务。

3 个 sentinel 服务分别为:

127.0.0.1:26379、127.0.0.1:26380、127.0.0.1:26381

 

三、Java 集成 sentinel

1. 引入 jar 包

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>

2. 客户端

String masterName = "mymaster";
Set<String> set = new HashSet<>();
set.add("192.168.116.128:26379");
set.add("192.168.116.128:26380");
set.add("192.168.116.128:26381");

JedisSentinelPool jedisSentinelPool = new JedisSentinelPool(masterName, set);

while (true) {
    Jedis jedis = null;
    try {
        jedis = jedisSentinelPool.getResource();
        int index = new Random().nextInt(100000);
        String key = "key-" + index;
        String value = "value-" + index;
        jedis.set(key, value);
        System.out.println(key + " value is " + jedis.get(key));
        TimeUnit.MILLISECONDS.sleep(10);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (jedis != null) {
            jedis.close();
        }
    }
}

执行上面程序时,可以将主节点进程杀死观察一下。

在控制台输出异常大约一两分钟后,senticenl 服务会恢复正常。

 

四、SpringBoot 集成 sentintl

1. SpringBoot 集成 redis 参考博客:

https://www.cnblogs.com/zeng1994/p/03303c805731afc9aa9c60dbbd32a323.html

 

2. 在此基础上仅仅修改配置文件:

spring.redis.sentinel.master=mymaster # sentinel config 中配置的
spring.redis.sentinel.nodes=127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381 # 3个sentinel服务

# 下面配置注释掉
#spring.redis.database=0
#spring.redis.host=192.168.116.128
#spring.redis.port=6379

 

3. 注意点:

即使单机多实例情况下,配置文件中也不要使用 127.0.0.1,而应该使用真实 IP,否则故障转移可能会出现异常。

 

posted @ 2019-12-23 15:34  宁采桃花不采臣  阅读(421)  评论(0编辑  收藏  举报