Redis 主从复制

概念

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master / Leader),后者称为从节点(Slave / Follower), 数据的复制是单向的!只能由主节点复制到从节点(主节点以写为主、从节点以读为主)。

Redis 主从复制_第1张图片

主从复制的主要作用

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

故障恢复:当主节点故障时,从节点可以暂时替代主节点提供服务,是一种服务冗余的方式

负载均衡:在主从复制的基础上,配合读写分离,由主节点进行写操作,从节点进行读操作,分担服务器的负载;尤其是在多读少写的场景下,通过多个从节点分担负载,提高并发量。

高可用基石:主从复制还是哨兵和集群能够实施的基础。


一般来说,要将Redis运用与工程项目中,只使用一台Redis是万万不能的(避免宕机,一主二从),原因如下:

  1. 从结构上,单个 Redis 服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大
  2. 从容量上,单个Redis服务器内存容量有限,就算一台Redis服务器内存容量为256G,也不能将所有内存用作Redis存储内存,一般来说,单台服务器最大使用内存不超过20G。

环境配置

只需配置从库,无需配置主库。(其实一般也不使用配置文件配置主从关系,一般使用命令行,或者使用哨兵模式自动管理)

一般不使用配置文件去配置主从复制关系,因为使用配置文件有以下缺点:

配置文件容易出错:手动修改配置文件容易出现疏漏或者错误,导致主从复制无法正常工作。

不易维护:当主节点发生故障或者配置变更时,需要手动修改从节点的配置文件,不利于维护和管理。

不够灵活:如果需要进行主从复制的切换或者扩容,需要手动修改多个从节点的配置文件,工作量较大。

一般使用命令行来配置主从关系,具有配置简单、易于维护和更加灵活等优点。
或采用哨兵模式自动化。

查看主从复制信息:

默认情况下,每一个Redis服务器都是主节点

Redis 主从复制_第2张图片

127.0.0.1:6379> info replication
# Replication
role:master # 主节点
connected_slaves:0 # 没有从节点
master_replid:7776dea8df483b02d12cd482d2034ba55ec7dab0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

1、复制配置文件redis.conf到Redis安装目录下

Redis 主从复制_第3张图片

2、再从该文件拷贝出3个文件

主:redis_6379.conf

从:redis_6380.conf、redis_6381.conf

Redis 主从复制_第4张图片

3、修改主配置文件

由于端口和后台默认运行pid都是6379的,就不改了

4、修改从配置文件

下面以 redis_6380.conf 为例, redis_6381.conf 同理

Redis 主从复制_第5张图片

Redis 主从复制_第6张图片

配置文件修改的信息

  1. 端口(92行)
  2. pid进程名(244行)
  3. 日志文件名(257行)
  4. rdb文件名(339行)

5、启动服务(单机多服务)

cd /usr/local/bin # 进入配置文件所在目录


[root@liuyou bin]# redis-server redis_6379.conf
[root@liuyou bin]# redis-server redis_6380.conf
[root@liuyou bin]# redis-server redis_6381.conf
[root@liuyou bin]# ps -ef | grep redis # 查看启动状态
root 2862 1 0 13:13 ? 00:00:00 redis-server 0.0.0.0:6379
root 2868 1 0 13:13 ? 00:00:00 redis-server 0.0.0.0:6380
root 2874 1 0 13:13 ? 00:00:00 redis-server 0.0.0.0:6381
root 2880 2393 0 13:13 pts/0 00:00:00 grep --color=auto redis

6、登录客户端

①开启4个窗口,前三用于主从复制,最后一个用于测试

Redis 主从复制_第7张图片

②登录(注意端口)

Redis 主从复制_第8张图片

Redis 主从复制_第9张图片

Redis 主从复制_第10张图片

7、一主二从

默认情况下,每一个Redis服务器都是主节点

一般情况下,只配置从机

如果有密码,需要在从配置文件中,进行配置,后面会解释

下面以 窗口3(端口为6381) 为例,窗口2同理

使用slaveof 指定 主节点 ip 和 端口(临时配置)

Redis 主从复制_第11张图片

查看主节点,主从复制信息

Redis 主从复制_第12张图片

有密码配置(+永久配置)

Redis 主从复制_第13张图片

配置完重启服务

测试

Redis只允许,主机写,从机读

主机写

Redis 主从复制_第14张图片

从机读

Redis 主从复制_第15张图片

从机不能写

Redis 主从复制_第16张图片

主机断开连接,从机依旧连接主机,但是没有写操作,如果从机中途恢复正常,从机依旧可以获取主机写的内容

如果使用命令行配置,从机重启,就会变为主机(只有变为从机,才能获取之前主机内容)

从机断开连接,期间,主机继续写新内容,只要从机恢复,就可获得主机写的新内容

复制原理

Slave 启动成功连接到 Master 后会发送一个 sync 命令

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

全量复制:而 Slave 服务在接收到数据库文件数据后,将其存盘并加载到内存中

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

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

8、宕机手动配置主机

slaveof no one # 如果主机断开连接,从机可以使用该命令,让自己变为主机,其他节点连到该节点

如果主机回来了,也没有从机连接上它。

你可能感兴趣的:(Redis,redis,数据库)