主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master / Leader),后者称为从节点(Slave / Follower), 数据的复制是单向的!只能由主节点复制到从节点(主节点以写为主、从节点以读为主)。
数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余的方式。
故障恢复:当主节点故障时,从节点可以暂时替代主节点提供服务,是一种服务冗余的方式
负载均衡:在主从复制的基础上,配合读写分离,由主节点进行写操作,从节点进行读操作,分担服务器的负载;尤其是在多读少写的场景下,通过多个从节点分担负载,提高并发量。
高可用基石:主从复制还是哨兵和集群能够实施的基础。
一般来说,要将Redis运用与工程项目中,只使用一台Redis是万万不能的(避免宕机,一主二从),原因如下:
只需配置从库,无需配置主库。(其实一般也不使用配置文件配置主从关系,一般使用命令行,或者使用哨兵模式自动管理)
一般不使用配置文件去配置主从复制关系,因为使用配置文件有以下缺点:
配置文件容易出错:手动修改配置文件容易出现疏漏或者错误,导致主从复制无法正常工作。
不易维护:当主节点发生故障或者配置变更时,需要手动修改从节点的配置文件,不利于维护和管理。
不够灵活:如果需要进行主从复制的切换或者扩容,需要手动修改多个从节点的配置文件,工作量较大。
一般使用命令行来配置主从关系,具有配置简单、易于维护和更加灵活等优点。
或采用哨兵模式自动化。
默认情况下,每一个Redis服务器都是主节点
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安装目录下
2、再从该文件拷贝出3个文件
主:redis_6379.conf
从:redis_6380.conf、redis_6381.conf
3、修改主配置文件
由于端口和后台默认运行pid都是6379的,就不改了
4、修改从配置文件
下面以
redis_6380.conf
为例,redis_6381.conf
同理
配置文件修改的信息
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个窗口,前三用于主从复制,最后一个用于测试
②登录(注意端口)
7、一主二从
默认情况下,每一个Redis服务器都是主节点
一般情况下,只配置从机
如果有密码,需要在从配置文件中,进行配置,后面会解释
下面以 窗口3(端口为6381) 为例,窗口2同理
使用slaveof 指定 主节点 ip 和 端口(临时配置)
查看主节点,主从复制信息
有密码配置(+永久配置)
配置完重启服务
测试
Redis只允许,主机写,从机读
主机写
从机读
从机不能写
主机断开连接,从机依旧连接主机,但是没有写操作,如果从机中途恢复正常,从机依旧可以获取主机写的内容
如果使用命令行配置,从机重启,就会变为主机(只有变为从机,才能获取之前主机内容)
从机断开连接,期间,主机继续写新内容,只要从机恢复,就可获得主机写的新内容
Slave 启动成功连接到 Master 后会发送一个 sync 命令
Master 接收到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,Master 将传送整个数据文件到 Slave,并完成一次完全同步。
全量复制:而 Slave 服务在接收到数据库文件数据后,将其存盘并加载到内存中
增量复制:Master 继续将新的所有收集到修改命令依次传给 Slave,完成同步
但是只要重新连接 Master,一次完全同步(全量复制)将被自动执行。
8、宕机手动配置主机
slaveof no one # 如果主机断开连接,从机可以使用该命令,让自己变为主机,其他节点连到该节点
如果主机回来了,也没有从机连接上它。