Redis 搭建主从复制、哨兵模式【Windows】

news2024/11/14 19:17:21

Redis 主从复制模式是一种用于数据冗余和可伸缩性的机制,它允许从服务器(Slave)从主服务器(Master)复制数据,从而实现数据的备份和读写分离。以下是关于Redis主从复制模式的详细介绍:

1. 主从复制模式的定义与特点

  • 定义:Redis 主从复制模式是一种数据同步策略,通过配置多台 Redis 服务器,一台作为主服务器(Master),负责处理写操作;而其他服务器作为从服务器(Slave),负责处理读操作。

  • 特点

    1. 主从复制模式实现了 读写分离,主服务器专注于处理写操作,而从服务器则专注于处理读操作,从而减轻主服务器的压力。

    2. 主从复制模式提供了 数据冗余,即使主服务器出现故障,从服务器仍然可以提供服务,保证系统的可用性。

2. 主从复制模式的工作原理

  1. 复制初始化:当从服务器启动时,它会主动向主服务器发送 SYNC 命令,请求与主服务器进行同步。

  2. RDB文件生成与传输:主服务器接收到 SYNC 命令后,会在后台执行 BGSAVE 命令,生成一个 RDB 文件(即 Redis 的数据快照文件),并将该文件发送给从服务器。

  3. 数据加载:从服务器接收到 RDB 文件后,会进行全盘加载,以获取主服务器的数据状态。

  4. 命令缓存与同步:在 RDB 文件传输过程中,主服务器会将其在此期间接收到的写命令记录在一个缓冲区中。当 RDB 文件传输完成后,主服务器会将缓冲区中的命令发送给从服务器,从服务器会执行这些命令,以保证与主服务器的数据状态一致。

  5. 后续复制过程:在后续的复制过程中,主服务器每次接收到写命令时,都会同步发送给从服务器,以保持主从数据的一致性。

3. 主从复制模式的配置

要配置 Redis 的主从复制模式,需要在 Redis 的配置文件中设置相应的选项。例如,在从服务器的配置文件中,可以通过设置 slaveof 选项来指定主服务器的 IP 地址和端口号。

4. 主从复制模式的优缺点

  • 优点

    1. 读写分离:通过读写分离,可以提高 Redis 的性能。
    2. 数据冗余:主从复制提供数据副本,可以用于灾难恢复。
    3. 读扩展:从节点可以处理读请求,分散读负载,提高系统的整体读取能力。
    4. 高可用性:当主节点出现故障时,可以手动或自动(使用 Redis Sentinel)将从节点提升为新的主节点,以此减少服务中断的时间。
    5. 跨数据中心复制:可以在不同的数据中心配置主从复制,以实现地理冗余。
  • 缺点

    1. 数据延迟:在高负载下,从节点与主节点之间的数据同步可能会有延迟,不能保证实时的强一致性。

    2. 写扩展限制:所有的写操作仍然需要通过主节点进行,因此主从复制不会提高写操作的性能。

    3. 故障转移不是自动的:在没有使用 SentinelRedis Cluster 的情况下,发生故障时需要手动进行故障转移。

    4. 内存使用:由于每个从节点都会保留数据的副本,这意味着每个节点都会消耗与主节点相似的内存资源。

    5. 成本:维护更多的服务器会增加硬件和运维成本。

通过以上的介绍,我们可以更清晰地了解 Redis 主从复制模式的工作原理、配置方式以及其优缺点,从而在实际应用中根据需求进行选择和配置。

以上内容由文心一言生成,主要是介绍一下 Redis 主从复制模式,顺便凑个字数。下面我们就来实现 Redis 主从复制模式。

5. 主从复制模式实现

下面带着大家手动实现 Redis 主从复制模式,首先我们先要下载 Redis,这里我就默认大家都已经安装了 Redis,没有安装的可以去网上搜一下教程,也不难。

