我们知道,Redis的集群方案大致有三种:1)redis cluster集群方案;2)master/slave主从方案;3)哨兵模式来进行主从替换以及故障恢复。

sentinel系统可以监视一个或者多个redis master服务,以及这些master服务的所有从服务;当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求。

同样,我们使用docker进行搭建

新建一个mkdir redis-sentinel文件夹

进入项目文件夹 cd redis-sentinel,再建立一个sentinel专门来存放哨兵脚本,然后cd sentinel

建立sentinel.conf配置文件:

sentinel monitor mymaster redis-master 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 5000

该配置的意思是,监控主服务器的6379端口并且起两个实例,如果哨兵5s内没有收到主节点的心跳,哨兵就认为主节点宕机了,默认是30秒,如果5秒以上连接不上主库同步,则在5秒后进行选举,对其他的从服务器进行角色转换

随后,建立sentinel-entrypoint.sh脚本文件:

#!/bin/shsed -i "s/$SENTINEL_QUORUM/$SENTINEL_QUORUM/g" /etc/redis/sentinel.conf
sed -i "s/$SENTINEL_DOWN_AFTER/$SENTINEL_DOWN_AFTER/g" /etc/redis/sentinel.conf
sed -i "s/$SENTINEL_FAILOVER/$SENTINEL_FAILOVER/g" /etc/redis/sentinel.confexec docker-entrypoint.sh redis-server /etc/redis/sentinel.conf --sentinel

该脚本文件会对配置文件进行同步,用来启动哨兵

然后我们来建立Dockerfile指定基础镜像,同时拷贝配置文件到镜像内部:

FROM redisEXPOSE 26379
ADD sentinel.conf /etc/redis/sentinel.conf
RUN chown redis:redis /etc/redis/sentinel.conf
COPY sentinel-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/sentinel-entrypoint.sh
ENTRYPOINT ["sentinel-entrypoint.sh"]

最后退到项目根目录 cd …

建立docker-compose.yml配置文件:

master:image: redisports:- "6379:6379"
slave1:image: rediscommand: redis-server --slaveof redis-master 6379links:- master:redis-masterports:- "6380:6379"
slave2:image: rediscommand: redis-server --slaveof redis-master 6379links:- master:redis-masterports:- "6381:6379"
sentinel1:build: sentinelenvironment:- SENTINEL_DOWN_AFTER=5000- SENTINEL_FAILOVER=5000    links:- master:redis-master- slave1
sentinel2:build: sentinelenvironment:- SENTINEL_DOWN_AFTER=5000- SENTINEL_FAILOVER=5000    links:- master:redis-master- slave2

意思是,我们起三台redis服务,分别跑在6379,6380,6381 ,一主两从,并且有两个哨兵实例来监控他们,最后项目结构是这样的

在项目根目录下,启动服务:

docker-compose up --force-recreate

如果希望在后台运行可以加-d参数

此时我们可以测一下同步是否成功,分别开三个窗口登录到redis,redis-cli -p 6379,redis-cli -p 6380,redis-cli -p 6381

在主库6379中set 123 123,然后分别在从库get 123

没有问题,现在我们来测一下哨兵模式是否好用,如果主库由于某种原因宕机了,从库是否能自动切换角色

我们可以手动停止主库的容器进程,来模拟宕机的情况

docker stop redissentinel_master_1

此时主库已经连接不上了,我们进入从库,使用info命令来查看从库的角色

发现之前6380本来是从库(slave)角色,现在已经变成主库了(master)了

其实这就是所谓的高负载高可用架构,在使用集群承担高负载的同时,也能进行高可用的容灾机制。

