使用DockerCompose配置基于哨兵模式的redis主从架构集群

文章目录

    • 一、注意事项(坑点!!!)
    • 二、配置Redis主从架构集群
      • 第一步:创建目录文件结构
      • 第二步:编写DockerCompose配置文件
      • 第三步:编写redis.conf
      • 第四步:启动redis主从集群
    • 三、配置哨兵
      • 第一步:编写DockerCompose配置文件
      • 第二步:获取master在容器中的ip
      • 第三步:编写sentinel.conf
      • 第四步:启动哨兵
    • 四、测试从机自动升级效果
      • 1. 测试联通性
      • 2.测试自动选举

使用DockerCompose配置单个redis环境可以参考另一篇文章【使用DockerCompose安装Redis】

一、注意事项(坑点!!!)

  1. 在slave配置指定master时(slaveof redis-master 6379),尽管master是配置映射的6380,但是端口还是要指定6379,这个端口必须是master容器内的端口,而不是映射到主机的端口。
  2. 配置sentinel.conf时,指定master要用ip或者域名,指定master的容器名无法通过(只有redis.conf里知道master时容器名可以通过,如果有朋友知道其中原理是什么,欢迎在评论区留言讨论)。
  3. 使用docker-compose down删除容器集群之后,下一次启动时master的ip可能变了,要重新查询master的ip并修改哨兵的配置文件

二、配置Redis主从架构集群

第一步:创建目录文件结构

# 进入docker相关文件目(没有可以参考文章顶部的文章创建一个)
cd /docker
# 创建相关目录
mkdir redis-master-slave redis-master-slave/master redis-master-slave/slave1 redis-master-slave/slave2

第二步:编写DockerCompose配置文件

vim /docker/docker-compose/redis-master-slave.yml

写入以下内容

version: '3' 
services:# ------------------- master ------------------- redis-master:image: redis:6.2.14container_name: redis-masterports:- 6380:6379volumes:- /docker/redis-master-slave/master/redis.conf:/usr/local/etc/redis/redis.conf- /docker/redis-master-slave/master/data:/data- /docker/redis-master-slave/master/logs:/var/log/rediscommand: redis-server /usr/local/etc/redis/redis.confrestart: always# ------------------- slave1 ------------------- redis-slave1:image: redis:6.2.14container_name: redis-slave1ports:- 6381:6379volumes:- /docker/redis-master-slave/slave1/redis.conf:/usr/local/etc/redis/redis.conf- /docker/redis-master-slave/slave1/data:/data- /docker/redis-master-slave/slave1/logs:/var/log/rediscommand: redis-server /usr/local/etc/redis/redis.confrestart: always# ------------------- slave2 ------------------- redis-slave2:image: redis:6.2.14container_name: redis-slave2ports:- 6382:6379volumes:- /docker/redis-master-slave/slave2/redis.conf:/usr/local/etc/redis/redis.conf- /docker/redis-master-slave/slave2/data:/data- /docker/redis-master-slave/slave2/logs:/var/log/rediscommand: redis-server /usr/local/etc/redis/redis.confrestart: always

第三步:编写redis.conf

1. 配置master的redis.conf

vim /docker/redis-master-slave/master/redis.conf

写入以下内容

# 配置密码
requirepass 123456
# 开启aof
appendonly yes 
# aof文件名
appendfilename "appendonly.aof"
# aof记录的策略                                                                                                                                      
appendfsync always
# appendfsync everysec
# appendfsync no

2. 配置slave1的redis.conf
注意slave的6379是容器内的端口,如果没必须是6379

vim /docker/redis-master-slave/slave1/redis.conf

写入以下内容

# 配置密码
requirepass 123456
# 开启aof
appendonly yes 
# aof文件名
appendfilename "appendonly.aof"
# aof记录的策略
appendfsync always
# appendfsync everysec
# appendfsync no# 指定master
slaveof redis-master 6379
# 指定master的密码                                                                                                                                   
masterauth 123456

4. 配置slave2的redis.conf

vim /docker/redis-master-slave/slave2/redis.conf

写入以下内容(和slave1一模一样)

# 配置密码
requirepass 123456
# 开启aof
appendonly yes 
# aof文件名
appendfilename "appendonly.aof"
# aof记录的策略
appendfsync always
# appendfsync everysec
# appendfsync no# 指定master
slaveof redis-master 6379
# 指定master的密码                                                                                                                                   
masterauth 123456

第四步:启动redis主从集群

cd /docker/docker-compose
docker-compose -f redis-master-slave.yml up -d

启动后使用docker ps 命令查看状态

在这里插入图片描述

补充:

  • 停用:docker-compose -f redis-master-slave.yml down

三、配置哨兵

可以配置一个,也可以配置多个,当然配置多个哨兵的话,才更能保证高可用。这里我就只配置一个,配置多个几乎是一模一样的配置,只是端口变一下。

第一步:编写DockerCompose配置文件

