上一篇实际操作过程中遇到两个问题

问题一:虽然运行了3个sentinel容器,实际上只有一个sentinel运行

问题出现的原因很简单,三个sentinel用的是同一个挂载配置文件,容器内部的更改直接挂在文件的变化,所以解决方案就是用三分不同的配置文件去配置sentinel容器

问题二:连接sentinel容器,获取的redis 地址是docker虚拟ip,导致外网不能访问

原因:因为docker 网络模式默认为bridge模式,采用host模式即可

docker 具体网络模式的区别可以查看下面的文章

一分钟了解docker网络模式

具体操作

1. 新建redis-demo.conf文件,文件内容如下

logfile "redis.log"
port
dir /data
appendonly yes
appendfilename appendonly.aof

2.复制redis-demo.conf文件 到 redis-01.conf 文件内容如下

logfile "redis.log"
port
dir /data
appendonly yes
appendfilename appendonly.aof
slaveof 172.21.186.236

这里需要注意 172.21.186.236 这个ip是我虚拟机的ip地址,也就是容器宿主的ip地址,需要对应修改(下同)

3.复制redis-01.conf 到redis-02.conf 文件内容如下

logfile "redis.log"
port
dir /data
appendonly yes
appendfilename appendonly.aof
slaveof 172.21.186.236

4.执行容器运行命令

docker run --name redis- -v /data/conf/redis-demo.conf:/data/redis.conf --net=host  -d docker.io/redis redis-server /data/redis.conf

docker run --name redis- -v /data/conf/redis-.conf:/data/redis.conf --net=host  -d docker.io/redis redis-server /data/redis.conf

docker run --name redis- -v /data/conf/redis-.conf:/data/redis.conf --net=host  -d docker.io/redis redis-server /data/redis.conf

5.查看redis-6379节点的运行状态

  

可以看到正常运行,主从配置也很清晰

6.创建sentinel.conf配置文件文件内容

logfile "sentinel.log"
port
sentinel monitor mymaster 172.21.186.236

7.复制sentinel.conf到sentinel-01.conf 内容如下

logfile "sentinel.log"
port
sentinel monitor mymaster 172.21.186.236

8.复制sentinel.conf到sentinel-02.conf内容如下

logfile "sentinel.log"
port
sentinel monitor mymaster 172.21.186.236

9.运行容器

docker run --net=host --name redis-s- -v /data/conf/sentinel-demo.conf:/data/sentinel.conf  -d docker.io/redis redis-sentinel sentinel.conf
docker run --net=host --name redis-s- -v /data/conf/sentinel-.conf:/data/sentinel.conf -d docker.io/redis redis-sentinel sentinel.conf
docker run --net=host --name redis-s- -v /data/conf/sentinel-.conf:/data/sentinel.conf -d docker.io/redis redis-sentinel sentinel.conf

10.查看sentinel-s-6379运行状态

到此容器一切就绪,接下来创建一个简单的的spring boot demo 测试

11.创建spring boot 其中只需要选择如图

创建完成吼修改application.yaml文件内容如下

server:
port: 8083
spring:
redis:
sentinel:
master: mymaster
nodes: 172.21.186.236:26379,172.21.186.236:26380,172.21.186.236:26381

创建配置类  RedisConfig 内容如下

@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
/**
* 注入 RedisConnectionFactory
*/
@Autowired
RedisConnectionFactory redisConnectionFactory; /**
* 实例化 RedisTemplate 对象
*
* @return
*/
@Bean
public RedisTemplate<String, Object> functionDomainRedisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
initDomainRedisTemplate(redisTemplate, redisConnectionFactory);
return redisTemplate;
} /**
* 设置数据存入 redis 的序列化方式
*
* @param redisTemplate
* @param factory
*/
private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
//只有设置jdk序列化,才能新类对象比如User进行存储
redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
redisTemplate.setConnectionFactory(factory);
} }

创建HomeController

@RestController
public class HomeController {
@Autowired
RedisTemplate<String, Object> redisTemplate; @RequestMapping("/")
public String index(@RequestParam String a) {
try {
redisTemplate.opsForValue().set("yin", a);
} catch (Exception e) {
System.out.println(e);
return e.toString();
} return a;
}
@RequestMapping("/hello")
public String hello() {
return "hello y";
}
}

项目结构如下

运行后,访问地址:http://localhost:8083/?a=124

然后用redis管理工具连接redis具体结果如下:

  可以看到已经成功入库

over!!

