Redis哨兵模式搭建
Redis主从复制搭建
Redis虽然拥有非常高的性能,但是在实际的生产环境中,使用单机模式还是会产生不少问题的,比如说容易出现
单机故障,容量瓶颈,以及QPS瓶颈等问题。通常环境下,主从复制、哨兵模式、Redis Cluster是3种比较常见
的解决方案,本文将通过实例演示如何搭建Redis主从复制环境,并对其原理进行分析。
1、搭建主从复制
1、创建3个目录redis8000,redis8001,redis8002目录下。
将默认配置文件redis.conf拷贝到redis8000下,将redis8000指定为主机,修改以下参数:
bind 0.0.0.0
port 8000
pidfile /var/run/redis_8000.pid
logfile "redis8000.log"
dbfilename dump8000.rdb
dir /home/hydra/files/redis/slave/redis8000/
requirepass 123456
daemonize yes
masterauth 123456
2、将修改后的redis.conf文件拷贝到redis8001和redis8002目录下,然后进行修改:
bind 0.0.0.0
port 8001
pidfile /var/run/redis_8001.pid
logfile "redis8001.log"
dbfilename dump8001.rdb
dir /home/hydra/files/redis/slave/redis8001/
# replicaof 127.0.0.1 8000
slaveof 127.0.0.1 8000
requirepass 123456
masterauth 123456
# 从机开启aof持久化
appendonly yes
daemonize yes
bind 0.0.0.0
port 8002
pidfile /var/run/redis_8002.pid
logfile "redis8002.log"
dbfilename dump8002.rdb
dir /home/hydra/files/redis/slave/redis8002/
# replicaof 127.0.0.1 8000
slaveof 127.0.0.1 8000
requirepass 123456
masterauth 123456
# 从机开启aof持久化
appendonly yes
daemonize yes
3、分别启动3个redis实例
./redis-5.0.4/src/redis-server ./slave/redis8000/redis.conf
./redis-5.0.4/src/redis-server ./slave/redis8001/redis.conf
./redis-5.0.4/src/redis-server ./slave/redis8002/redis.conf
查看进程,启动成功:

4、通过redis客户端连接主机redis8000:
./redis-5.0.4/src/redis-cli -p 8000 -a 123456
登录成功后,使用指令查看主从架构:
info replication

可以看出,主机8000拥有两台从机,从机8001和8002连接成功。
5、通过redis客户端连接从机redis80001,同样通过指令查看主从状态:

可以看出8001的角色为slave从机,并且可以查看主机8001的相关信息。
6、此外,还可以通过指令的模式动态分配主从。复制一个redis8000的配置文件至redis8003下,修改端口为
8003,其他配置不做改动。
bind 0.0.0.0
port 8003
pidfile /var/run/redis_8003.pid
logfile "redis8003.log"
dbfilename dump8003.rdb
dir /home/hydra/files/redis/slave/redis8003/
requirepass 123456
daemonize yes
使用redis客户端登录8003后,输入指令指定主机:
slaveof 127.0.0.1 8000
动态指定主机后,如果主机设置了密码,还需要通过指令配置主机密码:
config set masterauth 123456
配置完成后,查看8003从机状态:

查看8000主机状态:

新添加的从机8003已经被添加到8000的从机当中。
需要注意的是,使用命令动态指定的主从状态,在从机重启后会失效。
首先使用kill命令杀死8003进程,然后查看主从状态:

可以发现,现在从机只剩下两台,为8001和8002。
然后重启8003并再次查看状态:

仍然为8001和8002两台从机,证明了指令指定主从在重启后会失效。
7、进行读写测试,首先测试主机,读写均能正常:

测试从机,发现可以正常读数据,但是写数据失败:

这是因为在主从复制的架构下,只有主机能够写数据,从机为只读模式,这是在配置文件中指定的。在Redis2.6版
本以后,默认从机为只读模式:
replica-read-only yes
需要注意这里不能将这个配置改为no,因为主机不会监听到从机的写数据事件,因而造成主从数据的不一致。
二、全量复制
用于初次复制或其它无法进行部分复制的情况,将主节点中的所有数据都发送给从节点。
当数据量过大的时候,会造成很大的网络开销,流程如下:

