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 …...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...
