Linux服务器开发,Reids源码 主从同步与对象模型
────────────────────────────────────────────────────────────────
┌————————————┐
│▉▉♥♥♥♥♥♥♥♥ 99% │ ♥❤ 鱼沈雁杳天涯路,始信人间别离苦。
└————————————┘
对你的感情正在充电中,请稍侯…
────────────────────────────────────────────────────────────────
推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习
────────────────────────────────────────────────────────────────
Reids源码主从同步与对象模型
- 一、持久化,以及持久化选择(重点)
- 1、aof
- aof策略
- 持久化什么内容?持久化的这条命令是协议数据
- 关闭一组redis集群,awk的实际应用
- 具体原理
- aof 缺点
- 2、补救措施 aof-rewrite
- 如何配置aof-rewrite
- aof-rewrite策略
- aof-rewrite缺点
- 3、rdb快照持久化
- rdb的配置
- rdb的策略
- 缺点
- 4、混合持久化
- 混合持久化配置
- 5、应用指导
- 二、主从复制
- 拷贝持久化文件是否安全?
- 节点宕机(redis是内存数据库,宕机数据会丢失)
- 磁盘故障
- redis主从复制解决了单点故障的问题
- 命令:redis-server --replicaof 127.0.0.1 7002
- 数据同步
- 全量数据同步
- 增量数据同步
- 三、哨兵(cap)
- c all nodes see the same data at the same time
- a read and writes always succes
- p in order to model partition tolerance, the network will be allowed to lose arbitrarily many messages sent from one node to another.
- 四、哨兵cluster(重点)
- 一致性算法
- 配置(用到的概率低)
- Codis集群
- 分布式定时器
- cluster集群(去中心化)
- 应用
一、持久化,以及持久化选择(重点)
redis的源码感觉还是要看,但是不是现在看,应该是在自己掌握了linux内核等相关知识后再看。
- appendonly:在文件中附加数据,选项改为yes即可开启aof
1、aof
- 策略怎么选择?
- aof占用逻辑主线程
- 不仅要开启aof,还要选择策略,关闭一些设置
- 我们平时时间循环会先处理读事件再处理写事件,当开启aof后会先处理写事件再处理读事件。为什么这样做呢,Mark老师讲在源码中有个事件调转,因为这样会先读完后做持久化,再处理写事件,最后发送对端。
aof策略
- always:每一个命令
- everysec:每秒钟
持久化什么内容?持久化的这条命令是协议数据
- pidfile:进程写在对应的位置
- logfile:日志存放的位置
- daemonize:yes 表示开启后台
- save “”:表示关闭rdb
- :x :表示保存,类似于wq!
关闭一组redis集群,awk的实际应用
- ps -aux| grep redis-server | awk ‘{print ‘$2’}’ | xargs kill -9
- tail appendonly.aof
具体原理
redis宕机后,将aof记录的命令重新执行命令。
aof 缺点
随着时间的推移,aof会逐渐的累计。重放aof会非常耗时,导致长时间无法对外提供。
2、补救措施 aof-rewrite
感觉有点像服务给做了一个简单的计算,把aof进行瘦身处理。
两个方式开启aof-rewrite:
- 命令的方式:bgrewrite command 输入命令后会立刻fork出一个子进程。当然,前提是要开启aof。
- 配置文件里进行设置。
显然,这种精简的日志只会不断的增加。当fork子进程执行完成后,通过先前创建的管道将精简后的数据通过信号发送到主循环,aof记录的内容将附加到aof-rewarite之后。父记录一些统计状态和指标这个过程有一部分并没有精简,那该怎么办呢?我们继续往下说。
如何配置aof-rewrite
aof-rewrite策略
aof-rewrite缺点
aof复写的数量依然非常大,加载缓慢。
3、rdb快照持久化
rdb是通过fork出子进程,在子进程中将内存当中的数据键值对按照存储方式持久化到rdb文件中;rdb存储说的是经过压缩的二进制数据,是一种更快的方式。
rdb的配置
rdb相比较四种持久化方式非常特殊,所以必须要关闭aof,其他的都需要开启aof。根据内存状态进行持久的。redis下载完后,redis.conf文件默认是开启rdb的。下图的三个save,任意一个达成都会进行持久化。举例来说:“save 3600 1” 意思就是每隔3600秒进行一次修改。
rdb的策略
缺点
这个rdb的策略非常重要,遗漏丢失数据的原因主要和策略有关系。当实际情况无限接近于满足所有rdb策略的情况发生时,数据会发生丢失最大的东西,好吧,说的好有道理,不知道说的是否明白清楚。
4、混合持久化
- aof方式文件大且加载慢但丢失少。
- rdb文件小且加载快但丢失多。
- aof复写的时候持久化的内容是rdb,等持久化后,持久化期间修改的数据以aof的形式附加到文件的尾部。
- 混合持久化是吸取rdb和aof两者优点的持久化方案,实际是在aof复写的基础上进行优化,所以需要开启aof-rewrite。
混合持久化配置
5、应用指导
- 通常redis不开启持久化,只缓存热点数据,数据来源于mysql。若某些数据经常访问需要开启持久化,此时可以选择rdb持久化方案,允许丢失一段时间数据。
- 对数据要求可靠性较高,在机器性能,内存也安全(fork 写时复制 最差的情况下 96G)的情况下,可以让redis同时开启aof和rdb。值得注意额时,此时并不是混合持久化。redis重启优先从aof数据加载,理论上aof包含更多的最新数据;如果只开启一种,那么使用混合持久化。
- 在允许丢失的情况下,亦可采用主redis不持久化(96G 90G),从持久化。
- 伪装从库。
二、主从复制
拷贝持久化文件是否安全?
是安全的。持久化文件一旦被创建,就不会进行任何修改。当服务器创建新持久化文件时,它先将文件的内容保存到一个临时文件里面,当临时文件写入完毕时,程序才使用renanem(2)原子地用临时文件替换原来的持久化文件。
数据安全要考虑以下两个方面:
节点宕机(redis是内存数据库,宕机数据会丢失)
磁盘故障
- 创建一个定期任务(cron job),每小时将一个RDB文件备份到一个文件夹,并且每天将一个RDB文件备份到另一个文件夹。
- 确保快照的备份都带有相应的日期和时间信息,每次执行定期任务脚本时,使用find命令来删除过期的快照:比如说,可以保留48小时内的每小时快照,还可以保留最近一两个月的每日快照。
- 至少每天一次,将RDB备份到阁下的书库中心之外,或者至少是备份到阁下运行的redis服务器的物理机器之外。
redis主从复制解决了单点故障的问题
命令:redis-server --replicaof 127.0.0.1 7002
意思是把7002的redis作为一个主redis数据库
数据同步
全量数据同步
- 从先连接主,后发送ping命令保证主未阻塞。
- 就算主采用aof持久化,也会通过rdb去同步数据到从。主从都是通过rdb的方式进行同步。
增量数据同步
- 从发送数据到主,当网路抖动时,允许有主从数据间并非实时同步,故引入环形缓冲区的概念。主将抖动数据写入主的环形缓冲区,而从记录偏移值,与主比较,核对是否发生偏移,如果在环形缓冲区就就去主拿到数据。
- runid的作用:仅仅通过ip:port这种方式记录主从关系有所欠缺,而runid时master的唯一标识,从去确认谁时主。
- 环形缓冲区的大小为2的64次方,可以放心用5000年,所以不会出现回绕的低级错误。
三、哨兵(cap)
高可用有两个衡量值:响应时间和功能上的缺失。
c all nodes see the same data at the same time
- 强一致性(效率非常低,工匠精神应该去研究)
- 最终一致性(redis,mysql)
a read and writes always succes
- 合理时间内返回合理的值
什么是合理的时间发回合理的值?
个人理解是当主发生宕机,从可以快速接替成为主。整个redis系统在非常短的时间内能返回一个正确的值,而非一个空值。
p in order to model partition tolerance, the network will be allowed to lose arbitrarily many messages sent from one node to another.
当网络分区故障时仍然能够提供一致性或可用的服务。一般都会先考虑p,再考虑a c。
四、哨兵cluster(重点)
期望所有的从都同意选举结果再返回,但是raft算法认为半数通过就可以返回。
clent客户端先访问哨兵集群,拿到主redis的信息。当主redis发生宕机后,client客户端就会再次访问哨兵集群,而哨兵集群通过选举会再次告诉client客户端主正常的redis的信息
因为redis集群采用最终一致性原则,所以主从redis之间的数据会有差异,哨兵系统根据各个从数据库的偏移值进行推荐新的主redis,偏移值越大说明该redis的值越新。
一致性算法
- paxos zk(比较难看懂,可以研究)
- raft (后端开发必须掌握的)
配置(用到的概率低)
Codis集群
分布式定时器
cluster集群(去中心化)
从任意节点出发,通过key去算槽位找真实节点。
应用
- redis-cli -c :表示以cluster的方式启动
- cluster info:查看集群信息
- cluster nodes:查看节点信息
- 因为redis是异步的,从数据库不认为自己数据是最新的,所以会跳转到主数据库拿数据。
Linux服务器开发,Reids源码 主从同步与对象模型相关推荐
- Linux驱动开发 / fbtft源码速读
哈喽,老吴又来分享学习心得啦~ 一.目标与体系 目标是关于你想要达到的结果,而体系是涉及导致这些结果的过程; 目标的意义在于确定大方向,但体系才能促进进步.完全忽略目标,只关注体系,仍然会成功. 结果 ...
- 《深度解析Java游戏服务器开发》源码
不知什么原因,出售的<深度解析Java游戏服务器开发>一书中,没有给出源码,这里补上,源码已经上传至github: https://github.com/hjcenry/JavaServe ...
- Linux驱动开发(源码精析)
内核基本框架 应用层使用系统调用接口,进入内核子系统时间某种功能,内核子系统与硬件直接就是驱动.驱动根据需求不同会引用各个子系统. 驱动分为三种:字符设备驱动(硬件的读写以字节为单位)如串口.块设备驱 ...
- C/C++Linux服务器开发高级架构师/Linux后台开发架构师丨高级进阶学习
01 课程介绍 [录播]课程介绍(66分钟) 免费试学 [录播]磁盘存储链式的B树与B+树(131分钟) 免费试学 免费学习视频链接点击:C/C++Linux服务器开发高级架构师/Linux后台架构师 ...
- 【零声教育】C/C++Linux服务器开发/高级架构师 课程
随着去年年底的疫情,很多线下的学习都变成了网课的形式,各种付费学习也萌生出来,很多决定要报名付费网课例如零声学院C/C++linux后台服务器高级架构师的程序员,报名之前总会问我这样一个问题,除了视频 ...
- 解析Linux内核源码中数据同步问题丨C++后端开发丨Linux服务器开发丨Linux内核开发丨驱动开发丨嵌入式开发丨内核操作系统
剖析Linux内核源码数据同步 1.pdflush机制原理 2.超级块同步/inode同步 3.拥塞及强制回写技术 视频讲解如下,点击观看: 解析Linux内核源码中数据同步问题丨C++后端开发丨Li ...
- Nginx源码实现的细枝末节 11个阶段的实现丨Nginx Filter|中间件开发|惊群效应|负载均衡丨组件丨c/c++linux服务器开发
Nginx源码实现的细枝末节 11个阶段的实现 视频讲解如下,点击观看: Nginx源码实现的细枝末节 11个阶段的实现丨Nginx Filter|中间件开发|惊群效应|负载均衡丨组件丨c/c++li ...
- Nginx源码从模块开发入手,3个项目弄透nginx模块开发丨Linux服务器开发丨C++后端开发丨中间件开发丨分布式丨web服务器
Nginx源码从模块开发入手,3个项目弄透nginx模块开发 1. Nginx http请求的11个处理流程 2. Upstream, Filter,Handler模块分析 3. nginx如何拒绝无 ...
- 详解5种红黑树的场景,从Linux内核谈到Nginx源码,听完醍醐灌顶丨Linux服务器开发丨Linux后端开发
5种红黑树的场景,从Linux内核谈到Nginx源码,听完醍醐灌顶 1. 进程调度CFS的红黑树场景 2. 虚拟内存管理的红黑树场景 3. 共享内存slab的红黑树场景 视频讲解如下,点击观看: [干 ...
最新文章
- 各种注意力机制PyTorch实现
- kudu大量数据更新_Apache Kudu又更新?1.4版改进了Web界面
- 记录某段程序的运行时间
- python----1
- 未来的计算机作文500字,穿越到未来作文500字
- PW Live直播 | 清华大学NLP组刘正皓:神经信息检索的进展与挑战
- RAID信息存放位置!
- python将csv一行保存一个txt_Python读写文件(csv、txt、excel)
- 外部函数能修改闭包内的变量_Python函数式编程,Python闭包
- 操作系统 —— 课程概述
- [转载] pip快速下载python包
- MySQL 5.7 自带的四个数据库 介绍
- Android自定义控件之TextView
- oracle 创建表格乱码,数据库导出excel表格是乱码怎么办-oracle 导出excel 乱码怎么办...
- Franz Mandl, Graham Shaw《Quantum Field Theory (2nd)》(弗兰兹·曼德尔, 格雷厄姆·肖《量子场论(第二版)》)中文目录
- 富媒体广告投放的一些经验
- GSM网络识别参数-移动国家号(MCC)|移动网号(MNC)|位置区码(LAC)|小区识别(CI/cellid)...
- Pyton 中eval 函数的用法总结
- 阿里天池工业蒸汽量预测baseline-数据探索篇
- React中antd日期选择框,指定区间禁用时间