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. 用urllib库几行代码实现最简单爬虫

    """ 使用urllib.request()请求一个网页内容,并且把内容打印出来. """ from urllib import reque ...

  2. Python 简单的龟鱼游戏

    游戏编程:按一下要求定义一个乌龟类和鱼类并尝试编程 假设游戏场景为范围(x,y)为 0<=x<=10,0<=y<=10 游戏生成1只乌龟和10条鱼 他们的移动方向均随机 乌龟的 ...

  3. 分布式存储ceph---openstack对接ceph存储后端(4)

    ceph对接openstack环境 一.使用RBD方式提供存储,如下数据: 1.image:保存glance中的image 2.volume存储:保存cinder的volume:保存创建虚拟机时选择创 ...

  4. MyBatis 延迟加载(十四)

    什么是延迟加载 延迟加载又叫懒加载,也叫按需加载,也就是说先加载主表信息,需要的时候,再去加载从表信息.代码中有查询语句,当执行到查询语句时,并不是马上去数据库中查询,而是根据设置的延迟策略将查询向后 ...

  5. centos7 的Linux下ip命令替换ifconfig命令的用法

    linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者.使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务.ifconfig是net-tools中已被废弃使用的一个命 ...

  6. 使用 Flux+Flagger+Istio+Kubernetes 实战 GitOps 云原生渐进式(金丝雀)交付

    在这篇指南中,你将获得使用 Kubernetes 和 Istio 使用 GitOps 进行渐进式交付(Progressive Delivery)的实际经验. 介绍 gitops-istio GitOp ...

  7. Python+Selenium - 文件上传

    如下图,从系统点击上传功能,打开到这种如下图页面的才适合本文介绍的处理方法 处理方法一 pywinauto库 优点:可以选择多个文件,路径中有中文也支持 缺点:只能Windows平台使用 安装 pip ...

  8. 201871030139-于泽浩 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    201871030139-于泽浩 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 2018级卓越班 这个作业要求链接 软件工程结对项目 ...

  9. H265与ffmpeg改进开发

    H265与ffmpeg改进开发 1. Introduction KSC265是集编码.解码于一体的H.265编解码软件,完全遵循H.265协议标准.符合H.265编码规范的视频都可以通过KSC265进 ...

  10. H5根据浏览器内核判断并区分微信、QQ和QQ浏览器

    项目中碰到这样一个需求点,在h5页面区分当前所处客户端环境是QQ客户端.微信客户端还是QQ浏览器客户端,并做不同的逻辑处理 首先可以通过 window.navigator.userAgent 获取到当 ...