由于我们是在一台服务器上模拟 Redis 主从复制模式,所以在一些配置方面还是和多台服务器上实现是不一样的。不过大同小异,下面就开始了。

5.1. 创建多个配置文件

如果在同一台机器上实现 Redis 主从复制模式,由于 Redis 会默认占用 6379 端口,所以我们需要为每个节点单独创建一个文件。

我们就搭建一个 主节点 和两个 从节点。他们的配置文件命名为:

主节点(master):redis-master-6379.conf
从节点(slaveA):redis-slave-6380.conf
从节点(slaveB):redis-slave-6381.conf

5.2. 修改配置

首先在 redis-master-6379.conf 中做以下修改:

在 Linux 中还有一个很快的方法完成创建配置文件这一步,后面我会介绍。

# 设置可以访问 Redis 的主机
bind 127.0.0.1
# 或者设置多个 IP
# bind 127.0.0.1 ipA ipB ...

# 数据文件,RDB 快照
dbfilename dump-6379.rdb

# AOF 文件,记录命令执行
appendfilename "appendonly-6379.aof"

# 在 windows 中不用设置 pidfile, 在 linux 中则需要设置
# (pidfile 用于保存 redis 进程编号)
pidfile /var/run/redis-6379.pid

其他的节点的配置文件与之类似,修改其中的 6379 为 63806381,然后单独创建一份 conf 文件即可。

  • 重要配置

最后一个 重要的配置 就是设置从节点跟随的主节点(在从节点的配置文件中书写,每个从节点配置文件中都要写):

# 这个用来配置主节点的 IP 和端口
slaveof 127.0.0.1 6379
  • 这里介绍在 Linux 中创建多个配置文件

首先创建一个 redis-master-6379.conf 文件,在其中做如上配置之后,使用以下命令创建从节点文件:

# 作用是将 redis-master-6379.conf 文件中所有的 6379 字符替换成 6380,
# 并将结果输出到 redis-slave-6380.conf 文件当中
sed 's/6379/6380/g' redis-master-6379.conf > redis-slave-6380.conf
5.3. 启动实例

配置好之后启动 Redis 实例:

  • 在 Windows 中
# 后台启动
# 启动主节点
start redis-server.exe redis-master-6379.conf

# 启动从节点
start redis-server.exe redis-slave-6380.conf
start redis-server.exe redis-slave-6381.conf
  • 在 Linux 中
# 后台启动
# 启动主节点
redis-server redis-master-6379.conf &

# 启动从节点
redis-server redis-slave-6380.conf &
redis-server redis-slave-6381.conf &

6. 哨兵模式

哨兵模式(Sentinel)是Redis中用于实现高可用性的一种机制。以下是关于哨兵模式的详细深入介绍:

6.1. 工作原理
  1. 监控:哨兵进程会周期性地向 Redis 的主节点和从节点发送 PING 命令来检测它们的状态。这些哨兵进程是独立的,并且会互相监控,以确保系统的高可用性。

  2. 自动故障迁移

    • 当哨兵进程检测到主节点(master)不可用时,它会根据投票机制(通常是超过半数的哨兵认为主节点不可用)来决定是否进行故障转移。
    • 如果达到指定哨兵数(quorum),哨兵会选择一个从节点(slave)将其升级为新的主节点。这个过程是自动的,无需人工干预。
    • 一旦新的主节点被选举出来,哨兵会通过消息订阅模式通知其他从节点,让它们更新配置并切换到新的主节点上。
6.2. 搭建哨兵节点
6.2.1. 创建配置文件

由于哨兵节点的数量一般与主从节点数量相同,所以这里就设置 一个主节点两个从节点,以及 三个哨兵节点

相关的配置文件命名为:sentinel-26379.confsentinel-26380.confsentinel-27381.conf

其中 sentinal-26379.conf 文件的配置如下:

port 26379
bind 127.0.0.1

