【Redis三】主从复制、哨兵以及Cluster集群

news2024/11/26 0:40:19

主从复制、哨兵以及Cluster集群

  • 1.Redis高可用
  • 2.Redis主从复制
    • 2.1 主从复制的作用
    • 2.2 主从复制流程
  • 2.3 搭建Redis主从复制
      • 2.3.1 安装部署Redis
      • 2.3.2 验证主从复制结果
  • 3.Redis哨兵模式
    • 3.1 哨兵模式概述
    • 3.2 哨兵模式的作用
    • 3.3 故障转移机制
    • 3.4 主节点的选举
    • 3.5 搭建Redis哨兵模式

1.Redis高可用

在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。
但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服务(如主从分离、快速容灾技术),还需要考虑数据容量的扩展、数据安全不会丢失等。
在Redis中,实现高可用的技术主要包括持久化、主从复制、哨兵和Cluster集群,下面分别说明它们的作用,以及解决了什么样的问题。

  • 持久化:持久化是最简单的高可用方法(有时甚至不被归为高可用的手段),主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失
  • 主从复制:主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。
  • 哨兵:在主从复制的基础上,哨兵实现了自动化的故障恢复。缺陷:写操作无法负载均衡;存储能力受到单机的限制。
  • Cluster集群通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案

2.Redis主从复制

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点

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

2.1 主从复制的作用

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

2.2 主从复制流程

(1)若启动一个Slave机器进程,则它会向Master机器发送一个“sync command”命令,请求同步连接
(2)无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中
(3)后台进程完成缓存操作之后,Master机器就会向Slave机器发送数据文件,Slave端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给Slave端机器。若Slave出现故障导致宕机,则恢复正常后会自动重新连接。
(4)Master机器收到Slave端机器的连接后,将其完整的数据文件发送给Slave端机器,如果Master同时收到多个Slave发来的同步请求,则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的Slave端机器,确保所有的Slave端机器都正常

2.3 搭建Redis主从复制

在这里插入图片描述

2.3.1 安装部署Redis

###关闭和禁止防火墙开机自启功能
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config

(1) 修改内核参数

vim /etc/sysctl.conf
vm.overcommit_memory = 1
net.core.somaxconn = 10240

sysctl -p

在这里插入图片描述

(2)安装redis

yum install -y gcc gcc-c++ make
cd /opt
rz -E
#redis-7.0.9.tar.gz
tar xf /opt/redis-7.0.9.tar.gz 
cd /opt/redis-7.0.9
make
make PREFIX=/usr/local/redis install
#由于Redis源码包中直接提供了Makefile文件,所以在解压完软件包后,不用先执行./configure行配置,可直接执行make与make install命令进行安装

在这里插入图片描述

(3)创建redis工作目录,并创建redis程序用户

mkdir /usr/local/redis/{conf,log,data}
cp /opt/redis-7.0.9/redis.conf /usr/local/redis/conf/

useradd -M -s /sbin/nologin redis
chown -R redis.redis /usr/local/redis/

在这里插入图片描述

(4)将redis的可执行文件路径加入到系统环境变量中

vim /etc/profile 
PATH=$PATH:/usr/local/redis/bin		#增加一行

source /etc/profile

在这里插入图片描述

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

vim /usr/local/redis/conf/redis.conf
bind 0.0.0.0									#87行,修改监听地址为0.0.0.0
protected-mode no								#111行,将本机访问保护模式设置no
port 6379										#138行,Redis默认的监听6379端口
tcp-backlog 10240
#147行,修改参数为10240
daemonize yes									#309行,设置为守护进程,后台启动
pidfile /usr/local/redis/log/redis_6379.pid		#341行,指定 PID 文件
logfile "/usr/local/redis/log/redis_6379.log"	#354行,指定日志文件
dir /usr/local/redis/data						#504行,指定持久化文件所在目录
requirepass 123								#1037行,可选,设置redis密码
appendonly yes									#1380行,开启AOF

(6)修改Redis配置文件(Slave节点操作)

