Redis主从复制&哨兵模式

搭redis主从复制 与 哨兵模式

实现一主二从。主结点提供写,从结点提供读(主从复制)。当主结点挂掉后,从 从结点中筛选出一个作为主结点(哨兵模式)。从而让Redis再次可以正常的向外提供读写服务。即保证Redis的高可用性

概念
主从复制是指将一台redis服务器上的数据,复制到其他的Redis服务器,前者称为主结点(master/leader),而后者被称为随从结点(slave/follower)。数据在master和slave中只能单向传输,数据是从master传到slave中。master结点可读可写,主要用于读,而slave结点是只能读,用于读。
主从复制的主要作用
1、数据冗余:主从复制实现了数据的热备份,对数据起到了备份作用。当其中一台机器上的redis数据文件丢失,可通过其它设备上的redis的数据文件进行恢复。
2、故障恢复:当master结点宕机之后,slave结点仍可以进行读操作。即此时全由slave结点来提供读服务,即服务冗余。
3、负债均衡:在主从复制的基础上,搭配读写分离,可以让master结点只做写服务,而slave结点只做读服务。因为在80%的情况下,都是在读操作,此时分担master服务器的负载,在读多写少的情况下,可以大大提高Redis的并发量。
4、哨兵模式的基础。哨兵模式基于主从复制。

主从复制搭建

当编译、安装好后redis时,会生成一个bin文件夹
6380端口作为master结点,6381、6382端口作为slave结点。实现一主二从

最终的目录结构
在这里插入图片描述

1、首先创建 存放Redis集群配置的文件夹

mkdir /usr/local/redis/redis-cluster

2、把安装生成的bin文件夹拷贝到Redis集群文件夹下

cp 你的bin文件夹  /usr/local/redis/redis-cluster -r

3、拷贝redis.conf 配置文件到Redis集群文件夹

cp /你配置文件所在目录/redis.conf /usr/local/redis/redis-cluster 

4、切换到/usr/local/redis/redis-cluster目录下

cd /usr/local/redis/redis-cluster

5、创建logs文件。用于存放redis日志

mkdir logs

6、修改redis.conf配置文件
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
7、重命名配置文件,作为master结点的配置文件。

mv redis.conf  redus_6380.conf 

8、拷贝master 配置文件作为slave结点的配置文件

cp redus_6380.conf  redus_6381.conf 
cp redus_6380.conf  redus_6382.conf 

9、修改slave结点的配置文件。为其指定maste的结点信息。

vim redus_6381.conf 

在这里插入图片描述
同理修改 vim redus_6381.conf 配置文件

11、编写启动脚本

vim start.sh

内容如下

#!/bin/bash

./bin/redis-server ./redis_6380.conf
./bin/redis-server ./redis_6381.conf
./bin/redis-server ./redis_6382.conf

12、启动脚本

bash start.sh

查看3个进程是否启动成功
在这里插入图片描述
14、打开3个终端,每个终端启动1个redis客户端进行测试。

 ./bin/redis-cli  -p 6380
 ./bin/redis-cli  -p 6381
 ./bin/redis-cli  -p 6382

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
模拟master宕机

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

当前存在的问题,以及引入 哨兵模式
在这里插入图片描述
:此时可以在其中的一个slave结点终端中敲 slaveof on one 命令,此时就可以将当前的slave结点升级为master结点。该方式需要手动,而我们更想寻找一种可以当master宕机后,能够自动将其中的一个slave升级成master。此时就可以通过哨兵模式
在这里插入图片描述

我们想要让master宕机后,通过哨兵模式从两个slave结点中,筛选出一个来作为master结点,从而使Redis又能对外提供写服务

注:使用哨兵模式时,一般最少是一主二从。

哨兵模式

在当前的目录下,新建 并编辑 sentinel.conf文件。

vim sentinel.conf

内容如下

protected-mode no
# daemonize yes      # 后台模式启动
port 26379
bind 0.0.0.0
sentinel monitor mySentinel 127.0.0.1 6380 1
# 如果有设置redis密码的话,需要添加此命令:sentinel auth-pass <master-name> <password>

在这里插入图片描述

把3个redis服务都启动起来

bash start.sh

在这里插入图片描述
启动sentinel
在这里插入图片描述
在这里插入图片描述

模拟master结点宕机。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

当6380复活了,那么此时6380也只能是slave了。

在这里插入图片描述
在这里插入图片描述
查看redis_6380.conf,发现文件被rewrite(重写了),并且指定主从复制的master结点就是当前最新的master结点,即6382。
由此我们能否推出 哨兵模式就是 哨兵每个一段时间往master发送一次心跳包,当指定时间内发现没有收到master的回复,如果此时是单个的哨兵,那么就会认为master已经宕机了,需要投票,从slave中选出一个来作为master,而从slave到master的过程就是修改配置文件,然后重新加载配置文件的过程。

==================================================================
以上该方式存在什么问题呢?
问题一
如果master挂了,需要等待一段时间等哨兵筛选出新的maser结点,这等待的时间Redis就不能提供写服务,对一些热门网站来说这肯定是不能容忍的。

问题二
上面的方式就只有一个maser结点,只有单个mater来提供写服务,对于一些写频繁的网站来说,单个结点所能提供的写并发是有限的,这也肯定是无法容忍的。

解决:采用Redis集群方式。
上面的方式一般是中小厂用的多。如果是大厂,那么一般都是采用Redis集群方式

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值