Redis运维和开发学习笔记(5) 主从复制和sentinel哨兵模式

主从复制

将主节点的数据改变同步给从节点

  • 作用

    1. 备份数据
    2. 读写分离
  • 存在的问题:
    1. 手动干预切主等操作
    2. 主节点的写能力受到单机限制
    3. 主节点的存储能力受到单机限制

主从模式的故障恢复

  1. 当主节点发生故障时,客户端连接主节点失败,两个从节点和主连接失败
  2. (人工)选取一个从节点slaveof no one使其成为新的主节点
  3. 更新应用方信息,重启
  4. 让另一个从节点连接新主
  5. 原来的主恢复作为从,去连接新主

哨兵

blog

拓扑结构图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qDHbOoMx-1572053628652)(media/15653345582593/%206.2%20%E6%8B%93%E6%89%91%EF%BC%88171%EF%BC%89.png)]

复制配置

复制过程

命令:slaveof slaveof 127.0.0.1:6379

  1. 保存主节点信息

    • 执行slaveof后会打印日志
id=38 addr=127.0.0.1:47458 fd=6 name= age=2700 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
参数  含义
id  客户端连接的唯一标识,这个id是随着Redis的连接自增的,重启Redis后会重置为0。
addr    客户端的地址和端口
fd  套接字所使用的文件描述符
age 以秒计算的已连接时长
idle    以秒计算的空闲时长看, age=idle时则此链接为空连接
flags   客户端 flag
db  该客户端正在使用的数据库 ID
sub 已订阅频道的数量
psub    已订阅模式的数量
multi   在事务中被执行的命令数量
qbuf    输入缓冲区总量(字节为单位, 0 表示没有分配查询缓冲区)
qbuf-free   输入缓冲区剩余容量(字节为单位, 0 表示没有剩余空间)
obl 输出缓冲区的长度(字节为单位, 0 表示没有分配输出缓冲区)
oll 输出列表包含的对象数量(当输出缓冲区没有剩余空间时,命令回复会以字符串对象的形式被入队到这个队列里)
omem    输出缓冲区和输出列表占用的内存总量
events  文件描述符事件
cmd 最近一次执行的命令
  1. 主从建立socket连接

    • 每秒运行定时任务维护复制逻辑,直到成功;或者slaveof no one取消复制
    • 连接失败:Error condition on socket for SYNC:{socket_error_reason}
  2. 发送pingmingling
    1. 检查主从质检网络套接字是否可用
    2. 检测主从节点当前是否可接收处理命令
    3. 日志:Master replied to PING, replication can continue...
  3. 权限验证
    5. 主节点:如果配置了requirepass,就需要认证
    6. 从节点:配置相应的masterauth。
  4. 同步数据集
  5. 命令持续复制
    7. 上面的操作已经把数据同步完了,后面就持续把写命令发送给从库

数据同步

复制偏移量

  • 主节点在处理完毕写入命令之后,会把命令的字节长度做累加记录,统计信息在master_repl_offset
  • 对比主从节点的复制偏移量,判断是否数据一致

复制积压缓冲区(repl_backlog)

  • 保存在主节点上的一个固定长度的队列,默认为1M

  • 保存最近已复制的数据,用于部分复制和复制命令丢失的数据补救

  • 参数含义

    repl_backlog_active:1 开启复制缓冲区
    repl_backlog_size:1048576 缓冲区最大长度
    repl_backlog_first_byte_offset:2 起始偏移量,计算当前缓冲区 可用范围
    repl_backlog_histlen:969335 已保存数据的有效长度

参数信息

主库(info replication)

 127.0.0.1:7001> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=7004,state=online,offset=969336,lag=1
master_repl_offset:969336
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:969335

从库(info replication)

127.0.0.1:7004> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:7001
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:969350
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

主节点运行id

节点启动后动态分配的ID,用于唯一识别节点,ID变更后会发生全量复制

重启后会改变,需要使用debug reload命令重启并保持ID不变(命令会阻塞当前节点主线程),阻塞期间先生成rdb快照,并清空数据后再加载rdb文件。对于大数据量的主节点和无法容忍阻塞的应用场景慎用

  • 参数
127.0.0.1:7002> info server
# Server
redis_version:3.2.4
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:53849fee5fb41517
redis_mode:cluster
os:Linux 3.10.0-957.1.3.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.5
process_id:24334
run_id:698e129042d03211b71e7c3117e37731a3bc5eca
tcp_port:7002
uptime_in_seconds:700399
uptime_in_days:8
hz:10
lru_clock:4879595
executable:/usr/local/redis/3.2/redis-server
config_file:/etc/redis.d/redistest_7002.conf

psync(178)

  • 从节点使用psync命令完成部分复制和全量复制功能。

