Redis主从复制和哨兵模式

news2024/11/22 20:55:27

Redis主从复制

概念

主从复制,是指将一台Redis服务器的数据,复制到其他的Reds服务器。前者称为主节点(master / leader),后者称为从节点(slave / follower)。

数据的复制是单向的,只能由主节点到从节点。 Master以写为主,Slave以读为主。

主从复制,读写分离。百分之八十的情况下都是在进行读操作,为了减轻服务器的压力。
最低配一主二从

默认情况下,每台Redis服务器都是主节点,且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

主从复制的作用

  1. 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
  2. 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复。实际上是一种服务的冗余。
  3. 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载。尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量,
  4. 高可用( 集群 )基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

一般来说,要将Redis运用于工程项目中,只使用一台Redis:是万万不能的(出现宕机,至少一主二从),原因如下:

  1. 从结构上,单个Reds服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大:
  2. 从容量上,单个Redis服务器内存容量有限,就算一台Redis服务器内存容量为256G,也不能将所有内存用作Reds存储内存,一般来说,单台Reds最大使用内存不应该超过20G,

电商网站上的商品,一般的都是一次上传,无数次浏览的,“多读少写”。
对于这种场景,我们可以使用如下架构:
在这里插入图片描述

测试

环境配置
只配置从库,不用配置主库

redis默认就是一个master

127.0.0.1:6379> info replication  //查看当前库的信息
# Replication
role:master    //角色 master
connected_slaves:0   //没有从机
master_failover_state:no-failover
master_replid:7ed71356935f54777c3befc344d561e80e39cb7a
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

首先将配置文件redis.conf复制三份

[root-4-2-centos wconfig]# cp redis.conf redis79.conf
[root-4-2-centos wconfig]# cp redis.conf redis81.conf
[root-4-2-centos wconfig]# cp redis.conf redis80.conf
[root-4-2-centos wconfig]# ls
redis79.conf  redis80.conf  redis81.conf  redis.conf

修改对应信息
port:进程占用的端口号
pid(port ID):记录了进程的 ID,文件带有锁。可以防止程序的多次启动。
logfile:明确日志文件的位置
dbfilename:持久化文件位置

  1. 端口
    在这里插入图片描述在这里插入图片描述
  2. pid名字
    在这里插入图片描述
    4.
  3. 日志文件名字
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  4. 修改持久化文件
    在这里插入图片描述vim
    在这里插入图片描述
    在这里插入图片描述

启动

[root-4-2-centos bin]# redis-server wconfig/redis79.conf 
[root-4-2-centos bin]# redis-server wconfig/redis80.conf
[root-4-2-centos bin]# redis-server wconfig/redis81.conf

可以看到启动成功
在这里插入图片描述

一主二从

默认情况下,每台Redis服务器都是主节点

一般情况下只配从机。这里我们约定6379端口的redis为主机,6380和6381端口的redis为从机。

slaveof 主机地址 主机端口

接下来我们将6380和6381端口的redis设置为6379端口redis的从机
在这里插入图片描述
在这里插入图片描述
使用命令的主从配置是暂时的,真实的主从配置应该在配置文件中进行配置的,这样才是永久的。

在这里插入图片描述

细节

主机可以写,从机只能读
主机中的所有信息和数据,都会自动被从机保存

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6380> get k1
"v1"
127.0.0.1:6380> set k2 v2
(error) READONLY You can't write against a read only replica.

主机断开连接,从机依旧连接主机,但是没有写操作。这个时候如果主机回来了,从机依旧可以直接获取到主机的写操作的信息。

如果是使用命令行进行配置的主从,从机如果重启了就会变回master。只要变回从机,就会立马从主机中获取到值。

复制原理
Slave启动成功连接到master后会发送一个sync同步命令

Master接到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,并完成一次完全同步。

全量复制:而salve服务在接收到数据库文件数据后,将其存盘并加载到内存中。
增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步。

但是只要是重新连接master,一次完全同步(全量复制)将被自动执行。

层层链路

