热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

运维(24)dockercompose部署redis一主二从三哨兵模式

文章目录一、前言二、docker-compose部署redis一主二从三哨兵模式docker-compose-redis-master-slave-sentinel.ymlredi

文章目录

      • 一、前言
      • 二、docker-compose部署redis一主二从三哨兵模式
            • docker-compose-redis-master-slave-sentinel.yml
            • redis.conf
            • redis-sentinel.conf
      • 三、测试
      • 四、其它
            • 解决情况1:端口映射问题
            • 解决情况2:redis由于安全问题禁用命令CONFIG - 防止客户端修改Redis配置
            • 解决情况3:redis主节点下线后再重启变成从节点时,需配置认证主节点


一、前言

运维(23) docker-compose部署redis主从复制模式

本文将基于以下环境部署redis一主二从三哨兵模式

  1. CentOS Linux release 7.6.1810 (Core)
  2. Docker version 20.10.5, build 55c4c88
  3. docker-compose version 1.28.6, build 5db8d86f

tips: 本文仅基于单台服务器环境部署


二、docker-compose部署redis一主二从三哨兵模式


可参考 https://gitee.com/zhengqingya/docker-compose

# 准备
git clone https://gitee.com/zhengqingya/docker-compose.git
cd docker-compose/Liunx# 当前目录下所有文件赋予权限(读、写、执行)
chmod -R 777 ./redis-master-slave-sentinel# 运行 -- 哨兵模式(sentinel监视redis主从服务,当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求 -- 即主节点切换)
docker-compose -f docker-compose-redis-master-slave-sentinel.yml -p redis up -d# 哨兵模式查看
# 连接
docker exec -it redis-sentinel-1 redis-cli -p 26379 -a 123456
# 查看redis主信息
sentinel master mymaster
# 查看redis从信息
sentinel slaves mymaster

下面贴出相关配置文件

docker-compose-redis-master-slave-sentinel.yml

version: '3'# 网桥redis -> 方便相互通讯
networks:redis:services:# ============================ ↓↓↓↓↓↓ redis ↓↓↓↓↓↓ ============================# 主redis-master:image: registry.cn-hangzhou.aliyuncs.com/zhengqing/redis:6.0.8 # 镜像'redis:6.0.8'container_name: redis-master # 容器名为'redis-master'restart: unless-stopped # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器command: redis-server /etc/redis/redis.conf --port 6380 --requirepass 123456 --masterauth 123456 --appendonly no # 启动redis服务并添加密码为:123456, 当主redis下线重启后变成从redis时认证主redis密码:123456, 默认不开启redis-aof方式持久化配置environment: # 设置环境变量,相当于docker run命令中的-eTZ: Asia/ShanghaiLANG: en_US.UTF-8volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
# - "./redis-master-slave-sentinel/redis/master/data:/data"- "./redis-master-slave-sentinel/redis/master/config/redis.conf:/etc/redis/redis.conf" # `redis.conf`文件内容`http://download.redis.io/redis-stable/redis.conf`ports: # 映射端口- "6380:6380"networks:- redis# 从1redis-slave-1:image: registry.cn-hangzhou.aliyuncs.com/zhengqing/redis:6.0.8 # 镜像'redis:6.0.8'container_name: redis-slave-1 # 容器名为'redis-slave-1'restart: unless-stopped # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器command: redis-server /etc/redis/redis.conf --port 6381 --requirepass 123456 --appendonly no --slaveof redis-master 6380 --masterauth 123456 # 启动redis服务并添加密码为:123456,默认不开启redis-aof方式持久化配置,连接并认证master节点environment: # 设置环境变量,相当于docker run命令中的-eTZ: Asia/ShanghaiLANG: en_US.UTF-8volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
# - "./redis-master-slave-sentinel/redis/slave-1/data:/data"- "./redis-master-slave-sentinel/redis/slave-1/config/redis.conf:/etc/redis/redis.conf" # `redis.conf`文件内容`http://download.redis.io/redis-stable/redis.conf`ports: # 映射端口- "6381:6381"networks:- redisdepends_on:- redis-masterlinks:- redis-master# 从2redis-slave-2:image: registry.cn-hangzhou.aliyuncs.com/zhengqing/redis:6.0.8 # 镜像'redis:6.0.8'container_name: redis-slave-2 # 容器名为'redis-slave-2'restart: unless-stopped # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器command: redis-server /etc/redis/redis.conf --port 6382 --requirepass 123456 --appendonly no --slaveof redis-master 6380 --masterauth 123456 # 启动redis服务并添加密码为:123456,默认不开启redis-aof方式持久化配置,连接并认证master节点environment: # 设置环境变量,相当于docker run命令中的-eTZ: Asia/ShanghaiLANG: en_US.UTF-8volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
# - "./redis-master-slave-sentinel/redis/slave-2/data:/data"- "./redis-master-slave-sentinel/redis/slave-2/config/redis.conf:/etc/redis/redis.conf" # `redis.conf`文件内容`http://download.redis.io/redis-stable/redis.conf`ports: # 映射端口- "6382:6382"networks:- redisdepends_on:- redis-masterlinks:- redis-master# ============================ ↓↓↓↓↓↓ sentinel ↓↓↓↓↓↓ ============================redis-sentinel-1:image: registry.cn-hangzhou.aliyuncs.com/zhengqing/redis:6.0.8 # 镜像'redis:6.0.8'container_name: redis-sentinel-1 # 容器名为'redis-sentinel-1'restart: unless-stopped # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器command: redis-sentinel /etc/redis/sentinel.confenvironment: # 设置环境变量,相当于docker run命令中的-eTZ: Asia/ShanghaiLANG: en_US.UTF-8ports:- "26379:26379"volumes:- "./redis-master-slave-sentinel/sentinel/redis-sentinel-1.conf:/etc/redis/sentinel.conf" # `sentinel.conf`文件内容`http://download.redis.io/redis-stable/sentinel.conf`networks:- redisdepends_on:- redis-master- redis-slave-1- redis-slave-2links:- redis-master- redis-slave-1- redis-slave-2redis-sentinel-2:image: registry.cn-hangzhou.aliyuncs.com/zhengqing/redis:6.0.8 # 镜像'redis:6.0.8'container_name: redis-sentinel-2 # 容器名为'redis-sentinel-2'restart: unless-stopped # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器command: redis-sentinel /etc/redis/sentinel.confenvironment: # 设置环境变量,相当于docker run命令中的-eTZ: Asia/ShanghaiLANG: en_US.UTF-8ports:- "26380:26380"volumes:- "./redis-master-slave-sentinel/sentinel/redis-sentinel-2.conf:/etc/redis/sentinel.conf" # `sentinel.conf`文件内容`http://download.redis.io/redis-stable/sentinel.conf`networks:- redisdepends_on:- redis-master- redis-slave-1
# - redis-slave-2- redis-sentinel-1links:- redis-master- redis-slave-1- redis-slave-2redis-sentinel-3:image: registry.cn-hangzhou.aliyuncs.com/zhengqing/redis:6.0.8 # 镜像'redis:6.0.8'container_name: redis-sentinel-3 # 容器名为'redis-sentinel-3'restart: unless-stopped # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器command: redis-sentinel /etc/redis/sentinel.confenvironment: # 设置环境变量,相当于docker run命令中的-eTZ: Asia/ShanghaiLANG: en_US.UTF-8ports:- "26381:26381"volumes:- "./redis-master-slave-sentinel/sentinel/redis-sentinel-3.conf:/etc/redis/sentinel.conf" # `sentinel.conf`文件内容`http://download.redis.io/redis-stable/sentinel.conf`networks:- redisdepends_on:- redis-master- redis-slave-1- redis-slave-2- redis-sentinel-1- redis-sentinel-2links:- redis-master- redis-slave-1- redis-slave-2

