docker搭建主从架构和哨兵模式

news/2024/5/1 21:01:30/文章来源:https://blog.csdn.net/qq_56769991/article/details/127249823

下文介绍使用docker来创建redis的主从架构和哨兵模式

前提

linux已经下载并安装了docker
从仓库中pull redis的镜像

docker pull redis:latest

确保主机中的镜像已经有了刚下载好的redis镜像

docker images

在这里插入图片描述
架构图
在这里插入图片描述

一. docker创建redis的主从架构

1. 先创建一个master节点

首先需要在宿主机方创建一个redis.conf文件,用于配置信息的填写
相关的配置文件如下:

protected-mode no# master节点,这里我们规定端口为6379
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300# 设置为no,如果为yes,可能会与docker的-d后台命令产生冲突
daemonize no# redis相关文件(如rdb、aof)的存放路径(这里我们要设置在容器内的路径,不是宿主机的路径)
dir "/docker/redis/data"# 每个redis都会产生一个进程号,其保存在一个文件中,这里就记录了该文件的路径。当进行微服务架构时,都需要这个pid执行文件
pidfile "/docker/redis/data/6379.pid"loglevel notice# 日志文件保存位置
logfile "/docker/redis/data/logfile.log"databases 16
always-show-logo no
set-proc-title yes
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
rdb-del-sync-files no

将上述文件存放在/docker/redis/redis1/conf/redis.conf中

2.使用docker相关命令启动redis

docker run -d --privileged=true --name=redis1 -p 6379:6379 -v /docker/redis/redis1/:/docker/redis/ redis redis-server /docker/redis/conf/redis.conf

命令解析
–privileged=true :表示在容器中以root权限进行
–name=redis1 :我们这里对容器取名字,使用redis1表示这是master
-v /docker/redis/redis1/:/docker/redis/ :卷映射(需要现在主机创建目录/docker/redis/redis1/conf和/docker/redis/redis1/data)

redis-server /docker/redis/conf/redis.conf:指定配置文件启动redis服务。

启动成功后,使用命令

docker ps

查看对应的容器是否创建成功。

3.cp redis1对应的目录和配置文件

redis1对应的目录结构如下:

/docker/redis/redis1/conf/redis.conf
/docker/redis/redis1/data/

我们需要做的就是创建master对应的两个从主机redis2和redis3,所以这里我们在/docker/redis/目录下cp redis1形成redis2和redis3。如下:

/docker/redis/redis2/conf/redis.conf
/docker/redis/redis2/data

修改redis2中对应的配制文件redis.conf

protected-mode no
port 6380
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
dir /docker/redis/data
Pidfile /docker/redis/data/6380.pid
loglevel notice
logfile /docker/redis/data/logfile.log
databases 16
always-show-logo no
set-proc-title yes
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
replicaof 20.20.20.130 6379
replica-read-only yes

配制文件解析:
其实redis2的配制文件和redis1的配制文件差不多,需要修改的如下

port 6380
Pidfile /docker/redis/data/6380.pid

修改成对应的端口号,
另外还需要增加从redis的命令:

# 表示当前redis的主redis是谁
replicaof 20.20.20.130 6379# 该节点是否只读(主从架构下,从节点是只读的)
replica-read-only yes

4.启动redis2从主机

使用docker命令:

docker run -d --privileged=true --name=true -p 6380:6380 -v /docker/redis/redis2/:/docker/redis redis redis-server /docker/redis/conf/redis.conf

该命令和redis1启动命令类似。
即从主机的搭建,需要修改的基本上就是对应的主从redis中的配置文件,如port和repilca相关配置。

关于第三台主机redis3的启动方案和redis2启动方案差不多,这里就不在演示了。

5. 查看我们的3台redis的主从关系

前提:启动了master redis1和两台从机redis2和redis3

我们进入任意一台server,使用redis的客户端分别连接3个主机,使用info命令进行查看

进入容器

docker exec -it redis1 /bin/bash

连接客户端

redis-cli -h 20.20.20.130 -p 6379
redis-cli -h 20.20.20.130 -p 6380
redis-cli -h 20.20.20.130 -p 6381

三个客户端分别调用info命令

info

6379
在这里插入图片描述

6380
在这里插入图片描述

6381
在这里插入图片描述

综上所述,我们可以看到6379是master,而6380和6381是slave。

6. 测试

对master 6379 进行更改命令,看看对应的slave 6380和6381是否能够收到同步命令

二. docker搭建redis哨兵模式

前提:按照上述,先创建好主从架构的3个redis服务

通常哨兵需要创建奇数个,这里我们创建3个

1. 创建目录格式如下

/docker/redis/sentinel1/data
/docker/redis/sentinel1/conf/sentinel.conf/docker/redis/sentinel2/data
/docker/redis/sentinel2/conf/sentinel.conf/docker/redis/sentinel3/data
/docker/redis/sentinel3/conf/sentinel.conf

2.修改sentinel.conf文件

sentinel1

