docker安装redis主从以及哨兵

本文使用docker在四台机器上部署一主二从三哨兵的Redis主从结构。

服务器配置

  • 192.168.102.128 主节点 centos7.5
  • 192.168.102.130 从节点 centos7.5
  • 192.168.102.131 从节点 centos7.5
  • 192.168.102.132 哨兵节点(3个容器) centos7.5

Redis版本

Redis版本 6.0.1

Docker安装

在Centos 7.5上安装docker环境

主从部署

创建配置文件存放目录

$ mkdir -p /usr/redis/data

下载redis.conf文件

$ cd /usr/redis
$ wget http://download.redis.io/redis-stable/redis.conf

主节点redis.conf配置

修改redis.conf文件中以下几个配置项:

  • bind 0.0.0.0 或者直接注释掉bind配置
  • protected-mode no(为yes时docker容器无法正常启动)
  • requirepass 123456 (redis不需要密码时该项可以不设置)
  • logfile "redis.log" (redis的日志文件)
  • masterauth 123456 (主节点的密码,必须和主节点保持一致,最好所有的redis节点密码一致,否则故障切换时会由于密码错误导致主从不同步)

slave节点redis.conf配置

在master中的redis.conf基础上,添加一下配置:

  • replicaof 192.168.102.128 6379

说明:ip地址为主节点的ip地址,端口号为主节点的redis的端口号

获取redis镜像

docker pull redis

创建容器

主节点和从节点都使用下面的命令创建容器:

$ docker run -d --privileged=true -p 6379:6379 \
-v /usr/redis/redis.conf:/etc/redis/redis.conf \
-v /usr/redis/data:/data \
--name redis redis \
redis-server /etc/redis/redis.conf \
--appendonly yes

查看redis状态

容器创建完成后,使用下面的命令查看redis的状态:

$ docker exec -it redis
$ redis-cli
$ auth 123456(redis密码)
$ info Replication(查询redis的状态)

主节点的状态为:

role:master
connected_slaves:2
slave0:ip=192.168.102.131,port=6379,state=online,offset=467463,lag=0
slave1:ip=192.168.102.130,port=6379,state=online,offset=467323,lag=1

从节点的状态为:

role:slave
master_host:192.168.102.128
master_port:6379
master_link_status:up

说明:

如果master_link_status的值为down,查看一下主节点的redis.conf中是否设置了需要redis密码(requirepass),以及从节点的redis.conf中的masterauth的值是否与主节点的密码一致,不一致需要改为一致后再重新启动容器,直到master_link_status的值为up为止。

验证主从是否同步

主节点进入redis后,使用set命令赋值:

$ set temp 123

子节点进入redis后,使用set命令,会出现以下提示:

(error) READONLY You can't write against a read only replica.

使用get命令获取temp的值:

$ get temp

能够正确获取到temp的值表示主从搭建成功。

哨兵Sentinel部署

哨兵节点建议为奇数个,防止出现脑裂情况,本文在同一台服务器上创建三个不同端口号的容器作为三个哨兵节点,端口分别为26379、36379、46379.

创建配置文件存放目录

$ mkdir -p /usr/sentinel1/data
$ mkdir -p /usr/sentinel2/data
$ mkdir -p /usr/sentinel3/data

下载sentinel.conf

$ cd /usr/sentinel1/
$ wget http://download.redis.io/redis-stable/sentinel.conf

修改sentinel.conf配置

  • logfile "sentinel.log" 日志文件名称
  • sentinel monitor mymaster 192.168.102.128 6379 2 对应主节点的ip地址和端口号
  • sentinel auth-pass mymaster 123456 主节点的redis密码

说明:

sentinel monitor mymaster 192.168.102.128 6379 2 中mymaster为自由命名的,可以进行修改,但是在修改时,需要将配置文件中所有名字为mymaster的都改为新的名字。

最后的2表示,有2个sentinel节点认为主节点失效时,开始进行选举新的主节点。

使用相同的方式在另外两个目录下(sentinel2和sentinel3)分别下载sentinel.conf文件并且进行修改。

创建哨兵容器

端口号为26379的哨兵:

$ docker run -it --restart=unless-stopped  --privileged=true \
--name sentinel-1 -p 26379:26379 \
-v /usr/sentinel1/data:/data \
-v /usr/sentinel1/sentinel.conf:/usr/local/etc/redis/sentinel.conf \
-d redis \
redis-sentinel /usr/local/etc/redis/sentinel.conf

端口号为36379的哨兵:

