redis的主从复制和哨兵模式

redis的集群:

高可用方案:

  1. 持久化
  2. 高可用   主从复制 哨兵模式 集群

主从复制:主从复制是redis实现高可用的基础,哨兵模式和集群都是在主从复制的基础之上实现高可用。

主从复制实现数据的多机备份,以及读写分离(主服务器负责写,从服务器只能读)

缺陷:故障无法自动恢复,需要人工干预,无法实现写操作的负载均衡

主从复制的工作原理:

主节点(master)从节点(slave)组成,数据复制是单向的,只能从主节点到从节点

主从复制节点最少要有三台

  1. 建立连接:slave向主发送一个syn command,请求和主节点建立连接
  2. 主节点收到请求之后,他不管slave是第一次连接还是重新连接,主节点都会启动一个后台进程,执行BGSAVE,主节点会把所有修改数据记录的命令加载到缓存和数据文件之中
  3. 数据文件创建完毕之后,master把数据文件传送给slave,slave会把这个数据文件先保存到硬盘,然后再加载到内存。

主从复制推荐使用AOF,通过AOF文件实现实时持久化,主从节点都开启AOF持久化服务从节点同步的就是AOF文件

主从复制流程图:

主 192.168.120.110

从1 192.168.120.70

从2 192.168.120.10

修改master节点的配置文件

vim /etc/redis/6379.conf

 bind 0.0.0.0                      #70行,修改监听地址为0.0.0.0(生产环境中,尤其是多网卡最好填写物理网卡的IP)

 daemonize yes                     #137行,开启守护进程,后台启动

 logfile /var/log/redis_6379.log   #172行,指定日志文件存放目录

 dir /var/lib/redis/6379           #264行,指定工作目录

 appendonly yes                    #700行,开启AOF持久化功能

/etc/init.d/redis_6379 restart     #重启redis服务

修改slave1节点的配置文件

#修改slave1的配置文件

vim /etc/redis/6379.conf

 bind 0.0.0.0                        #70行,修改监听地址为0.0.0.0(生产环境中需要填写物理网卡的IP)

 daemonize yes                       #137行,开启守护进程,后台启动

 logfile /var/log/redis_6379.log     #172行,指定日志文件目录

 dir /var/lib/redis/6379             #264行,指定工作目录

 replicaof 192.168.120.110 6379       #288行,指定要同步的Master节点的IP和端口

 appendonly yes                      #700行,修改为yes,开启AOF持久化功能​

/etc/init.d/redis_6379 restart  #重启redis

netstat -natp | grep redis      #查看主从服务器是否已建立连接

Slave2节点跟slave1节点操作相同

测试

Master写入数据

Slave1和slave2 只能读无法写

哨兵模式的原理:

哨兵:是一个分布式系统,用于在主从结构之间,对每台redis的的服务进行监控

哨兵模式的投票机制

主节点出现故障时,从节点通过投票的方式选择一个新的master

哨兵模式的结构:

哨兵节点:监控,不存储数据

数据节点:主节点和从节点,都是数据节点

哨兵模式的投票机制:

每个哨兵节点每隔一秒,通过ping命令方式,检测主从之间的心跳线。主节点在一定时间内没有回复或者回复了错误的消息,这个时候,哨兵就会主观的认为主节点下线了,超过半数的哨兵节点认为主节点下线了,这个时候才会认为主节点是客观下线

主节点选举过程:

哨兵节点通过raft算法(选举算法),每个节点共同投票选举出一个新的master,然后新的master实现主节点转移和故障恢复通知

  1. 已经下线的从节点,不会被选为主节点
  2. 选择配置文件当中,从节点优先级最高的replica-priority 100
  3. 选择一个复制数据最完整的从节点

主节点:

cd redis-5.0.7

vim sentinel.conf

#哨兵模式的配置文件

17行

protected-mode no

#解除注释

daemonize yes

#开启后台运行逃兵模式

36行

logfile "/var/log/sentinel.log"

#指定日志文件的存放位置

