热门标签 | 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主节点下线后再重启变成从节点时,需配置认证主节点

在这里插入图片描述



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


推荐阅读
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • CentOS7.8下编译muduo库找不到Boost库报错的解决方法
    本文介绍了在CentOS7.8下编译muduo库时出现找不到Boost库报错的问题,并提供了解决方法。文章详细介绍了从Github上下载muduo和muduo-tutorial源代码的步骤,并指导如何编译muduo库。最后,作者提供了陈硕老师的Github链接和muduo库的简介。 ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
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社区 版权所有