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

问题一:虽然运行了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. win7安装Elasticsearch和Elasticsearch-Head插件

    1.环境搭建 1)Java环境搭建可以参考相关的资料,这里不做详细介绍 2)nodejs环境搭建 到官方网站下载相应的zip包:https://nodejs.org/dist/v8.9.1/node- ...

  2. flask 第四篇 模板语言jinja2

    是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...

  3. 编写可维护的JavaScript代码(部分)

    平时使用的时VS来进行代码的书写,VS会自动的将代码格式化,所有写了这么久的JS代码,也没有注意到这些点.看了<编写可维护的javascript代码>之后,做了些笔记. var resul ...

  4. rocketmq的linux搭建环境

    3.3. 上传解压[两台机器] # 上传 apache-rocketmq.tar.gz 文件至/usr/local # tar -zxvf apache-rocketmq.tar.gz -C /usr ...

  5. windows驱动程序

    官网文档 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/

  6. APP营销软件项目常见(合规)风险评估

    一个软件项目开始前,往往需要先进行风险评估以及可行性评估,尤其涉及到营销拉新类项目,需要大量依靠用户二次分享传播,为了避免项目做了无用功,分享一些常见的App项目风险: 微信分享功能 风险: 1.蒙层 ...

  7. 五十二:WTForms表单验证之基本使用

    作用:1.做表单验证,把用户提交的数据验证是否合法2.做模板渲染 安装:pip install wtforms 表单验证1.自定义一个表单类,继承wtforms.Form2.定义好需要验证的字段,字段 ...

  8. kubernetes学习:CKA考试认证(二)

    1. 它题的意思是 在 development 名称空间里面 找到名为 baz的 service 然后通过这个service的selector 找出 对应的pod . 要用   kubectl des ...

  9. koa-session 持久化

    一.使用mongoose链接数据库 'use strict'; const mongoose = require('mongoose'); const config = require('config ...

  10. idea debug的drop frame,set watch和设置过滤条件

    idea debug中的drop frame就是回退到上一个方法调用的开始处,在IDEA里测试无法一行一行地回退或回到到上一个断点处,而是回到上一个方法. 在调用栈方法上选择要回退的方法,右键选择Dr ...