Redis 复制
复制时将一台服务器的数据复制到其他一台或者多台服务器上的过程,复制用于解决单节点故障问题,或者满足负载均衡的需求
一旦建立复制立马会出现两种角色,每个从节点只能有一个主节点,而一个主节点不一定只有一个从节点
M: 主服务器 S: 从服务器
Redis 配置方式
1) 在运行服务器变为从服务器
redis-server --saveof masterip masterport
2) 在Redis命令行中输入命令
salveof masterip masterport
3) 在配置文件中直接添加
- 在找到salveof 时,在其下方添加
slaveof masterip masterport
- 在主从复制中数据从主服务器流向从服务器,数据为单向形式传送
断开redis主从复制
- slaveof no one 在从服务器中输入,用于断开和主服务器的连接
1) 断开的流程
-
- 断开和主节点的复制关系
- 从节点晋升为主节点
- 如果现在从服务器进行切换主服务器时,所有数据将会被删除(如果当前从服务器拥有较为重要的内容时,先进性一次备份,持久化,保存数据之后然后再复制
- 对新的节点继续进行复制
设置 Redis 密码
127.0.0.1:6379> config set requirepass 123.com
OK
127.0.0.1:6379> keys * ## 报错权限错误,需要密码
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123.com
OK
127.0.0.1:6379> keys *
- masterauth 从服务器使用
如果主服务器带有密码,将主服务器 密码添加到masterauth的后面,否则主从复制
- Dump.rdb 快照形式的持久化文件将会通过通过复制的方式发送给从服务器,从服务器得到该数据后再自己的服务器中执行得到所有的数据
复制拓扑结构
1) 一主一从
优点: 在主服务器中关闭aof持久化,在从服务器开启,也可以将数据进行备份
2) 一主多从
优点: 主服务器可以将数据放在多个其他服务器中进行保存,也可以实现负载均衡等要求
缺点: 消耗大量带宽
3) 树状结构
优点: 减小了带宽消耗
复制流程
1. 从节点保存主节点的信息,slaveof操作
2. 从节点通过自身的定时任务每秒进行执行,当发现新的节点时,将会和新的主节点尝试连接,从节点会建立socke文件用于接收主节点发送的复制命令,当从节点无法与主节点进行连接时,定时任务会无限执行,知道连接成功,或者输入slaveof no one 断开和主节点的连接状态
3. 当连接成功时,从节点会向主节点发送ping命令,请求首次通信,通信同时,还会检测套接字文件是否可用,检测主节点是否可以接受执行命令,如果发送ping命令没有得到主节点的pong恢复,从节点会断开连接,然后下次定时任务继续连接
4. 执行权限认证,密码,IP
5. 同步数据集,主节点将数据发送给从节点
6. 持续同步
全量复制
- master_replid 每次重启redis时,该id都会刷新,从节点公国该ID判断是否为上一次自己的连接的主服务器,如果是则执行增量复制,如果不是,执行全量复制
增量复制
- 在使用复制过程中,命令会追加到复制挤压缓冲区,如果从节点丢失的数据可以在 复制挤压缓冲区中国获取,那么主节点将会补发丢失的命令给从节点,如果节点丢失的数据没有办法在复制挤压缓冲区中获取(先进先出,命令写入的偏移量超过缓冲区的大小,一定会丢失数据),那么执行全量复制
查看Redis 数据库状态信息
info replication