【Redis 进阶之路】3. Redis 主从 以及哨兵

这篇具有很好参考价值的文章主要介绍了【Redis 进阶之路】3. Redis 主从 以及哨兵。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Redis 主从 以及哨兵

单实例Redis 不足:

【Redis 进阶之路】3. Redis 主从 以及哨兵

上述的是一个单实例的Redis。 我们可以先分析下有哪些不足:

  1. 单点故障 (是每个单实例必须面对的问题)
  2. 容量有限 (Redis毕竟是缓存型数据库,容量取决于服务器分配的容量,但容量毕竟是有限的)
  3. 压力大(如果出现高并发的场景,所有查询的压力都集中在Redis上)

所以我们的目的就是针对每个不足进行修复。

我们先来了解下 一些前置知识。

Redis 主备 认识

【Redis 进阶之路】3. Redis 主从 以及哨兵

以上示意图就是主备 大致含义。

  • 从一定程度上主备解决了单实例的单点故障。因为如果主Redis 如果因为某些原因停止提供服务,可以启动备Redis 继续工作。

  • 但是依旧无法解决容量有限 以及压力大 的问题。因为从始至终都是一台Redis实例在工作。

Redis 主从 认识

【Redis 进阶之路】3. Redis 主从 以及哨兵

以上示意图就是主从的大致含义

  • 因为一旦master Redis停止服务后,slave Redis可以晋升为master,继续提供服务。所以给单点故障提供了保障
  • 部署主从后,一般来说master 节点负责写数据。slave 节点服务读数据。这样可以有效的避免所有socket请求,都访问一个节点,从而降低了压力。

一般我们生产环境中会部署主从。所以我们会以主从来做详细的讲解

数据的一致性

保证数据的一致性是分布式部署的通病。按主从部署来讲,虽然数据已经写入到master 节点,但是需要master节点往slave 节点同步数据。在这个同步的过程中可能因为网络等种种原因,无法正常的同步。这就面临着数据一致性的问题。

接下来我们分析几种数据一致性的方案:

强一致性

【Redis 进阶之路】3. Redis 主从 以及哨兵

如果想要实现数据的强一致性,master节点必须等待slave节点返回正确的结果。但是实际的业务场景中,会遇到各种问题导致slave节点延迟 或是 无法返回正确的数据,所以相当于master节点写数据失败。使用这种方式会破坏高可用

弱一致性

【Redis 进阶之路】3. Redis 主从 以及哨兵

其实弱一致性的本质就是:通过异步的形式给slave节点发送数据。如果数据发送失败了,会导致主从数据不一致。

最终一致性

【Redis 进阶之路】3. Redis 主从 以及哨兵

其实最终一致性是在弱一致性的基础上做了升级。我们可以利用一些特殊的手段,最大可能性保证数据完整的传输。

比如:master节点可以将数据以同步阻塞的方式,传递给kafka. 由kafka给每个slave节点发送数据。有可能在某一个时点数据是不一致的,但是最终数据是一致性的。

因为kafka给slave节点传递数据是需要时间的,如果此时间段内,数据的查询是高并发的,有可能出现部分用户拿到的数据不一致,分别是同步前 以及同步后的数据。

主从配置过程

接下俩我们实操下主从的配置过程:

【Redis 进阶之路】3. Redis 主从 以及哨兵

步骤1:关闭Redis

也许服务器上启动了redis,如果再配置相同的端口,会出现一些意想不到的情况,所以我们先将redis关闭掉。

【Redis 进阶之路】3. Redis 主从 以及哨兵

通过上述截图中我们会发现仍然有redis 占用6379端口。所以我们需要将其关闭掉,下面列举出两种方式任意选择:

方案 1

直接通过kill命令杀死进程。

kill -9 19191

通过cli 关闭redis

[root@VM-8-3-centos bin]# pwd
/opt/redis/bin
[root@VM-8-3-centos bin]# ./redis-cli shutdown
[root@VM-8-3-centos bin]# ps aux | grep redis
root     20135  0.0  0.0 112812   980 pts/0    S+   15:40   0:00 grep --color=auto redis
[root@VM-8-3-centos bin]#
步骤2:配置主从的前置工作

创建文件

cd /opt
mkdir -p redis-replica/master
mkdir -p redis-replica/slave1
mkdir -p redis-replica/slave2

复制redis 配置文件

这里我们直接使用shell 来移动文件

  1. 创建并编辑 sh文件
vi mv-redis.sh
  1. 直接将下面的内容复制到sh中
#!/bin/bash