redis.conf

参考 http://download.redis.io/redis-stable/redis.conf


redis-sentinel.conf

参考 http://download.redis.io/redis-stable/sentinel.conf

port 26379
dir /tmp
sentinel monitor mymaster redis-master 6380 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel auth-pass mymaster 123456
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes

运行后如下
在这里插入图片描述
redis-sentinel.conf配置文件会自动加载到redis从节点信息
在这里插入图片描述

三、测试


  1. 主写从读
  2. 主节点下线后,sentinel自动将其它从节点升级为主节点且具备写能力
  3. 将之前下线的主节点重启上线时变成从节点

这个就自己测试着玩吧^_^
在这里插入图片描述

sentinel切换redis主从节点日志如下
在这里插入图片描述

四、其它

小编在部署的时候遇到sentinel无法自动切换主从的问题

解决情况1:端口映射问题

在同一机器上部署时端口最好一一对应
在这里插入图片描述

解决情况2:redis由于安全问题禁用命令CONFIG - 防止客户端修改Redis配置

redis.conf中关闭其配置
在这里插入图片描述

解决情况3:redis主节点下线后再重启变成从节点时,需配置认证主节点

在这里插入图片描述



今日分享语句:
不要轻易用过去来衡量生活的幸与不幸!每个人的生命都是可以绽放美丽~ 只要你懂得珍惜。


推荐阅读
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 本文介绍了如何在GitHub上设置多个SSH Key,以解决原有Key失效的问题,并确保不同项目使用不同的私钥进行安全访问。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • Git命令基础应用指南
    本指南详细介绍了Git命令的基础应用,包括如何使用`git clone`从远程服务器克隆仓库(例如:`git clone [url/path/repository]`)以及如何克隆本地仓库(例如:`git clone [local/path/repository]`)。此外,还提供了常见的Git操作技巧,帮助开发者高效管理代码版本。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 本文深入探讨了 Git 与 SVN 的高效使用技巧,旨在帮助开发者轻松应对版本控制中的各种挑战。通过详细解析两种工具的核心功能与最佳实践,读者将能够更好地掌握版本管理的精髓,提高开发效率。 ... [详细]
  • 1.创建目录mkdir-phomerocketmqnamesvr1data&&mkdir-phomerocketmqnamesvr1log&&mkdir-phomerocketm ... [详细]
author-avatar
无为小妮子_373
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有