上一个master链接下一个slave
在这里插入图片描述
此时中间的slave(master)依旧是从节点,无法写入。

这个时候,如果没有master了,主机断开连接,slave(master)执行slaveof on one让自己变成主机,其他的节点就可以手动连接到最新的主节点。原来的master老大回来了也没用。

哨兵模式

自动选举老大的模式

概述

主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。Redis从2.8开始正式提供了Sentinel(哨兵)架构来解决这个问题。

谋朝篡位的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

基本模型

在这里插入图片描述

在这里插入图片描述
这里的哨兵有两个作用:

  • 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
  • 当哨兵监测到master宕机,会自动将slaver切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

然而一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式
在这里插入图片描述
假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行 failover 过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行 failover [故障转移] 操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线

测试

  1. 配置哨兵配置文件sentinel.conf
//sentinel monitor 被监控的名称 host port 1
sentinel monitor myredis 127.0.0.1 6379 1

后面的数字1,代表master挂了后,slave投票谁接替主机

  1. 启动哨兵
    在这里插入图片描述
  2. master断开
    从slave中随机选取一个作为master
    failover 故障转移
    在这里插入图片描述
    可以看到6381作为master了
    在这里插入图片描述
  3. 如果之前的master(6379)连接回来,也只能作为当前master(6381)的slaver
    在这里插入图片描述

优点:

  1. 哨兵集群,基于主从复制模式,所有的主从配置优点,都有
  2. 主从可以切换,故障可以转移,系统的可用性更好
  3. 哨兵模式就是主从模式的升级,手动到自动,更加健壮

缺点:

  1. Redis不好在线扩容,集群数量一旦到达上限,在线扩容就十分麻烦
  2. 实现哨兵模式的配置是十分麻烦的,里面有很多选择

哨兵模式的全部配置

Example sentinel.conf

//哨兵sentine1实例运行的断开  默认26379
//如果有哨兵集群,我们还需配置每个哨兵的哨兵端口
port 26379

//哨兵sentine1的工作目录
dir /tmp

//哨兵sentinel监控的redis主节点的ip port
//master-name可以自己命名的主节点名字只能出字A-Z、数字0-9、这三个字符".-_"组成。
//quorum配置多少个sentine1哨兵统一认为master主节点失联,那么这时客观认为主节点失联了
//sentinel monitor <master-name> <ip> <redis-port><quorum>
sentinel monitor mymaster 127.0.0.1 6379 2

//当在Redis实例中开启了requirepass foobared授权码 这样所有连接Redis实例的客户端都要提供密码
//设置哨兵sentinel连接主从的密码注意必须为主从设置一样的验证密码
//sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster MySUPER--secret-0123password

//指定多少毫秒之后,主节点没有应答哨兵sentinel此时哨兵主观上认为主节点下线,默认30秒
//sentinel down-after-milliseconds <master-name><milliseconds>
sentinel down-after-milliseconds mymaster 30000

//这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步
//这个数字越小,完成failover所需的时间就越长
//这个数字越大,就意味着越多的slave因为replication而不可用
//可以通过将这个值设为1来保证每次只有一个slave处于不能处理命令请求的状态
//sentinel parallel-syncs <master-name> <numslaves>
sentinel parallel-syncs mymaster 1

//故障转移的超时时间failover-timeout可以用在以下这些方面:
//1.同一个sentinel对同一个master两次fai1over之间的间隔时间
//2.当一个s1ave从一个错误的master那里同步数据开始计算时间,直到s1ave被纠正为向正确的master那里同步数据时
//3.当想要取消一个正在进行的failover所需要的时间
//4.当进行fai1over时,配置所有s1aves指向新的master所需的最大时间。不过,即使过了这个超时,s1aves依然会被正确配置为指向master,但是就不按para11e1-syncs所配置的规则来了
//默认三分钟
//sentinel failover-timeout <master-name><milliseconds>
sentinel failover-timeout mymaster 180000

//SCRIPTS EXECUTION

