redis主从复制info replication
Posted Natcret
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis主从复制info replication相关的知识,希望对你有一定的参考价值。
info replication讲解
主节点
127.0.0.1:6379> info replication
# Replication
# 角色
role:master
# 从节点的连接数
connected_slaves:2
# 从节点详细信息 IP PORT 状态 命令(单位:字节长度)偏移量 延迟秒数
# 主节点每次处理完写操作,会把命令的字节长度累加到master_repl_offset中。
# 从节点在接收到主节点发送的命令后,会累加记录子什么偏移量信息slave_repl_offset,同时,也会每秒钟上报自身的复制偏移量到主节点,以供主节点记录存储。
# 在实际应用中,可以通过对比主从复制偏移量信息来监控主从复制健康状况。
slave0:ip=192.168.10.102,port=6379,state=online,offset=23866,lag=0
slave1:ip=192.168.10.103,port=6379,state=online,offset=23866,lag=0
# master启动时生成的40位16进制的随机字符串,用来标识master节点
master_replid:acc2aaa1f0bb0fd79d7d3302f16bddcbe4add423
master_replid2:0000000000000000000000000000000000000000
# master 命令(单位:字节长度)已写入的偏移量
master_repl_offset:23866
second_repl_offset:-1
# 0/1:关闭/开启复制积压缓冲区标志(2.8+),主要用于增量复制及丢失命令补救
repl_backlog_active:1
# 缓冲区最大长度,默认 1M
repl_backlog_size:1048576
# 缓冲区起始偏移量
repl_backlog_first_byte_offset:1
# 缓冲区已存储的数据长度
repl_backlog_histlen:23866
从节点
127.0.0.1:6379> info replication
# Replication
# 角色
role:slave
# 主节点详细信息
master_host:192.168.10.101
master_port:6379
# slave端可查看它与master之间同步状态,当复制断开后表示down
master_link_status:up
# 主库多少秒未发送数据到从库
master_last_io_seconds_ago:1
# 从服务器是否在与主服务器进行同步 0否/1是
master_sync_in_progress:0
# slave复制命令(单位:字节长度)偏移量
slave_repl_offset:24076
# 选举时,成为主节点的优先级,数字越大优先级越高,0 永远不会成为主节点
slave_priority:100
# 从库是否设置只读,0读写/1只读
slave_read_only:1
# 连接的slave实例个数
connected_slaves:0
# master启动时生成的40位16进制的随机字符串,用来标识master节点
master_replid:acc2aaa1f0bb0fd79d7d3302f16bddcbe4add423
# slave切换master之后,会生成了自己的master标识,之前的master节点的标识存到了master_replid2的位置
master_replid2:0000000000000000000000000000000000000000
# master 命令(单位:字节长度)已写入的偏移量
master_repl_offset:24076
# 主从切换时记录主节点的命令偏移量+1,为了避免全量复制
second_repl_offset:-1
# 0/1:关闭/开启复制积压缓冲区标志(2.8+),主要用于增量复制及丢失命令补救
repl_backlog_active:1
# 缓冲区最大长度,默认 1M
repl_backlog_size:1048576
# 缓冲区起始偏移量
repl_backlog_first_byte_offset:1
# 缓冲区已存储的数据长度
repl_backlog_histlen:24076
日志查看
tail -f -n 1000 /usr/local/redis/log/redis.log
# 准备就绪,接受客户端连接
* Ready to accept connections
# 102 从节点发起 SYNC 请求
* Replica 192.168.10.102:6379 asks for synchronization
# 全量
# 从节点发起全量复制请求
* Full resync requested by replica 192.168.10.102:6379
# 创建 repl_backlog 文件及生成 master_replid
* Replication backlog created, my new replication IDs are \'acc2aaa1f0bb0fd79d7d3302f16bddcbe4add423\' and \'0000000000000000000000000000000000000000\'
# 通过 BGSAVE 指令将数据写入磁盘(RBD操作)
* Starting BGSAVE for SYNC with target: disk
# 开启一个子守护进程执行写入
* Background saving started by pid 1377
# 数据已写入磁盘
* DB saved on disk
# 有 4MB 数据已写入磁盘
* RDB: 4 MB of memory used by copy-on-write
# 保存结束
* Background saving terminated with success
# 从节点同步数据结束
* Synchronization with replica 192.168.10.102:6379 succeeded
# 103 从节点发起 SYNC 请求,执行同步数据操作
* Replica 192.168.10.103:6379 asks for synchronization
# 从节点发起全量复制请求
* Full resync requested by replica 192.168.10.103:6379
# 增量
# 当前一个客户端连接,执行了两个复制
1 clients connected (2 replicas), 1955144 bytes in use
复制流程
Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据是否是全量分为全量同步和增量同步
主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。
全量同步
- Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份
- 从服务器连接主服务器,发送SYNC命令;
- 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;
- 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;
- 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;
- 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
- 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令
以上是关于redis主从复制info replication的主要内容,如果未能解决你的问题,请参考以下文章