Redis高可用之主从复制及哨兵模式

news2024/9/23 3:16:40

一、Redis的主从复制

1.1 Redis主从复制定义

主从复制是redis实现高可用的基础,哨兵模式和集群都是在主从复制的基础之上实现高可用;
主从复制实现数据的多级备份,以及读写分离(主服务器负责写,从服务器只能读)

1.2 主从复制流程

(主从复制推荐使用AOF)

1)若启动一个slave机器进程,则它会向Master机器发送一个sync command命令,请求同步连接

2)无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数据文件中执行bgsave操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中

3)后台进程完成缓存操作之后,Master机器就会向slave机器发送数据文件,slave端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给slave端机器若slave出现故障导致宕机,则恢复正常后会自动重新连接

4)Master机器收到slave端机器的连接后,将其完整的数据文件发送给slave端机器,如果Master同时收到多个slave发来的同步请求,则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的slave端机器,确保所有的slave端机器都正常

1.3 主从复制实操(一主二从)

主从复制架构

20.0.0.91:MASTER
20.0.0.92:SLAVE1
20.0.0.93:SLAVE2

关闭防火墙

systemctl stop firewalld
setenforce 0

修改master配置文件

vim /etc/redis/6379.conf 
--70--
bind 0.0.0.0
#修改监听地址为0.0.0.0,允许所有网段访问

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

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

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

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

/etc/init.d/redis_6379 restart

修改slave配置文件

#salve1、slave2相同操作
vim /etc/redis/6379.conf 
--70--
bind 0.0.0.0
#修改监听地址为0.0.0.0,允许所有网段访问

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

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

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

--288--
replicaof 20.0.0.91 6379
#指定要同步的Master节点的IP和端口

--700--
appendonly yes
#开启AOF持久化功能
​​
/etc/init.d/redis_6379 restart  #重启redis
ss -natp | grep redis      #查看主从服务器是否已建立连接

测试

测试主从复制以及读写分离

 

测试slave断开时,master写入数据,slave恢复正常后能否复制

二、Rdis的哨兵模式

在主从复制的基础上,哨兵引入了主节点的自动故障转移。

2.1 哨兵模式的组成

哨兵节点: 哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。

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

2.2 哨兵模式的原理

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

1).监控: 哨兵会不断地检查主节点和从节点是否运作正常。
每个哨兵节点每隔一秒,通过ping命令方式,检测主从之间的心跳线。
主节点在一定时间内没有回复或者回复了错误的消息,此时哨兵就会主观地认为主节点下线,
超过半数的哨兵节点认为主节点下线时,才会将主节点认为客观下线。

2).自动故障转移: 当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其它从节点改为复制新的主节点。
主节点的选举原则:
已经下线的从节点不会被选为主节点;
选择配置文件当中优先级最高的从节点作为主节点(replica-priority 100);
选择一个复制数据最完整的从节点作为主节点。
(如何实现切换:主节点出现故障时,从节点通过投票的方式选择一个新的master )

3).通知(提醒): 哨兵可以将故障转移的结果发送给客户端。

2.3 哨兵模式实操

修改哨兵节点配置文件

#所有节点相同操作
vim /opt/redis-5.0.7/sentinel.conf
--17--
protected-mode no
#取消注释,关闭保护模式

--21--
port 26379
#Redis哨兵默认的监听端口

--26--
daemonize yes
#指定sentinel为后台启动

--36--
logfile "/var/log/sentinel.log"
#指定日志文件存放路径

--65--
dir "/var/lib/redis/6379"
#指定数据库存放路径

--84--
sentinel monitor mymaster 20.0.0.91 6379 2 
#指定该哨兵节点监控20.0.0.91:6379这个主节点,该主节点的名称是mymaster。
#最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
​
--113--
sentinel down-after-milliseconds mymaster 30000
#判定服务器down掉的时间周期,默认30000毫秒(30秒)

--146--
sentinel failover-timeout mymaster 180000
#同一个sentinel对同一个master两次failover之间的间隔时间(180秒)

启动哨兵模式并查看哨兵状态

#启动三台节点上的哨兵模式
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &
 
#在哨兵节点查看监控状态
[root@localhost ~]# redis-cli -p 26379 info Sentinel

模拟故障测试

#Master
ps -elf | grep redis
kill -9 pid号  #Master节点上redis-server的进程号
netstat -natp | grep redis

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

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

相关文章

多线程的实现方式

