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 规避复制风暴
单主节点复制风暴,主节点重启,所有从节点复制

posted @ 2023-08-29 14:38  星空看海  阅读(12)  评论(0编辑  收藏  举报