1.什么是redis的主从复制
Redis 的主从复制是指在 Redis 数据库中,一个 Redis 服务器充当主节点,而另一个或多个 Redis 服务器作为从节点。主节点负责接收客户端的写操作,从节点会复制主节点的数据,保持与主节点数据的同步。
2.redis的主从复制能干吗
数据备份和冗余:主节点是数据的真实来源,从节点可以作为数据的备份,以防止数据丢失。
提高读性能:从节点可以处理读操作,从而减轻主节点的读负载,提高整个系统的读写性能。
扩展性:通过增加从节点,可以横向扩展系统的能力,处理更多的客户端请求。
3.主从复制的开启方式
(1)首先需要准备3个redis实例,有条件的小伙伴准备3台机器,分别在每1台机器上都安装1个redis。没条件的小伙伴(比如我),在1台机器上装3个redis实例。
使用3台机器的小伙伴需要注意,需要保证三台机器之间网络是互通的,注意关闭防火墙
(2)修改redis配置文件(改从不改主)
新增配置
注意:修改两个从节点的配置文件
replicaof 主节点redis的ip和端口
masterauth 主节点redis的密码
修改完毕后启动redis服务,先启动主节点,再启动两个从节点
4.主从复制的验证
使用redis客户端连接主节点redis
执行命令info replication
可以看到当前节redis节点的角色是master
有两个从节点连接,显示从节点的ip和端口
使用redis客户端连接从节点redis
执行命令info replication
可以看到从节点的相关信息
接下来在主节点执行命令
set k1 v1
set k2 v2
然后去从节点执行命令
get k1
我们发现,从节点中能够获取到键k1对应的值
证明主节点中的数据已经复制到了从节点
5.主从复制的思考
(1)redis从节点可以执行写操作吗?
答案是不能,从节点只读,不能写
(2)主节点挂了,从节点会自动变为主节点吗?
答案是不会,主节点挂了,从节点不为所动,直到主节点恢复
(3)当其中一个从节点挂了,在从节点恢复期间,主节点仍然在写入,那么当从节点恢复的时候,会把宕机这段时间主节点中的数据同步到宕机的从节点吗?
答案是会同步
我们使用shutdown命令将其中一个从节点关闭,然后主节点执行set指令,然后将从节点再启动,我们发现刚才主节点写入的数据出现在了从节点中。
实现的原理在于主节点会记录从节点的同步数据的偏移量(offset),从节点同步到4这个偏移量的时候挂了,这时候主节点持续写入,总的偏移量到了7,那么当从节点恢复的时候,会把4-7之间的数据同步到从节点当中
(4)主节点宕机之后再重启,主从关系还在吗?
答案是主从关系还在,感兴趣的小伙伴可以验证下,使用shutdown命令将主节点关闭,再重启
使用命令info replication查看一下节点信息发现还是master
6.主从复制的模式
上述我们实现的形式是一主两从(多从)
接下来是另一种实现形式-薪火相传
我们当前的配置为一个redis主节点A,一个redis从节点B,一个redis从节点C
接下来我们使用redis客户端连接redis从节点C,执行命令SLAVEOF 从节点B的ip 从节点B的端口
然后执行命令info replication,可以看到,从节点C归属的主节点由A变成了B
我们使用redis客户端连接B节点,执行命令info replication
redisB既是redisA的从节点,又是redisC的主节点
那么这里小伙伴可以思考一下,redis的B节点能够执行写操作吗?
答案是不能,感兴趣的小伙伴可以验证下。
第三种方式-唯我独尊
意思就是三个redis实例都是主节点,没有从节点
我们这次用redis客户端连接B实例,执行命令 SLAVEOF no one
然后执行命令info replication 可以看到B实例的角色变为了master
这里需要注意 SLAVEOF 命令仅本次生效!
7.redis主从复制的缺点
同步延迟:在主从复制中,从服务器需要从主服务器同步数据。如果主服务器处理大量写操作,从服务器可能会有明显的延迟。在某些情况下,从服务器可能无法实时跟上主服务器,这可能会导致读取操作无法获取最新的数据。
单点故障:如果主服务器发生故障,从服务器不能立即接替其工作。