//配置当某一事件发生时所需要执行的脚本,可以通过脚本来通知管理员,例加当系统运行不正常时发邮件通知相关人员
//对于脚本的运行结果有以下规则:
//若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10
//若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行
//如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同
//一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行

//通知型脚本:当sentine1有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本,
//这时这个脚本应该通过邮件,SMS等方式去通知系统管理员关于系统不正常运行的信息。
//调用该脚本时,将传给脚本两个参数,一个是事件的类型,一个是事件的描述。
//如果sentinel.conf配置文件中配置了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则sentinel无法正常启动成功。
//通知脚本
//sentinel notification-script <master-name><script-path>
sentinel notification-script mymaster /var/redis/notify.sh

//客户端重新配置主节点参数脚本
//当一个master由于failover而发生改变时,这个脚本将会被调用,通知相关的客户端关于master已经发生改变的信息。
//以下参数将会在调用脚本时传给脚本:
//<master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>
//目前<state>总是“failover",
//<role>是“leader"或者“observer"中的一个
//参数from-ip,from-port,to-ip,to-port是用来和旧的master和新的master(即旧的s1ave)通信的
//这个脚本应该是通用的,能被多次调用,不是针对性的
//sentinel client-reconfig-script <master-name> <script-path>
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh

一般由运维来配置

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无公网IP,SSH远程连接Linux CentOS服务器【内网穿透】

目录 视频教程 1. Linux CentOS安装cpolar 2. 创建TCP隧道 3. 随机地址公网远程连接 4. 固定TCP地址 5. 使用固定公网TCP地址SSH远程 本次教程我们来实现如何在外公网环境下&#xff0c;SSH远程连接家里/公司的Linux CentOS服务器&#xff0c;无需公网IP&#xff0c;也不…

Go语言的基础语法以及变量和常量

目录 基础语法 行分隔符 注释 标识符 变量 声明 赋值 作用域 常量 声明 iota 基础语法 行分隔符 在Go程序中&#xff0c;一般一行就是一个语句&#xff0c;不像Java等可以在一行写多个语句一样&#xff0c;而且最后也不需要用";"来结尾。 例如&#xf…

【华为OD机试 2023最新 】箱子之字形摆放(C语言题解 100%)

文章目录 题目描述输入描述输出描述备注用例题目解析C语言题目描述 有一批箱子(形式为字符串,设为str), 要求将这批箱子按从上到下以之字形的顺序摆放在宽度为 n 的空地,请输出箱子的摆放位置。 例如:箱子ABCDEFG,空地宽度为3,摆放结果如图: 则输出结果为: AFG BE C…

Linux Shell编程入门到实战(六)

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

国考省考结构化面试:整体介绍,考试题型,考试流程,仪表着装,如何备考?

国考省考结构化面试&#xff1a;整体介绍&#xff0c;考试题型&#xff0c;考试流程&#xff0c;仪表着装&#xff0c;如何备考&#xff1f; 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#xff0c;而常规国考省考最重…

基于ChatGPT的文档知识库客服系统-支持上传网址/文本/docx等数据

现在&#xff0c;很多公司都有自己的内容知识库&#xff0c;会产生大量的碎片话的内部知识&#xff0c;但是这样内部知识难以整合搜索。 我开发的文档知识库客服系统 gofly.v1kf.com &#xff0c;可以应用于企业内部知识库管理&#xff0c;用户可以使用自然语言提问&#xff0c…

杂谈:铜钱儿

我个人是比较喜欢铜钱儿的。 收藏其实谈不上&#xff0c;因为我不买什么名品&#xff0c;都是玩儿一些屌丝钱&#xff0c;穷嘛&#xff0c;这个也没啥好掩饰的~ 瞎聊点儿钱币的话题吧。 小时候是家里偶尔能发现铜钱儿&#xff0c;一般都是清朝的&#xff0c;乾隆居多。有时候地…

【苹果IM群发家庭推日历推群发】筛选“兼容性”,默认为高效,挑选“兼容性”视频和图象不操纵HEVC的新格式,承袭使用旧的MPEG格式