vim /docker/docker-compose/redis-ms-sentinal.yml

写入以下内容

version: '3' 
services:# ------------------- sentinel ------------------- redis-sentinel:image: redis:6.2.14container_name: redis-sentinelports:- 26379:26379volumes:- /docker/redis-master-slave/sentinel.conf:/usr/local/etc/redis/sentinel.confcommand: redis-sentinel /usr/local/etc/redis/sentinel.conf                                                                                       restart: always

第二步:获取master在容器中的ip

使用 docker inspect 容器id|grep IPAddress命令,如下
在这里插入图片描述

第三步:编写sentinel.conf

vim /docker/redis-master-slave/sentinel.conf 

写入以下内容(主义填入正确的 master ip

port 26379
# 哨兵    监视   主机名      主机ip    端口 票数
sentinel monitor mymaster 192.168.48.5 6379 1
# 集群的密码
sentinel auth-pass mymaster 123456

第四步:启动哨兵

cd /docker/docker-compose
docker-compose -f redis-ms-sentinal.yml up -d

启动后使用docker ps 命令查看状态

在这里插入图片描述

四、测试从机自动升级效果

1. 测试联通性

在这里插入图片描述

2.测试自动选举

通过流言协议和投票协议进行重新选举需要几秒钟的时间
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/621019.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 重载内置函数吗

python中是不支持函数重载的,但在python3中提供了这么一个装饰器functools.singledispatch,它叫做单分派泛函数,可以通过它来完成python中函数的重载,让同一个函数支持不同的函数类型,它提供的目的也正是为了解决函数重…

【Linux C | 多线程编程】线程同步 | 互斥量(互斥锁)介绍和使用

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰: 本文未经允许…

【verilog】 reg与寄存器的关系

一、前言 在Verilog中经常用reg定义具有数据寄存功能的单元,但在verilog的使用中,并不代表其一定就是寄存单元,reg还能进行组合逻辑描述,并且在一些场景下,只能使用reg来申明变量。 二、reg型变量生成组合逻辑 在Ve…

在网上打印资料多少钱一张

随着互联网的普及和线上服务的完善,越来越多的人选择在网上打印资料。这种方式不仅方便快捷,而且通常价格更为透明和实惠。那么,在网上打印资料到底多少钱一张呢?这主要取决于您选择的打印平台、纸张规格、打印质量以及打印数量等…

书生·浦语大模型全链路开源体系-第3课

书生浦语大模型全链路开源体系-第3课 书生浦语大模型全链路开源体系-第3课相关资源RAG 概述在 InternLM Studio 上部署茴香豆技术助手环境配置配置基础环境下载基础文件下载安装茴香豆 使用茴香豆搭建 RAG 助手修改配置文件 创建知识库运行茴香豆知识助手 在茴香豆 Web 版中创建…

Zookeeper集群+消息队列Kafka

一. Zookeeper 集群的相关知识 1. zookeeper的概念 ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的…

【七 (1)指标体系建设-构建高效的故障管理指标体系】

目录 文章导航一、故障概述1、故障:2、故障管理: 二、指标体系概述1、指标2、指标体系 三、指标体系构建难点1、管理视角2、业务视角3、技术视角 四、指标体系构建原则1、与战略目标对齐2、综合和平衡3、数据可获得性4、可操作性5、具体和可衡量6、参与和…

【数据库】数据库应用系统生命周期

目录 1.为什么提出”软件工程“的思想? 2.为什么提出”瀑布模型“?缺点是什么? 3.为什么提出”快速原型模型“? 4.为什么提出”螺旋模型“? 5.关于数据库的英文缩写。 6.模型设计中的3条设计主线:数…

基于Springboot+Vue+mysql仓库管理系统仓库进销存管理系统

博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…

mybash---打造自己的命令解释器

目前我们Linux的系统默认的命令解释器是bash; 命令解释器(也称为命令行解释器或shell)是计算机操作系统中的一个重要组件,它负责接收用户输入的命令,并解释和执行这些命令。其实命令解释器就是解析命令,执行命令,输出反馈; 1.命令…

linux 云计算平台基本环境(知识准备篇)

为了更多的了解云计算平台,结合云计算和linux的知识写了一篇云计算的介绍和汇总。 文章目录 前言1. centos的软件管理1.1 yum软件包管理1.1.1 yum命令语法:1.1.2 安装软件包的步骤1.1.3 yum源 2. 主机名管理与域名解析3. centos的防火墙管理4. openstack…

docker-compose yaml指定具体容器网桥ip网段subnet;docker创建即指定subnet;docker取消自启动

1、docker-compose yaml指定具体容器网桥ip网段subnet docker-compose 启动yaml有时可能的容器网段与宿主机的ip冲突导致宿主机上不了网,这时候可以更改yaml指定subnet 宿主机内网一般是192**,这时候容器可以指定172* version: 3.9 services:coredns:…