Redis-运维

转自 极客时间 Redis 亚风 原文视频:https://u.geekbang.org/lesson/535?article=681062

Redis 同步

Redis主从数据同步,主从第⼀次同步是全量同步

replicaof 主机 端口 #当前这个机器做Master的备份

在这里插入图片描述
master如何判断slave是不是第⼀次来同步数据:
Replication ld:简称replid,是数据集的标记,id⼀致则说明是同⼀数据集。每⼀个master都有唯⼀的replid,slave则会继承master节点的replid。
Offset:偏移量,随着记录在repl_baklog中的数据增多⽽逐渐增⼤。slave完成同步时也会记录当前同步的offset。
如果slave的offset⼩于master的offset,说明slave数据落后于master,需要更新。
因此slave做数据同步,必须向master声明⾃⼰的replication id 和offset,master才可以判断到底需要同步哪些数据。

如果slave重启后同步,会进⾏增量同步。

在这里插入图片描述

repl_baklog⼤⼩有上限,写满后会覆盖最早的数据。如果slave断开时间过久,导致数据被覆盖,则⽆法实现增量同步,只能再次全量同步。slave 和Master 始终保持着一点差距,也就是上面的Slave 节点追不上 Master 节点了,超过一圈,后面的数据就被重写了。

可以从以下⼏个⽅⾯来优化Redis主从集群
在master中配置repl-diskless-sync yes启⽤⽆磁盘复制(需要看网络带宽,作为了解不太实用),避免全量同步时的磁盘IO。
Redis单节点上的内存占⽤不要太⼤,减少RDB导致的过多磁盘IO
适当提⾼repl_baklog的⼤⼩,发现slave宕机时尽快实现故障恢复,尽可能避免全量同步

⼀个master上的slave节点数量,如果实在是太多slave,则可以采⽤主-从-从链式结构,减少master压⼒。

在这里插入图片描述

哨兵

slave节点宕机恢复后可以找master节点同步数据,那master节点宕机怎么办?
Redis提供了哨兵(Sentinel)机制来实现主从集群的⾃动故障恢复。哨兵的结构和作⽤如下:
在这里插入图片描述
• 监控:Sentinel 会不断检查master和slave是否按预期⼯作
• ⾃动故障恢复:如果master故障,Sentinel会将⼀个slave提升为master。当
故障实例恢复后也以新的master为主
• 通知:Sentinel充当Redis客户端的服务发现来源,当集群发⽣故障转移时,
会将最新信息推送给Redis的客户端
Sentinel基于⼼跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令:

上下线检测及选举
• 主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线。
• 客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例客观下线。quorum值最好超过Sentinel实例数量的⼀半。⼀旦发现master故障,sentinel需要在salve中选择⼀个作为新的master,选择依据是这样的:
1) ⾸先会判断slave节点与master节点断开时间⻓短,如果超过指定值(down-after-milliseconds * 10)则会排除该slave节点
2) 然后判断slave节点的slave-priority值,越⼩优先级越⾼,如果是0则永不参与选举
3) 如果slave-prority⼀样,则判断slave节点的offset值,越⼤说明数据越新,优先级越⾼
4)最后判断slave节点的运⾏id⼤⼩,越⼩优先级越⾼
当选中了其中⼀个slave为新的master后(例如slave1),故障的转移的步骤如下:
1)sentinel给备选的slave1节点发送slaveof no one命令,让该节点成为master。
2) sentinel给所有其它slave发送slaveof ip port命令,让这些slave成为新master的从节点,开始从新的master上同步数据。
3)Sentinel将故障节点标记为slave(修改配置),当故障节点恢复后会⾃动成为新的master的slave节点。
sping 针对主从的应用

spring.redis.sentinel.master=mymaster
spring.redis.sentinel.node=ip:port,ip:port

连接Sentinel的时候需要指定这个bean
在这里插入图片描述
这⾥的ReadFrom是配置Redis的读取策略,是⼀个枚举,包括下⾯选择:
MASTER: 从主节点读取
MASTER_PREFERRED:优先从master节点读取,master不可⽤才读取replica
REPLICA: 从slave (replica)节点读取
REPLICA_PREFERRED:优先从slave (replica)节点读取,所有的slave都不可⽤才读取master

Redis 分片集群

主从和哨兵可以解决⾼可⽤、⾼并发读的问题。但是依然有两个问题没有解决:
• 海量数据存储问题
• ⾼并发写的问题
使⽤分⽚集群可以解决上述问题,分⽚集群特征:
• 集群中有多个master,每个master保存不同数据
• 每个master都可以有多个slave节点
• master之间通过ping监测彼此健康状态
• 客户端请求可以访问集群任意节点,最终都会被转发到正确节点

在这里插入图片描述
Redis会把每⼀个master节点映射到0~16383共16384个插槽 (hash slot)上,查看集群信息时就能看到:
在这里插入图片描述
数据key不是与节点绑定,⽽是与插槽绑定。redis会根据key的有效部分计算插槽值,分两种情况:
Key中包含{},且{}中⾄少包含1个字符,{}中的部分是有效部分
key中不包含{},整个key都是有效部分
例如:key是num,那么就根据num计算,如果是{a}num,则根据a计算。计算⽅式是利⽤CRC16算法得到⼀个hash值,然后对16384取余,得到的结果就是slot值。

