Redis3/5---主从复制
程序员文章站
2022-03-27 13:07:14
Redis主从复制。...
1.基础概念
什么是主从复制?
为什么要主从复制?
- redis-server单点故障
- 单节点QPS有限
主从复制应用场景
- 读写分离场景,规避redis单机瓶颈
- 故障切换,master出问题后还有slave节点可以使用
2.主从复制搭建流程
(1)搭建主从复制
主
Redis Server以普通模式
启动。
启动从服务器
的方式:
- 第一种方式:命令行
#测试的时候可以先清空服务器上的数据,防止数据不一致
flushdb
#连接需要实现从节点的redis,执行下面的命令:
#数据从[ip] [port]复制
127.0.0.1:6380>slaveof [ip] [port]
- 第二种方式:redis.conf配置文件
#配置文件中增加
slaveof [ip] [port]
或者replicaof [ip] [port]
#从服务器是否只读(默认 yes)
slave-read-only yes
- 退出主从集群的方式
salveof on one
(2)检查主从复制
[root@localhost redis]# /usr/local/redis/bin/redis-cli -p 6380 info Replication
#或者
127.0.0.1:6380>#info replaction
【主从复制测试】
#主从服务器开启监控状态,查看信息
#打印Redis收到的每条状态。
monitor
- 客户端通过info replaction实现: set命令,去找主服务器;get命令找从服务器。从而实现读写分离。
3.概念
(1)主从复制流程
- 从服务器通过psync命令发送服务器已有的同步进度(同步源ID、同步进度offset)
- master收到请求,同步源为当前master,则根据偏移量增量同步。
- 同步源非当前master,则进入全量同步:master生产rdb,传输到slave,加载到slave内存
【增量
:把命令转发过来;全量
:把内存所有信息转发过来】
(2)主从复制核心知识
- Redis默认使用异步复制,slave和master之间异步地确认处理的数据量
- 一个master可以拥有多个slave
- slave可以接受其他slave的连接。slave可以有下级sub slave
- 主从同步过程在master侧是非阻塞的
- slave初次同步需要删除旧数据,加载新数据,会阻塞到来的连接请求。
(3)主从复制应用场景
- 主从复制可以用来支持读写分离
- slave服务器设定为只读,可以用在数据安全的场景下。
- 可以使用主从复制来避免master持久化造成的开销。master关闭持久化,slave配置为不定期保存或启用AOF。
(注意:重新启动master程序将从一个空数据集开始,如果一个slave试图与它同步,那么这个slave也会被清空。)
(4)主从复制注意事项
注意事项 | 内容 |
---|---|
读写分离场景 | 数据复制延迟时导致读到过期数据或者读不到数据(网络原因、slave阻塞)。从节点故障(多个client如何迁移)。 |
全量复制情况下 | 第一次建立主从关系或者runid不匹配会导致全量复制。 故障转移的时候也会出现全量复制。 |
(全量)复制风暴 | master故障重启,如果slave节点较多,所有slave都要复制,对服务器的性能、网络压力都有很大影响。一个机器部署了多个master。 |
写能力有限 | 主从复制还是只有一台master,提供的写服务能力 |
master故障清空下 | 如果master无持久化,slave开启持久化来保留数据的场景,建议不要配置redis自动重启。;启动redis自动重启,master启动后,无备数据,可能导致集群数据丢失的情况。 |
带有效期的key | slave不会让key过期,而是等待master让key过期。 在Lua脚本执行期间,不执行任何key过期操作。 |
【master出现故障解决方案】
- 主从切换:原来做持久化保存数据的从服务器,变成主服务器;原来的主服务器,变成从服务器。
- 不改变原来的主从关系,将从服务器上的数据复制到主服务器。
本文地址:https://blog.csdn.net/a954553391/article/details/107401521
上一篇: matplotlib绘图
下一篇: pandas的apply中的x到底是什么