65行

dir"/var/lib/redis/6379"

#指定数据库存放的位置

85行

sentinel monitor mymaster 192.168.120.110 6379 2

#声明主节点的IP和端口号.2代表至少要有2台服务认为主已经下线才会进行主从切换。一般配置为主从服务器的一半

113行

sentinel down-after-milliseconds mymaster 30000

#服务器宕机的最小时间。单位是毫秒。30秒之内如果主节点但没有响应,主观认为主下线了。时间可以改可以自定义

146行

sentinel failover-timeout mymaster 180000

#服务器宕机的最大时间,180秒之内如果主节点但没有响应,从节点开始投票,客观认为主下线了。时间可以改可以自定义

两台从节点配置和主节点配置一致即可

三台配置完成后需要先起主节点再起从节点

三台主机在redis的源码包中启动哨兵模式

redis-sentinel sentinel.conf &

#启动哨兵模式。&表示后台运行

主节点:

redis-cli -p 26379 info Sentinel

#查看整个集群的哨兵情况

查看主从信息:

tail -f /var/log/redis_6379.log

#查看主节点日志,查看主从信息

模拟故障切换:

可能会有延迟不是立刻切换

ps-elf | grep redis

#查看主节点

kill -9 redis的主进程或者/etc/init.d/redis_6379 stop停止redis都可以测试

测试新主是否可以正常插入数据

测试两从是否可以数据同步

测试旧主机是否还有插入数据

旧主失去写的功能,新主增加写的功能。从2的配置文件指向了新的主

而旧主的配置文件中指向自己的配置将会消失

流程图:

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

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

相关文章

强化学习第一课 Q-Learning