$ docker run -it --restart=unless-stopped  --privileged=true \
--name sentinel-2 -p 36379:26379 \
-v /usr/sentinel2/data:/data \
-v /usr/sentinel2/sentinel.conf:/usr/local/etc/redis/sentinel.conf \
-d redis \
redis-sentinel /usr/local/etc/redis/sentinel.conf

端口号为46376的哨兵:

$ docker run -it --restart=unless-stopped  --privileged=true \
--name sentinel-3 -p 46379:26379 \
-v /usr/sentinel3/data:/data \
-v /usr/sentinel3/sentinel.conf:/usr/local/etc/redis/sentinel.conf \
-d redis \
redis-sentinel /usr/local/etc/redis/sentinel.conf

查看哨兵监控情况

选择一个哨兵容器进入,查看状态:

$ docker exec -it sentinel-1 bash
$ redis-cli -p 26379
$ sentinel master mymaster

使用上述命令,可以查看哨兵的监控情况:

1) "name"
2) "mymaster"
3) "ip"
4) "192.168.102.128"
5) "port"
6) "6379"
...
31) "num-slaves"
32) "2"
33) "num-other-sentinels"
34) "2"
35) "quorum"
36) "2"
37) "failover-timeout"
38) "180000"

说明:

  • name:mymaster 与配置文件中保持一致,表示监控名称
  • ip:192.168.102.128 主节点的ip地址
  • port:6379 主节点的redis端口号
  • num-slaves: 2 表示当前主从结构中有2个从节点
  • num-other-sentinels: 2 表示还存在其他2个哨兵节点
  • quorum: 2 表示当2个哨兵认为主节点失效时,开始选举新的主节点
  • failover-timeout: 180000 表示故障切换超时时间,单位是秒。

在容器中,还可以通过查看哨兵日志的方式查看主从节点情况:

$ cat /tmp/sentinel.log

当哨兵节点启动以后,可以在日志中查看到如下所示的日志内容:

May 2020 17:25:54.404 # +monitor master mymaster 192.168.102.128 6379 quorum 2

May 2020 17:25:54.408 * +slave slave 192.168.102.130:6379 192.168.102.130 6379 @ mymaster 192.168.102.128 6379

May 2020 17:25:54.410 * +slave slave 192.168.102.131:6379 192.168.102.131 6379 @ mymaster 192.168.102.128 6379

如果未在日志文件中看到上述内容,表示哨兵启动失败,需要查找原因重新启动。

当主节点异常需要切换主节点时,可以在日志文件中看到如下内容:

May 2020 17:29:17.886 # +sdown master mymaster 192.168.102.128 6379
May 2020 17:29:18.184 # +new-epoch 1
May 2020 17:29:18.186 # +vote-for-leader 69207f833243fb96b3e09d5c0d05d0dbce46d31a 1
May 2020 17:29:18.941 # +odown master mymaster 192.168.102.128 6379 #quorum 3/2
May 2020 17:29:18.941 # Next failover delay: I will not start a failover before Tue May 12 17:35:18 2020
May 2020 17:29:19.331 # +config-update-from sentinel 69207f833243fb96b3e09d5c0d05d0dbce46d31a 172.17.0.4 26379 @ mymaster 192.168.102.128 6379
May 2020 17:29:19.331 # +switch-master mymaster 192.168.102.128 6379 192.168.102.130 6379
May 2020 17:29:19.333 * +slave slave 192.168.102.131:6379 192.168.102.131 6379 @ mymaster 192.168.102.130 6379
May 2020 17:29:19.333 * +slave slave 192.168.102.128:6379 192.168.102.128 6379 @ mymaster 192.168.102.130 6379

上述日志表示128主节点失效,重新选举130节点为主节点,128和131节点作为130的从节点,此时,使用redis的info命令就可以看到130变成了主节点,128和131变成了从节点。

说明:

在配置主节点的redis.conf时,一定要配置上masterauth属性,否则在将主节点切换成从节点之后,由于无法验证密码会导致主从不同步的情况。

springboot集成sentinel

pom文件引入redis-stater

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>

修改application.yml配置文件

redis:
timeout: PT60S
database: 0
password: 123456
sentinel:
master: mymaster
nodes: 192.168.102.132:26379,192.168.102.132:36379,192.168.102.132:46379

使用

java类中注入RedisTemplate即可正常使用