port 26379
daemonize no
pidfile "/docker/redis/data/redis\xe2\x80\x90sentinel\xe2\x80\x9026379.pid"
logfile "/docker/redis/data/26379.log"
dir "/docker/redis/data"
# sentinel monitor <master‐redis‐name> <master‐redis‐ip> <master‐redis‐port> <quorum>
# quorum是一个数字,指明当有多少个sentinel认为一个master失效时(值一般为:sentinel总数/2 + 1),master才算真正失效
# mymaster这个名字随便取,客户端访问时会用 到
sentinel monitor mymaster 20.20.20.130 6379 2
# Generated by CONFIG REWRITE
user default on nopass ~* &* +@all
sentinel myid b78a872e9e5aa86a2b50730177307e22856c7353
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel current-epoch 0
sentinel known-replica mymaster 172.17.0.1 6380
sentinel known-replica mymaster 172.17.0.1 6381

sentinel2

port 26380
daemonize no
pidfile "/docker/redis/data/redis‐sentinel‐26380.pid"
logfile "/docker/redis/data/26380.log"
dir "/docker/redis/data"
# sentinel monitor <master‐redis‐name> <master‐redis‐ip> <master‐redis‐port> <quorum>  
# quorum是一个数字,指明当有多少个sentinel认为一个master失效时(值一般为:sentinel总数/2 + 1),master才算真正失效  
# mymaster这个名字随便取,客户端访问时会用 到
sentinel monitor mymaster 20.20.20.130 6379 

sentinel3

port 26381
daemonize no
pidfile "/docker/redis/data/redis‐sentinel‐26381.pid"
logfile "/docker/redis/data/26381.log"
dir "/docker/redis/data"
# sentinel monitor <master‐redis‐name> <master‐redis‐ip> <master‐redis‐port> <quorum> 
# quorum是一个数字,指明当有多少个sentinel认为一个master失效时(值一般为:sentinel总数/2 + 1),master才算真正失效
# mymaster这个名字随便取,客户端访问时会用 到
sentinel monitor mymaster 20.20.20.130 6379 2

3. docker启动sentinel

启动3个sentinel,因为命令大致都相同,这里就只展示一个命令

docker run --privileged=true --name=sentinel2 -it -d -p 26380:26380 -v /docker/redis/sentinel2/:/docker/redis/ redis redis-sentinel /docker/redis/conf/sentinel.conf

4. 查看哨兵所监视的信息

可以直接在哨兵的配置文件下查看信息
会发现配置文件末尾增加了几行数据,其数据就是相关的哨兵节点和主从节点
在这里插入图片描述

在这里插入图片描述

综上,我们通过docker成功搭建了简单版的主从架构和哨兵模式。

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

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

相关文章

聚观早报 | 字节2021年亏损6041亿元;iPhone SE 4将采用刘海屏

今日要闻&#xff1a;字节2021年亏损6041亿元&#xff1b;iPhone SE 4或将采用刘海屏&#xff1b;京东众筹10月10日停止运营&#xff1b;特斯拉中国销量再创月度新高&#xff1b;大众将在中国成立软件合资企业字节2021年亏损6041亿元 10 月 10 日消息&#xff0c;字节跳动向员工…

FFmpeg基础:抽取视频文件中的音视频原始数据

文章目录视频流解码音频流解码原始的音视频数据数据量很大&#xff0c;为了方便传输和存储&#xff0c;我们会对原始数据进行压缩和编码。h264是常见的视频编码标准之一&#xff0c;AAC是常见的音频编码标准之一。这里介绍一下如何通过FFmpeg库将视频文件中的h264视频流解码成原…

[Unity] 获取UI组件的屏幕坐标(打包手机端使用前置摄像头)

因为我是打包到手机端&#xff0c;并且使用的是前置摄像头 在Canvas默认的render mode&#xff08;Screen Space - Overlay&#xff09;下&#xff1a; 我想要使用 arcamera.WorldToScreenPoint(button.transform.position) 将Canvas下的button世界坐标转为屏幕坐标&#xff…

手把手教你搭建属于自己的第一个Maven项目并引入Spring容器依赖

前言 最近在学习Maven和Spring&#xff0c;在这里做个学习记录并且分享一些我自己的学习经验&#xff0c;对Maven和Spring感兴趣的小伙伴可以一起来学习&#xff0c;有任何问题也欢迎一起来交流讨论。 Spring简介 Spring框架由Rod Johnson开发&#xff0c;2004年发布了Sprin…

