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. 05丨实验:安装MongoDB

    https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/ 源码安装 export PATH=$PATH:/data/mo ...

  2. 处理SpringMVC中遇到的乱码问题

    乱码在日常开发写代码中是非常常见的,以前乱码使用的是通过设置一个过滤器解决, 现在可以使用SpringMVC给提供的过滤器,在web.xml设置,这比我们自己写的过滤器强大的的多. 注意:每次修改了x ...

  3. Windows 下QT程序发布

    方法1:利用QT自带打包工具 1.新建文件夹,把编译好的exe文件放入该文件夹 2.使用QT下的命令行 3.进入该exe所在文件,执行windeployqt xxx.exe,若出现找不到命令的情况 4 ...

  4. 将HLSL射线追踪到Vulkan

    将HLSL射线追踪到Vulkan Bringing HLSL Ray Tracing to Vulkan Vulkan标志 DirectX光线跟踪(DXR)允许您使用光线跟踪而不是传统的光栅化方法渲染 ...

  5. IOS小组件(8):App与Widget数据共享

    引言   Widget是一个迷你版的App,IOS有沙盒机制,不同App之间无法直接共享数据.组件和主App之间其实就是不同App的关系,所以也无法通过userdefaults.standard来传数 ...

  6. Java 将PPT幻灯片转为HTML

    本文以Java程序代码为例展示如何通过格式转换的方式将PPT幻灯片文档转为HTML文件.这里的PPT幻灯片可以是.ppt/.pptx/.pps/.ppsx/.potx等格式. 代码实现思路:[加载PP ...

  7. 「题解」agc031_c Differ by 1 Bit

    本文将同步发布于: 洛谷博客: csdn: 博客园: 简书: 题目 题目链接:洛谷 AT4693.AtCoder agc031_c. 题意概述 给定三个数 \(n,a,b\),求一个 \(0\sim ...

  8. 【NX二次开发】Block UI 选择单元

    属性说明 属性   类型   描述   常规           BlockID    String    控件ID    Enable    Logical    是否可操作    Group    ...

  9. day20200911

    UG12.0进入运动仿真模块 新建仿真 定义固定连杆 定义其他连杆 定义运动副 定义驱动 定义解算方案并求解 导出动画

  10. .NET平台系列30:.NET Core/.NET 学习资源汇总

    系列目录     [已更新最新开发文章,点击查看详细] .NET Core/.NET技术虽然吸取了.NET Framework 中的精华,但是也扩展了一些新功能,尤其是跨平台的 ASP.NET Cor ...