redis之主从复制、哨兵模式

news2024/11/22 17:23:40

一 redis群集有三种模式

主从复制:

主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。

主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。

缺陷:

故障恢复无法自动化;

写操作无法负载均衡;

存储能力受到单机的限制。

哨兵:

在主从复制的基础上,哨兵实现了自动化的故障恢复。

缺陷:

写操作无法负载均衡;存储能力受到单机的限制;

哨兵无法对从节点进行自动故障转移,

在读写分离场景下,从节点故障会导致读服务不可用,需要对从节点做额外的监控、切换操作。

集群:

通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了

较为完善的高可用方案。

缺陷:

成本比较高,通常至少三主三从,六台起步,成本比较高

二 Redis 主从复制 

将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主服务器

(Master),后者称为从服务器(Slave);

数据的复制是单向的,只能由主服务器到从服务器。

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

1 主从复制的作用:

数据冗余:

主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

故障恢复

当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种

服务的冗余。

负载均衡

在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服

务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其

 是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。

高可用基石

除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是

Redis高可用的基础。

2 主从复制流程:

(1)若启动一个Slave机器进程,则它会向Master机器发送一个“sync command”命令,请求同步

连接。

(2)无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数

 据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中。

(3)后台进程完成缓存操作之后,Master机器就会向Slave机器发送数据文件,Slave端机器将数

据文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发

送给Slave端机器。若Slave出现故障导致宕机,则恢复正常后会自动重新连接。

(4)Master机器收到Slave端机器的连接后,将其完整的数据文件发送给Slave端机器,如果

Mater同时收到多个Slave发来的同步请求,则Master会在后台启动一个进程以保存数据文件,然后

将其发送给所有的Slave端机器,确保所有的Slave端机器都正常。

 

sync同步 RDB(完全备份文件)给从服务器 

              AOF(增量备份)给从服务器 

主从复制过程/原理:

①从---->主发送sync同步数据请求
②主redis 会fork一个子进程,然后会产生RDB文件(完全备份的文件)的过程

2.1 客户端还在持续的写入redis
③rdb文件 持久化完成后,主redis会将RDB文件和缓存起来的命令推送给我们的从服务器
④复制、推送完后,主reids 会持续的同步操作命----->利用AOF(增备)主持久化功能
⑤在下一台redis 接入主从复制之前,会持续利用AOF的方式 同步数据给从服务器

3 实验: 搭建Redis 主从复制

master:192.168.11.4

slave1:192.168.11.3

slave1:192.168.11.14

①关闭防火墙 防护
[root@mcb-11-4 ~]# hostnamectl set-hostname master
[root@mcb-11-4 ~]# bash
[root@master ~]# systemctl stop firewalld
[root@master ~]# setenforce 0
[root@mcb-11-3 ~]# hostnamectl set-hostname slave1
[root@mcb-11-3 ~]# bash
[root@slave1 ~]# systemctl stop firewalld
[root@slave1 ~]# setenforce 0
[root@mcb-11-14 ~]# hostnamectl set-hostname slave2
[root@mcb-11-14 ~]# bash
[root@slave2 ~]# systemctl stop firewalld 
[root@slave2 ~]# setenforce 0

主从服务器三台服务器都要做以下步骤: 

-----安装 Redis-----
yum install -y gcc gcc-c++ make

tar zxvf redis-5.0.7.tar.gz -C /opt/


cd /opt/redis-5.0.7/
make
make PREFIX=/usr/local/redis install

cd /opt/redis-5.0.7/utils
./install_server.sh
......
Please select the redis executable path [/usr/local/bin/redis-server] /usr/local/redis/bin/redis-server  	

