一、Docker Compose介绍

https://docs.docker.com/compose/

Docker官方的网站是这样介绍Docker Compose的:

Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。

这里Docker Compose给我的感受就是便捷、快速。只需编写一个docker-compose.yml文件,然后通过命令docker-compose up -d,这里就可以搭建多个服务起来,非常适合搭建集群环境。

二、安装Docker Compose工具

通过命令安装Compose工具,安装Compose的前提是安装了Docker环境,如何安装和快速使用Docker,可以翻看我之前的那篇博客--Docker快速上手之搭建SpringBoot项目,这里不做赘述了。

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

给安装脚本添加执行权限

sudo chmod +x /usr/local/bin/docker-compose

这里可以使用命令查看是否安装成功

docker-compose -v

到这里Compose工具就安装好了

三、使用Compose搭建Redis主从服务器

主从复制:主节点负责写数据,从节点负责读数据,主节点定期把数据同步到从节点保证数据的一致性。

从性能方面,redis复制功能增加了读的性能,理论上说,每增加一倍的服务器,整个系统的读能力就增加一倍。

选择好路径,通过命令创建文件夹redis,然后进入文件夹创建docker-compose.yml,或者在本地创建,然后通过Xftp工具上传至服务器。docker-compose.yml写入如下内容。

version: '2'
services:
master:
image: redis    ## 镜像
container_name: redis-master    ##容器别名
command: redis-server --requirepass 123456    ##redis密码
ports:
- "6379:6379"    ##暴露端口
networks:
- sentinel-master
slave1:
image: redis
container_name: redis-slave-1
ports:
- "6380:6379"
command: redis-server --slaveof redis-master 6379 --requirepass 123456 --masterauth 123456
depends_on:
- master
networks:
- sentinel-master
slave2:
image: redis
container_name: redis-slave-2
ports:
- "6381:6379"
command: redis-server --slaveof redis-master 6379 --requirepass 123456 --masterauth 123456
depends_on:
- master
networks:
- sentinel-master

启动redis集群

docker-compose up -d

docker ps查看运行的实例,这里我们需要用到主节点的ip地址,注意不是电脑的ip哦,是节点的ip地址。

docker inspect 主节点容器id

这里先记着这个ip地址,后面使用到哨兵需要绑定这个主节点的ip。

四、哨兵sentinel模式搭建

上面我们已经搭建好了主从模式,当主服务器宕机后,需要手动把一台服务器切换成主服务器,这里需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。
哨兵是redis高可用的解决方案,由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器以及这些主服务器属下的所有从服务器,它能够在被监视的主服务器下线时,自动将该主服务器属下的某个优先的从服务器升级为新的主服务器,由这个主服务器代替已下线的主服务器继续处理命令请求。
 
哨兵的功能:
1.监控:哨兵会不断地监控检测主节点和从节点是否运作正常。
2.自动故障转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。
3.通知:哨兵可以将故障转移的结果发送给客户端。
4.配置提供者:客户端在初始化时,通过连接哨兵来获得当前Redis服务的主节点地址。
 
这里创建sentinel文件夹,然后同样编写docker-compose.yml文件
version: '2'
services:
sentinel1:
image: redis ## 镜像
container_name: redis-sentinel-1
ports:
- "26379:26379"
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- "./sentinel.conf:/usr/local/etc/redis/sentinel.conf"
sentinel2:
image: redis ## 镜像
container_name: redis-sentinel-2
ports:
- "26380:26379"
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- "./sentinel2.conf:/usr/local/etc/redis/sentinel.conf"
sentinel3:
image: redis ## 镜像
container_name: redis-sentinel-3
ports:
- "26381:26379"
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf
networks:
default:
external:
name: redis_sentinel-master

继续在此目录编写文件,编写sentinel.conf文件

port 26379
dir /tmp
#172.18.0.3填写自己的主节点ip
sentinel monitor mymaster 172.18.0.3 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 10000
sentinel deny-scripts-reconfig yes

对命令的解释

第三行表示Redis监控一个叫做mymaster的运行在172.18.0.3:6379的master,投票达到2则表示master以及挂掉了。
第四行设置主节点的密码。
第五行表示在一段时间范围内sentinel向master发送的心跳PING没有回复则认为master不可用了。
第六行的parallel-syncs表示设置在故障转移之后,同时可以重新配置使用新master的slave的数量。数字越低,更多的时间将会用故障转移完成,但是如果slaves配置为服务旧数据,你可能不希望所有的slave同时重新同步master。因为主从复制对于slave是非阻塞的,当停止从master加载批量数据时有一个片刻延迟。通过设置选项为1,确信每次只有一个slave是不可到达的。
第七行表示10秒内mymaster还没活过来,则认为master宕机了。

 
创建好文件后,复制好三份
cp sentinel.conf sentinel1.conf
cp sentinel.conf sentinel2.conf
cp sentinel.conf sentinel3.conf

启动redis哨兵模式

docker-compose up -d

五、故障转移测试

上面既然说到了哨兵可以自动转移故障,也就是当主节点宕机的时候,它们能通过选举制度,在从节点中选出一个节点来代替主节点。

我们先来看看主节点此时的信息,这里a288c55db497是我主节点容器的ip,这里先是进入容器,再进入redis客户端,再输入密码,然后使用info查看节点信息。

这里可以看到这个节点的身份是master也就是主节点,然后有两个连接着的从节点

现在我们停掉这个节点,看看哨兵是否可以实现故障转移

