一、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. kaggle竞赛分享:NFL大数据碗(上篇)

    kaggle竞赛分享:NFL大数据碗 - 上 竞赛简介 一年一度的NFL大数据碗,今年的预测目标是通过两队球员的静态数据,预测该次进攻推进的码数,并转换为该概率分布: 竞赛链接 https://www ...

  2. java Random类(API)

    一.过程 1.导包 2.实例化 3.使用(类的成员方法) 二.作用 生成随机数,与python中random 相似 三.常用方法 1.nextInt(),随机生成int数据类型范围的数 2.nextI ...

  3. Elasticsearch 开箱指南

    内容概要 ES 基础介绍,重点是其中的核心概念. 基础 API 实践操作. 1. 基础介绍 Elasticsearch (ES) 是一个数据库,提供了分布式的.准实时搜索和分析. 基于 Apache ...

  4. OpenCV图像数字化

    灰度图像数字化 我们平时使用PS或者其它图像处理的软件打开一个要处理的图像,当我们将图像放大的足够大的时候我们会发现很多个灰度程度不同的小方格,其中每个方格就相当于一个像素,水平方向的方格数代表这个图 ...

  5. Java框架之MyBatis 06-全局配置-mapper映射-分步查询

    MyBatis MyBatis是Apache的一个开源项目iBatis, iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架. iBatis  提供的持 ...

  6. ApplicationContextAware获取bean

    ApplicationContextAware获取bean 概述 在某些特殊的情况下,Bean需要实现某个功能,但该功能必须借助于Spring容器才能实现,此时就必须让该Bean先获取Spring容器 ...

  7. go--->共享内存和通信两种并发模式原理探究

    共享内存和通信两种并发模式原理探究 并发理解 人类发明计算机编程的本质目的是为了什么呢?毫无疑问是为了解决人类社会中的各种负责业务场景问题.ok,有了这个出发点,那么想象一下,比如你既可以一心一意只做 ...

  8. Dubbo如何支持本地调用?injvm方式解析

    Dubbo是一个远程调用的框架,对于一个服务提供者,暴露了一个接口供外部消费者调用,那么对于提供者自己是否可以调用这个接口,需要什么特殊处理吗? 这篇文章就分享下Dubbo关于本地调用的实现机制,以及 ...

  9. Git详解之特殊配置与钩子应用

    前言 到目前为止,我阐述了 Git 基本的运作机制和使用方式,介绍了 Git 提供的许多工具来帮助你简单且有效地使用它. 在本章,我将会介绍 Git 的一些重要的配置方法和钩子机制以满足自定义的要求. ...

  10. Centos 7 最小化部署svn版本控制(http协议)

    1.关闭selinux sh-4.2# sed -i 's/enforcing/disabled/' /etc/selinux/config sh-4.2# reboot 2.卸载防火墙 sh-4.2 ...