总览图

Redis运维和开发学习笔记(5) 主从复制和sentinel哨兵模式相关推荐

  1. Redis运维和开发学习笔记-全书思维导图

    Redis运维和开发学习笔记-全书思维导图 图片过大,无法上传. 链接:https://pan.baidu.com/s/13pnEMBEdLgjZNOOEAuDvEQ 密码:qhch

  2. Redis运维和开发学习笔记(7) 内存管理和过期策略

    Redis运维和开发学习笔记(7) 内存管理和过期策略 文章目录 Redis运维和开发学习笔记(7) 内存管理和过期策略 内存回收策略 惰性删除 定时任务删除 maxmemory 过期策略allkey ...

  3. Redis运维和开发学习笔记(6) 监控Redis工作状态-info命令

    Redis运维和开发学习笔记(6) 监控Redis工作状态-info命令 文章目录 Redis运维和开发学习笔记(6) 监控Redis工作状态-info命令 info server info clie ...

  4. Redis运维和开发学习笔记(4) Redis参数意义

    Redis运维和开发学习笔记(4) Redis参数意义 文章目录 Redis运维和开发学习笔记(4) Redis参数意义 参数意义 参数意义 Client连接 问题 id=567800790 addr ...

  5. Redis运维和开发学习笔记(2) redis持久化

    Redis运维和开发学习笔记(2) redis持久化 文章目录 Redis运维和开发学习笔记(2) redis持久化 持久化 持久化方式一:RDB 触发~~的三种~~方式 1. save命令 2. b ...

  6. Redis运维和开发学习笔记(3)redis搭建集群

    Redis运维和开发学习笔记(3)redis搭建集群 文章目录 Redis运维和开发学习笔记(3)redis搭建集群 Redis集群搭建 Redis集群搭建 cp /etc/redis.d/redis ...

  7. Redis运维和开发学习笔记(1) Redis简介

    文章目录 Redis的特性 速度快 持久化 多种数据结构 主从复制 高可用和分布式 典型的应用场景 Redis启动和可执行文件 Redis可执行文件说明 启动方式 验证redis redis常用配置 ...

  8. Redis运维和开发学习目录

    Redis运维和开发学习笔记-全书思维导图 Redis运维和开发学习笔记(1) Redis简介 Redis运维和开发学习笔记(2) redis持久化 Redis运维和开发学习笔记(3)redis搭建集 ...

  9. Web Services 应用开发学习笔记(三):XML模式定义

    本文内容: 1.  命名空间 2.  Schema概述 3.  Schema文档结构 4.  Schema数据类型 5.  Schema元素声明 6.  Schema属性声明 7.  模式重用     ...

最新文章

  1. webuploader自己造的坑
  2. Digital Realty计划在德克萨斯州建设三层数据中心
  3. java后台访问接口
  4. HtmlString类创建HTML Hepler 扩展MVC TextBox组件
  5. 090_HTMLCollection和NodeList对象
  6. Codeforces Round #552 (Div. 3)D、E题解
  7. 多学科可行法matlab,微小卫星多学科建模与仿真方法研究
  8. 《程序员》2014年11月刊:电商峰值系统架构设计
  9. 统计学习方法六:支持向量机三(支持向量定量理解和算法总结)
  10. Django的virtualenv环境搭建
  11. 软件one pin错误是啥意思_理想ONE,从交车就开始道歉,是有礼貌的新势力
  12. lr压测mysql数据库_MySQL数据库性能测试的方法
  13. 第一百六十四节,jQuery,常规选择器
  14. 单元测试的必要性 从bug修复 费用成本和时间成本综合考虑
  15. 【软考 系统架构设计师】案例分析① 解题技巧
  16. MySQL数据库基础理论
  17. php dwg转pdf文件怎么打开,CAD转PDF怎么转为黑白的PDF文件
  18. 中国十大会计师事务所排名公布!刚刚,中注协正式通知!
  19. PCB板材的基础知识
  20. 根据房间号提取直播源

热门文章

  1. HTML基础知识(常见元素、列表、链接元素、图片元素)
  2. 洛谷 P3835: 【模板】可持久化平衡树
  3. Linux系统之TroubleShooting(启动故障排除)
  4. 前端 ---jQuery的补充
  5. node源码详解(五)
  6. 运行在TQ2440开发板上以及X86平台上的linux内核编译
  7. linux下查看进度命令,在Linux系统中使用Coreutils Viewer显示命令运行进度
  8. mysql数据库工程师网易微专业_网易MySQL数据库工程师微专业学习笔记(五)
  9. python笔记全_Python笔记
  10. c++builder提高批量动态创建panel的速度_骑行时影响速度的事项有哪些 怎样有效提高骑行速度 单车租赁信息...