【Redis】主从复制分析-使用
Reids 主从复制:
将一台 Redis 服务器的数据, 复制到其他的 Redis 服务器。前者称为主节点 (master), 后者称为从节点 (slave)。
数据的复制是单向的, 只能由主节点到从节点, 同时主节点以写为主 (可写也可以读), 从节点只能读不可写入。
1 主从复制的建立
本文简单的介绍一下如何配置一个 一主两从的 Redis 主从复制集群。
假设
主节点 192.168.0.1, 端口为 6379
从节点 1 192.168.0.2, 端口为 6379
从节点 2 192.168.0.3, 端口为 6379
1.1 方式一: 过配置文件进行配置
- 在 2 个从节点的 redis.conf 文件中追加 slaveof 192.168.0.1(主节点的 IP) 6379(主节点的端口)
- 启动主节点, 再依次启动从节点, 这样一主两从的配置就完成了
1.2 方式二: Redis 启动时指定主节点
- 启动主节点
- 再启动 2 个从节点, 在启动的参数追加: –slaveof 192.168.0.1(主节点的 IP) 6379(主节点的端口), 即 ./redis-server --slaveof 192.168.0.1 6379
1.3 方式三: Redis 运行中指定主节点
- 主从节点都正常的启动
- 在 2 个从节点都执行命令 slaveof 192.168.0.1(主节点的 IP) 6379(主节点的端口)
上面就是 3 种建立主从复制的方式。
建立了连接后, 从节点可以通过 slaveof no one 断开连接, 断开了连接后, 从节点会自动变为主节点。
2 主从复制节点信息查看
主节点连接上从节点, 执行 info replication 就能查看到当前从节点的信息, 大体如下 (截取了主从复制相关的)
# Replication
# 节点角色: 从节点
role:slave
# 主节点的 IP
master_host:192.168.0.1
# 主节点的端口
master_port:8888
# 主节点的连接状态
master_link_status:up
# 主节点最后与从节点的通信时间间隔, 单位秒
master_last_io_seconds_ago:0
# 从节点是否正在全量同步主节点的 RDB 文件
master_sync_in_progress:0
# 复制偏移量
slave_repl_offset:407
# 从节点的优先级
slave_priority:100
# 从节点是否只读, 一般情况从节点都是只读的, 但是也可以通过在配置文件中配置 slave-read-only 或者 config set 强制修改为可写可读
slave_read_only:1
# 连接从节点的个数, Redis 支持从节点后面继续配置从节点
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
同样的, 从节点连上主节点后, 也可以通过 info replication 查看到当前主节点的信息
# 节点角色: 主节点
role:master
# 连接从节点的个数
connected_slaves:2
# 连接从节点的信息
slave0:ip=192.168.0.2,port=6379,state=online,offset=631,lag=0
slave1:ip=192.168.0.3,port=6379,state=online,offset=631,lag=0
# 主节点的偏移量
master_repl_offset:631
# 以下四种信息为主从节点通用的配置
# 复制缓冲区的状态
repl_backlog_active:1
# 复制缓冲区的大小
repl_backlog_size:1048576
# 复制缓冲区起始偏移量, 标识当前缓冲区可用的范围
repl_backlog_first_byte_offset:2
# 标识复制缓冲区已存在的有效数据长度
repl_backlog_histlen:630
3 主从复制的其他配置
# 从节点是否只读,默认为 true
slave-read-only true
# 无盘复制, 默认为 no
# 在全量复制时, 主节点会将自身所有的数据生成为 1 个 RDB 文件, 然后发送给从节点
# 这种发送的方式有 2 种
# 1. 有盘复制: 主节点将 RDB 文件先写入到自己的磁盘, 再发送给从节点
# 2. 无盘复制:主节点直接将 RDB 文件通过 Socket 发送给从节点
# 无盘复制, 在主节点开始传输时, 新进来从节点会先排成队列,等待一段可以配置的时间, 竟可能的等待多个从节点到达, 进行并行传输
repl-diskless-sync no
# 无盘复制, 从节点延迟等待的时间, 默认为 5 秒
repl-diskless-sync-deplay 5
# 从节点向主节点发送心跳的时间间隔, 默认 10 秒
repl-ping-slave-period 10
# yes 主节点将使用更小 tcp 包和更少宽带向从节点发送数据, 但是这个会造成延迟
# no 反过来, 延迟会减少, 但会使用更多的宽带
# 默认为 no
repl-disable-tcp-nodelay no
# 复制的超时时间, 默认为 60 秒
# 使用到的场景
# 1. 从节点同步数据时, 连接主节点超时
# 2. 主节点向从节点发送 ack ping 超时
# 3. 从节点连接主节点超时
repl-timeout 60
# 复制积压缓冲区大小, 默认为 1m
repl-backlog-size 1mb
# 主节点没法连接到从节点超过配置的时间, 复制积压缓冲区数据清掉
repl-backlog-ttl 3600
# 从节点 priority 越低, 有着越高的保证,当主节点挂断的时候, 越有可能成为主节点
slave-priority 100
# 所有从节点的延迟 (lag) 值, 大于或等于 10, 主节点拒绝执行写命令
min-slaves-max-lag 10
# 从节点数量少于 3 个, 主节点拒绝执行写命令
min-slaves-to-write 3
# 当前节点作为从节点, 暴露给主节点的端口, 这个没有配置, 使用当前节点的运行的端口
slave-announce-port 6666
# 当前节点作为从节点, 暴露给主节点的 IP
slave-announce-ip 127.0.0.1
4 主从复制特点
一主多从的特点:
- 主节点挂了, 从节点依然还是从节点, 无法变为主节点
- 主节点挂了, 重启后, 还是为主节点
1.5 参考
原文地址:https://blog.csdn.net/LCN29/article/details/140611683
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!