点击链接返回标题-> Java线程的学习-CSDN博客 第一种方式,继承Thread类 Thread类是java.lang包下的类,是多线程经常需要使用的类。 ①通过自定义子类去继承Thread类,并重写其中的run()方法。 class myThread extends Thread {//自定义子类…

hive return code 40000 from org.apache.hadoop.hive.ql.exec.MoveTask解决思路

参考学习 https://github.com/apache/hive/blob/2b57dd27ad61e552f93817ac69313066af6562d9/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java#L47 为啥学习error code 开发过程中遇到以下错误,大家觉得应该怎么办?从哪方面入手呢? 1.百…

51单片机利用I/O口高阻状态实现触摸控制LED灯

51单片机利用I/O口高阻状态实现触摸控制LED灯 1.概述 这篇文章介绍使用I/O口的高阻状态实现一个触摸控制LED灯亮灭的实验。该实验通过手触摸P3.7引脚,改变电平信号控制灯的亮灭。 2.实验过程 2.1.实验材料 名称型号数量单片机STC12C20521LED彩灯无1晶振12MHZ1电…

【git】使用ssh

前言 git之前一直使用https,因为很方便随时随地都可以用。最近把代码托管到GitHub,使用https就使用不了。后面听同事说GitHub使用ssh是没问题的,就想着尝试一下。 git ssh配置 设置用户名和邮箱 git config --global use.name username g…

一条Update语句的执行过程是怎样的?

先看第一个问题,这里做个简单描述 ,因为我们着重还是看Update MySQL执行一条Select语句是怎么运行的? 这个问题大家在面试的时候大家都背过类似的题,而且网上也有很多答案,这里分享一个大致流程介绍,关于…

通过ros系统中websocket中发送sensor_msgs::Image数据给web端显示

通过ros系统中websocket中发送sensor_msgs::Image数据给web端显示 #include <ros/ros.h> #include <signal.h> #include <sensor_msgs/Image.h> #include <message_filters/subscriber.h> #include <message_filters/synchronizer.h> #include &…

国外网站文章或网页采集翻译为中文

采集国外网站的文章或网页数据&#xff08;例如英文&#xff0c;西班牙语&#xff0c;法语等&#xff09;&#xff0c;怎么快速批量翻译为中文&#xff1f; 可以使用简数采集器来实现&#xff0c;支持自动翻译&#xff0c;同时翻译为多种语言&#xff08;不仅中文&#xff09;…

(C++)反转字符串中的单词

愿所有美好如期而遇 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/reverse-w…

分享一个课程卡样式

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 广告打完&#xff0c;我们进入正题&#xff0c;先看效果&#xff1a; 废话不多&#xff0c;上源码&#xff1a; <body><h3 c…

Java飞翔的鸟游戏

一.准备工作 首先创建一个新的Java项目命名为“飞翔的鸟”&#xff0c;并在src中创建一个包命名为“com.qiku.bird"&#xff0c;在这个包内分别创建4个类命名为“Bird”、“BirdGame”、“Column”、“Ground”&#xff0c;并向需要的图片素材导入到包内。 二.代码呈现 …

Spring-jdbcTemplate-配置数据库连接池,配置文件方式beans.xml

1、jdbc.properties jdbc.drivercom.mysql.cj.jdbc.Driver jdbc.urljdbc:mysql:///studb jdbc.userroot jdbc.pwd123456 2、beans.xml <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans&…

给sprite上增加刷光动效

游戏引擎 —— cocos creator 3.52 此动效给动态修改尺寸的图片增加一层刷光的效果&#xff0c;直接贴代码 CCEffect %{techniques:- passes:- vert: sprite-vs:vertfrag: sprite-fs:fragdepthStencilState:depthTest: falsedepthWrite: falseblendState:targets:- blend: tr…

仿ChatGPT对话前端页面(内含源码)

仿ChatGPT对话前端页面&#xff08;内含源码&#xff09; 前言布局样式和Js部分关键点全部源码 前言 本文主要讲解如何做出类似ChatGPT的前端页面。具体我们的效果图是长这样&#xff0c;其中除了时间是动态的之外&#xff0c;其他都是假数据。接下来让我们从布局和样式的角度…

Redis打包事务,分批提交

一、需求背景 接手一个老项目&#xff0c;在项目启动的时候&#xff0c;需要将xxx省整个省的所有区域数据数据、以及系统字典配置逐条保存在Redis缓存里面&#xff0c;这样查询的时候会更快; 区域数据字典数据一共大概20000多条,&#xff0c;前同事直接使用 list.forEach…

Django框架之中间件

目录 一、引入 二、Django中间件介绍 【1】什么是Django中间件 【2】Django中间件的作用 【3】示例 三、Django请求生命周期流程图 四、Django中间件是Django的门户 五、Django中间件详解 六、中间件必须要掌握的两个方法 (1) process_request (2) process_respon…

支持对协议和会话分享动作进行授权,新增API Key白名单功能,JumpServer堡垒机v3.9.0发布

2023年11月20日&#xff0c;JumpServer开源堡垒机正式发布v3.9.0版本。在这一版本中&#xff0c;JumpServer对授权功能进行了优化&#xff0c;增加了对“会话分享”及“资产协议”的配置&#xff0c;方便管理员以更细的颗粒度对各种资源进行控制&#xff1b;针对使用API Key与J…

教你看现货黄金实时报价

现货黄金投资市场上的交易软件众多&#xff0c;很多人不知道选择什么软件好&#xff0c;但选择主流软件MT4&#xff0c;基本就可以满足投资者不同的需求。本文为大家讲讲&#xff0c;为什么有那么多的投资者&#xff0c;都选择通过MT4获取实时的行情报价。 现货黄金市场波动激烈…

Linux中flask项目开启https访问

1.下载阿里云免费证书 2.项目添加https配置 3.服务器开启https访问 3.1 重新安装OpenSSL 3.2.重新安装Python 上一次已经讲过Linux安装部署Python: Linux安装Python3.10与部署flask项目实战详细记录,今天记录一下Python项目如何支持https访问…

免费开源 GPU池化软件 | (AI人工智能训练平台、AI人工智能推理平台)全套源码

GPU池化软件 | (AI人工智能训练平台、AI人工智能推理平台) 讨论群v:&#x1f680;18601938676 一、AI人工智能开发-------------面临的问题和挑战 1. GPU管理难题 1.1 资源管理难&#xff1a;算力资源昂贵&#xff0c;但是缺乏有效管理&#xff0c;闲置情况严重。 1.2 用户…

RabbitMQ快速学习之WorkQueues模型、三种交换机、消息转换器(SpringBoot整合)

文章目录 前言一、WorkQueues模型消息发送消息接收能者多劳 二、交换机类型1.Fanout交换机消息发送消息接收 2.Direct交换机消息接收消息发送 3.Topic交换机消息发送消息接收 三、编程式声明队列和交换机fanout示例direct示例基于注解 四、消息转换器总结 前言 WorkQueues模型…