Docker:创建主从复制的Redis集群
一、Redis集群
在实际项目里,一般不会简单地只在一台服务器上部署Redis服务器,因为单台Redis服务器不能满足高并发的压力,另外如果该服务器或Redis服务器失效,整个系统就可能崩溃。项目里一般会用主从复制的模式来提升性能,用集群模式来提升吞吐量并提升可用性
本次将使用Docker容器来模拟服务器,用启动多个Docker容器的方法来模拟
“在多个服务器上安装Redis”的效果在实际项目里,一般不会简单地只在一台服务器上部署Redis服务器,因为单台Redis服务器不能满足高并发的压力,另外如果该服务器或Redis服务器失效,整个系统就可能崩溃。项目里一般会用主从复制的模式来提升性能,用集群模式来提升吞吐量并提升可用性
本次将使用Docker容器来模拟服务器,用启动多个Docker容器的方法来模拟
“在多个服务器上安装Redis”的效果在实际项目里,一般不会简单地只在一台服务器上部署Redis服务器,因为单台Redis服务器不能满足高并发的压力,另外如果该服务器或Redis服务器失效,整个系统就可能崩溃。项目里一般会用主从复制的模式来提升性能,用集群模式来提升吞吐量并提升可用性
本次将使用Docker容器来模拟服务器,用启动多个Docker容器的方法来模拟
“在多个服务器上安装Redis”的效果
二、基于主从复制模式的集群
在主从复制模式的集群里,主节点一般是一个,从节点一般是两个或多个,写入主节点的数据会被复制到从节点上,这样一旦主节点出现故障,应用系统就能切换到从节点去读写数据,提升系统的可用性。
再采用主从复制模式里默认的读写分离机制,就能提升系统的缓存读写性能。在实际应用中,如果有相应的设置,在向一台Redis服务器里写数据后,这个数据可以复制到另外一台(或多台) Redis服务器,这里数据源服务器叫主服务器(Master Server),复制数据目的地所在的服务器叫从服务器(Slave Server) 。
三、主从复制模式的优势
可以把写操作集中到主服务器上,把读操作集中到从服务器上,以提升读写性能
由于出现了数据备份,因此能提升数据的安全性,比如当主Redis服务器失效后,能很快切换到从服务器上读数据。
四、通过命令创建redis集群
4.1 用命令搭建主从集群
这里将用Docker容器来搭建一主二从模式的集群,在配置主从关系时,需要在从节点上使用slaveof命 令,具体的步骤如下。
4.1.1 创建主redis节点(master)
打开一个命令窗口,在其中运行如下命令创建一个名为redis-master的Redis容器。注意,它的端口是 6379。
docker run -itd --name redis-master -p 6379:6379 redis:6.2.13
4.1.2 创建从节点(slavel)
新开一个命令窗口,在其中运行如下命令创建一个名为redis-slave1的容器。注意,它的端口是6380。 这里是在一台电脑上运行,所以用端口号来区别一台主Redis容器和另外两台从Redis容器。在真实项目 里,多台Redis会部署在不同的服务器上,所以可以都用6379端口。
docker run -itd --name redis-slave1 -p 6380:6380 redis:6.2.13
docker run -itd --name redis-slave2 -p 6381:6381 redis:6.2.13
4.1.3 查看redis主节点ip(容器内部ip)
回到包含redis-master容器的命令窗口,在其中运行docker inspect redis-master命令,查看redis master容器的信息
在其中能通过IPAddress项看到该容器的IP地址,这里是172.17.0.2。在真实项目里,Redis服务器所在 的IP地址是固定的,而通过Docker容器启动的Redis服务器的IP地址是动态的,所以这里要用上述命令来 获取IP地址。
docker inspect redis-master | grep IPAddress
4.1.4 进入redis主节点,可以查看redis状态(例如:是不是主节点,有几个从节点等)
docker exec -it redis-master /bin/bash
info replication
通过info replication命令查看当前的主从模式状态,能看到如下所示的部分结果。
role:master表示当前redis-master容器在主从模式里的角色是“主服务器”。 connected_slaves表示当前该主服务器没有携带从服务器。
4.1.5 进入redis从节点,将此节点设置为从节点
再到redis-slave1容器的命令窗口里,通过docker exec -it redis-slave1/bin/bash命令进入容器的命令行 窗口
docker exec -it redis-slave1 /bin/bash
由于此时还没有通过命令行设置主从模式,因此输出结果里依然能看到当前服务器是“主服务器”,同时 没有携带从服务器。 在redis-slave1容器的命令窗口里运行如下的slaveof命令,指定当前Redis服务器为从服务器。该命令的 格式是slaveof IP地址端口号,这里是指向172.17.0.2:6379所在的主服务器。
slaveof 172.17.0.2 6379
主节点
至此,配置完成一主二从模式的主从模式。 注:现在没有配置文件的情况下,从redis的默认端口仍然是6379,即使我们对端口做了映射,因此我们需要使用指定配置文件的方式,创建redis集群
4.1.6 测试
到redis-master容器所在的命令行窗口运行set name renge后,再到两台从服务器里运行get name命 令,就能看到返回值。 这说明主从模式配置成功,主服务器里的数据会自动同步到各从服务器上。
五、通过配置搭建主从redis集群
在项目里除了可以用slaveof命令搭建主从模式的集群外,还可以用配置参数的方式来搭建,具体的步骤 如下。
搭建主服务器redis-master的命令不变,并且还是用6379端口。 用
docker run -itd --name redis-master -p 6379:6379 redis:6.2.13
docker inspect redis-master命令确认该Redis服务器所在容器的IP地址依然是172.17.0.2。 在/opt/server下编写配置文件redisSlave1.conf,并在其中编写如下内容。
port 6380
slaveof 172.17.0.2 6379
通过第1行的命令设置该Redis的端口为6380,通过第2行的slaveof配置把该Redis服务器设置成“从模 式”,并连接到redis-master所在的主服务器上。 在新的命令窗口里运行如下的命令,创建名为redis-slave1的Redis服务器。该服务器的工作端口是 6380,并且用redis-server后的参数指定在启动Redis服务器时加载redisSlave1.conf配置文件。
docker run -itd --name redis-slave1 -v /opt/redisSlave1.conf:/redisConfig/redisSlave1.conf -p 6380:6380 redis:6.2.13 redis-server /redisConfig/redisSlave1.conf
随后通过docker exec -it redis-slave1 /bin/bash命令进入到该容器的命令行
docker exec -it redis-slave1 /bin/bash
由于Redis工作端口已经变成6380(配置文件中指定了端口),所以需要通过redis-cli -h 127.0.0.1 -p 6380命令进入Redis客户端。在其中运行info replication命令 以同样的方式创建redis-slave2,将端口绑定到6381即可
六、配置读写分离效果
在上文里配置的redis-slave1和redis-slave2这两台从服务器里运行info replication命令,还能看到
“slave_read_only:1”这项配置,说明从服务器默认是“只读”的。
到redis-slave1的Redis客户端命令行里输入set val 1,就会看到如下面第2行所示的错误,从而能进一步
验证该Redis服务器的“只读”属性。
对于Redis从服务器而言,建议采用默认的“只读”配置,因为在项目里一般不会向作为数据同步目的地的
“从服务器”上写数据。如果业务上确实需要,可以通过如下步骤设置“可读可写”的效果。
在上文提到的redisSlave2.conf配置文件里再加入一行“slave-read-only no”的配置,指定该服务器可读可写。
七、用心跳机制提高主从复制的可靠性
在Redis主从复制模式里,如果主从服务器之间有数据同步的情况,那么从服务器会默认以一秒一次的频 率向主服务器发送REPLCONF ACK命令,依次来确保两者间连接通畅。这种定时交互命令确保连接的机 制就叫“心跳”机制。 在上文开启的redis-master这个主服务器的命令行里,运行info replication命令,就能看到它从属服务 器的“心跳”状况。 通过lag表示该从属服务器发送REPLCONF ACK命令的时间,这里均是1秒,表示两台从服务器和主服务 器的连接均属通畅。 这里大家可以想象一下,如果从服务器宕机,那么主从复制就没有意义了。对此,可以通过如下的步骤 来关联心跳机制和主动复制的动作。 在/usr/server下新建redisMaster.conf文件,在其中编写如下的代码。
min-slaves-to-write 2
min-slaves-max-lag 15
相关文章:

