Redis主从复制
1. 主从复制概述
- 主从复制,是指将一台
Redis
服务器的数据,复制到其他的Redis
服务器。将前者称为主节点(master
),后者称为从节点(slave
) - 在
Redis
中,数据的复制都是单向的,只能由主节点到从节点,主机以写为主,从机以读为主 - 主从复制,读写分离!大部分时候操作者都是在进行读取数据操作,主从复制可用来减缓服务器的压力;减少数据损失的风险等
# 查看主从复制情况
info replication
主从复制的作用主要包括︰
- 数据冗余︰主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
- 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
- 负载均衡∶在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写
Redis
数据时应用连接主节点,读Redis
数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。 - 高可用基石︰除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是
Redis
高可用的基础。
2. 环境配置
从不纸上谈兵,上代码!!!
测试一台主机+两台从机
,只配置从机数据库,不修改主机数据库
首先复制出三个配置文件来保证三台redis
机器的加载,表示我们三个机器的启动端口为6380
,6381
,6382
需要修改的文件内容,特别注意,现利用其中一个文件举例,如下
- 修改端口号:
port
- 修改
PID
名称:pidfile
- 修改日志名称:
logfile
- 修改
RDB
名称:dump.rdb
之后按照不同的配置文件启动不同的redis
服务
redis-server redisMaster80.conf
redis-server redisSlave81.conf
redis-server redisSlave82.conf
查看后台启动程序,如果三个全部存在表示启动成功
ps -ef | grep redis
如图所示,现已开启三台服务器,端口分别为6380
,6381
,6382
3. 一主二从伪集群搭建
在没有配置前,三台都默认是主机master
info replication
现需实现一台主机(6380)+两台从机(6381,6382)
3.1 临时配置
临时配置通过命令行生效,现前往6381
所在的服务器(6382
配置同样),执行命令,表示将其变为6380
的从机
slaveof 127.0.0.1 6380
再次查看6381
主从复制情况,已变为从机
info replication
查看主机6380
主从复制情况,拥有两台从机
如果主机断开,可使用以下命令将自己变为主机,其余的节点可手动连接到自己
就算主机重新连接,自己依旧为主机
slaveof no one
3.2 永久配置
永久配置需要修改配置文件redis.conf
,搜索关键字replicaof
若是填写这个关键字,则启动之后默认为从机,所以修改从机的配置文件即可
# 填写主机ip地址和端口
replicaof <masterip> <masterport>
# 填写主机密码(如果存在)
masterauth <master-password>
3.3 细节
全量复制:从机每次连接到主机,都可以获取主机中的全部数据
增量复制:主机每次添加新的值,从机都可以获取
原理
- 主机可以写入数据,从机自动可读取数据
- 从机不能写入数据,写入则报错
- 主机断开连接,从机依旧可以读取数据;当主机重新连接,依旧可以写入数据
- 如果使用命令行配置主从复制(临时),如果从机重启,则会变回主机;但是如果重新变为从机,则数据全部可再次获取
3.4 常见模型
一主二从
贪吃蛇
4. 哨兵模式
概述
-
主从切换技术的方法是∶当主服务器宕机后,需要手动把一台从服务器切换为主服务器
-
存在的缺点:需要人工干预,费事费力,还会造成一段时间内服务不可用
-
哨兵模式:能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库
-
哨兵模式原理:哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待
Redis
服务器响应,从而监控运行的多个Redis
实例 -
通常情况下,哨兵模式会存在多个哨兵(至少3个以上,为奇数),在监控节点的同时,哨兵之间互相监控
配置
- 在配置文件目录下
/usr/local/bin/myRedisConfig
,新建哨兵文件sentinel.conf
(千万不能写错),添加如下内容
# 格式如下,其中最后的1表示一旦主机下线,则让从机进行投票
sentinel monitor <监控器名称> <主机节点ip> <启动端口> 1
# 举例
sentinel monitor myRedis 127.0.0.1 6380 1
- 启动哨兵模式,调用刚才编辑的配置文件
redis-sentinel sentinel.conf
此时的主机是6380
,从节点是6381
和6382
- 当主机断开,哨兵模式便启动,自动选举新主机,此时
6082
成为了新主机
再次查看6382
已经变为主机
- 当旧主机
6380
再次连接,将会变成新主机6382
的从节点
优缺点
优点:
- 哨兵集群,基于主从复制模式,所有的主从配置优点
- 主从可以切换,故障可以转移,系统的可用性就会更好
- 哨兵模式就是主从模式的升级,手动到自动。更加健壮
缺点:
Redis
不好在线扩容,集群容量一旦到达上限,在线扩容十分麻烦- 实现哨兵模式的配置其实是很麻烦的,存在很多配置选择