redis主从架构

#三个节点,一主,二从(由于资源有限,在一台机器上实现),主节点写,从节点读
#1:创建目录
[root@redis opt]# mkdir {7001..7003}
[root@redis opt]# ls
7001  7002  7003
#2:准备配置文件
[root@redis redis-6.2.7]# echo /opt/{7001..7003}/ | xargs -t -n 1 cp ./redis.conf
cp ./redis.conf /opt/7001/
cp ./redis.conf /opt/7002/
cp ./redis.conf /opt/7003/
#3:修改配置文件
#修改端口和存放目录
[root@redis redis-6.2.7]# sed -i -e 's/6379/7001/g' -e 's/dir .\//dir \/opt\/7001\//g' /opt/7001/redis.conf
[root@redis redis-6.2.7]# sed -i -e 's/6379/7002/g' -e 's/dir .\//dir \/opt\/7002\//g' /opt/7001/redis.conf
[root@redis redis-6.2.7]# sed -i -e 's/6379/7003/g' -e 's/dir .\//dir \/opt\/7003\//g' /opt/7001/redis.conf
#修改绑定IP
[root@redis redis-6.2.7]# sed -i '1a replica-announce-ip 192.168.115.129' /opt/7001/redis.conf
[root@redis redis-6.2.7]# sed -i '1a replica-announce-ip 192.168.115.129' /opt/7002/redis.conf
[root@redis redis-6.2.7]# sed -i '1a replica-announce-ip 192.168.115.129' /opt/7003/redis.conf
#4:启动三个redis实例
[root@redis redis-6.2.7]# redis-server /opt/7001/redis.conf
[root@redis redis-6.2.7]# redis-server /opt/7002/redis.conf
[root@redis redis-6.2.7]# redis-server /opt/7003/redis.conf
#5:开启主从模式
#永久生效--修改配置文件
#临时生产,运行redis-cli客户端,输入slaveof | replicaof[5.0添加] <masterip> <masterport>
#使用临时进行配置
[root@redis opt]# redis-cli -p 7002
127.0.0.1:7002> SLAVEOF 192.168.115.129 7001
OK
[root@redis opt]# redis-cli -p 7003
127.0.0.1:7003> replicaof 192.168.115.129 7001
OK
#6:查看配置信息
127.0.0.1:7001> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.115.129,port=7003,state=online,offset=42,lag=1
slave1:ip=192.168.115.129,port=7002,state=online,offset=42,lag=0
master_failover_state:no-failover
master_replid:cfb5b6ff626956f4d77188601634b5004a114d88
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:42
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:42
#7:测试
127.0.0.1:7001> set num 123
OK
127.0.0.1:7001> get num
"123"
127.0.0.1:7001> exit
[root@redis opt]# redis-cli -p 7002
127.0.0.1:7002> get num
"123"
主从同步原理
master如何判断slave是不是第一次同步数据?
#1:Replication Id:简称replid是数据集的标记,id一致说明是同一数据集,每个master都有唯一的replid,slave会继承master节点的replid。
#2:offset:偏移量,随着记录在repl_backlog中的数据增多而逐渐增大,slave完成同步时也会记录当前同步的offset,如果slave的offset小于master的offset,说明slave数据落后master,需要更新。
主从同步流程
1.slave节点请求增量同步
2.master节点判断replid,发现不一致,拒绝增量同步
3.master节点执行bgsave保存当前完整内存生成RDB,发送RDB到slave
4.slave清空本地数据,加载master的RDB
5.master将生成RDB期间的命令记录在repl_backlog,并持续将log中命令发送至slave
6.salve执行接收到的命令,保持与master之前的同步
优化主从同步
1.master中配置repl-diskless-sync yes启用无磁盘读写,避免全量同步时的磁盘IO
2.Redis单节点上的内存占用不要太大,减少RDB导致的过多磁盘IO
3.适当提高repl_backlog的大小,发现slave宕机时尽快实现故障恢复,尽可能避免全量同步
4.限制一个master上的slave节点数量,如果实在是太多slave,则可以采用主-从-从链式结构
全量同步和增量同步
全量同步:master将完整内存数据生成RDB,发送RDB给slave,后续命令则记录在repl_backlog,逐个发送给slave
增量同步:slave提交自己的offset到master,master获取repl_backlog中从offset之后的命令给slave什么时候执行全量同步?
1.slave节点第一次连接master节点时
2.slave节点断开时间太久,repl_backlog中的offset已被覆盖时
什么时候执行增量备份?
1.slave节点断开又恢复,并且在repl_backlog中能找到offset时