vim /usr/local/redis/conf/redis.conf
bind 0.0.0.0									#87行,修改监听地址为0.0.0.0
protected-mode no								#111行,将本机访问保护模式设置no
port 6379										#138行,Redis默认的监听6379端口
tcp-backlog 10240
#147行,修改参数为10240
daemonize yes									#309行,设置为守护进程,后台启动
pidfile /usr/local/redis/log/redis_6379.pid		#341行,指定 PID 文件
logfile "/usr/local/redis/log/redis_6379.log"	#354行,指定日志文件
dir /usr/local/redis/data						#504行,指定持久化文件所在目录
requirepass 123								#1037行,可选,设置redis密码
appendonly yes									#1380行,开启AOF
replicaof 192.168.80.50 6379					#528行,指定要同步的Master节点IP和端口
masterauth 123								#535行,可选,指定Master节点的密码,在Master节点设置requirepas时,此处才需要设置密码

(7)定义systemd服务管理脚本

vim /usr/lib/systemd/system/redis-server.service
[Unit]
Description=Redis Server
After=network.target

[Service]
User=redis
Group=redis
Type=forking
TimeoutSec=0
PIDFile=/usr/local/redis/log/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

(8)重新加载systemd服务管理并启动服务

systemctl daemon-reload
systemctl start redis-server
systemctl enable redis-server
netstat -lntp | grep 6379
systemctl status redis-server

在这里插入图片描述

2.3.2 验证主从复制结果

###在Master节点上添加数据内容
redis-cli -h 192.168.80.50 -p 6379 -a '123'
keys *
set name gzy
get name

###在slave节点上查看主节点添加的数据内容
redis-cli -h 192.168.80.60 -p 6379 -a '123'
keys *
get name

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

###在Master节点上看日志
tail -f /usr/local/redis/log/redis_6379.log 

###在Master节点上验证从节点
redis-cli -h 192.168.80.50 -p 6379 -a '123'
info replication

在这里插入图片描述
在这里插入图片描述

3.Redis哨兵模式

3.1 哨兵模式概述

主从切换技术的方法是:当服务器宕机后,需要手动一台从机切换为主机,这需要人工干预,不仅费时费力而且还会造成一段时间内服务不可用。为了解决主从复制的缺点,就有了哨兵机制。
哨兵的核心功能:在主从复制的基础上,哨兵引入了主节点的自动故障转移

3.2 哨兵模式的作用

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

  • 自动故障转移当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其它从节点改为复制新的主节点。

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

哨兵结构由两部分组成,哨兵节点和数据节点:

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

3.3 故障转移机制

(1)由哨兵节点定期监控发现主节点是否出现了故障,每个哨兵节点每隔1秒会向主节点、从节点及其它哨兵节点发送一次ping命令做一次心跳检测。如果主节点在一定时间范围内不回复或者是回复一个错误消息,那么这个哨兵就会认为这个主节点主观下线了(单方面的)。当超过半数哨兵节点认为该主节点主观下线了,这样就客观下线了

(2)当主节点出现故障,此时哨兵节点会通过Raft算法(选举算法)实现选举机制共同选举出一个哨兵节点为leader,来负责处理主节点的故障转移和通知。所以整个运行哨兵的集群的数量不得少于3个节点

(3)由leader哨兵节点执行故障转移,过程如下:
将某一个从节点升级为新的主节点,让其它从节点指向新的主节点
● 若原主节点恢复也变成从节点,并指向新的主节点
● 通知客户端主节点已经更换。

在这里插入图片描述

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

3.4 主节点的选举

(1)过滤掉不健康的(已下线的),没有回复哨兵ping响应的从节点。
(2)选择配置文件中从节点优先级配置最高的。(replica-priority,默认值为100)
(3)选择复制偏移量最大,也就是复制最完整的从节点

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

3.5 搭建Redis哨兵模式

注意: 哨兵节点既可以单独部署,也可以和数据节点部署在一台服务器上,视服务器的数量而定。
在主从复制基础上进行下面的哨兵模式实验:
(1)设置Redis哨兵模式配置文件的属组以及属主(所有节点操作)

cp /opt/redis-7.0.9/sentinel.conf /usr/local/redis/conf/
chown redis.redis /usr/local/redis/conf/sentinel.conf 

(2)修改Redis哨兵模式的配置文件(所有节点操作)