# 监控主节点的状态,最后的 2 表示当有至少两个哨兵节点认为主节点宕机,
# 才重新设置主节点
sentinel monitor mymaster 127.0.0.1 6379 2

# 主节点 5000 毫秒后未响应则认为主节点宕机
sentinel down-after-milliseconds mymaster 5000

其他哨兵节点的配置文件依照上面的配置修改。

6.2.2. 启动实例

在启动哨兵节点之前要先启动 Redis 主从节点。然后启动哨兵节点。

相关的启动命令如下:

  • Windows 下
# 26379 端口
start redis-server.exe sentinel-26379.conf --sentinel

start redis-server.exe sentinel-26380.conf --sentinel
start redis-server.exe sentinel-26381.conf --sentinel
  • Linux 下
# 26379 端口
redis-sentinel sentinel-26379.conf &

redis-sentinel sentinel-26380.conf &
redis-sentinel sentinel-26381.conf &

启动之后就可以试验一下,关闭主节点之后,从节点是否能自动代替主节点了。

7. 总结

OK!关于 Redis 主从复制以及哨兵模式的搭建就到这里,之后我们还会介绍搭建 Redis 集群。虽然 Redis 主从模式提供了很好的高可用性,但是它的高并发并不高,因为只有一个主节点负责写入,而 Redis 集群则很好地缓解了这个问题。

image.png

本篇文章内容主要起到记录作用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑U盘管理软件有哪些?精选四款适合企业的U盘管理软件

在当前的数字化时代,电脑U盘作为重要的数据存储和传输工具,其管理显得尤为关键。为了确保U盘数据的安全性和完整性,许多企业和个人都选择使用专业的U盘管理软件。以下是几款值得推荐的电脑U盘管理软件,包括域智盾在内,…

Python网络爬虫4-实战爬取pdf

1.需求背景 爬取松产品中心网站下的家电说明书。这里以冰箱为例:松下电器-冰箱网址 网站分析: 第一步: 点击一个具体的冰箱型号,点击了解更多,会打开此型号电器的详情页面。 第二步:在新打开的详情页面中…

阻塞IO、非阻塞IO、IO多路复用和信号驱动IO简介

一、分类 在UNIX或Liunx下主要有4中IO模型 阻塞IO:最简单、最常用、效率最低 阻塞IO简介和代码示例-CSDN博客当进程执行读操作的时候,如果缓冲区有内容,则继续读取内容向下执行。缓冲区没内容,进程进入休眠态,直到缓冲区中再次…

老徐亲自带队死磕 30 天 IP 公众号价值写作, 邀请你一起玩

* 大家好,我是前端队长。前端程序员,2023年开始玩副业。做过AI绘画,公众号 AI 爆文,AI代写项目,累计变现五位数。 — 老徐的一人企业书籍提到一点:120、完全没基础的同学,玩副业,玩 …

springboot连接多个库

