解析Redis的复制(主从复制)

2022-09-04 09:05:32

1.什么是复制

        单个redis的最大读并发量为11万,最大写并发量为8.1万,但如果超过此上限怎么办?这是就需要采取redis的复制策略

        官网说明如下

        也就是我们常说的主从复制,主机更新后会根据配置和策略,自动同步到备用机的机制

2.作用

        作用主要有两个,首先是读写分离,让写的操作在主机(Master)上执行(也可以读),让读的操作在从机(Slave)上执行(不能写)。第二个作用是容灾(主从机保存的信息是一样的)

3.如何使用

        首先我们要准备多个redis,也就是准备多个启动redis的配置文件,这里准备三个配置文件来做实验

        6379(主机)的配置文件:

# 端口号
port 6379
# 允许访问的ip地址
bind 0.0.0.0
# 是否设置为后台线程启动
daemonize yes
# rdb持久化策略
save 900 1
# 持久化文件的名称
dbfilename dump6379.rdb
# 持久化文件路径
dir ./
pidfile /var/run/redis_6379.pid

        6380(从机)的配置文件:

port 6380
bind 0.0.0.0
daemonize yes
save 900 1
dbfilename dump6380.rdb
dir ./
pidfile /var/run/redis_6380.pid
# 设置为6379的从机
slaveof 127.0.0.1 6379

        6381(从机)的配置文件:

port 6381
bind 0.0.0.0
daemonize yes
save 900 1
dbfilename dump6381.rdb
dir ./
pidfile /var/run/redis_6381.pid
# 设置为6379的从机
slaveof 127.0.0.1 6379

配置文件完成之后,我们来到bin目录下启动三个redis

./redis-server ../conf/redis-6379.conf

./redis-server ../conf/redis-6380.conf

./redis-server ../conf/redis-6381.conf

查看进程,至此我们已经成功配置完成主从复制

接下来我们开始测试,我们进入6379主机,使用role命令查看主从关系

可以看到6379的角色信息为master,并且有两个从机6380和6381

我们在6379中写入一些信息

然后退出,来到6380和6381查看信息

6380:

6381:

 可以看到,我们在主机中写入的数据也出现在了从机中,复制功能得以实现

现在,我们尝试在从机中读取数据与写入数据

 可以看到,我们在从机中只能将数据读出,并不能将数据写入

我们还可以取消掉主从关系,将配置文件中的slaveof属性改为

SLAVEOF no one

即可实现

4.主从复制的原理

        在从机启动连接到主机后,会向主机发送一个sync命令,主机接收到此命令之后会启动后台的存盘进程,同事手机所有接收到的用于修改数据的命令,在后台进程执行完毕之后,主机会将整个数据文件发送给从机,至此完成一次全量复制;从机在接收到此文将之后,会将此文件存盘并加载到内存中

        后续的增量复制:主机会继续将所有收集到的修改命令传送给从机,继续完成同步。

        从机一旦重新连接主机,一次全量复制就会立即执行

5.哨兵模式

        主从复制的一个作用就是用于容灾,但是在主机崩溃之后,虽然从机有备份,但是也就没有从机继续写入数据了,于是就有了这个哨兵模式

        哨兵模式下,如果主机崩溃了,就会让从机中的一个成为主机,从而保证读写功能的完整

6.实现哨兵模式

首先我们要定一个个哨兵的配置文件,文件名必须为sentinel.conf

# sentinel monitor 被监控主机名字(自己起名字) 主机ip 主机端口号 哨兵投票数
sentinel monitor host 127.0.0.1 6379 1
# 设置为后台进程
daemonize yes

最后的哨兵投票数表示在有多少哨兵监视此主机的情况下,要有多少个哨兵认为此主机挂掉了,才,才会将从机切换为主机,此次试验只配置一个哨兵,故此处设置为1

配置文件完成之后我们在bin目录中使用redis-sentinel + 配置文件路径启动哨兵

然后我们将主机6379干掉,模拟主机崩溃的情况,之后我们进入6380,使用role命令查看主从关系

此时我们发现6380从原来的从机变成了主机,6381成为了6380的从机

此时我们查看配置文件

6380:

6381:

我们发现6380的配置文件中没有了从机配置这一行,6381从机配置这一行被修改为了主机为6380

现在我们重启6379并进入,来查看一下效果

我们发现此时使用role查看角色,6379变成了6380的从机,并且配置文件内容也变成了如下

由此可得知,之前的主机崩溃之后,从机变为新的主机,原来的主机回来之后并不会发生主机冲突,而是以从机的身份开启

  • 作者:爱纸
  • 原文链接:https://blog.csdn.net/m0_71890428/article/details/126408384
    更新时间:2022-09-04 09:05:32