vim /usr/local/redis/conf/sentinel.conf
protected-mode no									#6行,关闭保护模式
port 26379											#10行,Redis哨兵默认的监听端口
daemonize yes										#15行,指定sentinel为后台启动
pidfile /usr/local/redis/log/redis-sentinel.pid		#20行,指定 PID 文件
logfile "/usr/local/redis/log/sentinel.log"			#25行,指定日志存放路径
dir /usr/local/redis/data							#54行,指定数据库存放路径
sentinel monitor mymaster 192.168.80.50 6379 2		#73行,修改 指定该哨兵节点监控192.168.80.10:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
#sentinel auth-pass mymaster abc123					#76行,可选,指定Master节点的密码,仅在Master节点设置了requirepass
sentinel down-after-milliseconds mymaster 3000		#114行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel failover-timeout mymaster 180000			#214行,同一个sentinel对同一个master两次failover之间的间隔时间(180秒)

###将修改好的redis的配置文件复制到另外两个从服务器
scp sentinel.conf 192.168.80.60:`pwd`
scp sentinel.conf 192.168.80.70:`pwd`

(3)启动哨兵模式

###先启master,再启slave
cd /usr/local/redis/conf
redis-sentinel ./sentinel.conf &
netstat -lntp | grep redis

在这里插入图片描述

(4)查看哨兵信息

###在主从节点上执行以下命令
redis-cli -p 26379 info Sentinel

在这里插入图片描述

(5)关闭主节点进程,模拟故障切换

#查看redis-server进程号:
ps -ef | grep redis

#杀死Master节点上redis-server的进程号
kill -9 8400			#Master节点上redis-server的进程号

在这里插入图片描述

(6)验证故障切换结果

tail -f /usr/local/redis/log/sentinel.log
redis-cli -p 26379 info Sentinel

###在新选举的主上执行以下命令
redis-cli -h 192.168.80.70 -p 6379 -a '123'
info replication

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
(7)维修恢复原先挂掉到的主节点

###在redis配置文件中添加连接主节点的密码
vim /usr/local/redis/conf/redis.conf
#在535行左右添加密码信息
masterauth 123

systemctl restart redis-server.service 
systemctl status redis-server.service 
redis-cli -h 192.168.80.50 -p 6379 -a '123'
info replication

tail -f /usr/local/redis/log/sentinel.log 

###在现在的主节点上执行以下命令
redis-cli -h 192.168.80.70 -p 6379 -a '123'
info replication

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

布尔运算-基于CGAL的布尔运算

前言:vtk提供的布尔运算接口vtkBooleanOperationFilter或是其他的接口,都存在运行不稳定且速度慢的情况;本博文主要使用CGAL库对布尔运算进行优化,希望给各位小伙伴有所帮助! CAGL开源库 介绍 CGAL 是一个软件项目&a…

云原生之深入解析Docker容器的网络及其配置

