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

问题一:虽然运行了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. (十九)C语言之指针

  2. onReachBottom 注意事项

    onReachBottom使用注意 可在pages.json里定义具体页面底部的触发距离onReachBottomDistance,比如设为50,那么滚动页面到距离底部50px时,就会触发onReac ...

  3. Delphi之TClientSocket和TServerSocket使用tcp keepalive心跳机制实现“断网”、"断电"检测

    开发环境:Delphi7 测试环境:WinXP,Win7  32bit,Win7 64bit 使用TClientSocket和TServerSocket实现TCP长连接通讯,经常因为断电断网等原因导致 ...

  4. ThreadPoolExecutor 优雅关闭线程池的原理.md

    经典关闭线程池代码 ExecutorService executorService = Executors.newFixedThreadPool(10); executorService.shutdo ...

  5. Failed to start LSB: start and stop MariaDB

    Failed to start LSB: start and stop MariaDB */--> Failed to start LSB: start and stop MariaDB Tab ...

  6. redis复制集

    应用场景:复制集作用的场景问题: 1.解决单点故障 2.读写分离 1.准备两台redis服务器 a) 一台做为注服务器,一台做为从服务器 b) 在从服务器中的redis.conf文件中添加 repli ...

  7. PHP中获取当前页面的完整URL、PHP URL处理、获取不带扩展名的文件名

    javascript实现: top.location.href 顶级窗口的地址this.location.href 当前窗口的地址 PHP实现 #测试网址: http://localhost/blog ...

  8. 发现使用id定位元操作不了

    appium:1.8.0 android系统:8.1.0 发现使用id定位元素,定位之后操作不了 解决办法:'automationName': 'UiAutomator2',

  9. Qt 之水平/垂直布局(QBoxLayout、QHBoxLayout、QVBoxLayout)

    简述QBoxLayout可以在水平方向或垂直方向上排列控件,由QHBoxLayout.QVBoxLayout所继承. QHBoxLayout:水平布局,在水平方向上排列控件,即:左右排列. QVBox ...

  10. MySQL乱码的原因和设置UTF8数据格式

    https://segmentfault.com/a/1190000018662023 MySQL使用时,有一件很痛苦的事情肯定是结果乱码.将编码格式都设置为UTF8可以解决这个问题,我们今天来说下为 ...