解决问题:从任何位置到6 视频课程地址: 强化学习算法系列教程及代码实现-Q-Learning_哔哩哔哩_bilibili 相应代码: import numpy as np import randomq np.zeros((7, 7)) q np.matrix(q)r np.array([[-1, -1, -1, 0, -1, -1, -1],[-1, …

SpringBoot 日志打印

一. 自定义打印日志 开发者自定义打印日志实现步骤: • 在程序中得到日志对象 • 使用日志对象的相关语法输出要打印的内容. 得到日志对象: //日志工厂需要将需要打印的类的类型传递进去,这样我们才知道日志的归属类,才能更方便的定位到文体类 private static Logger logger …

Vue模板编译

Vue模板编译 Vue生命周期中,在初始化阶段各项工作做完之后调用了vm.$mount方法,该方法的调用标志着初始化阶段的结束和进入下一个阶段,从官方文档给出的生命周期流程图中可以看到,下一个阶段就进入了模板编译阶段(created和befor…

ssm基于web的马病管理系统设计与实现+jsp论文

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,马病信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广大…

基于OpenAI的Whisper构建的高效语音识别模型:faster-whisper

1 faster-whisper介绍 faster-whisper是基于OpenAI的Whisper模型的高效实现,它利用CTranslate2,一个专为Transformer模型设计的快速推理引擎。这种实现不仅提高了语音识别的速度,还优化了内存使用效率。faster-whisper的核心优势在于其能够在…

【网络安全】upload靶场pass1-10思路

目录 Pass-1 Pass-2 Pass-3 Pass-4 Pass-5 Pass-6 Pass-7 Pass-8 Pass-9 Pass-10 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN&#x1…

【六袆 - Framework】vue3入门;vue框架的特点矩阵列举;Vue.js 工作原理

vue框架的特点 Vue.js的特点展开叙述Vue.js的工作原理展开叙述 官方文档: https://cn.vuejs.org/guide/introduction.html Vue.js的特点 ┌────────────────────┬────────────────────────────────────…

一款超酷的一体化网站测试工具:Web-Check

Web-Check 是一款功能强大的一体化工具,用于发现网站/主机的相关信息。用于检查网页的工具,用于确保网页的正确性和可访问性。它可以帮助开发人员和网站管理员检测网页中的错误和问题,并提供修复建议。 它只需要输入一个网站就可以查看一个网…

用友时空KSOA UploadImage存在任意文件上传漏洞

产品简介 用友时空KSOA是建立在SOA理念指导下研发的新一代产品,是根据流通企业最前沿的I需求推出的统一的IT基础架构,它可以让流通企业各个时期建立的IT系统之间彼此轻松对话,帮助流通企业保护原有的IT投资,简化IT管理&#xff0…

开放网络+私有云=?星融元的私有云承载网络解决方案实例

在全世界范围内的云服务市场上,开放网络一直是一个备受关注的话题。相比于传统供应商的网络设备,开放网络具备软硬件解耦、云原生、可选组件丰富等优势,对云服务商和超大型企业有足够的吸引力。 SONiC作为开源的网络操作系统,使得…

《A++ 敏捷开发》-2 改进从团队开始

上一章介绍了丰田方式水面下的七个习惯,但公司应如何有效开展与推行?有哪些误区要注意?我们先看美国东岸某家小印刷公司的故事。 美国费城Weisbord故事 60年代复印机还未普及,很昂贵,所以有不少公司专门为各类公司客…

python+django网上购物商城系统o9m4k

语言:Python 框架:django/flask可以定制 软件版本:python3.7.7 数据库:mysql 数据库工具:Navicat 开发工具pycharm/vscode都可以 前端框架:vue.js 系统使用过程主要涉及到管理员和用户两种角色,主要包含个…

什么是SSL证书?在哪里免费申请?

随着互联网蓬勃发展,人们在日常生活中越来越依赖网络。然而,网络攻击和数据泄露日益猖獗,保护网站和用户信息的安全变得尤为紧迫。在这一背景下,SSL证书成为至关重要的安全措施。 SSL证书的首要功能在于防范网络攻击。相较于不安全…

Factory Method工厂模式(对象创建)

Factory Method(对象创建) 链接:工厂模式实例代码 解析 目的 在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。 如何应对这种变化?如何绕过常规的…

【JavaEE进阶】 初识Spring Web MVC

文章目录 🌴什么是Spring Web MVC?🚩什么是Servlet呢? 🎋MVC 定义🚩再理解Spring MVC 🍀如何学习Spring MVC呢?⭕总结 🌴什么是Spring Web MVC? Spring Web MVC 是基于…

算法刷题:最大异或对(Trie树扩展)、食物链(并查集扩展)

目录 引言一、最大异或对(Trie树扩展)1.题目描述2.解题思路3.代码实现4.测试 二、食物链(并查集扩展)1.题目描述2.解题思路3.代码实现4.测试 引言 这两个扩展题能够让我们更加的熟悉Trie树和并查集的使用,这两道题可以…

Prim(普利姆)算法总结

知识概览 Prim算法分为朴素版Prim算法和堆优化版Prim算法。朴素版Prim算法时间复杂度为,适用于稠密图。堆优化版Prim算法时间复杂度为O(mlogn),适用于稀疏图,由于代码较Kruskal算法复杂,这里就不介绍了。 算法思想 例题展示 题目…

引领手游技术潮流:武汉灰京文化的卓越技术创新与市场推广支持

在数字娱乐领域,手游行业正蓬勃发展,为数以亿计的玩家提供了丰富的娱乐选择。武汉灰京文化,作为该领域的佼佼者,以其强大的技术创新和全面的市场推广支持,为合作伙伴的成功铺平了道路,不仅提升了游戏质量&a…

《深入理解JAVA虚拟机笔记》垃圾回收器

JVM 判定 Java 对象是否为垃圾的方法 引用计数算法 很多教科书判断对象是否存活的算法是这样的: 在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为…

用python画最简单的图案,用python画小猫简单代码

本篇文章给大家谈谈用python画小猫简单100行代码,以及用python画最简单的图案,希望对各位有所帮助,不要忘了收藏本站喔。 Source code download: 本文相关源码 from turtle import * #两个函数用于画心 defcurvemove():for i in range(200): …