一、主从复制是什么

主从复制,是指将一台Redis 服务器的数据,复制到其他的Redis服务器。

前者称为主节点master,后者称为从节点slave

数据的复制是单向的,只能由主节点 到 从节点

主机数据更新后根据配置和策略,自动同步到备机的master/slave机制,Master 以写为主,Slave以读为主

redis搭建主从复制 redis 主从复制_数据库

二、主从复制的功能

1、读写分离,性能扩展,只是用来减小读写的压力,并不能减小对内存的压力

2、数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余的方式

3、容灾快速恢复(因为有备份):当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复,实际上是一种服务的冗余

4、负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由 从节点提供读服务(写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载,尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量

5、高可用基石(集群):主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础 !

一般来说,要将Redis运用在实际项目中,只使用一台Redis是万万不能的,原因如下:

  1. 从结构上,单个redis 服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大
  2. 从容量上,单个redis服务器内存容量有限,就算一台redis服务器内存容量为256G,也不能将所有内存用作Redis的存储内存,一般来说,单台Redis 最大使用内存不应该超过20G。
  3. 对于一般电商网站,一般都是 一次修改,多次浏览,也就是 多读少写 状态,所以 主从复制显得更加重要

三、如何实现主从复制(可查看第五点案例教程)

实现主从配置 只需 配置 从服务器,主服务器不需要配置
  1. 拷贝多个redis.conf文件
  2. 每个文件都开启daemonize 为 yes
  3. 修改每个配置文件的 pid 文件名称 ,因为不能重复
  4. 指定每个配置的端口号 port
  5. dump.rdb 名字也需要每一个服务一个rdb文件
  6. appendonly 关掉或者每一个 另起唯一名字(推荐关闭)
  7. 日志文件 每一个服务单独一个写一个文件

四、主从复制 相关指令

1、info replication

打印主从复制的相关信息

2、slaveof

成为某个实例的从服务器

五、主从复制 案例(单机多集群)

下面我们使用虚拟机,实现单机多集群的搭建,我们搭建一主二从即可

redis搭建主从复制 redis 主从复制_redis_02

redis6380.conf文件内容

include /usr/local/bin/csnzConfig/redis.conf
pidfile /var/run/redis_6380.pid
port 6380
logfile 6380.log
dbfilename dump6380.rdb

redis6381.conf文件内容

include /usr/local/bin/csnzConfig/redis.conf
pidfile /var/run/redis_6381.pid
port 6381
logfile 6381.log
dbfilename dump6381.rdb

启动这三台服务 发现默认都是主节点

redis搭建主从复制 redis 主从复制_数据库_03

使用 slaveof 127.0.0.1 6379 将另外两台redis服务 设置为从节点

redis搭建主从复制 redis 主从复制_redis搭建主从复制_04

使用命令查看redis进程也可以发现

redis搭建主从复制 redis 主从复制_主从复制_05

测试一波

redis搭建主从复制 redis 主从复制_redis_06

真实的主从配置应该在配置文件中配置,才是永久生效的,如果是使用命令行方式配置,只是暂时的,退出即失!

redis搭建主从复制 redis 主从复制_redis_07

tips:从机只能读不能写

redis搭建主从复制 redis 主从复制_缓存_08

如果主机断开连接,从机是依然连接主机的,只是都没有写操作而已,如果这个时候 主机又启动了,从机依然可以获取到主机写的信息

如果从机断开连接,主机就失去了这个从机

此时从机又启动

1、如果是在配置文件中注册的从机,那么从机的数据全重新复制一遍,确保信息完整性
2、如果是在命令行注册的从机,那么 这个刚刚启动的"从机" 会变成主机

如果主机断开连接,从机是否可以当主机呢?

答案肯定是可以的 ! 使用 Slaveof on one 命令使自己变成主机,其他从节点就可以连接到这个新的主节点了(手动连接)

六、复制原理

Slave 启动成功连接到 Master 后 会发送一个sync同步命令Master 接到命令后,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,Master 将传送整个数据文件至 Slave ,并完成一次完全同步

全量复制

Slave 服务在接受到数据库文件数据后,将其存盘并加载到内存中

增量复制

Master 继续将新的所有收集到的修改命令依次传给 Slave,完成同步

只要是重新连接 Master ,一次完全同步(全量复制)将被自动执行