redis学习-主从复制和哨兵模式

目录

1. 主从复制,读写分离

        1.1 介绍

        1.2 使用命令介绍

        1.3 实现

        1.4全量复制和增量复制

2.哨兵模式


1. 主从复制,读写分离

        1.1 介绍

        指的是将一台redis服务器中的数据复制到其他redis服务器,前者称为主机,后者称为从机,并且只能从主机复制数据到从机,从机不能复制给主机;主机主要负责写操作,从机则主要负责读操作,由于在日常应用中读操作频率较高,所以这样做可以减轻服务器的负担。

        其作用有:

  • 数据冗余:将主机中的数据复制给从机实现了数据的热备份,是持久化之外的一种数据冗余方式。
  • 故障恢复:当主机出现故障时,可以利用从机中复制的数据实现快速的恢复。
  • 负载均衡:主机主要提供写服务,从机主要提供读服务,读写分离可以让从机分担主机的负载,能够大大提高服务器的并发量。
  • 高可用的基础:主从复制是哨兵和集群实施的基础,所以说是高可用的基础。

        1.2 使用命令介绍

  • info replication

        查看当前服务器的信息,role为master代表当前服务器是主机,为slave表示从机;connected_slaves表示连接的从机数。

  • slaveof 主机ip 端口号

        用于给从机指定主机,使用该命令后其服务器信息的role自动变为slave,如果主从机在同一机器上则主机ip为127.0.0.1;只用配置从机即可,因为默认情况下所有服务器都是主机。不过使用命令slaveof配置从机这种主从关系是暂时的,需要修改从机的配置文件中的replication板块才是永久的。具体修改项见图片。

  • slaveof no one

        使用该命令可以手动使从机变为主机,一般在主机断开连接时使用,随后可以手动设置其他从机连接到这个主机上。要注意的是,如果原来的主机重新启动,这些从机不会自动连接到那个主机,这就相当于臣子的谋权篡位。可以这么理解:slaveof表示从属于,所以从属于no one就是不属于任何服务器,也就是变成主机了。

        1.3 实现

        由于只有一台服务器,所以通过在一台服务器上开启多个redis服务器来简单实现:

        可以通过复制多份配置文件来分别用于主机和从机,每份配置文件的port、pidfile、logfile、dbfilename要修改进行区分,当然不同机器上搭建集群可以不用改。使用slaveof命令来演示,当配置好主机和从机后,从机将自动禁用写操作,只能执行读操作,并且主机更新的数据会自动复制到从机中。

        首先准备一个主机和两个从机的配置文件,直接使用拷贝命令 cp redis.conf redis79.conf (80和81也是这样拷贝) 把默认配置文件复制3份,一个集群最基础也是一主二从:

        然后分别配置:

        主机的redis79.conf:

        端口配置为6379,端口号是关键,端口号不同启动的服务器才是不同的服务器。

        pidfile配置,用来存放主机进程的pid。         

        logfile配置,这是日志文件,通过区分日志文件防止三台服务器的日志都写到一个日志文件上(因为默认都是用的标准输出)。

        dbfilename配置,这是rdb持久化的文件,通过区分快照文件防止三台服务器的快照信息存放在同一个文件上(因为默认的rdb文件都是dump.rdb)。  

        两台从机的配置文件按照主机的配置文件修改即可,只需要将6379都改成6380或6381。

        然后开启三个窗口,分别使用配置文件6379.conf、6380.conf、6381.conf启动服务器,并通过redis-cli -p 6379、redis-cli -p 6380、redis-cli -p 6381分别连接到对应的服务器:

        此时使用info replication命令可以查看到该服务器的replication板块的信息,以6379服务器为例:

        然后让6379和6381两个服务器使用slaveof命令将这两个服务器变成6380的从机,由于是在同一个redis服务器上进行演示,所以地址就是本机的端口号为6380的服务器,所以使用的命令是slaveof 127.0.0.1 6380。

        现在再使用info replication查看这三个服务器就会发现,6379和6381两个的role都变成了slave,也就是从机,而6380中显示连接到该服务器的从机数为2:

        6379:

        补充:

  • master_link_status即为所属主机的在线状态,up表示主机正常运行,down表示主机已断开连接,断开连接可以是手动关闭主机,也可以是主机出现问题宕机了。
  • slave_read_only即该从机是否仅支持读操作,1代表是,0代表否。因为redis默认从机只能进行读操作,只有主机才能进行写操作,所以默认情况下该值为1。 那如果该服务器既是一个服务器的从机又是另一个服务器的主机呢?答案也是仅能执行读操作,因为它有从机的身份,从机默认都是仅读。

        6381:

        6380:

        这样一主二从的简易集群就搭建好了。 下面演示手动更换主机的过程:

        先使用shutdown命令关闭6380服务器,然后在6379和6381服务器使用info replication命令就会发现它们的所属主机还是本机的6380服务器,但master_link_status变成了down,说明主机已经断开连接。以6379为例:

        随后对6379服务器使用slaveof no one命令使其变为主机,并手动使用命令slaveof 127.0.0.1 6379让6381服务器变成其从机:

         6381:

        6379: 

         此时让6380重新连接,再对这三个服务器使用info replication命令就会发现,6380的从机连接数变成了0,6379仍是主机,6381仍是6379的从机。

        1.4全量复制和增量复制

        全量复制:主机将所有的数据收集之后传输给从机,全量复制发生在从机第一次连接主机或者重新连接主机的情况。
        增量复制:主机仅将修改的数据传输给从机,增量复制发生在从机正常连接且主机执行了更新操作的情况。