推荐内容IMESSGAE相关 作者✈️IMEAE推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容3.日历推 *** …

Vue学习笔记(0504)

此页面对应着创建的Vue项目的显示页面 默认可以从下面的地址进行访问&#xff1a;http://localhost:8080 这里由于创建项目时我们选择了语法规范&#xff0c;所以我们在保存时哪些不符合代码规范的地方就会报错&#xff0c;只有修正代码规范后错误才会消失。 这里可以看出我们…

PyQt5桌面应用开发(7):文本编辑+语法高亮与行号

本文目录 PyQt5桌面应用系列代码编辑和语法高亮的亿点点细节作为用户报表的文本控件作为编辑器的文本控件代码编辑器的需求 代码编辑[^1]语法高亮[^2]小结 PyQt5桌面应用系列 PyQt5桌面应用开发&#xff08;1&#xff09;&#xff1a;需求分析 PyQt5桌面应用开发&#xff08;2&…

三、Spring Cloud Alibaba组件nacos

一、什么是Nacos 官方地址&#xff1a; https://nacos.io/zh-cn/docs/v2/what-is-nacos.html 概念&#xff1a; 服务&#xff08;Service&#xff09;是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理。即集注册中心配置中心服务管理的一个平…

【苹果推IM,苹果iMessage相册推】当Apple APNS推送服务器从您的应用程序接吸取注册消息时,它将为您回到一串devicetoken(很是重要)

推荐内容IMESSGAE相关 作者✈️IMEAE推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者✈️IMEAE推荐内容3.日历推 *** …

养鱼-新手快乐缸阶段的一点总结

这是学习笔记的第 2456篇文章 养鱼这件事情上&#xff0c;除了满足了孩子的希望&#xff0c;也算是满足了自己的一点爱好。 从3月份开始的鱼缸进化到现在&#xff0c;对于养鱼这件事情的态度已经发生了很大的变化&#xff0c;我也趁此机会总结和梳理一下&#xff0c;先来定性我…

第三章:JavaScript 脚本语言(二)

最近发生了好多事情。 一、String对象 String对象是动态对象&#xff0c;需要创建实例后才可以引用其方法与属性。在js中也可以直接使用单引号或者双引号来直接创建实例化的对象。 anchor(name) 为字符串对象内容两边加上html<a name name></a>标记对bi…

【网络】网络基础入门

文章目录 局域网和广域网协议协议概念协议分层数据传输条件 OSI七层模型&#xff08;了解&#xff09;TCP/IP五层&#xff08;四层&#xff09;模型网络传输基本流程报头局域网通信原理以太网(了解)网络传输流程图数据包封装和分用 六、IP与MAC地址 局域网和广域网 独立模式: …

springboot+vue垃圾分类网站(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的垃圾分类网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&a…

苹果备忘录误删了怎么恢复?恢复备忘录的3个方法!

案例&#xff1a;苹果删除的备忘录怎么恢复&#xff1f; 【友友们&#xff0c;苹果备忘录删除的备忘录在哪里可以恢复&#xff1f;有什么方法吗&#xff1f;】 苹果备忘录是日常生活中经常使用的一种记录方式&#xff0c;它可以帮助我们记录生活琐事、工作事项以及其他需要记录…

自动驾驶行业观察之2023上海车展-----车企发展趋势(3)

合资\外资发展 宝马&#xff1a;i7、iX1新车亮相&#xff0c;未来将持续发力电动化、数字化&#xff08;座舱&#xff09; 宝马在本次车展重点展示了电动化产品&#xff0c;新发车型为i7 M70L、iX1、及i vision Dee概念车等车型。 • 展示重点&#xff1a;电动化数字化&…

C/C++每日一练(20230505) 扩展兔子数列、删除重复项、寻找最小值

目录 1. 求尾数与常数之和 &#x1f31f; 2. 删除有序数组中的重复项 &#x1f31f; 3. 寻找旋转排序数组中的最小值 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日…

Selenium原理以及Python从零实现

Selenium简介 Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Google Chrome&a…