一个SpringBoot项目,同时连接两个数据库:比如一个是Mysql数据库,一个是oracle数据库(啥数据库都一样,连接两个同为oracle的数据库,或两个不同的数据库,只需要更改对应的driver-class-name和jdbc…

视觉SLAM14精讲——相机与图像3.2

视觉SLAM14精讲 三维空间刚体运动1.0三维空间刚体运动1.1三维空间刚体运动1.2李群与李代数2.1相机与图像3.1 视觉SLAM14精讲——相机与图像3.2 视觉SLAM14精讲畸变有关重投影误差缩放实际使用 畸变 相机畸变是相机镜头光学缺陷所致的缺陷, 在光学领域这种问题是没…

Apple Intelligence:一文详细解读苹果AI!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…

更适合工程师和研究僧的FPGA专项培训课程

各位编程精英er~ 社区打造的FPGA工程师培训班上线后,有不少同学后台私信询问:“能不能出个那种专门针对某个知识点的课程呢?我想针对自己的薄弱点深入学习。” 贴心如我,当然会满足大家的学习需求啦。本周,社区FPGA专…

Anime Girls Pack

动漫女孩包 35个动画(就地)支持人形。 8情绪。 角色列表:原艾艾琪惠美子惠理文子星薰和子佳子奈子理子凛老师小樱老师津雨僵尸女孩01 下载:​​Unity资源商店链接资源下载链接 效果图:

《维汉翻译通》App的OCR识别技术难度怎么样?通过哪些优化措施来提高文字识别的准确率呢?

《维汉翻译通》App的OCR技术在处理不同字体和大小的文本时,采用了以下优化措施来确保高准确率: 多字体支持:OCR引擎能够识别多种字体样式,包括常见的印刷体和手写体,以及一些特殊的艺术字体。 自适应缩放&#xff1a…

Go使用https

一、服务端 1. 生成私钥和证书 安装OpenSSL windows安装OpenSSL生成CA证书创建证书 以上两个步骤,参考:Go http2 和 h2c 2. 代码 package mainimport ("log""net/http""time""golang.org/x/net/http2" )co…

JVM (二)类加载

一,类的生命周期 加载 连接 验证 准备 解析 初始化 使用 卸载 加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定; 类加载几个阶段按顺序开始,而不是按顺序进行或完成,通常都会交叉进…

2024 New Relic Java 生态系统报告

New Relic 发布了 2024 年度 Java 生态系统报告,数据来源于使用 New Relic 监控的线上 Java 应用。从这个报告中,我们可以看到 Java 发展的一些趋势。 在 Java 版本方面,新版本的使用率越来越高。Java 11 的使用率是 32.9%,Java 1…

Github 2024-06-12 C开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目10PHP项目1PLpgSQL项目1C++项目1Ventoy: 100%开源的可启动USB解决方案 创建周期:1534 天开发语言:C协议类型:GNU General Public Licen…

软件架构风格探析

软件架构是系统设计的基石,它定义了不同组件、层次之间的交互和整合方式。选择恰当的架构风格对于构建高效、可维护以及可扩展的软件系统至关重要。本文将详细探讨几种关键的软件架构风格,包括数据流风格、仓库、调用返回、独立构件和虚拟机,…

课时152:项目发布_手工发布_方案解读

1.2.1 方案解读 学习目标 这一节,我们从 基础知识、简单实践、小结 三个方面来学习 基础知识 案例需求 实现一套业务环境的项目发布流程,基本的网站架构效果如下:架构解读:负载均衡采用Nginx服务,基于请求内容进行…

18.3 HTTP服务器-响应不同类型的内容和请求、获取请求数据

1. 响应不同类型的内容 在向客户端返回响应时,服务器应根据客户端的具体需求,为其提供不同类型的内容。一些常见的内容类型包括: text/plain —— 纯文本格式 text/html —— HTML格式 application/json —— JSON格式 application/xml —…

Java多线程CompletableFuture使用

引言 一个接口可能需要调用N个其他服务的接口,这在项目开发中非常常见。如果是串行执行的话,接口的响应速度会很慢。考虑到这些接口之间有大部分都是无前后顺序关联的,可以并行执行。就比如说调用获取商品详情的时候,可以同时调用…

高效换热管

绕管式高效换热器 绕管换热器是一种结构紧凑,传热效率高的新型高效换热器。换热管按螺旋线形状交替缠绕在芯筒与外筒之间,相邻两层螺旋状换热管旋向相反,并采用一定形状的定距元件使之保持一定间距。层与层间换热管反向缠绕,极大…

解决python import时ModuleNotFoundError异常

文章目录 前言 一 import索引机制二 ModuleNotFoundError原因及其解决办法1. 模块,包名字错误2. 模块,包未导入或未安装3. 模块,包命名冲突4. 模块,包路径不在import索引范围内(常见且重点) 前言 在学习和使用python import xxx时…