1、从机发送:
psync ? -1
这里的 “?” 是因为从机暂时不知道主机的runId, -1代表全量复制
2、主机发送指令,把自己的runid和offset传给从机:
fullresync{runid,offset}
可以通过命令查看这两个参数:
#可以查看runid
info server
#可以查看offset
info replication
从机之后会上报自己的偏移量offset给主机,当主机的offset和从机的offset不一样时,说明数据不一致。
3、从机保存主机数据:
save master info
4、主机执行bgsave,全量复制会触发rdb持久化。
bgsave
主机在生成rdb文件时,可能会有新的数据写入。这时redis把新写入的数据写入一个缓冲区repl_back_buffer,默
认大小1M。可以通过repl-backlog-size设置缓冲区大小
5、主机发送rdb给从机:
send rdb
6、主机发送缓冲区数据给从机:
send buffer
7、从机把从机本身上的数据清空:
flush old data
8、从机加载主机发送过来的rdb和buffer数据:
load rdb&buffer
在全量复制中,消耗的时间包括:
-
执行bgsave进行持久化的时间
-
rdb文件网络传输时间
-
从节点请求请求数据时间
-
从机加载rdb的时间
-
如果从节点开启了aof持久化,可能进行aof重写的时间
三、部分复制
部分复制主要是Redis针对全量复制过高的开销进行的一种优化措施。Redis 希望能够在主机出现抖动或连接断开
的时候,可以通过部分复制机制将损失降低到最低。

