技术标签: linux Redis 数据库 redis 主从复制
主从复制是为了达成高可用
提供数据方:master
接收数据方:slave
需要解决的问题
核心工作
主从复制
主从复制即将master中的数据即时、有效的复制到slave中
一个master可以拥有多个slave,一个slave只对应一个master
职责
master:
slave:
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower) ; 数据的复制是单向的,只能由主节点到从节点。Master以写为主,Slave以读为主。
默认情况下,每台Redis服务器都是主节点 ;
且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
读写分离:主节点写,从节点读,提高服务器的读写负载能力
数据冗余︰主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
故障恢复︰当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复 ; 实际上是一种服务的冗余。
负载均衡︰在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载 ; 尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
高可用(集群)基石︰除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
总述
slave:保存master的地址和端口
master:保存slave的端口
总体:之间创建了socket连接
方式一:客户端发送命令
slaveof <masterip> <masterport>
方式二:启动服务器参数
redis-server -slaveof <masterip> <masterport>
方式三:服务器配置
vim redis.conf
slaveof <masterip> <masterport>
打开redis服务端
redis-server redis_config/redis-6379.conf # 主机
redis-server redis_config/redis-6380.conf # 从机
进入从机
[root@maomao bin]# redis-cli -p 6380
127.0.0.1:6380> slaveof 127.0.0.1 6379
查看主机日志信息
Synchronization with replica 127.0.0.1:6380 succeeded
查看从机日志信息
MASTER <-> REPLICA sync: receiving 361 bytes from master to disk
2125:S 18 Apr 2021 09:27:01.525 * MASTER <-> REPLICA sync: Flushing old data
2125:S 18 Apr 2021 09:27:01.525 * MASTER <-> REPLICA sync: Loading DB in memory
说明主从已经配置完毕
测试
在主节点创建一个key
127.0.0.1:6379> set master maomao
OK
在从节点查看
127.0.0.1:6380> get master
"maomao"
还可以通过 info replication 命令查看
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
在命令行直接连接
[root@maomao bin]# redis-server redis_config/redis-6380.conf --slaveof 127.0.0.1 6379
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
[root@maomao redis_config]# vim redis-6380.conf
添加
slaveof 127.0.0.1 6379
启动redis
[root@maomao bin]# redis-server redis_config/redis-6380.conf
[root@maomao bin]# redis-cli -p 6380
127.0.0.1:6380> get slave
"xiaotian"
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
主从断开连接
客户端发送命令
slaveof no one
slave断开连接后,不会删除已有数据,只是不再接受master发送的数据
在从机上
127.0.0.1:6380> slaveof no one
OK
127.0.0.1:6379> set slave maomao
OK
127.0.0.1:6380> get slave
"xiaotian"
master客户端发送命令设置密码
requirepass <password>
master配置文件设置密码
config set requirepass <password>
config get requirepass
slave客户端发送命令设置密码
auth <password>
slave配置文件设置密码
masterauth <password>
slave启动服务器设置密码
redis-server –a <password>
部分复制就是增量复制
增量复制需要在全量复制成功之后才能执行
状态:
修改复制缓冲区大小
repl-backlog-size 1mb # 默认1mb
为避免slave进行全量复制、部分复制时服务器响应阻塞或数据不同步,建议关闭此期间的对外服务
slave-serve-stale-data yes|no
数据同步阶段,master发送给slave信息可以理解master是slave的一个客户端,主动向slave发送命令
多个slave同时对master请求数据同步,master发送的RDB文件增多,会对带宽造成巨大冲击,如果master带宽不足,因此数据同步需要根据业务需求,适量错峰
slave过多时,建议调整拓扑结构,由一主多从结构变为树状结构,中间的节点既是master,也是slave。注意使用树状结构时,由于层级深度,导致深度越高的slave与最顶层master间数据同步延迟较大,数据一致性变差,应谨慎选择
当master数据库状态被修改后,导致主从服务器数据库状态不一致,此时需要让主从数据同步到一致的状态,同步的动作称为命令传播
master将接收到的数据变更命令发送给slave,slave接收命令后执行命令
主从复制过程大体可以分为3个阶段
info Server
命令,可以查看节点的runid组成
工作原理
set name maomao
以这种格式
$3 \r\n
set \r\n
$4 \r\n
name \r\n
$6 \r\n
maomao \r\n
到复制缓冲区
主从连接之后
offset
但是因为第一次slave发送的是空白。runid
offset
,(全量复制),通过socket发送RDB文件给slaverunid
和offset
,清空当前全部数据,通过socket接收RDB文件,恢复RDB数据offset
相同,则忽略offset
不相同。offset
。offset
的数据进入命令传播阶段候,master与slave间需要进行信息交换,使用心跳机制进行维护,实现双方连接保持在线
master心跳:
slave心跳任务
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=927,lag=1
当slave多数掉线,或延迟过高时,master为保障数据稳定性,将拒绝所有信息同步操作
min-slaves-to-write 2
min-slaves-max-lag 8
slave数量由slave发送REPLCONF ACK命令做确认
slave延迟由slave发送REPLCONF ACK命令做确认
伴随着系统的运行,master的数据量会越来越大,一旦master重启,runid将发生变化,会导致全部slave的全量复制操作
[root@maomao redis_config]# cd /usr/local/redis/data/
[root@maomao data]# ls
6379.log 6380.log appendonly-6379.aof dump-6379.rdb dump.rdb
[root@maomao data]# redis-check-rdb dump-6379.rdb
[offset 0] Checking RDB file dump-6379.rdb
[offset 26] AUX FIELD redis-ver = '6.2.1'
[offset 40] AUX FIELD redis-bits = '64'
[offset 52] AUX FIELD ctime = '1618763025'
[offset 67] AUX FIELD used-mem = '1942304'
[offset 85] AUX FIELD repl-stream-db = '0'
[offset 135] AUX FIELD repl-id = '2d82ff022e405afb883753f4d0c52f8ceb36d740' # runid
[offset 151] AUX FIELD repl-offset = '885' #offset
[offset 167] AUX FIELD aof-preamble = '0'
[offset 169] Selecting DB ID 0
[offset 391] Checksum OK
[offset 391] \o/ RDB looks OK! \o/
[info] 5 keys read
[info] 0 expires
[info] 0 already expired
问题现象
问题原因
最终结果
解决方案
repl-backlog-size
建议设置如下:
repl-timeout
该参数定义了超时时间的阈值(默认60秒),超过该值,释放slave
repl-ping-slave-period
超时时间repl-time的时间至少是ping指令频度的5到10倍,否则slave很容易判定超时
slave-serve-stale-data yes|no
开启后仅响应info、slaveof等少数命令(慎用,除非对数据一致性要求很高)
文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大
文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码
文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版
文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗
文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程
文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0
文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader
文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型
文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写
文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录
文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点
文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文