(附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

技术分享预告|DocArray x Redis 比快更快的向量搜索

从国内的学生开发者&#xff0c;到深入参与国际化开源社区。小燕主动出击&#xff0c;不放过任何一个贡献机会。快来看看原子能科学研究院核物理专业小姐姐的神仙输出&#xff01;北京时间 10 月 11 号&#xff0c;本周二晚 10 点&#xff0c;小燕将在 Zoom 平台&#xff0c;面…

第03章 成人感冒不是大事,少往急诊跑

急诊是病菌最多的地方&#xff0c;能避则避我在安贞急诊工作了数个年头&#xff0c;最大的体会就是急诊像个大的农贸市场&#xff0c;每天人头攒动、人山人海、接踵摩肩、座无虚席、门庭若市、沸沸扬扬、热闹非凡、熙熙攘攘、车水马龙、人来人往……写了这么多词汇都不足以写出…

Redis(Jedis入门 Jedis连接池

本章导学&#xff1a; 什么是Jedis&#xff1f;Jedis入门案例 新建项目&#xff0c;导入依赖建立连接进行测试释放资源Jedis的连接池使用一、什么是Jedis Redis不仅是使用命令来操作&#xff0c;现在基本上主流的语言都有客户端支持&#xff0c;比如java、C、C#、C、php、Nod…

Spring IOC核心知识

控制反转&#xff08;IOC: Inversion Of Control&#xff09;&#xff0c;把对象的创建和对象之间的调用过程都交给Spring管理&#xff0c;从而降低耦合度。 IOC底层原理 三大技术&#xff1a;XML解析、工厂模式、反射 IOC创建对象的过程&#xff1a; IOC重要接口 IOC容器底…

路径分析—QGIS+PostgreSQL+PostGIS+pgRouting(一)

前言 因业务需求,需要做最短路径分析。最近几天查询资料,并自己动手,实现了简单的路径分析。 下面就介绍具体的实现过程。 本篇文章最终结果是在 PostgreSQL 数据库中实现的,后续的可视化展示会继续跟进。 一、道路数据处理 如果你已经有了道路数据,那就直接使用。 由于当…

传统应用如何“丝滑”转型为云原生应用?

市场需求瞬息万变&#xff0c;传统型的应用逐渐无法满足业务侧要求&#xff0c;传统应用向云原生应用转型&#xff0c;已势在必行。本篇文章将介绍基于CloudOS&#xff08;一站式云原生开发平台&#xff09;如何实现传统应用向云原生应用的转型。 在此之前&#xff0c;我们需…

python基础(老师PPT)

slist [Alice,2019001, Geoscience, 95] # 使用分号加tab作为分隔符&#xff0c;连接字符串 print(;\t.join(slist))# a X if condition else Z # condition为True时&#xff0c;赋值为X&#xff0c;否则赋值为Z a, b 1, 2 c a > b if a > b else a < b print(c)…

分布式seata案例学习-2

上篇文章学习了如何安装seata&#xff0c;先学习如何使用 事务的4个特性ACID 事务特性 at模式详解 AT模式运行机制 AT模式的特点就是对业务无入侵式&#xff0c;整体机制分二阶段提交 两阶段提交协议的演变&#xff1a; 一阶段&#xff1a;业务数据和回滚日志记录在同一个本地…

【复习整理归纳】| C++面经网络相关(三)

文章目录计算机网络性能指标计算机在发送文件前需要做许多前期的工作分层结构概念OSI参考模型数据链路层ARP网络协议UDP套接字TCPTCP粘包三次握手四次握手为什么建立连接协议是三次握手&#xff0c;而关闭连接却是四次挥手呢&#xff1f;为什么TIME_WAIT状态还需要等2MSL后才能…

C++ | 12天学好C++ (Day 12)->结构图可视化、代码加通俗理解

为每天进步一点点而努力。 C是计算机视觉的重要的一部分&#xff0c;虽然在初始学习时Python应用比较广&#xff0c;但是大多数公司还是C做计算机视觉类的比较多&#xff0c;因为C可加密&#xff0c;所以我们来一起探索吧&#xff01;看了这系列博客&#xff0c;将会学到C的基…

#边学边记 必修4 高项:对事的管理 第4章 项目进度管理之 制定进度计划

制订进度计划的输入、工具与技术和输出 制定进度计划过程分析活动顺序、持续时间、资源需求和进度制约因素&#xff0c;创建项目进度模型的过程。主要作用是把活动、持续时间、资源、资源可用性和逻辑关系代入进度规划工具&#xff0c;从而形成包含各个项目活动的计划日期的进…

在docker安装的centos容器内设置远程链接

写在前面 写在前面 运维这个行业&#xff0c;不需要按照顺序学习。 比如你学会了基础命令&#xff0c;直接学docker和k8s&#xff0c;和学会了基础命令开始学服务难度差不多。 再比如你学会了基础命令直接学shell脚本&#xff0c;也能学的会。 所以我一直主张&#xff0c;…

WEB漏洞-文件操作之文件下载读取全解

目录 前言: (一&#xff09;前置知识 &#xff08;二&#xff09;文件下载读取漏洞利用 1、网站目录的获取&#xff1a; 0x01 字典 0x02 网络爬虫 0x03 fuzz 0x04 自动化工具 0x05 下载传参的脚步文件 0x06 配合其他漏洞 2、下载数据库,操作系统配置文件 0x01 Window…

非空约束

1.创建表时添加约束   创建完表后,添加非空约束 删除name的非空约束