2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Redis运维和开发学习笔记(5) 主从复制和sentinel哨兵模式

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

时间:2024-01-30 21:41:03

相关推荐

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

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

主从复制

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

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

主从模式的故障恢复

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

哨兵

blog

拓扑结构图

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

复制配置

复制过程

命令:slaveofslaveof 127.0.0.1:6379

保存主节点信息 执行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客户端 flagdb该客户端正在使用的数据库 IDsub已订阅频道的数量psub已订阅模式的数量multi在事务中被执行的命令数量qbuf输入缓冲区总量(字节为单位, 0 表示没有分配查询缓冲区)qbuf-free输入缓冲区剩余容量(字节为单位, 0 表示没有剩余空间)obl输出缓冲区的长度(字节为单位, 0 表示没有分配输出缓冲区)oll输出列表包含的对象数量(当输出缓冲区没有剩余空间时,命令回复会以字符串对象的形式被入队到这个队列里)omem输出缓冲区和输出列表占用的内存总量events文件描述符事件cmd最近一次执行的命令

主从建立socket连接 每秒运行定时任务维护复制逻辑,直到成功;或者slaveof no one取消复制连接失败:Error condition on socket for SYNC:{socket_error_reason} 发送pingmingling 检查主从质检网络套接字是否可用检测主从节点当前是否可接收处理命令日志:Master replied to PING, replication can continue...权限验证

5. 主节点:如果配置了requirepass,就需要认证

6. 从节点:配置相应的masterauth。同步数据集命令持续复制

7. 上面的操作已经把数据同步完了,后面就持续把写命令发送给从库

数据同步

复制偏移量

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

复制积压缓冲区(repl_backlog)

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

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

参数含义

参数信息

主库(info replication)

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

从库(info replication)

127.0.0.1:7004> info replication# Replicationrole:slavemaster_host:127.0.0.1master_port:7001master_link_status:upmaster_last_io_seconds_ago:3master_sync_in_progress:0slave_repl_offset:969350slave_priority:100slave_read_only:1connected_slaves:0master_repl_offset:0repl_backlog_active:0repl_backlog_size:1048576repl_backlog_first_byte_offset:0repl_backlog_histlen:0

主节点运行id

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

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

参数

127.0.0.1:7002> info server# Serverredis_version:3.2.4redis_git_sha1:00000000redis_git_dirty:0redis_build_id:53849fee5fb41517redis_mode:clusteros:Linux 3.10.0-957.1.3.el7.x86_64 x86_64arch_bits:64multiplexing_api:epollgcc_version:4.8.5process_id:24334run_id:698e129042d03211b71e7c3117e37731a3bc5ecatcp_port:7002uptime_in_seconds:700399uptime_in_days:8hz:10lru_clock:4879595executable:/usr/local/redis/3.2/redis-serverconfig_file:/etc/redis.d/redistest_7002.conf

psync(178)

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

总览图

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。