尚硅谷官方bilibili教学视频:https://www.bilibili.com/video/BV1Rv41177Af?p=31&spm_id_from=pageDriver
一、主从复制概述
主从复制
,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master)
,后者称为从节点(slave)
;数据的复制是单向的
,只能由主节点到从节点
。
默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
主从复制的作用
主从复制的作用主要包括:
- 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
- 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
- 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
- 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
二、搭建一组多从
将配置文件中的daemonize属性值改为yes
创建多个配置文件启动redis,这里我们开启三个redis服务,端口分别是6379、6380、6381,其中6379端口为主服务,其他两个为从服务器。
创建三个端口的配置文件
自己选定一个文件夹,将你的redis.conf复制到这个文件夹里方便使用include将公共配置引入进来,然后再创建每个端口redis服务器对应的服务配置文件。
1. 新建redis6379.conf配置文件
# 使用vim编辑器创建redis6379.conf配置文件
[root@iZbp10ofdiqqy3ld2kiahtZ myredis]# vim redis6379.conf
# 然后输入以下内容
include /myredis/redis.conf #将原来的redis配置文件引入
pidfile /var/run/redis_6379.pid #redis服务的进程名
port 6379 #端口
dbfilename dump6379.rdb #指定rdb持久化文件名
# esc退出编辑模式、进入底线模式,输入wq保存退出
:wq
到这主redis服务器的配置文件配置完成。其他两个从服务器只要改下对应的redis服务的进程名、端口、rdb持久化文件名即可。
2. 新建redis6380.conf配置文件
# 使用vim编辑器创建redis6379.conf配置文件
[root@iZbp10ofdiqqy3ld2kiahtZ myredis]# vim redis6380.conf
# 然后输入以下内容
include /myredis/redis.conf #将原来的redis配置文件引入
pidfile /var/run/redis_6380.pid #redis服务的进程名
port 6380 #端口
dbfilename dump6380.rdb #指定rdb持久化文件名
# esc退出编辑模式、进入底线模式,输入wq保存退出
:wq
3. 新建redis6381.conf配置文件
# 使用vim编辑器创建redis6379.conf配置文件
[root@iZbp10ofdiqqy3ld2kiahtZ myredis]# vim redis6381.conf
# 然后输入以下内容
include /myredis/redis.conf #将原来的redis配置文件引入
pidfile /var/run/redis_6381.pid #redis服务的进程名
port 6381 #端口
dbfilename dump6381.rdb #指定rdb持久化文件名
# esc退出编辑模式、进入底线模式,输入wq保存退出
:wq
启动三台redis服务器
启动这三台服务之前要将原来已经启动6379的redis服务器停掉
redis-server redis6379.conf
redis-server redis6380.conf
redis-server redis6381.conf
执行完上命令后,查看服务是否已经都启动了
查看三台主机运行的情况
使用redis-cli进入不同服务器、使用info replication查看各个服务器的主从关系
6379端口:
6380端口:
6381端口:
可知每台服务器都是独立的、并没有主从关系。
配置主从关系
配置主从关系时遵循配主不配从的规则、也就是在从服务器中执行命令slaveof 服务器的ip地址 服务器的端口号
指定主服务器
# 将端口为6380和6381端口的服务器的主服务器设定为6379
slaveof localhost 6379
执行这个命令之后分别使用info replication查看各个服务器的主从关系。
6381端口:
6380端口:
6379端口:
1、配置完后、只能在主服务器上写数据,从服务器不能写数据。
2、主机写数据、从机都能接收到数据
3、主机挂掉,重启就行,一切如初
4、从机重启不会是原来的状态需要重新设置,重设:slaveof 127.0.0.1 6379
三、主从复制的原理
1、主服务器每次进行写数据,会主动发送消息给从服务器同步数据,原理是通过同步rdb持久化文件实现。
2、当从服务器挂掉后
,重启重新设定
后会发送请求给主服务器
要求同步数据、当主服务器接收到消息之后
会将数据进行持久化到rdb文件中
,然后将rdb文件发送给从服务器
,从服务器拿到rdb文件读取数据进行同步
。