Linux学习-redis主从架构相关推荐

  1. Linux学习——redis主从配置(带密码)

    redis一主二从配置(带密码) 找了很多redis主从配置教程发现大多数都是没密码的配置,而正式服务器中,为了安全redis通常都会设置密码,正好学到这,下面分享我自己学习中对于redis主从配置的 ...

  2. 【带你重拾Redis】Redis 主从架构

    Redis 主从架构 单机的 Redis,能够承载的 QPS 大概就在上万到几万不等.对于缓存来说,一般都是用来支撑读高并发的.因此架构做成主从(master-slave)架构,一主多从,主负责写,并 ...

  3. Redis面试 - Redis 主从架构

    Redis 主从架构 单机的 redis,能够承载的 QPS 大概就在上万到几万不等.对于缓存来说,一般都是用来支撑读高并发的.因此架构做成主从(master-slave)架构,一主多从,主负责写,并 ...

  4. Redis 主从架构数据同步

    Redis 主从架构图 主从架构能够很大提升并发能力,master 节点负责写数据,slave 节点负责读数据,这样就涉及到 master 和 slave 数据同步的一个过程 一起来看一下数据是如何同 ...

  5. Redis主从架构:主从同步和哨兵机制

    Redis主从架构:主从同步和哨兵机制 一. Redis主从架构 二. 主从同步 2.1 引入 2.2 原理 (1) 全量同步 (2) 增量同步 (3) 优化Redis主从集群 2.3 总结 三. 哨 ...

  6. 【Redis】Redis主从架构和哨兵模式

    文章目录 主从架构 为什么需要Redis主从架构? 搭建主从架构(一主二从) 主从一致原理 复制积压缓冲区 全量复制 增量复制 在主从架构中出现了宕机的情况 为什么主从库之间的复制不使用 AOF? 哨 ...

  7. Redis深入理解五 :Redis主从架构、哨兵架构、高可用集群模式

    redis主从架构 redis主从架构搭建,配置从节点步骤: 复制一份redis.conf文件 将相关配置修改为如下值: port 6380 pidfile /var/run/redis_6380.p ...

  8. redis主从架构(上)

    1.redis概述 redis的出现时间并不长,是NoSQL中的一种,基于键-值型的存储,与memcache类似,但是memcache中只是内存的缓存,而redis不仅是内存中的缓存,还提供持久存储, ...

  9. 那一天,我被Redis主从架构支配的恐惧

    面试官:要不你来讲讲你最近在看的点呗?可以拉出来一起讨论下(今天我也不知道要问什么) 候选者:最近在看「Redis」相关的内容 面试官:嗯,我记得已经问过Redis的基础和持久化了 面试官:要不你来讲 ...

最新文章

  1. Android:ViewPager为页卡内视图组件添加事件
  2. linux执行数据库的命令,实验-shell执行数据库命令.TXT
  3. Codeforces Round #331 (Div. 2) A. Wilbur and Swimming Pool 水题
  4. JavaScript判断页面当前浏览设备为移动端还是PC端,实现自动加载对应端页面
  5. java文件处理之压缩,分割
  6. 论文浅尝 | 基于知识库的神经网络问题生成方法
  7. Python回文判断代码优化与6个思考题
  8. C程序设计语言现代方法05:选择语句
  9. 【操作系统/OS笔记09】线程、线程的实现、上下文切换、进程控制
  10. SnagIt9.0过了适用期,弹出关于的窗口解决办法
  11. matlab输电线路模型,输电线路模型及其特性.ppt
  12. zabbix三种常用报警方式:邮件、微信和短信报警
  13. CC2530外部中断控制LED灯开关
  14. 使用zoom实现低成本企业视频会议解决方案
  15. 蚂蚁金服推出区块链服务应用,用于跟踪稻米质量
  16. 编程到底学的是什么,主次又是什么
  17. acwing 3496. 特殊年份(蓝桥杯)
  18. narak 靶机实验实战演练
  19. C语言练习题——函数
  20. 使用YOLOv5实现多路摄像头实时目标检测

热门文章

  1. 【总结】pick定理Farey序列
  2. 红旗linux怎么升级,[原]使用yum更新红旗Linux
  3. 六管SRAM存储单元之理解记录
  4. 基于Springboot+vue实现前后端分离二手图书交易
  5. 关于新浪微信瘦身的问题
  6. (改进GM(1,1)模型)灰色残差马尔科夫预测模型的matlab实现
  7. 灰色马尔科夫链matlab,基于灰色-马尔科夫模型的电力功率预测
  8. Java珠穆朗玛峰案例
  9. JS 面向对象
  10. 1213:八皇后问题1700:八皇后问题