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…...
3大核心能力+2套配置方案:obsidian-i18n终极汉化指南
3大核心能力2套配置方案:obsidian-i18n终极汉化指南 【免费下载链接】obsidian-i18n 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-i18n 面对全英文的应用界面,你是否曾因语言障碍而错失高效工具?当专业术语晦涩难懂&#…...
谷歌Home应用与Gemini Live更新:AI赋能智能家居与新闻交互新体验
谷歌Home应用更新:让智能家居控制更自然本周谷歌对其Home应用进行更新,借助Gemini AI助手,让用户控制智能家居变得“更加自然和可靠”。更新后,用户能以更自然的方式描述需求,如描述灯光类型为“海洋的颜色”ÿ…...
颠覆式效率工具:BaiduPanFilesTransfers重构百度网盘批量管理流程
颠覆式效率工具:BaiduPanFilesTransfers重构百度网盘批量管理流程 【免费下载链接】BaiduPanFilesTransfers 百度网盘批量转存、分享和检测工具 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduPanFilesTransfers 在数字化办公与资源管理场景中ÿ…...
OpenClaw+Qwen3-14b_int4_awq:个人博客自动化更新方案
OpenClawQwen3-14b_int4_awq:个人博客自动化更新方案 1. 为什么需要博客自动化更新 作为一个技术博主,我经常遇到这样的困境:好不容易挤出时间写完一篇技术文章,却因为各种琐事耽误了发布。要么是忘记更新Hexo的front matter&am…...
Elsevier投稿状态追踪:告别手动刷新,让审稿进度一目了然
Elsevier投稿状态追踪:告别手动刷新,让审稿进度一目了然 【免费下载链接】Elsevier-Tracker 项目地址: https://gitcode.com/gh_mirrors/el/Elsevier-Tracker 还在为Elsevier投稿系统的繁琐查询而烦恼吗?每次登录系统查看审稿进度都需…...
如何快速掌握LeaguePrank:英雄联盟客户端个性化修改完整指南
如何快速掌握LeaguePrank:英雄联盟客户端个性化修改完整指南 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 想要在英雄联盟客户端中展示独特的个人风格吗?LeaguePrank是一个基于LCU API的英雄联盟客户…...
颠覆屏幕翻译体验:Screen Translator创新技术重构多语言信息获取方式
颠覆屏幕翻译体验:Screen Translator创新技术重构多语言信息获取方式 【免费下载链接】ScreenTranslator Screen capture, OCR and translation tool. 项目地址: https://gitcode.com/gh_mirrors/sc/ScreenTranslator 在全球化协作日益频繁的今天,…...
长尾关键词SEO优化费用如何计算_企业自营SEO关键词优化成本是多少
长尾关键词SEO优化费用如何计算_企业自营SEO关键词优化成本是多少 在当今数字化时代,SEO(搜索引擎优化)已经成为企业提升网站流量、增加品牌曝光度的重要手段。其中,长尾关键词SEO优化因其较低的竞争度和高转化率,备受…...
OpenClaw版本升级:Qwen3-4B模型与新框架特性的兼容性
OpenClaw版本升级:Qwen3-4B模型与新框架特性的兼容性 1. 为什么需要关注版本升级 上周五晚上11点,我的OpenClaw突然弹出一条警告:"当前版本(v0.8.3)将在48小时后停止维护"。这个深夜警报让我意识到,是时候处理这个技术…...
KCD Beijing 2026 分享回顾:从 Device Plugin 到 DRA——GPU 调度范式升级与 HAMi-DRA 实践
KCD Beijing 2026 是近年来规模最大的 Kubernetes 社区大会之一,超过 1000 人报名参与,刷新了历届 KCD 北京的记录。HAMi 社区不仅受邀进行了技术分享,也在现场设立了展台,与来自云原生与 AI 基础设施领域的开发者和企业用户进行了…...