2.哨兵模式

        这是一种自动切换主机的故障恢复模式,由多个哨兵分别监视各个服务器,当一个哨兵监测到主机断开连接时,此时称为主观下线,还需要让其他哨兵检测这个主机的状态;当其他哨兵中认为这个主机断开连接的哨兵达到一定数量时,就会判定主机已经断开连接,这时就称之为客观下线。随后由某个哨兵发起投票,从正常工作的从机中选取一个作为主机,选取主机之后会通过发布订阅模式告诉其他从机连接到新的主机上。要注意的是,如果之前的主机重新连接成功,会被归并到新主机的从机中

        具体实现:
        新建一个sentinel.conf配置文件,在其中加入:

        sentinel monitor 哨兵名(自己命名) 主机ip 主机端口号 num

        即可监控主机,最后的num代表需要有指定数量个哨兵同意切换才能切换主机 ;随后执行命令redis-sentinel sentinel.conf 就能开启哨兵模式了。

        演示:

        先对三个服务器使用slaveof no one变成主机以便演示哨兵模式,然后再开启一个新的窗口用于配置哨兵并开启哨兵模式:

        在新窗口使用命令vim sentinel.conf即可创建哨兵的配置文件并进行配置:

        随后执行命令redis-sentinel sentinel.conf开启哨兵模式,出现以下界面表示开启成功:

         再让6379和6381两个服务器连接到6380使其变为6380的从机,此时哨兵界面就会弹出信息6380服务器增加了6379和6380两个从机(可能要等一小会儿,因为哨兵是每隔一定的时间去查看有无变动):

        随后对6380使用shutdown命令使其断开连接,哨兵在监测到主机6380断开连接后便会自动选择剩下从机中的其中一个作为新主机,并自动让其他从机连接到这个新主机上(同样是需要等一会儿):

        从上图中的两个"+slave"可以看出哨兵自动将6379和6380两个服务器归到了6381的从机中,也就是说哨兵在转换主机时,不仅将连接到原主机的所有从机归到了新主机的从机中,也将原主机归到了新主机的从机中

        这时对6379和6381使用info replication命令就会发现6381变成了主机,6379变成了它的从机(这里需要使用exit先退出再重新使用redis-cli命令连接一下):

         6379:

        6381:

        这里或许有点疑问,上面我们说哨兵在转换主机时也会将原主机也就是6380归到新主机的从机中,但这里为什么6381的connected_slaves是1,并且只有6379这一个从机的信息呢?

        这是因为这里仅显示的是在线的从机信息,6380服务器已经被我们shutdown了,所以没有显示出来。现在重新启动6380服务器,再使用info replication命令就会发现6380变成了6381的从机,6381的从机信息也发生了改变(重新开启服务器6380后需要等待哨兵检测到之后再使用info replication命令才能查看到相应的变化,因为哨兵是在检测到6380重新开启后才会自动执行将6380归到6381的从机的操作,毕竟处于关闭状态的服务器不能执行任何操作):

        最后再来讲一下哨兵模式的优缺点:

        优点:

  • 哨兵模式是基于主从复制的,所以主从复制的优点哨兵模式都有。
  • 主从可以切换,能够自动执行故障转移(也就是自动执行选举新主机并自动让从机连接到新主机等操作),系统的可用性更好。
  • 哨兵模式就是主从复制的升级,由手动变为自动,更加健壮。

        缺点:

  • redis不容易在线扩容,集群容量一旦达到上限,再进行在线扩容就会十分麻烦。
  • 哨兵模式的配置有很多选择,配置起来较为麻烦。上面只是演示了简易的哨兵模式,所以配置的很简单,实际上配置哨兵模式有很多参数可以配置:

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/504650.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++刷题篇——04找等值元素

一、题目 二、解题思路 1、分割后放进二维数组 2、使用map,key为数值,value为其坐标 3、遍历二维数组元素,再在map中找该元素对应的value值(二维数组形式),倘若value.size为1,那直接返回-1&…

嵌入式第一部分-第一集:ARM那些你得知道的事

ARM:Advanced RISC Machine,先进精简指令集机器 ARM公司只做设计,不生产。 国内IC生产厂商:华为海思、全志、瑞芯微、MTK(联发科) 扩展:ARM的商业模式了解。 使用三星S5PV210开发板进行视频的讲…

改进的图像LSB加密算法:Matrix encoding embedding