docker安装redis主从以及哨兵的更多相关文章

  1. docker部署redis主从和哨兵

    docker部署redis主从和哨兵 原文地址:https://www.jianshu.com/p/72ee9568c8ea 1主2从3哨兵 一.前期准备工作 1.电脑装有docker 2.假设本地i ...

  2. redis主从,哨兵,集群

    本次所有操作在docker下进行,搭建方便,迅速构建redis集群. 1. docker安装redis 获取redis:latest(使用官方最新的) 镜像 $ docker pull redis r ...

  3. 关于redis主从|哨兵|集群模式

    关于redis主从.哨兵.集群的介绍网上很多,这里就不赘述了. 一.主从 通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中数据保存到硬盘上,重 ...

  4. redis主从|哨兵|集群模式

    关于redis主从.哨兵.集群的介绍网上很多,这里就不赘述了. 一.主从 通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中数据保存到硬盘上,重 ...

  5. Redis 主从、哨兵Sentinel、Jedis

    Redis 主从.哨兵Sentinel.Jedis 2017年02月15日 15:52:48 有且仅有 阅读数 6183 文章标签: redis主从sentineljedis 更多 分类专栏: 7/1 ...

  6. Linux基于Docker的Redis主从复制、哨兵模式搭建

    本教程基于CentOS7,开始本教程前,请确保您的Linux系统已安装Docker. 1.使用docker下载redis镜像 docker pull redis 安装完成后,使用docker imag ...

  7. docker 安装redis , 让宿主机可以访问

    1, docker 拉去最新版本的redis docker pull redis #后面可以带上tag号, 默认拉取最新版本 2, docker安装redis container 安装之前去定义我们的 ...

  8. 自动配置redis主从和哨兵

    redis shell  每次创建redis主从和哨兵服务,文件夹要复制好几个,配置文件改一大堆.繁琐还容易出错,就想通过shell脚本自动帮我配置好端口以及文件,下面就是脚本内容: redis-to ...

  9. Docker 安装redis(四)

    Docker 安装redis 1.搜索docker镜像(可以看到搜索的结果,这个结果是按照一定的星级评价规则排序的) docker search redis 2.拉取docker的mysql镜像(如果 ...

随机推荐

  1. SpringMVC Jackson 库解析 json 串属性名大小写自动转换问题

    问题描述 在项目开发中,当实体类和表中定义的某个字段为 RMBPrice,首字母是大写的,sql 查询出来的列名也是大写的 RMBPrice,但是使用 jquery 的 ajax 返回请求响应时却出错 ...

  2. strcpy和memcpy的区别-(转自stone Jin)

    strcpy和memcpy都是标准C库函数,它们有下面的特点.strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy函 ...

  3. 微信公众号H5-网页开发须知

    网页授权 1. 公众号配置--授权回调域名(仅域名,不带https://)2. 配置的域名为全域名,该域名下的页面可以进行OAuth2.0鉴权3. scope 授权的[静默.非静默] a.(静默--无 ...

  4. 20192113 2020-2021-2 《Python程序设计》实验一报告

    20192113 2020-2021-2 <Python程序设计>实验一报告 课程:<Python程序设计> 班级: 1921 姓名: 衣丽莎 学号:20192113 实验教师 ...

  5. [论文阅读笔记] Structural Deep Network Embedding

    [论文阅读笔记] Structural Deep Network Embedding 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 现有的表示学习方法大多采用浅层模型,这可能不能 ...

  6. MySQL 基础、安装、配置

    1. MySQL 基础 1.1 什么是数据库? 1.2 数据库的类型 1.3 关系型数据库的优点 1.4 MySQL 简介 1.5 MySQL 数据类型 1.6 Mysql 存储引擎 1.7 MySQ ...

  7. 深度学习编译与优化Deep Learning Compiler and Optimizer

    深度学习编译与优化Deep Learning Compiler and Optimizer

  8. ADAS超声波雷达

    ADAS超声波雷达 在倒车入库,慢慢挪动车子的过程中,在驾驶室内能听到"滴滴滴"的声音,这些声音就是根据超声波雷达的检测距离给司机的反馈信息. 倒车雷达系统,英文全称为REVERS ...

  9. TensorFlow文本情感分析实现

    TensorFlow文本情感分析实现 前面介绍了如何将卷积网络应用于图像.本文将把相似的想法应用于文本. 文本和图像有什么共同之处?乍一看很少.但是,如果将句子或文档表示为矩阵,则该矩阵与其中每个单元 ...

  10. 高动态范围(High-Dynamic Range,简称HDR)

    高动态范围(High-Dynamic Range,简称HDR) 一.HDR介绍 高动态范围(High-Dynamic Range,简称HDR),又称宽动态范围技术,是在非常强烈的对比下让摄像机看到影像 ...