Redis主从复制

  • 2019-09-02
  • 0
  • 0

[toc]

1、主从复制介绍

在分布式系统中为了解决单点问题,通常会把数据复制多个副本到其他机器,满足故障恢复和负载均衡等求。
Redis 也是如此,提供了复制功能。
复制功能是高可用 Redis 的基础,后面的哨兵和集群都是在复制的基础上实现高可用的。

2、配置命令

2.1 建立复制

每个从节点只能有一个主节点,主节点可以有多个从节点
配置复制的方式有三种:

1. 在配置文件中加入 slaveof {masterHost} {masterPort} 随 redis 启动生效
2. 在 redis-server 启动命令后加入—slaveof {masterHost} {masterPort}生效
3. 直接使用命令:slaveof {masterHost} {masterPort}生效

方法一:永久生效
方法二:临时生效
方法三:临时生效

db02:6379> SLAVEOF 10.0.0.51 6379
OK

主从复制流程:

1.从节点发送同步请求到主节点
2.主节点接收到从节点的请求之后,做了如下操作
- 立即执行bgsave将当前内存里的数据持久化到磁盘上
- 持久化完成之后,将rdb文件发送给从节点
3.从节点从主节点接收到rdb文件之后,做了如下操作
- 清空自己的数据
- 载入从主节点接收的rdb文件到自己的内存里
4.后面的操作就是和主节点实时的了

2.2 查看复制状态信息

#主节点上
db01:6379> Info replication
# Replication
role:master
connected_slaves:1
slave0:ip=10.0.0.52,port=6379,state=online,offset=729,lag=0
master_repl_offset:729
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:728

#从节点上
db02:6379> Info replication
# Replication
role:slave
master_host:10.0.0.51
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:715
slave_priority:100
slave_read_only:1
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

2.3 断开复制

在从节点执行 slave of no one 来断开与主节点复制关系.

db02:6379> SLAVEOF no one
OK

断开复制主要流程:

1.断开与主节点复制关系
2.从节点晋升为主节点
从节点断开复制后不会抛弃原有数据,只是无法再获取主节点上的数据变化.
通过 slaveof 命令还可以实现切主操作,所谓切主是指把当前从节点对主节点的复制切换到另一个主节点.
执行 slaveof {newMasterIp} {newMasterPort}命令即可.

切主操作流程如下:

1.断开与旧主节点的复制关系
2.与新主节点建立复制关系
3.删除从节点当前所有数据
4.对新主节点进行复制操作
提示: 线上操作一定要小心,因为切主后会清空之前所有的数据.

3 主从复制注意事项

1.从节点只读不可写
2.从节点不会自动故障转移,它会一直同步主
10.0.0.52:6379> set k1 v1
(error) READONLY You can't write against a read only slave.
3.主从复制故障转移需要人工介入
- 修改代码指向REDIS的IP地址
- 从节点需要执行SLAVEOF no one
从节点会清空自己原有的数据,如果同步的对象写错了,就会导致数据丢失

安全的操作步骤:
1. 无论是同步,无论是主节点还是从节点
2. 先备份一下数据

评论

还没有任何评论,你来说两句吧

提供支持 - 友情链接 - 衫小寨