参考文献1 Visually secure image encryption using adaptive-thresholding sparsification and parallel compressive sensing 算法实现 简单说明 算法步骤概述 定义函数f:这个函数用于计算给定码字b的一个特定值,此值将与秘密信息x进行比较。这个计算涉及到将码字b的每一…

基于springboot+vue+Mysql的新生宿舍管理系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

Redis命令-Set命令

基础篇Redis 4.7 Redis命令-Set命令 Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征: 无序元素不可重复查找快支持交集.并集.差集等功能 Set类型的常见命令 …

Linux:查看系统各个组件性能的方法

查看cpu top 还有更为直观的 htop 可以同时看到,内存占用,cpu占用,交换内存的占用 vmstat 是比较综合的可以看到内存,交换内存,io吞吐,系统,cpu 查看内存 free -h 可以看懂内存的使用情况 …

web 技术中前端和后端交互过程

1、客户端服务器交互过程 客户端:上网过程中,负责浏览资源的电脑,叫客户端服务器:在因特网中,负责存放和对外提供资源的电脑叫服务器 服务器的本质: 就是一台电脑,只不过相比个人电脑它的性能高很多,个人电脑中可以通过安装浏览器的形式,访问服务器对外提供的各种资源。 个人…

scratch小动物的晚会 2024年3月中国电子学会图形化编程 少儿编程 scratch编程等级考试一级真题和答案解析

目录 scratch小动物的晚会 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、 推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 …

CVAE-GAN——生成0-9数字图像(Pytorch+mnist)

1、简介 CVAE-GAN(Conditional Variational Autoencoder Generative Adversarial Network)是一种混合型生成模型,结合了条件变分自编码器(CVAE)和生成对抗网络(GAN)的思想。在CVAE-GAN中&#…

我的C++奇迹之旅相遇:支持函数重载的原理

文章目录 📝前言🌠 C支持函数重载的原理:名字修饰(name Mangling)🌉不同编译器不同函数名修饰规则 🌠Windows下名字修饰规则🚩总结 📝前言 函数重载概念 函数重载:是函数的一种特殊…

加密/ 解密 PDF:使用Python为PDF文档设置、移除密码

在数字化时代,文档的安全性变得越来越重要。特别是对于包含敏感信息的PDF文件,确保其不被未经授权的人员访问或修改是至关重要的。本文将介绍如何使用Python在PDF文档中设置密码,以及如何移除已经设置的密码。 目录 PDF加密基础知识 Pytho…

大话设计模式之建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,旨在通过将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。 在建造者模式中,通常包含以下几个角色: Director(指挥…

新增收货地址

目录 🧂1.创建controller层 🥓2.创建service层 🌭3.注意细节 🍿4.避免dao数据暴漏 1.创建controller层 controller不做逻辑操作,只接受前端的数据 1.添加Api设置swagger模块名称2.RestController以json形式返回…

java计算机网络(一)-- url,tcp,udp,socket

网络编程: 计算机网络 计算机网络指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 网络协议…

C#.net8创建webapi,使用SqlSugar,仓储模式,DTO,服务层,控制层的综合应用(企业级)

本文源码地址: https://download.csdn.net/download/u012563853/89036104 源码中,也有详细的注释说明。 代码总览: 这是一个综合性比较强的文章,需要有一定的基础,没有基础的人,看了后,会全面的了解一下,有基础的人,看了后会加强认识,更加的巩固,直接在项目中去应…

vue3全局控制Element plus所有组件的文字大小

项目框架vue-右上角有控制全文的文字大小 实现&#xff1a; 只能控制element组件的文字及输入框等大小变化&#xff0c;如果是自行添加div,text, span之类的控制不了。 配置流程 APP.vue 使用element的provide&#xff0c;包含app <el-config-provider :locale"loca…

mybatis的基于注解和xml的两种实现方式详解

文章简介 本文介绍了springbootmybatis实现数据库操作的两种实现方式&#xff0c;经测试均可运行使用。整体而言注解更加简便&#xff0c;但面对一些复杂查询&#xff0c;可能需要使用到注解方式。 注解方式 pom依赖&#xff1a; <dependencies><!--连接数据库--&…

Wasm初上手

总之也是为了扩宽技术面吧。。。我也不知道为什么就想试试了&#xff0c;就酱。 参考阅读&#xff1a;极客时间《WebAssembly入门课》 安装wasm的编译器Emscripten。Emscripten 是一个“源到源”语言编译器工具集&#xff0c;这个工具集可以将 C/C 代码编译成对应 JavaScript 代…

冒泡排序---算法

1、算法概念 冒泡排序&#xff1a;它重复地走访要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排序完成。这个算法越小的元素会经由交换慢慢“浮”到…

Linux企业级别日志的查找

企业级别日志的查找 查看mysql数据库的日志错误日志&#xff08;Error Log&#xff09;查询日志&#xff08;General Query Log&#xff09;慢查询日志&#xff08;Slow Query Log&#xff09;事务日志&#xff08;Transaction Log&#xff09;二进制日志&#xff08;Binary Lo…