基于Docker-compose搭建Redis高可用集群-哨兵模式(Redis-Sentinel)相关推荐

  1. Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】

    ================================================= 人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助! 点击查看高清无码教程 == ...

  2. Redis缓存高可用集群哨兵模式详解

    单机Redis服务器环境下,如果服务器宕机就会造成无法挽回的损失.于是就出现了主从架构的Redis服务器,从节点slave服务器并不对外提供服务,只是将数据定期从主节点master服务器上同步过来,此 ...

  3. docker mysql 高可用_使用docker 基于pxc镜像搭建mysql高可用集群

    前置条件 docker已安装: 第一步:拉取镜像 docker pull percona/percona-xtradb-cluster:5.7.21 第二步:复制重命名镜像(可选) docker ta ...

  4. 【K8SRockyLinux】基于开源操作系统搭建K8S高可用集群(详细版)

    文章目录 一.实验节点规划表

  5. docker搭建redis高可用集群

    目标:docker搭建redis高可用集群 1.架构:六个redis容器,三主三从,主从复制,主机宕机从机自动替代 2.网络架构设计:设计一个专属redis的docker网络 docker netwo ...

  6. 【❤️万字长文总结❤️】一篇学会Redis高可用✔集群✔搭建详细教程

    大家好,我是Lex 喜欢欺负超人那个Lex 擅长领域:python开发.网络安全渗透.Windows域控Exchange架构 今日重点:今天总结一下Redis集群高可用的搭建流程 [惊喜推荐+优质资源 ...

  7. redis高可用集群

    一.redis集群方案比较 主从哨兵模式 redis3.0之前的版本实现集群一般采用的方案是借助哨兵sentinel工具来监控master节点的状态,如果master主节点异常,则会做主从切换,将一台 ...

  8. redis 04:Redis高可用集群

    文章目录 一.Redis集群方案比较 二.Redis高可用集群搭建 三.Java操作redis集群 四.Redis集群原理分析 五.集群伸缩 5.1 集群扩展 5.1 缩容集群 六.总结 以下参考了图 ...

  9. 搭建Nginx高可用集群(keepalived+双机热备)

    一.Nginx高可用 首先了解一下什么是高可用,高可用是分布式系统架构中必须考虑的因素. 我们都知道,使用nginx的反向代理和负载均衡可以解决tomcat等web容器的单点故障以及高并发等问题. 反 ...

最新文章

  1. SDUTOJ3771_数组计算机(线段树)
  2. 120xa正反转参数_你知道变频器的“正反转死区时间”吗?它的“停机方式”有几种?...
  3. struts中多个模块时,使用多个struts-config.xml文件之间时如何切换的!
  4. ubuntu下c 访问mysql_Ubuntu下用C语言访问MySQL数据库
  5. Python《爬虫收集》
  6. linux系统恢复上一次,如何将您的Ubuntu Linux系统恢复到其上一个状态
  7. Django之内置组件
  8. flask服务器获取多个文件,python - OkHttp将带有名称的多个文件上传到Python Flask服务器 - 堆栈内存溢出...
  9. 基于java的康泰小区物业管理系统的设计与实现毕业设计源码101926
  10. 数字图像相关(Digital Image Correlation, DIC)中的非线性优化方法(FA-GN与IC-GN)
  11. rasa实现同义词替换
  12. 设置导航标题颜色以及导航条背景色
  13. 分享qq空间出现失败
  14. 内存管理Memorynbsp;OC——第九天
  15. Centos7.4.1708 安装usb无限网卡驱动
  16. linux vmware文件互传,Linux与Windows文件互传(VMWare)
  17. 解决问题——无法连接到更新服务器。我们将稍后再试,你也可以立即进行检查。如果问题仍然存在,请确保你已连接到Internet
  18. 实现textarea不自动换行
  19. 详解JVM之双亲委派机制
  20. iOS下载JPG图片会被压缩问题

热门文章

  1. 新浪与Google(谷歌)结成战略合作伙伴关系
  2. java编程军规_java 编程军规
  3. 学计算机编程难吗,计算机编程入门 计算机编程难学吗
  4. python生成6位数验证码_Python随机生成一个6位的验证码代码分享
  5. FinalShell密码找回/FinalShell密码破解
  6. ubuntu挂载gpt硬盘
  7. 使用terminalizer工具录制终端生成GIF动画
  8. 【数字图像处理】空间滤波
  9. 安卓自定义计时器控件
  10. uni-app前端开发(一)登录功能