Redis 主从复制
文章目录
- [Redis 主从复制](#Redis 主从复制)
-
- [1. 概念](#1. 概念)
- [2. 使用方式](#2. 使用方式)
-
- [2.1 环境配置](#2.1 环境配置)
- [2.2 启动服务](#2.2 启动服务)
- [2.3 建立连接](#2.3 建立连接)
- [2.5 特性 & 问题](#2.5 特性 & 问题)
- [3. 哨兵模式](#3. 哨兵模式)
-
- [3.1 概念](#3.1 概念)
- [3.2 使用方式](#3.2 使用方式)
1. 概念
主从复制是指将一台Redis服务器上的数据复制到其它的Redis服务器上。分为主节点 (master)和从节点 (slave),也称一主多从。
主从复制具有以下特点:
- 数据的复制是单向的,只能从主节点到从节点
- 主节点(master)以写为主,从节点(slave)以读为主
- 默认情况下,每一台Redis服务器都是主节点,且一个主节点可以有多个从节点,但一个从节点只能有一个主节点
主从复制的作用主要包括:
- 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式
- 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复
- 负载均衡:在主从复制的基础上,配合读写分离,实现由主节点提供写服务,从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),从而分担服务器负载,提供Redis服务器的并发量
- 高可用基石:主从复制也是哨兵模式和集群能够实施的基础
在很多时候,我们对于服务器的使用更多是用于读取数据,其次是写入数据,对此使用主从复制可以很大程度上减轻我们服务器的压力!
2. 使用方式
2.1 环境配置
这里我们先开启多个会话来进行模拟,实现一个主节点,两个从节点(第四个用于测试)
之后找到redis.conf文件,并对其进行复制
这里我将redis.conf复制了三份,分别对应后面各自的端口号:
redis79.conf 对应6379端口,主节点
redis80.conf 对应6380端口,从节点
redis81.conf 对应6381端口,从节点
之后对这三个配置文件进行修改,需要修改以下内容:
- 端口
- pid名字
- log文件名字
- dump.rdb名字
这里以redis80.conf为例:
vim redis80.conf
端口号改为对应端口:
进程文件改为对应端口结尾:
日志文件改为对应端口结尾:
rdb文件改为对应端口结尾:
另外两个文件以同样的方式进行修改!
注:如果自己的redis账号设置有密码的话,也需要在从节点的配置文件里加上密码:找到masterauth
并修改
2.2 启动服务
环境配置好后我们就可以来启动redis服务进行测试:
启动成功后,可以通过 info replication
命令查看当前redis节点的状态:
可以看到,最开始三台redis服务器都是主节点(master)!!
2.3 建立连接
启动好服务器后,我们选择准备充当从节点的服务器,这里我们让80端口和81端口充当从节点,79端口作为主节点,并通过命令建立连接:
slaveof host port
建立连接后通过info replication
命令查询可以看到,这两个服务器已经成功连接上主节点6379,同时查看主节点,可以发现主节点下也多了两个从节点:
完成上述步骤后就可以进行使用测试了!
在主节点这边写入值:
通过从节点读取值:
可以看到,从节点能够成功获取到主节点写入的值,但需要注意,从节点无法写入值:
同时通过命令 slaveof no one
可以解除主从复制的连接,重新成为主节点!!
2.5 特性 & 问题
通过上述方式建立的主从复制有以下两个特性:
- 如果这个时候主节点宕机了,从节点依旧能够获取到主节点中的值,只是没有写操作,如果这个时候主机回来了,从机依旧可以直接获取到主机写入的信息
- 如果使用命令行进行主从复制的配置,只要当前服务器重启了,主机本身就会立马变为主节点;同时只要成为从机,就能立刻从主节点中获取值
对于上述主从复制的操作,我们是通过命令的方式来进行连接和创建的,这样有一个弊端,那就是一但我们的主机宕机了,之前该建立起来的主从连接就会消失,还需要我们重新配置从机。
有一种方式就是手动来进行配置,实现永久的主从配置,即配置从节点的conf文件,修改以下内容即可将该主机默认设置为从机
:
还有另一种方式能够实现主从机的高效切换,也是更推荐的方式,那便是哨兵模式!!
3. 哨兵模式
3.1 概念
哨兵模式:当主服务器宕机时,哨兵会通过投票算法将从节点转化为主节点,实现主从节点的自动切换
哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例:
当哨兵检测到主服务器宕机时,会自动(投票之后)将从服务器slave切换成master,然后通过发布订阅模式通知其它的从服务器,修改配置文件,让它们切换连接新的主服务器
同时我们也可以引入多个哨兵来对Redis服务器进行监控,哨兵和哨兵之间也可以互相监控,从而形成多哨兵模式:
当引入多个哨兵时,主服务器发生宕机后需要等到多个哨兵共同认为主服务器不可用且数量达到一定值时,哨兵之间会进行一次投票,投票结果由一个哨兵发起,进行failover(故障转移)操作,即将一个从服务器本身切换成主服务器,切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机!
3.2 使用方式
-
先对哨兵配置文件
sentinel.conf
进行配置(有些reids文件解压后自带该文件内容,则无需修改)vim sentinel.conf
需要配置下面内容:
sentinel monitor master-name host port 1
其中:
- master-name:可自行定义
- host:主机号,一般为127.0.0.1
- port:端口号,一般为6379
- 数字:1表示只要有1个哨兵认为主机存在问题时就进行故障转移操作,2则表示2个哨兵,可自行定义
注:如果服务器redis设置有密码则需要将下面的注释消掉并修改为自己的密码
-
启动哨兵
通过下述命令来启动哨兵:
redis-sentinel sentinel.conf
启动哨兵成功!!
如果这个时候主服务器(6379)发生宕机,则哨兵会在从服务器中选择服务器作为新的主服务器!
同时挂掉的主服务器如果重新登录也只能成为新主服务器的从服务器:
通过命令也能查看到主从服务器之间发生了转换:
以上便是Redis中主从复制和哨兵模式的介绍与使用了!!