Redis主从复制详解

目录

Redis主从复制

1、概念

2、Redis 主从复制特点

3、基本操作命令

4、主从复制流程

5、主从复制问题

6、slaveof 命令指定主从服务器

7、关闭主从关系


Redis主从复制

1、概念

Redis主从复制是一种数据复制机制,用于在多个Redis服务器之间同步数据。在主从复制中,有一个主服务器(Master)和一个或多个从服务器(Slave)。master以写为主,Slave以读为主,当master数据变化的时候,自动将新的数据异步同步到其它slave数据库。

2、Redis 主从复制特点

优点:

1、数据备份:从节点复制主节点的数据,可以作为主节点数据的备份,以应对主节点故障或数据丢失情况。

2、扩展读性能:从节点可以处理读请求,从而减轻主节点的负载,提高整体系统的读性能。

3、故障恢复:当主节点发生故障时,可以将一个从节点升级为主节点,继续提供服务,从而实现快速的故障恢复。

4、读写分离:从节进行读操作,主节点进行写操作。

缺点:

1、延迟:主从复制存在一定的延迟,因为从节点需要异步复制主节点的数据。如果应用对于读取延迟非常敏感,可能会影响用户体验。

2、一致性:主从复制并不能保证强一致性。在主节点写入数据后,数据会异步复制到从节点,期间可能存在数据的不一致性。对于需要强一致性的应用场景,需要额外的措施来处理。

3、单点故障:虽然主从复制提供了高可用性,但主节点仍然是一个单点故障。当主节点宕机时,需要通过手动或自动的方式将从节点切换为新的主节点,这可能引入一定的维护成本和机制。

3、基本操作命令

info replication 可以查看复制节点的主关系和配置信息
REPLICAOF 用于将当前 Redis 服务器设置为指定主服务器的副本。其中 是主服务器的 IP 地址, 是主服务器的端口号
SLAVEOF 用于将当前 Redis 服务器设置为指定主服务器的从服务器 是主服务器的 IP 地址, 是主服务器的端口号。如果该数据库已经是某个主数据库的从数据库,那么会停止和原主数据库的同步关系转而和新的主数据库同步。
slaveof no one 用于将当前 Redis 服务器从一个主服务器的从服务器身份转换为独立的主服务器。执行这个命令后,Redis 服务器将不再作为任何主服务器的从服务器,而是成为一个独立的 Redis 服务器。

4、主从复制流程

在docker里创建了三个redis容器,端口号分别为6379,6380,6381,以6379为主库

1、修改6379端口的配置文件,找到开启daemonize改为 yes  后台运行,如果命令里带-d参数就不用需改了

Redis主从复制详解_第1张图片

2、注释掉bind 127.0.0.1

Redis主从复制详解_第2张图片

3、protected-mode修改为 no,当protected-mode为yes时,只允许本地访问,并且拒绝来自外部网络的连接。

4、指定端口号

5、指定当前工作目录,dir

6、 pid文件名字,pidfile

Redis主从复制详解_第3张图片

7、Redis的logfile选项用于指定Redis服务器日志文件的路径和文件名。

Redis主从复制详解_第4张图片

8、requirepass修改密码

9、dbfilename 是 Redis 配置文件中的一个重要选项,用于指定持久化数据文件的名称。

Redis主从复制详解_第5张图片

10、aof文件,appendfilename 非必选,appendfilename 是用于设置增量文件(AOF,Append-Only File)的文件名的选项。AOF 是一种持久化方式,它会记录每个写操作,以便在服务器重启时重新执行这些写操作来恢复数据。主机到第十步即可 

Redis主从复制详解_第6张图片

 Redis主从复制详解_第7张图片

11、replicaof 是 Redis 配置文件中的一个重要选项,用于配置主从复制(master-slave replication)。在 Redis 中,主从复制允许一个 Redis 服务器(称为主服务器)将其数据实时地复制到一个或多个其他 Redis 服务器(称为从服务器)上。

从机前面与主机相同,加一个访问主机的通行密码masterauth和主机IP:replicaofRedis主从复制详解_第8张图片

docker run -d \
 -p 6380:6380 \
 -v /usr/local/redis/data6380:/data \
 -v /usr/local/redis/conf6380/redis6380.conf:/etc/redis/redis.conf \
 -v /usr/local/redis/6380log:/var/log/redis \
 --name redis6380 \
 --restart=always \
 redis:7.2 redis-server /etc/redis/redis.conf --logfile /var/log/redis/redis.log
 
 docker run -d \
 -p 6381:6381 \
 -v /usr/local/redis/data6381:/data \
 -v /usr/local/redis/conf6381/redis6381.conf:/etc/redis/redis.conf \
 -v /usr/local/redis/6381log:/var/log/redis \
 --name redis6381 \
 --restart=always \
 redis:7.2 redis-server /etc/redis/redis.conf --logfile /var/log/redis/redis.log
 
docker run -d \
 -p 6382:6382 \
 -v /usr/local/redis/data6382:/data \
 -v /usr/local/redis/conf6382/redis6382.conf:/etc/redis/redis.conf \
 -v /usr/local/redis/6382log:/var/log/redis \
 --name redis6382 \
 --restart=always \
 redis:7.2 redis-server /etc/redis/redis.conf --logfile /var/log/redis/redis.log

配置好后分别启动

Redis主从复制详解_第9张图片

如果 报以下错误通常是由于Redis进程在容器中没有足够的权限来写入指定的日志文件路径而引起的。

*** FATAL CONFIG FILE ERROR (Redis 7.2.3) *** Can't open the log file: Permission denied

 使用以下命令来更改目录权限:

sudo chmod -R 777 /usr/local/redis/6380log

进入6379进程使用命令查看是否存在主从关系

#在Redis容器中执行交互
docker exec -it redis6379 bash
redis-cli -a 123456
或者
docker exec -it redis6379 redis-cli -a 123456

#查看主从关系
info replication

 ​​​​​​监听到两个端口6380和6381Redis主从复制详解_第10张图片

 进入从机查看关系

docker exec -it redis6380 redis-cli -a 112233 -p 6380

Redis主从复制详解_第11张图片

5、主从复制问题

从机可以执行写的命令吗?

答:不能

从机宕机后是从头开始复制还是从切入点开始复制?

答:从头开始复制

主机宕机后,从机可以上位吗?

答:从机不动,原地待命,从机数据可以正常使用;等待主机重启动归来

主机宕机后,重启后主从关系还在吗?从机还能否顺利复制?

答:在的可以顺利复制

6、slaveof 命令指定主从服务器

先注释掉监听的端口

Redis主从复制详解_第12张图片

然后重启redis容器

结果他们3个都是主机

使用slaveof 命令指定主从服务器

slaveof 新主库IP  新主库端口

slaveof 192.168.200.129 6379

Redis主从复制详解_第13张图片

 Redis主从复制详解_第14张图片

 重新启动6380

Redis主从复制详解_第15张图片

结果不再有主从关系

即当主机又当从机

上一个从机可以是下一个从机的主机,从机同样可以接收其他从机的连接和同步请求,那么该从机作为了链条中下一个的主机,可以有效减轻主主机的写压力。例如A是B的主机,B又是C的主机
中途变更转向:会清除之前的数据,重新建立拷贝最新的

slaveof 新主库IP  新主库端口

slaveof 192.168.200.129 6379

Redis主从复制详解_第16张图片

7、关闭主从关系

slaveof no one

 Redis主从复制详解_第17张图片

你可能感兴趣的:(Redis,redis,java,数据库)