ln -s /usr/local/redis/bin/* /usr/local/bin/
②安装 Redis 
yum install -y gcc gcc-c++ make

两台从服务器与主服务器都要安装

master:vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.11.4 master
192.168.11.3 slave1
192.168.11.14 slave2

远程共享 :因为从与主文本相识

[root@slave2 opt]# scp redis-5.0.7.tar.gz slave1:/opt
The authenticity of host 'slave1 (192.168.11.3)' can't be established.
ECDSA key fingerprint is SHA256:3V0GFEzP1uwGoV7NVYcUJgAu4RXc3zyAmrdK/23JPYQ.
ECDSA key fingerprint is MD5:e7:4d:a5:3d:11:8b:3b:cb:e9:81:b0:07:59:19:f7:60.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'slave1,192.168.11.3' (ECDSA) to the list of known hosts.
root@slave1's password: 
redis-5.0.7.tar.gz                                                                  100% 1938KB  39.6MB/s   00:00    
[root@slave2 opt]# 
④解压安装包 
tar zxvf redis-5.0.7.tar.gz -C /opt/

⑤切换 安装 
cd /opt/redis-5.0.7/
make
[root@master redis-5.0.7]# make

make PREFIX=/usr/local/redis install
[root@slave2 redis-5.0.7]# make PREFIX=/usr/local/redis install

./install_server.sh

 

Please select the redis executable path [/usr/local/bin/redis-server] /usr/local/redis/bin/redis-server 
⑥ 建立软连接
ln -s /usr/local/redis/bin/* /usr/local/bin/

 ⑦查看文件

 

3 修改 Redis 配置文件(Master节点操作) 

vim /etc/redis/6379.conf   redis.conf
bind 0.0.0.0						#70行,修改监听地址为0.0.0.0
daemonize yes						#137行,开启守护进程
logfile /var/log/redis_6379.log		#172行,指定日志文件目录
dir /var/lib/redis/6379				#264行,指定工作目录
appendonly yes						#700行,开启AOF持久化功能

 

 

 

①检测一下: 
[root@slave2-redis utils]# vim /etc/redis/6379.conf
[root@slave2-redis utils]# /etc/init.d/redis_6379 restart
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...
[root@slave2-redis utils]# netstat -anpt|grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      9933/redis-server 1 
[root@slave1-redis utils]# vim /etc/redis/6379.conf
[root@slave1-redis utils]# /etc/init.d/redis_6379 restart
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...
[root@slave1-redis utils]#  netstat -anpt|grep redis
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      15694/redis-server  
[root@master ~]# /etc/init.d/redis_6379 restart
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...
[root@master ~]#  netstat -anpt|grep redis
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      3178/redis-server 0 
tcp        0      0 192.168.11.4:6379       192.168.11.3:38993      ESTABLISHED 3178/redis-server 0 
tcp        0      0 192.168.11.4:6379       192.168.11.14:58450     ESTABLISHED 3178/redis-server 0 
[root@master ~]# 
②验证主从效果

 ③在主服务器输入文本

 二 Redis 哨兵模式 

主从切换:当服务器宕机后,需要人工手动一台从机切换为主机,为了解决主从复制的缺点,就有

了哨兵机制。

1 哨兵的核心功能:

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

2 哨兵模式原理: 

哨兵(sentinel):是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过

投票机制选择新的 Master并将所有slave连接到新的 Master。所以整个运行哨兵的集群的数量不得

少于3个节点。

3 哨兵模式的作用:

监控:哨兵会不断地检查主节点和从节点是否运作正常。

自动故障转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其

中一个从节点升级为新的主节点,并让其它从节点改为复制新的主节点。

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

4 哨兵结构由两部分组成:

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

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

5 故障转移机制:

①由哨兵节点定期监控发现主节点是否出现了故障

每个哨兵节点每隔1秒会向主节点、从节点及其它哨兵节点发送一次ping命令做一次心跳检测。如

果主节点在一定时间范围内不回复或者是回复一个错误消息,那么这个哨兵就会认为这个主节点主

观下线了(单方面的)。当超过半数哨兵节点认为该主节点主观下线了,这样就客观下线了。

②当主节点出现故障,此时哨兵节点会通过Raft算法(选举算法)实现选举机制共同选举出一个哨

兵节点为leader,来负责处理主节点的故障转移和通知。所以整个运行哨兵的集群的数量不得少于

3个节点。

③由leader哨兵节点执行故障转移:

  • 将某一个从节点升级为新的主节点,让其它从节点指向新的主节点;
  • 若原主节点恢复也变成从节点,并指向新的主节点;
  • 通知客户端主节点已经更换。

需要特别注意的是,客观下线是主节点才有的概念;如果从节点和哨兵节点发生故障,被哨兵主观下线后,不会再有后续的客观下线和故障转移操作。

6主节点的选举:

1.过滤掉不健康的(已下线的),没有回复哨兵 ping 响应的从节点。

2.选择配置文件中从节点优先级配置最高的。(replica-priority,默认值为100)

3.选择复制偏移量最大,也就是复制最完整的从节点。

哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式

 7 实验操作

master:192.168.11.4

slave1:192.168.11.3

slave1:192.168.11.14

哨兵的启动是在主从复制之上,所以须把主从模式安装好的情况下再去做哨兵模式

①修改master主配置文件
vim /opt/redis-5.0.7/sentinel.conf
protected-mode no								#17行,关闭保护模式(取消注释)
 
port 26379										#21行,Redis哨兵默认的监听端口
 
daemonize yes									#26行,指定sentinel为后台启动
 
logfile "/var/log/sentinel.log"					#36行,指定日志存放路径
 
dir "/var/lib/redis/6379"						#65行,指定数据库存放路径
 
sentinel monitor mymaster 192.168.11.4 6379 2	#84行,修改 指定该哨兵节点监控192.168.10.23:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
 
sentinel down-after-milliseconds mymaster 30000	#113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
 
sentinel failover-timeout mymaster 180000		#146行,故障节点的最大超时时间为180000(180秒)
②主服务器的配置文件后,scp 传给两个从服务器直接问覆盖

③启动哨兵模式

先启 master,再启 slave

[root@master redis-5.0.7]# redis-sentinel sentinel.conf &
[1] 4901
[root@master redis-5.0.7]# redis-sentinel sentinel.conf &
[2] 4906
[1]   完成                  redis-sentinel sentinel.conf

[root@slave2-redis redis-5.0.7]# redis-sentinel sentinel.conf &
[1] 12001


[root@slave2-redis utils]# cd ..
[root@slave1-redis redis-5.0.7]# redis-sentinel sentinel.conf &
[1] 17818
④ 查看哨兵信息

方法1:redis-cli -p 26379 info Sentinel

方法2:查看master的哨兵日志  redis-cli -p 26379 info Sentinel

⑤查看日志并模拟 master 故障
1)查看redis-server进程号:ps -ef | grep redis

2)杀死 Master 节点上redis-server的进程号

kill -9   3178

3)验证结果

①在哨兵节点上验证master是否转换至从服务器 

tail -f /var/log/sentinel.log

②在哨兵节点上再次查看哨兵信息,查看是否转换成功 

redis-cli -p 26379 info sentinel

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

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

相关文章

西圣、飞利浦、万魔开放式耳机好用吗?热门产品硬核测评对比

在无线耳机市场中,开放式耳机因其独特的佩戴方式和出色的听音体验逐渐受到消费者的青睐,西圣、飞利浦、万魔作为业内知名品牌,都推出了各自的开放式耳机产品,备受关注,那么这些热门品牌的开放式耳机究竟好用吗&#xf…

力扣热门算法题 174. 地下城游戏,189. 轮转数组,198. 打家劫舍

174. 地下城游戏,189. 轮转数组,198. 打家劫舍,每题做详细思路梳理,配套Python&Java双语代码, 2024.03.31 可通过leetcode所有测试用例。 目录 174. 地下城游戏 解题思路 完整代码 Python Java 189. 轮转数…

【Web应用技术基础】JavaScript(1)——案例:猜数字

上一个博客发了视频。这个博客因为不能插入视频&#xff0c;所以给大家一张一张截图的 点击“重新开始一局游戏” <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"…

[leetcode]剑指 Offer 29. 顺时针打印矩阵

前言&#xff1a;剑指offer刷题系列 问题&#xff1a; 输入一个矩阵&#xff0c;按照从外向里以顺时针的顺序依次打印出每一个数字。 示例&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5]思路&#xff1a; 看到这个…

Lambda表达式,Stream流

文章目录 Lambda表达式作用前提函数式接口特点 语法省略模式和匿名对象类的区别 Stream流思想作用三类方法获取方法单列集合(Collection[List,Set双列集合Map(不能直接获取)数组同一类型元素(Stream中的静态方法) 常见的中间方法终结方法收集方法 Optional类 Lambda表达式 作用…

客户案例丨拓数派向量计算引擎PieCloudVector助力东吴证券AIGC应用升级

1.项目背景 随着人工智能技术的不断创新和应用&#xff0c;我们可以看到人工智能在各个领域的应用越来越广泛。深度学习技术在图像识别、语音识别、自然语言处理等领域表现出色。机器学习算法的改进将解决更多实际问题&#xff0c;如增强学习、迁移学习和联合学习等&#xff…

一个瓶盖和电子工程师以及机械工程师能有什么联系?

过小的产品空间是一种罪 我也曾经是喜欢将东西做的小巧&#xff0c;其实这是不归路&#xff0c;特别是对于产品&#xff0c;一不小心&#xff0c;就会发生可怕的问题. 最近某厂供应的一批一体机&#xff0c;设计上有严重缺陷&#xff0c;外壳做小了&#xff0c;散热孔开的太小…

什么是智慧驿站?智慧驿站有哪些功能?创新型智慧公厕解说

近年来&#xff0c;随着智能科技的迅速发展&#xff0c;人们对于城市生活的期望也逐渐提升。作为城市基础设施的一部分&#xff0c;智慧驿站应运而生。它不仅是一座智慧公厕&#xff0c;更是集合了多种功能&#xff0c;给我们带来全新的城市生活体验。本文以智慧驿站智慧公厕源…

使用Vite创建一个vue3项目

一、vite是什么&#xff1f; vite 是一种新型前端构建工具&#xff0c;能够显著提升前端开发体验。它主要由两部分组成&#xff1a; 一个开发服务器&#xff0c;它基于原生 ES 模块提供了丰富的内建功能&#xff0c;如速度快到惊人的模块热更新&#xff08;HMR&#xff09;。 …

如何监控特权帐户,保护敏感数据

IT基础设施的增长导致员工可以访问的凭据和资源数量急剧增加。每个组织都存储关键信息&#xff0c;这些信息构成了做出关键业务决策的基石。与特权用户共享这些数据可以授予他们访问普通员工没有的凭据的权限。如果特权帐户凭证落入不法分子之手&#xff0c;它们可能被滥用&…

【随笔】Git 高级篇 -- 分离 HEAD(十一)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

成都直播基地出租:天府新区兴隆湖天府锋巢直播产业基地

天府新区兴隆湖天府锋巢直播产业基地&#xff0c;作为成都乃至西部地区的一颗璀璨明珠&#xff0c;正以其独特的魅力和无限的潜力&#xff0c;吸引着越来越多的目光。这里不仅是成都直播产业的聚集地&#xff0c;更是传统企业转型升级的摇篮&#xff0c;是新媒体时代下的创新高…

v-text 和v-html

接下来&#xff0c;我讲介绍一下v-text和v-html的使用方式以及它们之间的区别。 使用方法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-widt…

2024 ccfcsp认证打卡 2022 09 01 如此编码

2022 09 01 如此编码 题解1题解2 题解1 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt(); // 天数int m sc.nextInt(); // 科目数int[] b new int[n 1]; // 存放结果的数…

【零基础学数据结构】顺序表

目录 1.了解数据结构 什么是数据结构&#xff1f; 为什么要进行数据管理&#xff1f; 2.顺序表 顺序表概要解析&#xff1a; ​编辑顺序表的分类&#xff1a; 差别和使用优先度&#xff1a; 1.创建顺序表 1.1顺序表分为静态顺序表和动态顺序表 1.2顺序表的初始化…

北方经贸经济类知网收录月刊投稿发表论文

《北方经贸》期刊是由国家新闻出版总署批准&#xff0c;黑龙江省教育厅主管&#xff0c;黑龙江省经济管理干部学院主办的经济类综合期刊。期刊融理论性、知识性、实践性于一体&#xff0c;立足龙江&#xff0c;辐射全国&#xff0c;面向世界&#xff0c;注重研究解决重大现实理…

安泰电子 :电压放大器的技术指标有哪些

电压放大器是电子设备中常见的一种电路&#xff0c;它的作用是将输入信号的电压放大到所需的输出电压。电压放大器的技术指标描述了其性能和特征&#xff0c;涵盖了许多方面。下面西安安泰将详细介绍一些电压放大器的技术指标。 增益&#xff1a;增益是电压放大器最基本的指标之…

百卓Smart管理平台 importexport.php SQL注入漏洞复现(CVE-2024-27718)

0x01 产品简介 百卓Smart管理平台是北京百卓网络技术有限公司(以下简称百卓网络)的一款安全网关产品,是一家致力于构建下一代安全互联网的高科技企业。 0x02 漏洞概述 百卓Smart管理平台 importexport.php 接口处存在SQL注入漏洞,攻击者除了可以利用 SQL 注入漏洞获取数据…

简单了解波 Mono-repo Multi-repo(Poly-repo)

Mono-repo 和 Multi-repo 是软件开发中代码管理的两个不同策略。Mono-repo & Multi-repo 孰优孰劣是个老生常谈得话题了&#xff0c;这里就不 PK 了&#xff0c;“略微”看下两者区别。 当我们使用 Git 作为版本控制系统管理项目的代码时&#xff0c;那么 monorepo 与 mul…

【Java】Thread详解

&#x1f352;前言 本文将从以下几方面来展开对Thread的介绍。 1.线程创建 2.线程中断 3.线程等待 4.线程休眠 在前面的文章中&#xff0c;已经总结了关于Thread的一些理解。 在阅读本文之前&#xff0c;最好对其有一些基础的了解。 文章链接: 【JavaSE】进程是什么&#xff1f…