前言

我们都知道redis性能很高,单机版的qps(每秒查询率)可以达到10万+,但是即使如此我们也不会在生产环境去搭建单机版本的redis,原因如下:

1、单机版redis,如果进程挂掉或者服务器宕机,redis不可用
2、redis的读和写全在一台机器上,无法满足读多写少的场景。

主从复制架构

Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。分了分担读压力,redis支持主从复制,即主从架构Master/Slave,Master 以写为主,Slave 以读为主,Master 主节点更新后根据配置,自动同步到从机Slave 节点。
Redis (十七)——Redis主从复制(上)
接下来我们就来介绍如何进行主从架构的搭建。

这里我是在一台机器上模拟多个Redis服务器,与实际生产环境中相比,基本配置都是一样,仅仅是IP地址和端口号变化。

1、修改配置文件

首先将redis.conf 配置文件复制三份,通过修改端口分别模拟三台Redis服务器。
Redis (十七)——Redis主从复制(上)
然后我们分别对这三个redis.conf 文件进行修改。

①、修改 daemonize yes
Redis (十七)——Redis主从复制(上)
 表示指定Redis以守护进程的方式启动(后台启动)
 
②、配置PID文件路径 pidfile
Redis (十七)——Redis主从复制(上)
表示当redis作为守护进程运行的时候,它会把 pid 默认写到 /var/redis/run/redis_6379.pid 文件里面

③、配置端口 port
Redis (十七)——Redis主从复制(上)
④、配置log 文件名字
Redis (十七)——Redis主从复制(上)
⑤、配置rdb文件名
Redis (十七)——Redis主从复制(上)
接下来,依次将 6380redis.conf 、6381redis.conf 配置一次,则配置完毕。

接下来我们分别启动这三个服务,通过如下命令分别进入到这三个Redis客户端:
Redis (十七)——Redis主从复制(上)
通过命令查看Redis是否启动:
Redis (十七)——Redis主从复制(上)

2、设置主从关系

①、通过 info replication 命令查看节点角色
Redis (十七)——Redis主从复制(上)
我们发现这三个节点都是扮演的 Master 角色。那么如何将 6380 和 6381 节点变为 Slave 角色呢?

②、执行命令:SLAVEOF 127.0.0.1 6379
Redis (十七)——Redis主从复制(上)Redis (十七)——Redis主从复制(上)
可以看到,6380和6381两个节点已经变成了从节点。
我们再看 6379 节点信息:
Redis (十七)——Redis主从复制(上)
可以看到6379 节点是master节点,它有两个从节点,分别是6380和6381。

3、测试主从关系

①、增量复制

主节点执行 set k1 v1 命令,从节点 get k1 能获取吗?
Redis (十七)——Redis主从复制(上)
Redis (十七)——Redis主从复制(上)
Redis (十七)——Redis主从复制(上)
可以看到,从节点可以读取到主节点写入的值。

②、全量复制

通过执行 SLAVEOF 127.0.0.1 6379,如果主节点 6379 以前还存在一些 key,那么执行命令之后,从节点会将以前的信息也都复制过来吗?

答案也是肯定的,这里我就不贴测试结果了。

③、主从读写分离

主节点能够执行写命令,从节点能够执行写命令吗?
Redis (十七)——Redis主从复制(上)
这里的原因是在配置文件 6381redis.conf 中对于 slave-read-only 的配置:
Redis (十七)——Redis主从复制(上)
如果我们将其修改为 no 之后,执行写命令是可以的。
Redis (十七)——Redis主从复制(上)
但是从节点写命令的数据从节点或者主节点都不能获取的。

④、主节点宕机
主节点 Maste 挂掉,两个从节点角色会发生变化吗?
Redis (十七)——Redis主从复制(上)
Redis (十七)——Redis主从复制(上)
Redis (十七)——Redis主从复制(上)
上图可知主节点 Master 挂掉之后,从节点角色还是不会改变的。

⑤、主节点宕机后恢复

主节点Master挂掉之后,马上启动主机Maste,主节点扮演的角色还是 Master 吗?
Redis (十七)——Redis主从复制(上)
也就是说主节点挂掉之后重启,又恢复了主节点的角色。

主从复制总结:

1.如果主机已经运行了一段时间了,并且了已经存储了一些数据了,此时从机连上来,那么从机会将主机上所有的数据进行备份,而不是从连接的那个时间点开始备份。
2.配置了主从复制之后,主机上可读可写,但是从机只能读取不能写入(可以通过修改redis.conf中 slave-read-only 的值让从机也可以执行写操作)。
3.在整个主从结构运行过程中,如果主机不幸挂掉,重启之后,他依然是主机,主从复制操作也能够继续进行。

相关文章: