“深入探讨Redis主从复制:原理、配置与优化“
目录
# 概念
1. 配置主从同步步骤
1.1 创建文件夹
1.2 复制配置文件
1.3 配置文件关闭
1.4 查看端口号,发现端口号存在
1.5 连接三个端口号
1.6 查看主机运行情况
1.7 让服务器变成(主机)或(从机)
1.8 实现效果
2. 主从复制(一主二仆)的特点
2.1 从服务器挂掉重启后并没有变成从机而是成为了主机
2.2 主从复制原理
2.3 薪火相传和反客为主
3. 哨兵模式(sentinel)
3.1 创建哨兵文件
3.2 配置哨兵
3.3 启动哨兵
4. 主从复制概念流程
4.1 主从复制的基本概念
4.2 主从复制的工作流程
4.3 主从复制的示例配置
4.4 参考示意图
5. 主从复制的优缺点
6. 主从复制的应用场景
# 概念
-
概念
主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主;
实现:读写分离;性能扩展;容灾快速恢复;
- 主从复制:主机挂掉,从机不上位:
- 这种情况通常说明缺少故障转移机制。仅靠 Redis 主从复制,不会自动进行主从切换。在没有哨兵或其他协调机制的情况下,如果主机(主节点)挂掉,从机(从节点)不会自动升级为主节点。
- 从机挂掉重启后的行为:
- 如果 Redis 的从节点挂掉并重启,它会尝试重新连接到当前的主节点。如果主节点仍然是原来的主节点,从节点会继续作为从节点。如果原主节点已挂掉且有故障转移机制(如 Redis Sentinel),新的主节点会替代旧主节点,从节点重启时会连接到新的主节点并同步数据。
- 从节点(Slave)在挂掉后重启,不会自动变成主节点(Master)。它会继续作为从节点存在,并尝试重新连接并同步主节点的数据。这个行为在 Redis 主从复制和哨兵模式下均为默认行为。
- 哨兵模式:
- Redis Sentinel 监控主节点和从节点的状态。哨兵集群可以自动检测主节点的故障,并通过投票机制选举一个从节点作为新的主节点。同时,它们会通知其他从节点和客户端关于新主节点的信息。这实现了自动化的主从切换(即故障转移)。
1. 配置主从同步步骤
1.1 创建文件夹
1.2 复制配置文件
在三个文件中写入内容
直接复制并修改配置文件中的6379分别为6379、6380、6381(三个地方的值都修改)
1.3 配置文件关闭
1.4 查看端口号,发现端口号存在
1.5 连接三个端口号
(三个连接都是同样操作)
通过端口号连接上服务器:redis-cli -p 6379、redis-cli -p 6380 、redis-cli -p 6381
连接成功:
1.6 查看主机运行情况
查看三台主机运行情况(没有设置都是主机,没有从机);
此时我们并没有配置谁是从服务器,都是主服务器,所以需要配置一下;
info replication
:打印主从复制的相关信息;
可以看到当前的6379服务是一个主机master;
1.7 让服务器变成(主机)或(从机)
使用命令使6380和6381变成从机;
成为某个实例的从服务器:slaveof <ip> <port>
在6380和6381上都执行:slaveof 127.0.0.1 6379
;
成功后查看 6381 变成了slave从机:
在6379服务中查看,它是master主机:
实现一主二从:
- 此操作完成后,他们就变成了主从关系,主机通过写入时同时主机也会把数据复制到从机中,读取的时候读的是从机的信息。(主机只用写,从机只用读)
- (一主两从)代表的是主机可以写入数据的同时把数据也复制一份到他下面的从机中(从机可以有多个),从机也可以查到主机写入的值
1.8 实现效果
主机写入:
从机读取:
2. 主从复制(一主二仆)的特点
2.1 从服务器挂掉重启后并没有变成从机而是成为了主机
- 从服务器在重启后有可能会成为主服务器的情况:
- 哨兵(Sentinel)故障转移:当主服务器(Master)宕机时,Redis Sentinel 进行故障转移(Failover),选举一个从服务器(Slave)为新的主服务器。如果该从服务器重新启动,可能会继续作为新的主服务器,尤其是在它已经被选为主服务器之前。
- 没有正确配置从服务器:如果从服务器重启后没有正确配置为从服务器(Replica),或者在重启时无法连接到指定的主服务器,它可能会以独立的主服务器启动。
特点一:
如果又继续把他变成6379的从服务器,那么他会把他挂掉之前的数据全部一个个的复制过来。
所以当他又变成从服务器的时候,他又会有了主机复制的数据;
特点二:
当主服务器挂掉的时候,从服务器并不会上位,还是原来的从服务器;
2.2 主从复制原理
- 当从连接上主服务器之后,从服务器向主服务发送进行数据同步消息;
- 主服务器接到从服务器发送过来同步消息,把主服务器数据进行持久化rdb文件,把rdb文件发送从服务器,从服务器拿到rdb进行读取;
- 每次主服务器进行写操作之后,和从服务器进行数据同步;
- 不过从服务器只会在第一次连接主服务器的时候发起同步消息,当连接后,都是主服务器主动发起请求给从服务器,进行复制同步rbd数据;
2.3 薪火相传和反客为主
1. 薪火相传概念及缺点:
缺点:当从服务器挂掉之后,主服务器无法直接连接从机下的从机;
类似管理层职位划分,当人的数量变多了,这会变得不好管理,这时就会分出小组长去管理其他人,以此类推;
2. 反客为主:
当一个master宕机后,后面的slave可以立刻升为master,其后面的slave不用做任何修改;
slaveof no one
:将从机变为主机;
-
场景:
当发布上线的服务器挂掉之后,我们程序员需要手动的去操作,执行命令,这个也需要一段时间;
-
缺点:
手动操作;
耗时;
3. 哨兵模式(sentinel)
-
(哨兵模式与主从复制关联:当配置了哨兵之后,那么当主服务器挂掉之后,哨兵立马顶上,且哨兵也可以配置多个)
-
概念
反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库;
3.1 创建哨兵文件
myredis
是创建服务器的时候,自己创建的一个文件,里面放的是redis配置文件;
进入myredis文件,创建sentinel.conf;
3.2 配置哨兵
- 在哨兵文件中写入
sentinel monitor mymaster 127.0.0.1 6379 1
- 其中mymaster为监控对象起的服务器名称,1为至少有多少个哨兵同意迁移的数据;
- 1数量代表有1个哨兵同意切换,为2就是有两个哨兵同意切换才能切换。
我如何知道哨兵有几个同意我迁移的?
在Redis的哨兵模式中,当主节点出现故障时,哨兵会选举一个新的主节点并进行迁移。在迁移过程中,哨兵需要确保有足够的从节点同意迁移才能进行。
在默认情况下,哨兵模式中至少需要有一半以上的从节点同意迁移才能进行。这个比例可以通过配置文件中的quorum
参数进行设置,默认值为2(即至少需要2个从节点同意迁移)。
如果你想要知道当前哨兵模式中有多少个从节点同意迁移,可以使用Redis的命令SENTINEL sentinels <master-name>
来获取哨兵的信息。其中<master-name>
是主节点的名称。
命令的返回结果中会包含一个num-slaves
字段,表示有多少个从节点,以及一个num-other-sentinels
字段,表示有多少个其他哨兵节点。通过计算num-slaves
和num-other-sentinels
的和,再与quorum
进行比较,就可以知道有多少个从节点同意迁移。
3.3 启动哨兵
- 当我们的主机挂掉之后,这时候从机就可以自动上位了,这时候之前的主机,就变成了当前主机的从机了;(老主机就变成了新上位主机的从机了)
- 其它从机也隶属于当前新主机了;
-
redis-sentinel sentinel.conf
:Sentinel 的启动与使用; -
作用:
高可用性:在 Redis 主节点失效时,自动将一个从节点提升为新的主节点,确保服务可用性。
监控:监控 Redis 主从结构的健康状态,并在问题发生时通知管理员。
自动修复:执行自动故障转移和配置修复,减少手动干预。
从机的优先级:
在 Redis Sentinel 进行故障转移时,从机(slave,或 replica)的优先级影响它们被提升为主机(master)的顺序。Redis 使用一个叫做replica-priority的参数来决定哪个从机有更高的优先级。了解和配置这个优先级参数可以帮助控制从机在故障转移中的选择顺序......
4. 主从复制概念流程
Redis 主从复制(Master-Slave Replication)是 Redis 用于实现数据分发和高可用性的核心机制。它允许一个 Redis 实例(主机,Master)自动将数据复制到一个或多个 Redis 实例(从机,Slave),从而实现读写分离和数据冗余。下面是主从复制的概念和流程的详细说明。
4.1 主从复制的基本概念
- 主机(Master):
- 处理所有的写请求和修改数据的操作。
- 将数据变更传播给从机。
- 从机(Slave):
- 从主机同步数据。
- 通常处理只读请求,减轻主机的负载。
- 可以被配置为其他从机的主机,形成级联复制。
- 全量复制:
- 从机第一次连接主机或与主机数据差异过大时进行。
- 发送整个数据快照(RDB 文件)给从机。
- 部分复制:
- 用于同步期间的增量数据变化。
- 通过复制流(replication stream)将新命令发送给从机。
4.2 主从复制的工作流程
-
配置从机:
- 在从机的配置文件
redis.conf
中指定主机的 IP 和端口,或者使用SLAVEOF
命令动态配置。 - 配置文件方式:
replicaof 192.168.1.1 6379
- 命令方式:
redis-cli SLAVEOF 192.168.1.1 6379
- 在从机的配置文件
-
初次同步(全量复制):
- 从机连接主机,发送
PSYNC
命令。 - 如果是第一次同步或主从数据差异过大,主机生成 RDB 快照。
- 主机将 RDB 文件发送给从机。
- 从机载入 RDB 文件以获得主机的完整数据快照。
- 从机连接主机,发送
-
增量复制(部分复制):
- 主机发送从
PSYNC
开始以来的所有写操作命令(即复制流)给从机。 - 从机将这些命令应用到本地数据中,保持与主机数据一致。
- 主机发送从
-
复制流和心跳机制:
- 主机持续向从机发送命令流保持数据同步。
- 主机和从机之间定期发送 PING/PONG 命令确保连接健康。
-
故障恢复:
- 如果从机断开连接,在重新连接后会尝试部分同步,尽量恢复增量数据。
- 如果部分同步失败(例如,主机的复制缓冲区数据丢失),将重新进行全量同步。
4.3 主从复制的示例配置
主机配置(master.conf):
port 6379
# 其他主机配置
从机配置(slave.conf):
port 6380
replicaof 127.0.0.1 6379
4.4 参考示意图
基本架构图:
5. 主从复制的优缺点
优点:
- 读写分离: 减轻主机负载,提高读性能。
- 数据冗余: 提高数据的可靠性。
- 扩展性: 通过增加从机进行水平扩展。
缺点:
- 一致性问题: 复制过程中存在延迟,可能导致短暂的不一致。
- 故障处理: 如果主机故障,需要手动或借助 Sentinel 执行故障转移。
- 复制延迟: 由于所有的写操作都是先在 Master 上操作,然后同步更新到 slave 上,所以从 Master同步到 slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,slave机器数量的增加也会使这个问题更加严重。
6. 主从复制的应用场景
- 分布式缓存: 在大型分布式系统中,通过增加从机来处理高并发读请求。
- 数据备份: 通过从机进行数据异地备份,提高数据可靠性。
- 读写分离架构: 实现读写分离,提高系统整体性能和可用性。
相关文章:
“深入探讨Redis主从复制:原理、配置与优化“
目录 # 概念 1. 配置主从同步步骤 1.1 创建文件夹 1.2 复制配置文件 1.3 配置文件关闭 1.4 查看端口号,发现端口号存在 1.5 连接三个端口号 1.6 查看主机运行情况 1.7 让服务器变成(主机)或(从机) 1.8 实现效…...
HTML初体验
可参考jd.com官网,ctrlu查看当前页面源代码 找到你的项目,在项目中创建html类型的网页文件 标准的HTML正确书写格式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title&…...
全局特征提取netvlad的理解
...
【设计模式-12】代理模式的代码实现及使用场景
&emsp;代理模式是一种应用很广发的结构性设计模式,它的设计初衷就是通过引入新的代理对象,在客户端和目标对象之间起到中介的作用,从而实现控制客户端对目标对象的访问,比如增强或者阉割某些能力。 1. 概述 代理模…...
网工内推 | 神州数码、弧聚科技网工,IE认证优先,最高18K
01 神州数码 🔷招聘岗位:高级网络工程师 🔷岗位职责: 1)提供7*24小时一线运维技术服务,如因应急故障处理应15分钟内到达现场。 2)提供设备的告警信息的分析处理及与故障问题定位服务。 3)完成数据中心网络和HPC超算…...
【Linux】模拟实现一个简单的日志系统
👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…...
MongoDB 多层级查询
多层级查询 注意:要注意代码顺序 查询层级数据代码放前面,查询条件放后面 if (StringUtils.isBlank(params.getDocType())) {params.setDocType(DOC_TDCTYPE);}String docName mapper.findByDocInfo(params.getDocType());List<ExpertApprovalOpin…...
grpc代理服务的实现(一)
最近公司需要无感知基于服务代号来实现通信, 并监控和管理通信连接,目前公司使用的是如下的逻辑(当然逻辑简化了,但是思想不变) 目录 简单的原理图代理服务的实现创建 tls tcp 服务, 用于grpc client 和 grpc service 通信保存 与 代理服务建立的 grpc …...
FastAPI系列 4 -路由管理APIRouter
FastAPI系列 -路由管理APIRouter 文章目录 FastAPI系列 -路由管理APIRouter一、前言二、APIRouter使用示例1、功能拆分2、users、books模块开发3、FastAPI主体 三、运行结果 一、前言 未来的py开发者请上座,在使用python做为后端开发一个应用程序或 Web API&#x…...
数据驱动制造:EMQX ECP 指标监测功能增强生产透明度
迈向未来的工业生产,需要的不仅是自动化,更是智能化。如果工业企业的管理者能够实时监测每一生产环节的设备运行状态,每一数据点位情况,洞察和优化每一步生产流程,他们将能够做出更精准的决策,提高生产效率…...
一行代码实现鼠标横向滚动
🧑💻 写在开头 点赞 收藏 学会🤣🤣🤣 在项目中我们可能会遇到当鼠标在某个区域内,我们希望滚动鼠标里面的内容可以横向滚动; 比如我们一些常见的后台状态栏: 那这种该怎么写&…...
Flink集群架构
在上一章节我们对flink有了一个基本的了解。从它的应用的场景以及它的一些基本的一些核心的一些概念。从本章节开始,我们对flink从它的一个集群的一个架构以及它的一个部署模式着手,去了解flink如何去部署在不同的这样的一个集群的一些资源管理器上面&am…...
计算机网络(6) UDP协议
一.UDP数据报格式 UDP(User Datagram Protocol,用户数据报协议)是一种简单的传输层协议,与TCP(Transmission Control Protocol,传输控制协议)相比,UDP提供一种无连接、不可靠的数据传…...
单片机(STM32)与上位机传输浮点数
目录 单片机(STM32)与上位机传输数据的方法1. 传输整形数据2. 传输浮点数据3. 如何打包与解包 单片机(STM32)与上位机传输数据的方法 在进行单片机程序的开发时,常常需要与其他设备进行通信。一种情况是与其他电路板通信,比如STM32主机与STM32从机通信&…...
50etf期权交易规则杠杆怎么计算?
今天带你了解50etf期权交易规则杠杆怎么计算?近年来,期权交易在股票市场中变得愈发流行,其中50ETF期权备受关注。作为一种金融衍生品,50ETF期权为投资者提供了更灵活的投资方式和更多的策略选择。 50etf期权交易规则杠杆怎么计算&…...
鸿蒙: 基础认证
先贴鸿蒙认证 官网10个类别总结如下 https://developer.huawei.com/consumer/cn/training/dev-cert-detail/101666948302721398 10节课学习完考试 考试 90分合格 3次机会 1个小时 不能切屏 运行hello world hvigorfile.ts是工程级编译构建任务脚本 build-profile.json5是工程…...
2024年最佳插电式混合动力电动汽车
对电动汽车充满好奇和环保意识的司机们还没有准备好跨入纯电动汽车,他们可以找到一个折衷方案,即插电式混合动力车。 在过去的16年里,我一直在把握汽车行业的脉搏。试驾数百辆汽车、电动汽车、插电式混合动力车,跟踪汽车行业的新闻…...
上海交通大学、中科大 开源镜像站停止 Docker Hub 仓库镜像支持后的可用替代源
上海交通大学 Linux 用户组发布公告: 即时起中止对 Docker Hub 仓库的镜像。Docker 相关工具默认会自动处理失效镜像的回退,如果对官方源有访问困难问题,建议尝试使用其他仍在服务的镜像源。 源加速地址 有网友表示百度的 Docker Hub 加速器…...
【Linux】shell——条件判断test,各种运算符,expr
条件判断——test 真——0 假——1 test expression or [ expression ] 整数运算符 字符串运算符 -z 长度是否为0 -n 长度是否不为0 str1 str2 str1 ! str2 补 &&-->逻辑与,前面为真后面才会执行 || -->逻辑或,前面为假后面才…...
中介子方程二十二
X$XFX$XdXuXWXπX$XWXeXyXeXyXeXWX$XπXWXuXdX$XFX$XEXyXαXiX$XαXiXrXkXtXyX$XpXVX$XdXuXWXπX$XWXeXyXeXyXeXWX$XπXWXuXdX$XVXpX$XyXtXkXrXiXαX$XiXαXyXEX$XFX$XEXyXαXiX$XαXiXrXkXtXyX$XpXVX$XdXuXWXπX$XWXeXyXeXyXeXWX$XπXWXuXdX$XVXpX$XyXtXkXrXiXαX$XiXαXyXEX$…...
你还不会选ProfiNET和EtherCAT网线?
在现代工业自动化领域,ProfiNET和EtherCAT是两种非常流行的通信协议。选择合适的网线对于确保通信的稳定性和效率至关重要。 ProfiNET是什么? ProfiNET是一种基于以太网的通信协议,由德国西门子公司开发。它支持实时通信,广泛应用…...
醉美酒话:承载着深厚文化底蕴的敬酒词
这些敬酒词凝聚了中华酒文化的精髓,每一句都体现了对美好愿景的深深祝愿,同时也展示了中文语言的丰富与魅力。 一、“步步高升”酒: 第一杯,酒至三分,象征着龙洒点滴、财运将至。我衷心祝愿您财富如江水般滚滚而来&a…...
vue3-sfc-loader动态加载一个异步vue组件生成cesium画面
在 Vue.js 3 中,使用 vue3-sfc-loader 可以动态加载异步的 Vue 单文件组件(.vue 文件)。这个工具允许你在运行时根据需要加载和解析 .vue 文件,使得组件的加载变得更加灵活和动态。 下面是一个简单的示例,演示如何使用…...
flink学习-状态管理
状态管理 在flink中,算子可以分为无状态和有状态两种情况。 无状态的算子只需要观察每个独立事件,根据当前输入的数据直接输出结果。像:filter、flatMap、map都属于无状态的算子。 有状态的算子则是除当前数据之外,还需要一些其他…...
OpenCV图像算术位运算
一 图像相加 import cv2 import numpy as npgirlcv2.imread(./2037548.jpg)#图像的加法运算就是矩阵的加法运算 #因此加法运算的两张图必须是相等的print(girl.shape)imgnp.ones((1920,1080,3),np.uint8)*50 cv2.imshow(girl,girl) resultcv2.add(girl,img) cv2.imshow(result…...
【调试笔记-20240611-Linux-配置 OpenWrt-23.05 支持泛域名 acme 更新】
调试笔记-系列文章目录 调试笔记-20240611-Linux-配置 OpenWrt-23.05 支持泛域名 acme 更新 文章目录 调试笔记-系列文章目录调试笔记-20240611-Linux-配置 OpenWrt-23.05 支持泛域名 acme 更新 前言一、调试环境操作系统:Windows 10 专业版调试环境调试目标 二、调…...
ssm宠物网站系统-计算机毕业设计源码07183
摘 要 在信息飞速发展的今天,网络已成为人们重要的信息交流平台。宠物网站每天都有大量的信息需要通过网络发布,为此,本人开发了一个基于B/S(浏览器/服务器)模式的宠物网站系统。 该系统以JJava编程语言、MySQL和SSM框…...
想上币的项目方怎么去选择交易所
在区块链和加密货币蓬勃发展的今天,许多项目方都渴望通过交易所上线其代币,以扩大影响力、提升流动性和市场认可度。然而,选择合适的交易所并非易事,它关乎项目的未来发展和市场地位。那么,对于有上币意向的项目来说&a…...
mysql如何创建并执行事件?
在 MySQL 中,事件调度器允许您在指定的时间间隔执行 SQL 语句。这类似于操作系统中的计划任务(如 cron 作业)。 前提条件 确保您的 MySQL 服务器已启用事件调度器。可以通过以下命令检查并启用: SHOW VARIABLES LIKE event_scheduler;如果返回的值是 OFF,可以通过以下命…...
k8s环境里查看containerd创建的容器对应的netns
如何查看containerd创建的容器对应的netns 要查看由 containerd 创建的容器对应的网络命名空间(netns),你可以遵循以下步骤。这个过程涉及到了解容器的 ID,以及使用 ctr 命令或其他方式来检索容器的详细信息。这里假定你已经具备…...
购物网站的排版/太原网站快速排名优化
软考中级网络工程师笔记(九) ——网络互连与互联网(二)IP子网划分专题 考点一: IP地址:4个字节32位。每一个8位位组用0~255表示。因此,最小的IP地址值为0.0.0.0&…...
做视频的素材什么网站好/关键词排名优化公司推荐
2019独角兽企业重金招聘Python工程师标准>>> 过滤器的主要作用:1.任何系统或网站都要判断用户是否登录。2.网络聊天系统或论坛,功能是过滤非法文字。3.统一解决编码。 怎么创建一个过滤器: 1.生成一个普通的class类,实…...
阿里云网站建设套餐/湘潭seo公司
本文整理于网络 智能回复是当下电商或者公司网站等解决用户问题的便捷技术,根据用户提出的问题,做出相应的回复。我在网上找关于智能问答方面的API接口,这里我就根据自己的搜索来简单介绍推荐一下。 图灵机器人免费开放了相应的问答的API接口…...
哪些网页游戏好玩/网址seo优化排名
Java I/O 扩展 标签: Java基础 NIO Java 的NIO(新IO)和传统的IO有着相同的目的: 输入 输出 .但是NIO使用了不同的方式来处理IO,NIO利用内存映射文件(此处文件的含义可以参考Unix的名言一切皆文件)来处理IO, NIO将文件或文件的一段区域映射到内存中(类似于操作系统的…...
专业做网站的顺德公司/seo推广服务哪家好
文章转自http://jackyrong.iteye.com/blog/238872 看清上市公司的财务分析是十分重要的,特别是用来评价上市公司,因此各位股民一定要学会基本会看这些东西哦一)偿债能力分析 常用的偿债能力分析指标有流动比率、速动比率和资产负债率。 …...
网站seo分析工具/sem推广是什么意思
记录一下最近做的项目,使用布控球识别陌生的人脸,在电力系统的施工现场,通常是不允许陌生人进入的,所以需要使用监控识别哪些人是陌生人,并在监控图像中标出他们的位置。一般来说有成熟的解决方案优先使用成熟的解决方…...