cluster failover命令可以⼿动让集群中的某个master宕机,切换到执⾏cluster failover命令的slave节点,实现⽆感知的数据迁移。⼿动的failover⽀持三种不同模式:
• 缺省:默认的流程,如下面的图
不常用下面两个命令:
• force:省略了对offset的⼀致性校验(不管当前节点是否与Master有距离)
• takeover:直接执⾏第5歩,忽略数据⼀致性、忽略master状态和其它master的意⻅
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySql的mvcc原理

目录 一、什么是mvcc? 二、什么是当前读,快照读? 当前读 快照读 三、mvcc实现原理 版本链 undo日志 Undo log 的用途 Read View(读视图) Read View几个属性 五、RR、RC级别下生成时机 一、什么是mvcc? mvcc全称Multi-Version Concurrency Control,即…

Redis小计(2)

目录 1.exists命令 2.del命令 3.expire/pexpire命令 4.ttl命令 5.redis对于key过期的删除策略 1.exists命令 exists X1 X2 X3 X4:返回四个key存在的个数。 2.del命令 del X1 X2:删除key。 3.expire/pexpire命令 给key设置超时时间。 expire key…

63权限提升-Linux脏牛内核漏洞SUID信息收集

今天讲到的方法是suid和内核漏洞 案例一Linux 提权自动化脚本利用-4 个脚本 两个信息收集:LinEnum、linuxprivchecker 两个漏洞探针:linux-exploit-suggester、linux-exploit-suggester2 信息收集有什么用? 信息收集就能判断能否进行s…

基于@media (prefers-color-scheme: [dark|light])的暗黑与亮色主题切换

今天有人反馈使用pdf.js的时候,发现pdf.js阅读器在自己的Mac Book电脑上显示的背景是暗黑色,而别人的电脑上却是白色: 根据这个问题,找到了pdf.js使用的view.css有段代码,类似这样: media (prefers-color-…

图像识别中的 Vision Transformers (ViT)

引言 Vision Transformers (ViT) 最近已成为卷积神经网络(CNN) 的竞争替代品,而卷积神经网络 (CNN) 目前在不同的图像识别计算机视觉任务中处于最先进的水平。ViT 模型在计算效率和准确性方面比当前最先进的 (CNN) 模型高出近 4 倍。 Transformer 模型已成为自然语…

AIDA64制作机箱副屏/性能监控屏, 刷新慢问题

AIDA64制作机箱副屏/性能监控屏, 刷新慢问题 手上有闲置的手机/平板, 非闲置也行, 毕竟也没人边刷手机边打游戏吧AIDA64可以监控大多数参数, 放到一些酷炫的LCD模板上, 通过手机/平板等的浏览器就可访问这个页面, 实现无线监控 在网上找一个AIDA64, 安装文件-设置-LCD找到Rem…

ThunderSearch(闪电搜索器)_网络空间搜索引擎工具_信息收集

文章目录 ThunderSearch简介1 项目地址2 使用方式2.1 配置文件config.json说明2.2 构建和运行 3 使用式例 ThunderSearch简介 ThunderSearch(闪电搜索器)是一款使用多个(【支持Fofa、Shodan、Hunter、Zoomeye、360Quake网络空间搜索引擎】网络空间搜索引…

[C语言]程序练习(一)

你好,这里是争做图书馆扫地僧的小白。 个人主页:争做图书馆扫地僧的小白_-CSDN博客 目标:希望通过学习技术,期待着改变世界。 目录 前言 一、常量练习 (一)整型常量 (二)浮点型常…

linux buffer的回写的触发链路

mark_buffer_dirty中除了会标记dirty到buffer_head->state、page.flag、folio->mapping->i_pages外,还会调用inode所在文件系统的dirty方法(inode->i_sb->s_op->dirty_inode)。然后为inode创建一个它所在memory group的wri…

Oracle研学-查询

学自B站黑马程序员 1.单表查询 //查询水表编号为 30408 的业主记录 select * from T_OWNERS where watermeter30408 //查询业主名称包含“刘”的业主记录 select * from t_owners where name like %刘% //查询业主名称包含“刘”的并且门牌号包含 5 的业主记录 select * from…

Qt 网络编程

QT 网络编程 TCP 编程 模块引入 QT network 头文件 #include <QTcpServer> // TCP服务器端使用 #include <QTcpSocket> // TCP服务器和客户端都使用 编程流程 服务端 1&#xff09;实例化 QTcpServer 对象 -----------------------------> socket 2&#x…

华为防火墙小企业简单应用命令行配置

实现&#xff1a; 1、内网访问外网 2、内网和外网访问dmz区ftp服务器 3、开启ftp的aspf功能 4、开启内网黑洞功能 防火墙配置&#xff1a; interface GigabitEthernet1/0/0 undo shutdown ip address 10.0.0.1 255.255.255.0 service-manage ping permit interface GigabitEth…