Redis 高可用之哨兵模式(二)的更多相关文章

  1. Redis高可用之哨兵模式Sentinel配置与启动(五)

    0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...

  2. Redis 高可用之哨兵模式

    参考   : https://mp.weixin.qq.com/s/Z-PyNgiqYrm0ZYg0r6MVeQ 一.redis高可用解决方案 redis主从 优点:1.高可靠性,主从实时备份,有效解 ...

  3. 老司机带你玩转面试(4):Redis 高可用之哨兵模式

    前文回顾 建议前面文章没看过的同学先看下前面的文章: 「老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化」 「老司机带你玩转面试(2):Redis 过期策略以及缓存雪崩.击穿. ...

  4. Redis学习三:Redis高可用之哨兵模式

    申明 本文章首发自本人公众号:壹枝花算不算浪漫,如若转载请标明来源! 感兴趣的小伙伴可关注个人公众号:壹枝花算不算浪漫 22.jpg 前言 Redis 的 Sentinel 系统用于管理多个 Redi ...

  5. Redis高可用方案-哨兵与集群

    Redis高可用方案 一.名词解释   二.主从复制 Redis主从复制模式可以将主节点的数据同步给从节点,从而保障当主节点不可达的情况下,从节点可以作为 后备顶上来,并且可以保障数据尽量不丢失(主从 ...

  6. redis高可用(哨兵机制)

    redis哨兵机制:redis的哨兵系统用于管理多个reids服务器,该系统主要有三个作用: 监控:哨兵 会不断地检查你的主服务(Master)和从服务器(Slave)是否运作正常. 提醒:当被监控的 ...

  7. Redis高可用-主从,哨兵,集群

    主从复制 Master-Slave主从概念 同时运行多个redis服务端,其中一个作为主(master),其他的一个或多个作为从(slave),主从之间通过网络进行通讯,slave通过复制master ...

  8. 老司机带你玩转面试(3):Redis 高可用之主从模式

    前文回顾 建议前面文章没看过的同学先看下前面的文章: 「老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化」 「老司机带你玩转面试(2):Redis 过期策略以及缓存雪崩.击穿. ...

  9. Redis高可用方案哨兵机制------ 配置文件sentinel.conf详解

    Redis的哨兵机制是官方推荐的一种高可用(HA)方案,我们在使用Redis的主从结构时,如果主节点挂掉,这时是不能自动进行主备切换和通知客户端主节点下线的. Redis-Sentinel机制主要用三 ...

随机推荐

  1. go面试题

    1)解释什么是GO? GO是一种开源编程语言,可以轻松构建简单.可靠和高效的软件.程序是从包中构建的,其属性允许有效地管理依赖关系. 2)GO中的语法是什么? GO中的语法遵循Extended Bac ...

  2. JavaScript数字计算精度丢失的问题和解决方案

    一.JS数字精度丢失的一些典型问题 1. 两个简单的浮点数相加:0.1 + 0.2 != 0.3 // true,下图是firebug的控制台截图: 看看java的计算结果:是不是让你很不能接受 再来 ...

  3. 【Amaple教程】3. 模板指令与状态数据(state)

    一个模块的template模板.JavaScript和css之间的关系其实可以如下图表示: 如果你了解Angular.Vue动态模板,那你将会对Amaple的模板感到很熟悉,在Amaple中,temp ...

  4. java编程出现的错误对应的解决方法

    error: could not open D:\java\jre1.8\lib\amd64\jvm.cfg 解决方法:把java的环境变量%JAVA_HOME%/bin上移到最上面 优化 查看网页源 ...

  5. selenium 入门(Java)

    官网:https://www.seleniumhq.org/ 下载地址:https://sites.google.com/a/chromium.org/chromedriver/downloads 华 ...

  6. javascript之String对象

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. ip地址后面的斜杠24

    ip地址后面的斜杠24表示掩码位是24位的,即用32位二进制表示的子网掩码中有连续的24个“1”:11111111 11111111 11111111 00000000,将其转化为十进制,就是:255 ...

  8. Python 中的type和object详解

    1.python中的类 Python2.x 中的类分为两种,一种是所有继承自object的新式类,另外一种是经典类classobj, 新式类的写法: class A(object): pass 经典类 ...

  9. python汉字编解码问题

    http://www.cnblogs.com/rollenholt/archive/2011/08/01/2123889.html

  10. js 事件驱动机制

    1.浏览器端的事件驱动机制 javascript 在浏览器端运行是单线程的,这是由浏览器决定的,这是为了避免多线程执行不同任务会发生冲突的情况.也就是说我们写的javascript 代码只在一个线程上 ...