docker stop a288c55db497

然后选择其中一个从节点进入客户端,输入info查看信息

这里发现其中一台从节点已经变成主节点了,而且连接的从节点,也变成了一个。

了解Docker Compose可参考:https://www.jianshu.com/p/658911a8cff3

了解Redis主从哨兵可参考:https://www.cnblogs.com/leeSmall/p/8398401.html

Docker Compose搭建Redis一主二从三哨兵高可用集群的更多相关文章

  1. Redis 搭建一主二从三哨兵高可用集群

    1.单个redis服务搭建请参考:redis服务搭建 2.在/usr/local下创建目录redis-cluster,并在redis-cluster下创建 6379.6380.6381目录以及data ...

  2. docker-compose一键部署redis一主二从三哨兵模式(含密码,数据持久化)

    本篇基于centos7服务器进行部署开发 一.拉取redis镜像,使用如下命令 docker pull redis 1.查看镜像是否拉取成功,使用如下命令 docker images 显示如下则证明拉 ...

  3. springboot 集成Redis一主二从三哨兵

    1.Centos7 Redis一主二从三哨兵配置 Redis一主二从三哨兵环境搭建 2.接入过程 与集成redis单机不同的是jedis相关的配置做了修改,JedisPool换成了JedisSenti ...

  4. 实践 - 搭建Redis一主两从三哨兵

    实践 - 搭建Redis一主两从三哨兵 原因: 最近在复习Redis的时候,学习到了为了提高Redis集群的高可用性,有一个模式为哨兵模式.哨兵模式的作用是为了在主节点出现阻塞或者错误,无法接收数据的 ...

  5. redis环境搭建及一主二从三哨兵模式配置

    一.单机redis环境搭建 1.安装: OS:linux redhat6.5 下载redis 官网下载链接:https://redis.io/download 把安装包上传到服务器,进行解压 [roo ...

  6. redis 一主二从三哨兵

    总体部署 一主二从三哨兵 ip地址分配分别为 主 127.0.0.1:6379 从 127.0.0.1:6389 从 127.0.0.1:6399 哨兵 127.0.0.1:26379 哨兵 127. ...

  7. redis一主二从三哨兵

    redis做集群的时候有很多种配置方法,一主二从三哨兵这种模式是官网推荐的.,写配置文件链接的时候,写的是哨兵地址,不是IP,用户名,密码之类的. 一主二从很好理解,一个主的redis,实时备份到两个 ...

  8. Docker搭建Redis一主两从三哨兵

    作者:oscarwin juejin.im/post/5d26b03de51d454fa33b1960 这次实验准备了三台云主机,系统为Debian,ip分别为:35.236.172.131 ,35. ...

  9. Nginx 笔记(四)nginx 原理与优化参数配置 与 nginx 搭建高可用集群

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.nginx 原理与优化参数配置 ​ ​ master-workers 的机制的好处 首先,对于每个 ...

随机推荐

  1. C++模板编程与宏编程经验谈

    C++模板编程与宏编程经验谈 有人说C 与C++的不同主要是因为C++支持模板,不要说区别是面向对象化编程,因为C同样能很好的实现对象化编程,面向对象化其实只是思想,在很多语言中都能实现,区别在于实现 ...

  2. 01Java语言基础

    [实验任务四]: 1.程序设计思想 根据RandomStr.java,随机生成6位字母,在对话框中输出,用户根据随机生成的验证码对应输入,程序根据用户输入的内容与系统随机生成的验证码字符比较,若相等, ...

  3. 「 从0到1学习微服务SpringCloud 」01 一起来学呀!

    有想学微服务的小伙伴没?一起来从0开始学习微服务SpringCloud,我会把学习成果总结下来,供大家参考学习,有兴趣可以一起来学!如有错误,望指正! Spring .SpringBoot.Sprin ...

  4. IntelliJ IDEA编辑文件的时候CPU飙高问题的解决

    原文地址:https://www.javatang.com/archives/2018/04/26/25582403.html 上篇文章中说明了解决IntelliJ IDEA中文输入法无提示的问题,最 ...

  5. 张旭个人第4次作业—Alpha项目测试

    课程 软件工程实践 作业要求 个人第四次作业 团队名称 C#软工造梦厂 作业目标 运行其他组的项目找出问题及提出建议 一.测试人信息 姓名 张旭 学号 201731024123 团队名称 C#软工造梦 ...

  6. Jmeter之BeanShell断言使用

    1.Bean Shell常用内置变量 JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log:用来记录日志文件,写入到j ...

  7. os模块常用方法笔记

    os模块是程序和系统文件之间的交互接口,可以实现对文件的创建.删除等功能,以下对os模块的功能做一个笔记,方便以后学习和查找. import os os.getcwd() #获取当前工作目录,即当前p ...

  8. laravel 事件机制 实践总结

    laravel 事件机制 实践总结 观察者模式 在EventServiceProvider的linsten数组里面加上事件和监听器,键名是事件,键值里面的数组是一个或者多个监听器, protected ...

  9. 2019中国大学生程序设计竞赛-女生专场(重现赛)部分题解C-Function(贪心+优先队列) H-clock(模拟)

    Function 题目链接 Problem Description wls 有 n 个二次函数 Fi(x) = aix2 + bix + ci (1 ≤ i ≤ n). 现在他想在∑ni=1xi = ...

  10. Docker Mysql部署与使用

    参考链接:Docker 安装 Mysql 详解