具体流程如下:
1、出现网络抖动,连接断开 connection lost
2、主机继续写复制缓冲区repl_back_buffer
3、从机继续尝试连接主机
4、从机slave 会把自己当前 runid 和偏移量传输给主机 master,并且执行 pysnc 命令同步
5、如果 master 发现偏移量是在缓冲区的范围内,就会返回 continue 命令
6、同步了 offset 的部分数据,所以部分复制的基础就是偏移量 offset。
那么在正常的情况下,Redis是如何决定全量复制还是部分复制的呢?从机将自己的offset发送给主机后,主机
根据offset和缓冲区大小决定能否执行部分复制:
-
如果offset偏移量之后的数据,仍然都在复制积压缓冲区里,则执行部分复制
-
如果offset偏移量之后的数据已不在复制积压缓冲区中,则执行全量复制
四、主从复制架构缺点
1、由于所有的写操作都是先在主机上操作,然后同步更新到从机上,所以同步过程有一定的延迟,当系统很繁忙
的时候,延迟问题会更加严重。从机数量增加时,会使这个问题更加严重。
2、当主机宕机之后,将不能进行写操作,需要手动将从机升级为主机,从机需要重新指定主机。
手动在一台从机上执行下面命令,将它升级为主机:
slave of no one
再在其他从机上执行slave of指令,将自身变成新主机的从机:
slave of 192.168.0.1 port
可以看出这种情况下,当主机宕机后,后续的修复流程由人工操作,非常麻烦,因此在这种情况下Redis引入了哨
兵模式,来完成主机宕机后的自动故障转移。
相关文章:
Redis哨兵模式搭建
Redis主从复制搭建 Redis虽然拥有非常高的性能,但是在实际的生产环境中,使用单机模式还是会产生不少问题的,比如说容易出现 单机故障,容量瓶颈,以及QPS瓶颈等问题。通常环境下,主从复制、哨兵模式、Redis…...
大语言模型控制生成的过程Trick:自定义LogitsProcessor实践
前言 在大模型的生成过程中,部分原生的大语言模型未经过特殊的对齐训练,往往会“胡说八道”的生成一些敏感词语等用户不想生成的词语,最简单粗暴的方式就是在大模型生成的文本之后,添加敏感词库等规则手段进行敏感词过滤…...
Docker容器:docker的资源控制及docker数据管理
文章目录 一.docker的资源控制1.CPU 资源控制1.1 资源控制工具1.2 cgroups有四大功能1.3 设置CPU使用率上限1.4 进行CPU压力测试1.5 设置50%的比例分配CPU使用时间上限1.6 设置CPU资源占用比(设置多个容器时才有效)1.6.1 两个容器测试cpu1.6.2 设置容器绑…...
从零开始打造家装预约咨询小程序
在如今互联网高度发达的时代,家装行业也逐渐意识到了线上渠道的重要性。为了更好地服务客户,提高用户体验,越来越多的家装公司开始寻找合适的小程序制作平台。本文将向大家介绍如何使用第三方制作平台,如乔拓云网,打造…...
es线上处理命令记录
常用命令 搜索 GET _search {"query": {"match_all": {}} }获取全部模版 GET _index_template GET _index_template/yst_crawler_template获取全部索引 GET /_cat/indices?v 获取当前mapping GET /yst_crawler/_mapping创建一个mapping PUT /yst_c…...
mysql 在nodejs中的简单使用(增删改查)
一 、封装SQL查询请求链接 const mysql require(mysql) //创建开发工具数据库链接池 const pool mysql.createPool({host: 192.168.1.133,user: user_name, password: 123456,database: database_name,port: 3306,connectionLimit: 50 // 限制连接数 });// sql:查…...
1.MySQL数据库的基本操作
数据库操作过程: 1.用户在客户端输入 SQL 2.客户端会把 SQL 通过网络发送给服务器 3.服务器执行这个 SQL,把结果返回给客户端 4.客户端收到结果,显示到界面上 数据库的操作 这里的数据库不是代表一个软件,而是代表一个数据集合。 显示当前的数据库 …...
Zabbix-6.4.4 邮箱告警SMS告警配置
目录 ------------------------- # 邮箱告警 ---------------------------------- 1.安装mailx与postfix软件包 2.修改mailx配置文件 3. 创建文件夹 4. 编写mail-send.sh脚本 5. 将该脚本赋予执行权限 6. 进入web界面进行设置—> Alerts —> Media Types 7. 添…...
网络安全 Day30-运维安全项目-容器架构上
容器架构上 1. 什么是容器2. 容器 vs 虚拟机(化) :star::star:3. Docker极速上手指南1)使用rpm包安装docker2) docker下载镜像加速的配置3) 载入镜像大礼包(老师资料包中有) 4. Docker使用案例1) 案例01::star::star::…...
深入理解设计模式-创建型之单例模式
为什么要使用单例 1、表示全局唯一 如果有些数据在系统中应该且只能保存一份,那就应该设计为单例类。 如:配置类:在系统中,我们只有一个配置文件,当配置文件被加载到内存之后,应该被映射为一个唯一的【配…...
Vue中路由缓存问题及解决方法
一.问题 Vue Router 允许你在你的应用中创建多个视图,并根据路由来动态切换这些视图。默认情况下,当你从一个路由切换到另一个路由时,Vue Router 会销毁前一个路由的组件实例并创建新的组件实例。然而,有时候你可能希望保持一些页…...
Linux与bash(基础内容一)
一、常见的linux命令: 1、文件: (1)常见的文件命令: (2)文件属性: (3)修改文件属性: 查看文件的属性: ls -l 查看文件的属性 ls …...
NVIDIA Omniverse与GPT-4结合生成3D内容
全球各行业对 3D 世界和虚拟环境的需求呈指数级增长。3D 工作流程是工业数字化的核心,开发实时模拟来测试和验证自动驾驶车辆和机器人,操作数字孪生来优化工业制造,并为科学发现铺平新的道路。 如今,3D 设计和世界构建仍然是高度…...
Windows Server --- RDP远程桌面服务器激活和RD授权
RDP远程桌面服务器激活和RD授权 一、激活服务器二、设置RD授权 系统:Window server 2008 R2 服务:远程桌面服务 注:该方法适合该远程桌面服务器没网络状态下(离线),激活服务器。 一、激活服务器 1.打开远…...
关于游戏盾
游戏盾(Game Shield)是一种针对游戏行业特点的网络安全解决方案,主要针对游戏平台面临的各种网络攻击和安全威胁。以下是一些原因,说明为什么游戏平台需要加游戏盾: 1. DDoS攻击:游戏平台通常容易受到分布式…...
回归预测 | MATLAB实现基于SSA-KELM-Adaboost麻雀算法优化核极限学习机结合AdaBoost多输入单输出回归预测
回归预测 | MATLAB实现基于SSA-KELM-Adaboost麻雀算法优化核极限学习机结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于SSA-KELM-Adaboost麻雀算法优化核极限学习机结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本…...
《cpolar内网穿透》外网SSH远程连接linux(CentOS)服务器
本次教程我们来实现如何在外公网环境下,SSH远程连接家里/公司的Linux CentOS服务器,无需公网IP,也不需要设置路由器。 视频教程 [video(video-jrpesBrv-1680147672481)(type-csdn)(url-CSDN直播https://live-file.csdnimg.cn/release/live/…...
IDEA启动报错【java.sql.SQLSyntaxErrorException: ORA-00904: “P“.“PRJ_NO“: 标识符无效】
IDEA报错如下: 2023-08-17 11:26:15.535 ERROR [egrant-biz,b48324d82fe23753,b48324d82fe23753,true] 24108 --- [ XNIO-1 task-1] c.i.c.l.c.RestExceptionController : 服务器异常org.springframework.jdbc.BadSqlGrammarException: ### Error queryin…...
Nginx详解
1、高并发时代 单台tomcat在理想情况下可支持的最大并发数量在200~500之间,如果大于这个数量可能会造成响应缓慢甚至宕机。 解决方案是通过多台服务器分摊并发压力,这不仅需要有多台tomcat服务器,还需要一台服务器专门用来分配请求。这既是…...
摸清一下mysql授权语句的实际执行关系
样例 ---------------------------------------------------------------------- grant all PRIVILEGES on db1.* to test% identified by test1; grant all PRIVILEGES on db2.* to test% identified by test2; grant all PRIVILEGES on db3.* to test127.0.0.1 identified …...
随机化、盲法、匹配:让你的研究更接近“可信因果”——控制额外变量的策略与实验内部效度提升
在科研写作和研究设计中,很多人把注意力放在“用了什么统计方法”上,却忽视了一个更根本的问题:你的研究结果,真的是干预或自变量造成的吗?如果不是,那么即使你的 p 值很小、回归系数显著、模型拟合很好&am…...
【开源】基于 ASP.NET Core Blazor Server 10.0 构建的学生信息查询系统
学生查询系统基于 ASP.NET Core Blazor Server 10.0 构建的学生信息查询系统,使用 Excel 文件作为数据源,支持动态列适配和响应式布局。功能特性灵活查询:支持按姓名、学号进行模糊查询,可单独或组合使用动态列适配:不…...
使用Taotoken后API调用延迟与稳定性体感观察报告
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken后API调用延迟与稳定性体感观察报告 1. 引言:从直接对接模型到使用聚合平台 在开发基于大语言模型的应用…...
OpenClaw企业微信渠道配置教程|API模式+长连接+全部授权
OpenClaw 连接企业微信完整图文教程 前置准备 下载小龙虾open claw一键装机包(www.totom.top)并安装 已安装并可以正常打开 OpenClaw Windows。 OpenClaw 顶部 Gateway 状态保持在线。 已安装并登录企业微信客户端。 当前企业微信账号具备创建和管理…...
ThinkPad风扇控制终极指南:TPFanCtrl2如何让你的笔记本更安静、更凉爽?
ThinkPad风扇控制终极指南:TPFanCtrl2如何让你的笔记本更安静、更凉爽? 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 你是否厌倦了ThinkPad风…...
鸿蒙 HarmonyOS 6.0 页面构建实践:跨端数字图书馆界面实现
鸿蒙 HarmonyOS 6.0 页面构建实践:跨端数字图书馆界面实现 前言 随着移动互联网和物联网的高速发展,跨端应用开发已成为现代软件开发的重要趋势。开发者不仅需要在手机端提供流畅的用户体验,还需要兼顾平板、电视等多终端的适配问题。在这样的…...
语义分割模型库选型指南:除了segmentation_models_pytorch,还有哪些宝藏库?附113个编码器实战对比
语义分割模型库深度选型指南:从SMP到工业级解决方案全景解析 当面对一个全新的语义分割项目时,工程师们往往会在众多开源模型库前陷入选择困难。本文将带您深入剖析主流语义分割工具库的技术特性、适用场景与实战表现,帮助您做出精准的技术决…...
迪文屏DGUS数据自动上传死活没数据?手把手教你排查串口2无响应的三大坑(附8283协议全功能例程)
迪文屏DGUS串口无响应终极排查指南:从硬件焊点到协议配置的深度解析 当你的迪文屏按照手册配置了自动上传功能,却发现串口助手始终一片空白时,那种挫败感每个嵌入式开发者都深有体会。本文将从三个最容易被忽视的致命细节出发,带你…...
从审批流到业务闭环:企业流程管理软件的价值变化
从审批流到业务闭环:企业流程管理软件的价值变化 很多企业最早上 OA,是为了“让审批在线上走”。请假、报销、合同、采购、用印都能提交、审核、归档,确实比纸质单据和微信群规范。但随着业务复杂度提升,企业会发现:审…...
嵌入式硬件设计中的“隐形保镖”:电压跟随电路如何让你的系统更稳定?
嵌入式硬件设计中的“隐形保镖”:电压跟随电路如何让你的系统更稳定? 在复杂的嵌入式系统中,信号链的完整性往往决定了整个产品的可靠性。想象一下,当你精心设计的传感器数据经过长距离传输后,最终到达MCU时却出现了严…...
