Docker Compose搭建Redis一主二从三哨兵高可用集群

1、Docker Compose介绍

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

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

Compose是用于定义和运行多容器Docker应用程序的工具。经过Compose,您可使用YAML文件来配置应用程序的服务。而后,使用一个命令,就能够从配置中建立并启动全部服务。github

这里Docker Compose给个人感觉就是便捷、快速。只需编写一个docker-compose.yml文件,而后经过命令docker-compose up -d,这里就能够搭建多个服务起来,很是适合搭建集群环境。redis

 

2、安装Docker Compose工具

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

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

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

docker-compose -v

到这里Compose工具就安装好了工具

 

3、使用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。

 

4、哨兵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

 

5、故障转移测试

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

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

这里能够看到这个节点的身份是master也就是主节点,而后有两个链接着的从节点

 

如今咱们停掉这个节点,看看哨兵是否能够实现故障转移

docker stop a288c55db497

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

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

 

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

了解Redis主从哨兵可参考:http://www.javashuo.com/article/p-mguerusx-ee.html

相关文章
相关标签/搜索