redis主从复制
目录
一 什么是主从复制
redis 单实例--->容易产生机器故障;容量瓶颈;QPS(每秒查询率)瓶颈
1.1 主从复制:一主一从,一主多从
- 做读写分离
- 做数据副本
- 扩展数据性能
1.2 特点
- 一个master可以有多个slave
- 一个slave只能有一个master
- 数据流向是单向的,从master到slave
1.3 Redis主从复制的作用
- 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
- 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
- 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
- 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
二 主从原理
1. 副本库(从库)通过 slaveof 127.0.0.1 6379 命令,连接主库,并发送SYNC给主库
2. 主库收到SYNC,会立即触发BGSAVE,后台保存RDB,发送给副本库
3. 副本库接收后会应用RDB快照
4. 主库会陆续将中间产生的新的操作,保存并发送给副本库
5. 到此,我们主复制集就正常工作了
6. 再此以后,主库只要发生新的操作,都会以命令传播的形式自动发送给副本库.
7. 所有复制相关信息,从info信息中都可以查到。即使重启任何节点,他的主从关系依然都在。
8. 如果发生主从关系断开时,从库数据没有任何损坏,在下次重连之后,从库发送PSYNC给主库
9. 主库只会将从库缺失部分的数据同步给从库应用,达到快速恢复主从的目的
(一定会有标识符,记录是从哪里断开的)
2.1 主库是否要开启持久化(一般情况要开启)
如果不开有可能,主库重启操作,造成所有主从数据丢失!
三 主从搭建步骤
3.1 前置条件
# 前置条件1:至少需要两台机器-->我们使用在一台机器运行两个redis实例
# 前置条件2:辅助配置(主从数据一致性配置)
min-slaves-to-write 1
min-slaves-max-lag 3
#slave从属装置
#那么在从服务器的数量少于1个,或者三个从服务器的延迟(lag)值都大于或等于3秒时,主服务器将拒绝执行写命令
3.2 方式一
# 1 6380是从,6379是主
# 2 启动器两台实例
# 3 搭建主从关系
-在从库上执行:slaveof ip port 异步操作
slaveof 127.0.0.1 6379
# 4 断开主从关系,取消复制,不会把之前的数据清除
-在从库上:slaveof no one
3.3 方式二:配置文件方式
# 方式二:配置文件方式
# 在从库的配置文件中:
slaveof ip 端口
slave-read-only yes #从节点只读,因为可读可写,数据会乱
# 使用info查看主从关系
# 设置一主一从
mkdir -p redis/conf redis/data redis1/conf redis1/data
vim redis.conf
# 主库设置
daemonize no
pidfile redis.pid
bind 0.0.0.0
protected-mode no
port 6379
timeout 0
logfile redis.log
dbfilename dump.rdb
dir /data
vim redis1.conf
# 从库设置
daemonize no
pidfile redis.pid
bind 0.0.0.0
protected-mode no
port 6380
timeout 0
logfile redis1.log
dbfilename dump.rdb
dir /data
slaveof 10.0.0.101 6379
slave-read-only yes
#从库配置文件中加上这两句话
# 启动主从库redis容器
docker run -p 6379:6379 --name redis_6379 -v /home/redis/conf/redis.conf:/etc/redis/redis.conf -v /home/redis/data:/data -d redis redis-server /etc/redis/redis.conf
docker run -p 6378:6379 --name redis_6378 -v /home/redis1/conf/redis.conf:/etc/redis/redis.conf -v /home/redis1/data:/data -d redis redis-server /etc/redis/redis.conf
cp redis.conf /home/redis2/conf/# 复制conf文件到redis2中的conf文件中
info replication# 获取复制相关信息
四 故障处理
slave故障
master故障
五 复制常见问题
1 读写分离
读流量分摊到从节点
可能遇到问题:复制数据延迟,读到过期数据,从节点故障
2 主从配置不一致
maxmemory不一致:丢失数据
数据结构优化参数:主节点做了优化,从节点没有设置优化,会出现一些问题
3 规避全量复制
第一次全量复制,不可避免:小主节点,低峰(夜间)
节点运行id不匹配:主节点重启(运行id变化)
复制挤压缓冲区不足:增大复制缓冲区大小,rel_backlog_size
4 规避复制风暴
单主节点复制风暴,主节点重启,所有从节点复制