一、Docker 容器网络 Docker 在安装后自动提供 3 种网络,可以使用 docker network ls 命令查看: [rootlocalhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE cd97bb997b84 bridge …

图像的基础操作

1.获取并修改图像中的像素值 img np.zeros((256, 256, 3), np.uint8) # 创建图像px img[100, 100] # 获取(100,100)点的像素值 blue img[100, 100, 0] # 仅获取(100,100)蓝色通道的像素值 …

图像的几何变换

1.图像的缩放 用途:对图像的大小尺寸进行调整,使图像放大或缩小。 代码: import cv2 as cvimg cv.imread(img.jpg)rows, cols img.shape[:2]# 使用绝对坐标 res cv.resize(img, (2 * cols, 2 * rows), interpolationcv.INTER_CUBIC)# 使…

面对“神奇的甲方”:如何应对匪夷所思的需求

在工作中,我们常常会遇到一些“神奇的甲方”,他们总是能给我们带来匪夷所思甚至无厘头的需求。本文将分享作者的经历,并提供一些建议,帮助读者应对这些“无理的需求”。 文章目录 方向一:分享那些你遇到的无理需求方向…

音轨分离 spleeter

https://www.cnblogs.com/ytxwzqin/p/12673661.htmlhttps://www.cnblogs.com/ytxwzqin/p/12673661.html伴奏提取福音,人声分离框架Spleeter1、引言对于制作人、DJ以及任何想分离音频进行单独演奏的人来说,将已经混音后的歌曲拆分为人声和伴奏一直是较为h…

Dirichlet Process 1

如下图的一个简单样本,如果我们不知道图中的样本是出自几个高斯分布,那我们如果求这个图中的样本应该归属于几个高斯分布那?直观看上去,有同学可能说是4个,有同学可能说是2个,然而如果是高维数据那&#xf…

2023年艺术品和古董行业研究报告

第一章 行业概况 艺术品通常指的是创造出来为了表达审美、情感或思想的物品,如绘画、雕塑、照片、装置艺术等。艺术品的价值常常来自于它的创新性、技术精湛以及艺术表达的深度和力度。此外,艺术家的名气和作品的历史背景也会影响其价值。 古董则通常指…

Dev C++ 建立项目 导入代码

首先 建立项目 文件->新建->建项目 会自己添加一个main.cpp 的文件,不需要的话,可以右键移除文件。 往项目里添加文件; 添加后: 编译运行,成功;

【shell】正则表达式:常见通配符、元字符与转义符

文章目录 一. 定义二. 常见通配符1. 匹配一个1.1 " . " 点符号1.2. " ? "符号:代表任意一个1.3. " $ "符号:匹配尾部1.4. " [] "符号1.5. " ^ "符号和" ! "符号 2. 匹配多个2.1. " *…

数据结构-树、二叉树

一、概念 1、树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树,是因为它看起来像是一棵倒挂的树,也就是说它的根在上,而叶子在下。 如果一个数的结点n为0,那么这…

图论算法:DFS求有向图或无向图两点间所有路径及最短路径

1、目的 根据有向图获取指定起终点的所有路径,包括最长和最短路径。 2、示例效果 2.1 原始数据 路线起终点整理如下: // 共计12个顶点,19条边。 (起点,终点,1)最后的1代表起点终点是连通的。 起点,终点,1:2 4 1 起点,终点,1:9 10 1 起点,终点,1:8 11 1 起点…

易基因: RRBS揭示基于DNA甲基化驱动基因的肾透明细胞癌预后模型的鉴定和验证|项目文章

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 肾细胞癌(RCC)是最常见的肾癌亚型,每年超400万例新发病例,是泌尿系统恶性肿瘤导致的第二大死因。2%-70%的RCC为透明细胞RCC(Cl…

node.js使用nodemailer发送阿里云企业邮箱的邮件

百度一搜就能搜到各种博客例子,但是有个问题:有些参数写的不明不白的,我在发送的时候总是报错 后面看到了一篇博客: 基于nodemailer使用阿里云企业邮箱发送邮件(526错误的解决) 注意几点: …

【现场问题】flink-cdc,sql一直校验不通过,为什么,明明sql没有错误

flink-cdc 问题展示问题解决校验结果 问题展示 这里的flink-cdc的sql对了好几遍,都没问题,包括单个执行create,也是显示校验通过 如图: 但是多个一起就报错了: java.lang.IllegalArgumentException: only single state…

奇点云DataSimba R4.9 LTS发布:稳定性加固,架构升级,142项功能上新

不久前,奇点云的数据云全系产品如期发布新一季商业化版本更新: 数据云平台DataSimba:R4.9 LTS版发布,稳定性全面加固,功能上新;自R4系列起架构升级,封装底层复杂性,支撑上层快速构建…

git代码合并merge与rebase

一、概述 1.区别 Merge具有更高的可追溯性 保留真实的历史,而Rebase则更整洁且易于审核。 rebase:不会有单独的commit合并记录,直接将分支中的所有commit排到master的记录之后。 merge:将在子分支的所有提交记录成一次commit,作为单独的一…

机器学习实战:Python基于LR线性回归进行预测(十)

文章目录 1 前言1.1 LR的介绍1.2 LR的应用 2. weather数据集实战演示2.1 导入函数2.2 导入数据2.3 数据整体可视化2.4 训练模型2.5 预测模型2.6 评估模型 3.讨论 1 前言 注意这里的LR指的是Linear Regression,线性回归。而非逻辑回归Logistic Regression&#xff0c…

【QT】——TCP套接字通信

目录 1.基本概念 2.QTcpServer 2.1 常用接口 2.2信号 3 QTcpSocket 3.1构造函数 3.2 连接函数 3.3 接收数据 3.4 发送数据 3.5 信号 4.通信的过程 4.1服务器端 4.2 客户端 通信流程: 1.基本概念 QT是 C 的一个框架,并且里边提供了用于套接…

让你不再好奇ai绘画免费网站有哪些

你有没有想过成为一名画家,但是缺乏绘画技巧?现在有了 ai作画生成器,让你可以轻松地创作出绝美的艺术品!现在有很多ai作画的免费网站,但是这些网站大多数操作繁琐,不易上手。这时我们可以寻求一款趁手的ai绘…