cp -r /opt/redis/bin/* /opt/redis-replica/master
cp -r /opt/redis/bin/* /opt/redis-replica/slave1
cp -r /opt/redis/bin/* /opt/redis-replica/slave2
  1. 通过命令执行shell
/bin/bash mv-redis.sh

【Redis 进阶之路】3. Redis 主从 以及哨兵

步骤3:修改配置文件

为了不影响我们之前的单机版Redis,我们修改主从的配置

修改master 节点配置

修改前

# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
port 6379

修改后

# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
port 6380

修改slave1 节点配置

修改前

# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
port 6379

修改后

# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
port 6381

指定 master节点:我们需要在slave 配置文件中指定master节点

修改前

# 3) Replication is automatic and does not need user intervention. After a
#    network partition replicas automatically try to reconnect to masters
#    and resynchronize with them.
#
# replicaof <masterip> <masterport>

修改后

# 3) Replication is automatic and does not need user intervention. After a
#    network partition replicas automatically try to reconnect to masters
#    and resynchronize with them.
#
replicaof 127.0.0.1 6380

如果是不同的服务器。此处的127.0.0.1 可以修改为 指定的IP。 但是如果服务器上有密码就需要指定字段masterauth

修改slave2 配置文件

跟slave1 修改方式保持一致。只不过端口为6382

步骤4:启动服务

这次我们还是通过shell 进行启动以及关闭

#!/bin/bash

cd /opt/redis-replica/master
./redis-server ./redis.conf


cd /opt/redis-replica/slave1
./redis-server ./redis.conf


cd /opt/redis-replica/slave2
./redis-server ./redis.conf

执行shell

cd /opt/redis-replica
/bin/bash setup.sh

【Redis 进阶之路】3. Redis 主从 以及哨兵

通过上述截图中我们看到,我们的多个redis 实例是启动成功的。

步骤5:查看 启动状态

【Redis 进阶之路】3. Redis 主从 以及哨兵

步骤6:查看 主从信息

我们是可以通过命令info replication 来查看在master节点中 追随了几个slave节点。

【Redis 进阶之路】3. Redis 主从 以及哨兵

主节点设置值

【Redis 进阶之路】3. Redis 主从 以及哨兵

从节点可以读取

【Redis 进阶之路】3. Redis 主从 以及哨兵

步骤7:主从配置总结

如果看到这里,以为主从配置就结束了吗?不不不,如果以为就这样结束了, 那就大错特错了。上述步骤虽然进行了主从部署,但是master节点负责写数据,slave 节点负责读数据。如果master节点宕机了,也就是意味着Redis就不具备写的功能,基本算是废了。

如果是人工发现master节点宕机了,会将slave节点升级为master节点,其他的slave节点跟随新的master节点。

那么我们接下来分析的哨兵,就实现了该功能。应该由人做的事情,将其交给第三方插件做

哨兵

在主从部署中默认是只有主节点具备写的能力,而从节点只能读。如果主宕机,整个节点不具备写能力。但是如果这是让一个从变成主,整个节点就可以继续工作。即使之前的主恢复过来也当做这个节点的从即可。

Redis的哨兵就是帮助监控master 节点的,当节点出现宕机等情况,帮助重新选取主。

Redis中哨兵支持单哨兵和多哨兵。单哨兵是只要这个哨兵发现master宕机了,就直接选取另一个master。而多哨兵是根据我们设定,达到一定数量哨兵认为master宕机后才会进行重新选取主。我们以多哨兵演示

多哨兵模式下,选择几个合适呢???

此时我们的多哨兵节点有5个

【Redis 进阶之路】3. Redis 主从 以及哨兵

全部哨兵节点

当master节点因为某种原因停止服务,可能所有的哨兵都检测到了。但是因为网络原因无法进行汇总,导致4个哨兵认为master宕机了,一个哨兵迟迟没有回应。

这种部署方式 有点类似于 数据强一致性。会破坏可用性。

一个哨兵节点
  1. 如果是一个哨兵就可以判断master 节点是否宕机的话,会造成判断结果不精准,因为会有很多原因造成哨兵判断失误,例如:网络
  2. 但是如果每个哨兵结果都不同的话,会发生一种情况:脑裂
n/2+1 节点
  1. 为了增加结果的准确性,我们建议是过半的哨兵如果判断master 节点宕机的话,那master 节点就是宕机了
  2. 这种方式也避免了脑裂的情况发生。

如果是部署4台哨兵的话,>=3台认为master宕机了,我们就认为宕机
如果是部署5台哨兵的话,>=3台认为master宕机了,我们就认为宕机

所以为了更好的分区容忍性,我们是建议部署奇数台哨兵。

哨兵配置过程

创建目录

mkdir -p /opt/redis-replica/sentinel
cp /opt/redis-replica/master/redis-sentinel /opt/redis-replica/sentinel

从之前的解压目录 复制配置文件

cp /tmp/soft/redis-5.0.14/sentinel.conf /opt/redis-replica/sentinel/

【Redis 进阶之路】3. Redis 主从 以及哨兵

复制多份配置文件,修改配置文件

【Redis 进阶之路】3. Redis 主从 以及哨兵
三个配置文件 修改内容类似,如下内容:

port 26379
daemonize yes
logfile "/opt/redis-replica/sentinel/26379.log"
sentinel monitor mymaster 127.0.0.1 6380 2
启动sentinel

【Redis 进阶之路】3. Redis 主从 以及哨兵

杀死master节点,主动自动切换

【Redis 进阶之路】3. Redis 主从 以及哨兵
【Redis 进阶之路】3. Redis 主从 以及哨兵

等杀死master节点后,等待一段时间后,通过哨兵,第一个从节点升级为master节点了。文章来源地址https://www.toymoban.com/news/detail-414413.html

到了这里,关于【Redis 进阶之路】3. Redis 主从 以及哨兵的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis 主从复制 哨兵 集群

    主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能

    2024年02月11日
    浏览(36)
  • Redis主从复制、哨兵实战

    环境:linux centos7.x ,虚拟机3台 版本:redis-6.2.6 1.下载安转redis 下载地址 wget https://download.redis.io/releases/redis-6.2.6.tar.gz 解压 tar -zxvf redis-6.2.6.tar.gz 移动目录 mv redis-6.2.6 /usr/local/redis 编译   cd /usr/local/redis         make install PREFIX=/usr/local/redis 2.修改配置文件 redis.conf  修改为

    2024年02月03日
    浏览(29)
  • Redis---主从复制 & 哨兵

    目录 一、主从复制 1、什么是主从复制呢? 2、案例演示  2.1  配置文件   2.2   一主二仆 2.2.1 相关题目: 2.3  薪火相传    反客为主 3、复制原理和工作流程 3.1、slave启动,同步清初 3.2  首次连接,全量复制 3.3  心跳持续,保持通信(和TCP的心跳数据包很像)  3.4  进入

    2024年02月05日
    浏览(26)
  • redis主从复制、哨兵与集群

    目录 一、概述 二、redis主从复制 1、概念 2、主从复制的作用 3、主从复制流程 4、搭建Redis 主从复制实验 ①在三台服务器上安装redis (1)关闭防火墙和安全机制 (2)修改内核参数 (3)安装redis (4)创建redis工作目录 (5)准备环境变量 (6)定义systemd服务管理脚本 ②修改

    2024年02月03日
    浏览(33)
  • Redis 主从配置、哨兵、集群模式

    目录 Redis 主从复制  主从复制的作用: 主从复制流程: 搭建Redis 主从复制 安装 Redis 环境准备 修改内核参数 安装redis 创建redis工作目录 环境变量 定义systemd服务管理脚本 修改 Redis 配置文件(Master节点操作) 修改 Redis 配置文件(Slave节点操作) 验证主从效果 Redis 哨兵模式

    2024年02月12日
    浏览(46)
  • redis的主从复制、哨兵、集群

    主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。 原理: 主从关系确定好后,开启从节点时,会发送一个sync的同步命令给主节点,主节点接收到后会把redis内存

    2024年02月06日
    浏览(31)
  • 搭建Redis主从集群和哨兵

    说明:单机的Redis存在许多的问题,如数据丢失问题、高并发问题、故障恢复问题、海量数据的存储能力问题,针对这四个问题,对应解决方式有:数据持久化(参考:http://t.csdn.cn/SSyBi)、搭建主从集群、Redis哨兵和搭建分片集群; 本文介绍搭建Redis主从集群和哨兵,用以解

    2024年02月16日
    浏览(28)
  • 3.Redis主从复制、哨兵、集群

    Redis主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave):数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器都是主节点:且 一个主节点可以有多个从节点(或没有从节点),但一个从节点只

    2024年02月12日
    浏览(51)
  • redis之主从复制、哨兵、集群

    在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 高可用的计算公式是1-(宕机时间)/(宕机时间+运行时间)有点类似与网络传输的参数误码率,我们用9的个数表示可用性: 2个9:99%,一年内宕

    2024年02月11日
    浏览(36)
  • 图解Redis,Redis主从复制与Redis哨兵机制

    🏆作者简介: 哪吒 ,CSDN2022博客之星Top1、CSDN2021博客之星Top2、多届新星计划导师✌、博客专家💪 , 专注Java硬核干货分享,立志做到Java赛道全网Top N。 🏆本文收录于 Java基础教程系列(进阶篇) ,本专栏是针对大学生、初级Java工程师精心打造, 针对Java生态,逐个击破,

    2024年01月18日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包