Docker:创建主从复制的Redis集群
一、Redis集群 在实际项目里,一般不会简单地只在一台服务器上部署Redis服务器,因为单台Redis服务器不能满足高并发的压力,另外如果该服务器或Redis服务器失效,整个系统就可能崩溃。项目里一般会用主从复制的模式来提升性能&#x…...
c++ 智能指针
1. 起源 c++ 把内存的控制权对开发人员开放,让程序显式的控制内存,这样能够快速的定位到占用的内存,完成释放的工作。但是这样也会引发一些问题,也就是普通指针的隐患: 1.1 野指针 出现野指针的有几个地方 : 指针声明而未初始化,此时指针的将会随机指向内存已经被释放…...

【vue3】依赖注 provide、inject(父组件与儿子、孙子、曾孙子组件之间的传值)
一、基本用法: //父组件 import { ref, provide } from vue const radio ref<string>(red) provide(myColor,radio) //注入依赖//儿子组件、孙子组件、曾孙子组件 import { inject } from vue import type { Ref } from vue; const myColor inject<Ref&l…...

docker 部署tig监控服务
前言 tig对应的服务是influxdb grafana telegraf 此架构比传统的promethus架构更为简洁,虽然influxdb开源方案没有集群部署,但是对于中小型服务监控需求该方案简单高效 本文以docker-compose来演示这套监控体系的快速搭建和效果。 部署 docker-compos…...

ETL工具与数据处理的关系
ETL工具与数据处理之间存在密切的关系。数据处理是指对原始数据进行清洗、整理、加工和分析等操作,以便生成有用的信息和洞察力。而ETL工具则提供了一种自动化和可视化的方式来执行这些数据处理任务。通过ETL工具,用户可以定义数据抽取、转换和加载的规则…...
Flink几个性能调优
1 配置内存 操作场景 Flink是依赖内存计算,计算过程中内存不够对Flink的执行效率影响很大。可以通过监控GC(Garbage Collection),评估内存使用及剩余情况来判断内存是否变成性能瓶颈,并根据情况优化。 监控节点进程的…...
后端工程进阶| 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天 并发编程 协程Goroutine通道Channel锁Lock 并发基础 串行程序与并发程序:串行程序特指只能被顺序执行的指令列表,并发程序则是可以被并发执行的两个及以上的串行程序的综合体。并发程序与并行程序…...

EPPlus库的安装和使用 C# 中 Excel的导入和导出
安装 工具栏->NuGet 包管理器->管理解决方案的NuGet程序包 安装到当前项目中 使用 将 DataGridView 数据导出为Excel 首先,需要将数据DataGridView对象转换为DataTable private void btnExport_Click(object sender, EventArgs e) {// 1.将当前页面的data…...

深度学习使用Keras进行迁移学习提升网络性能
上一篇文章我们用自己定义的模型来解决了二分类问题,在20个回合的训练之后得到了大约74%的准确率,一方面是我们的epoch太小的原因,另外一方面也是由于模型太简单,结构简单,故而不能做太复杂的事情,那么怎么提升预测的准确率了?一个有效的方法就是迁移学习。 迁移学习其…...

越流行的大语言模型越不安全
源自:GoUpSec “人工智能技术与咨询” 发布 安全研究人员用OpenSSF记分卡对GitHub上50个最流行的生成式AI大语言模型项目的安全性进行了评估,结果发现越流行的大语言模型越危险。 近日,安全研究人员用OpenSSF记分卡对GitHub上50个最流…...

搜维尔科技:伦敦艺术家利用Varjo头显捕捉盲人隐藏的梦想
在伦敦举行的弗里泽艺术博览会上,与专业级虚拟现实/XR硬件和软件领域的全球领先者Varjo合作,展示一个突破性的混合现实艺术装置, 皇家国家盲人学会 (rnib),英国领先的视力丧失慈善机构。 这个名为"公共交通的私人生活"的装置是一个互动的声音和图像雕塑,旨在让有眼光…...
如何将html转化为pdf
html转换为pdf html2pdf.js库, 基于html2canvas和jspdf,只能打印2-3页pdf,比较慢,分页会截断html2canvas 只能打印2-3页pdf,比较慢,分页会截断 // canvasDom-to-image 不支持某些css属性Pdfmake html-to-p…...

ES6初步了解生成器
生成器函数是ES6提供的一种异步编程解决方案,语法行为与传统函数完全不同 语法: function * fun(){ } function * gen(){console.log("hello generator");}let iterator gen()console.log(iterator)打印: 我们发现没有打印”hello…...

飞桨大模型套件:一站式体验,性能极致,生态兼容
在Wave Summit 2023深度学习开发者大会上,来自百度的资深研发工程师贺思俊和王冠中带来的分享主题是:飞桨大模型套件,一站式体验,性能极致,生态兼容。 大语言模型套件PaddleNLP 众所周知PaddleNLP并不是一个全新的模型…...

【C++入门到精通】哈希 (STL) _ unordered_map _ unordered_set [ C++入门 ]
阅读导航 前言一、unordered系列容器二、unordered_map1. unordered_map简介⭕函数特点 2. unordered_map接口- 构造函数- unordered_map的容量- unordered_map的迭代器- unordered_map的元素访问- unordered_map的修改操作- unordered_map的桶操作 三、unordered_set1. unorde…...

创建 Edge 浏览器扩展教程(上)
创建 Edge 浏览器扩展教程(上) 介绍开始之前后续步骤开始之前1:创建清单 .json 文件2 :添加图标3:打开默认弹出对话框 介绍 在如今日益数字化的时代,浏览器插件在提升用户体验、增加功能以及改善工作流程方…...
container_of解析及应用
container_of是一个C语言中比较少见,但实际经常用到的宏,在Linux kernel中也有大范围的应用。...

搜维尔科技:Varjo-最自然和最直观的互动
创建真实生活虚拟设计 Varjo让你沉浸在最自然的混合和虚拟现实环境中。 世界各地的设计团队可以聚集在一个摄影现实的虚拟空间中,以真实的准确性展示新的概念-实时的讨论和迭代。这是一个充满无限创造潜力的新时代,加速了人类前所未有的想象力。 虚拟现实、自动反应和XR设计的…...

Postman环境配置
Postman环境配置 安装Postman安装node.js安装newman安装htmlextra安装git注册163邮箱用163邮箱注册gitee在pycharm中安装gitee详细文档 安装Postman 网址:https://www.postman.com/downloads/ 注册一个账号即可 安装node.js 安装newman npm install -g newman …...

Windows下Eclipse C/C++开发环境配置教程
1.下载安装Eclipse 官网下载eclipse-installer(eclipse下载器),或者官方下载对应版本zip。 本文示例: Eclipse IDE for C/C Developers Eclipse Packages | The Eclipse Foundation - home to a global community, the Eclipse ID…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...