Redis主从复制哨兵及集群

目录

一.主从复制

主从复制的工作原理如下:

主从复制的作用:

搭建Redis 主从复制

每台服务器配置:

​编辑进行编译安装:

定义systemd服务管理脚本:

开启服务,报错看下内容:

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

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

192.168.233.30(从)与192.168.233.20(从)配置一样.

验证主从效果:

二.Redis 哨兵模式

哨兵模式的作用:

哨兵结构由两部分组成:

主节点的选举:

哨兵模式工作过程:

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

搭建Redis 哨兵模式(端口号26379):

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

修改文件:

启动哨兵模式:先启主,再启从

查看哨兵信息:

故障模拟:

将配置文件远程复制到从节点上:

Redis集群模式:

Redis集群的工作原理:

Redis集群的数据分片:

Redis集群的主从复制模型:

在哨兵的基础上继续配置集群模式:

在根目录下创建集群目录及端口号目录:​编辑

修改6001的配置文件:

启动集群:


一.主从复制

Redis主从复制是一种用于数据备份、灾难恢复和读写分离的技术,它通过将一个Redis服务器(主节点)的数据复制到其他服务器(从节点)来实现。

主从复制的工作原理如下:

1.首次同步:当从节点要进行主从复制时,它会发送一个SYNC命令给主节点。主节点收到SYNC命令后,会执行BGSAVE命令来生成RDB快照文件,并在生成期间使用缓冲区记录所有写操作。

2.快照传输:当主节点完成BGSAVE命令并且快照文件准备好后,将快照文件传输给从节点。主节点将快照文件发送给从节点,并且在发送过程中,主节点会继续将新的写操作缓冲到内存中。

3.追赶复制:当从节点收到快照文件后,会加载快照文件并应用到自己的数据集中。一旦快照文件被加载,从节点会向主节点发送一个PSYNC命令,以便获取缓冲区中未发送的写操作

4.增量复制:主节点收到PSYNC命令后,会将缓冲区中未发送的写操作发送给从节点,从节点会执行这些写操作,保证与主节点的数据一致性。此时,从节点已经追赶上了主节点的状态

5.同步:从节点会继续监听主节点的命令,并及时执行主节点的写操作,以保持与主节点的数据同步。主节点会定期将自己的操作发送给从节点,以便从节点保持最新的数据状态.
注意:当slave首次同步或者宕机后恢复时,会全盘加载,以追赶上大部队,即全量复制

主从复制的作用:

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

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

负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务,分担服务器负载

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

搭建Redis 主从复制

准备三台服务器,192.168.233.10(主);192.168.233.20(从);192.168.233.30(从)

每台服务器配置:

修改添加内核参数:

查看刷新一下:

安装环境:

压缩解压redis软件包:

进行编译安装:

创建redis工作目录:

复制配置文件:

创建用户:

给redis目录授权:

添加 环境变量:

定义systemd服务管理脚本:

[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

开启服务,报错看下内容:

文件授权要都是redis:

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

192.168.233.20(从)192.168.233.30(从):

pid和log日志文件位置:

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

192.168.233.30(从)与192.168.233.20(从)配置一样.

重启服务:

验证主从效果:

在Master节点上看日志:

看到了从服务器的ip对接成功

在Master节点上验证从节点:

主服务添加键:

从服务查看:

主从复制成功。

二.Redis 哨兵模式

哨兵模式的作用:

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

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

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

哨兵结构由两部分组成:

哨兵节点:哨兵系统由一个或多个哨兵节点组成,不存储数据

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

主节点的选举:

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

哨兵模式工作过程:

1,哨兵系统需要>=3台的哨兵节点组成,一主多从做主从复制

2,哨兵节点定时探测主节点,从节点和其他哨兵节点的运行状态

3,当哨兵节点探测到主节点异常,则认为主节点主观下线

4, 当超过指定数量的哨兵节点认为主节点主观下线,则认定主节点客观下线

5,哨兵节点会通过raft算法选举出leader,再由leader负责故障转移和通知

6,将一个从节点提升为新的主节点,让其它从节点指向新的主节点做主从复制

7,写VIP也会漂移到新的主节点上

8,原主节点恢复后也会自动变成从节点指向新的主节点做主从复制

哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式。
搭建Redis 哨兵模式(端口号26379):

在主从复制的基础上继续进行哨兵模式的搭建。

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

主:

从:

授权文件:

主:

从:

修改文件:

启动哨兵模式:先启主,再启从

主:

从:

查看哨兵信息:

故障模拟:

先给主添加vip:

添加脚本,进行监控:

#!/bin/bash
NEW_MASTERIP=$6
OLD_MASTERIP="$(ifconfig ens33| awk'NR==2{print $2}')"
VIP="192.168.233.100"

if [ "$NEW_MASTERIP"="$OLD_MASTERIP" ]; then
  ifconfig ens33:1 ${VIP}/24
   exit 0
else
ifconfig ens33:1 down
exit 0
fi

exit 1

给脚本授权:

执行脚本:

修改主服务器文件:

将配置文件远程复制到从节点上:

给从服务器文件授权:

给所有服务器进行操作:

查看主服务的log文件:

关闭主服务器:

查看日志文件:

看下192.168.233.30从服务器:有vip

看下从节点192.168.233.20的信息状态:

当我们旧主192.168.233.10恢复正常后,查看信息:

Redis集群模式:

集群模式的端口号为:16379

Redis集群的工作原理:

1、集群有多组节点,每组节点负责一部分哈希槽。
2、读写数据时,先根据crc16的算法得出一个结果,然后把结果对 16384 取余。通过这个值去找到对应的哈希槽的节点,进行数据读写。
3、集群每组节点内做主从复制,当主节点宕机的时候,就会启用从节点。主节点负责读写请求和集群信息的维护;从节点负责主节点数据和状态信息的复制。

Redis集群的数据分片:

Redis集群引入了哈希槽的概念
Redis集群有16384个哈希槽(编号0-16383)
集群的每组节点负责一部分哈希槽

以3个节点组成的集群为例:

节点A包含0到5460号哈希槽
节点B包含5461到10922号哈希槽
节点C包含10923到16383号哈希槽

Redis集群的主从复制模型:

集群中具有A、B、C三个节点,如果节点B失败了,整个集群就会因缺少5461-10922这个范围的槽而不可以用。
为每个节点添加一个从节点A1、B1、C1整个集群便有三个Master节点和三个slave节点组成,在节点B失败后,集群选举B1位为的主节点继续服务。当B和B1都失败后,集群将不可用。

在哨兵的基础上继续配置集群模式:

redis的集群一般需要6个节点,3主3从。方便起见,这里所有节点在同一台服务器上模拟:

以端口号进行区分:3个主节点端口号6001/6002/6003,对应的从节点端口号6004/6005/6006。

在根目录下创建集群目录及端口号目录:

将初始配置文件,客户端命令及redis服务命令复制到这几个目录下:

我们可以使用for循环来一次性复制过去:

for i in {6001..6006}
> do
> cp redis.conf src/redis-server src/redis-cli
redis-cli    redis-cli.c  redis-cli.d  redis-cli.o  
> cp redis.conf src/redis-server src/redis-cli /usr/local/redis/redis-cluster/redis$i
> done

我们看下集群目录下文件:

修改6001的配置文件:

通过for循环将配置文件复制到其他端口上:

通过for循环在将文件中的0661改为各自端口号一样的配置:

看下配置文件:

通过for循环开启每个端口服务:

启动集群:

在6001添加键:会跳转到6002下

在进入6001查看键:不存在

跳转到6002的从节点下6005看:

查看键内容,会跳转到主节点上:

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

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

相关文章

Hyperledger Fabric 二进制安装部署 Peer 节点

规划网络拓扑 3 个 orderer 节点;组织 org1 , org1 下有两个 peer 节点, peer0 和 peer1; 组织 org2 , org2 下有两个 peer 节点, peer0 和 peer1; 节点宿主机 IPhosts端口cli192.168.1.66N/AN/Aorderer0192.168.1.66orderer0.example.com70…

深入浅出:原生态App封装的艺术

一、原生态App封装的优势 性能的极致:原生App直接调用设备的硬件资源,减少了中间层的干扰,从而实现更快的运行速度和更流畅的动画效果。 2. 用户体验的完美:原生App可以访问并遵循特定平台的设计指南,提供与操作系统无…

C#: Label、TextBox 鼠标停留时显示提示信息

说明:记录在 Label、TextBox 控件上 鼠标停留时显示提示信息的方法。 1.效果图 2.具体实现步骤 1. 在Form 窗口中先创建 Label 并取名:KEY_label ,或 TextBox 取名:KEY_textBox 2. lable控件的 tips 实现方法1 :代码…

519基于单片机的自动切割流程控制系统

基于单片机的自动切割流程控制系统[proteus仿真] 自动切割流程控制系统这个题目算是课程设计和毕业设计中常见的题目了,本期是一个基于单片机的自动切割流程控制系统 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】,赞赏任意文章 2&…

Centos7 手动更改系统时间

文章目录 1.更改系统时间2.写入系统时间3.查看是否写入成功 1.更改系统时间 date -s "2017-12-18 09:40:00"2.写入系统时间 hwclock -w3.查看是否写入成功 timedatectl

MongoDB重写

可重写操作 当与数据库网络出现连接问题或在数据库集群主节点切换时不能找到一个正在工作的主节点时,可重试写允许数据库连接驱动再进行一次数据库写入操作。 前置条件 需要复制集或分片集,不支持单节点数据库可重试写需要存储引擎支持文档级别锁定&a…

deeplabv3模型的关键点

spp空间金字塔:可以避免图片固定输入,resize之后又减少了语义信息。这样任意大小的图片都可以输入,就保存了完整的信息。 空洞卷积:卷积的升级,多个尺寸的卷积核,增大了感受野,语义信息更加丰…

接口自动化测试要做什么?

作者:不辣的皮皮 链接:https://www.zhihu.com/question/384727359/answer/1124441469 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 可以分为四个步骤/阶段。 原理 》 业务逻辑》 工具》 …

【LeetCode】2626. 数组归约运算

数组归约运算 题目题解 题目 给定一个整数数组 nums、一个 reducer 函数 fn 和一个初始值 init,返回通过依次对数组的每个元素执行 fn 函数得到的最终结果。 通过以下操作实现这个结果:val fn(init, nums[0]),val fn(val, nums[1])&#…

机器学习-线性回归实践

目标:使用Sklearn、numpy模块实现展现数据预处理、线性拟合、得到拟合模型,展现预测值与目标值,展现梯度下降; 一、导入模块 import numpy as np np.set_printoptions(precision2) from sklearn.linear_model import LinearRegr…

JavaWeb的Filter详解

一、Filter过滤器简介 1、基本概念 JavaWeb的三大组件之一,三大组件为:Servlet、Filter、Listener。 过滤器相当于浏览器与Web资源之间的一道过滤网,在访问资源之前通过一系列的过滤器对请求 进行修改、判断以及拦截等,也可以对…

CMake入门教程【核心篇】导入外部库Opencv

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 环境准备示例:在Windows上配置OpenCV路径示例:在Linux上配置OpenCV路径环境准备 首先确保你的系统中安装了CMake。可以通过以下命令安装: Windows: 下载并…

Transformer从菜鸟到新手(五)

引言 上篇文章我们在单卡上完成了完整的训练过程。 从本文开始介绍模型训练/推理上的一些优化技巧,本文主要介绍多卡并行训练。 下篇文章将介绍大模型推理常用的缓存技术。 多卡训练 第一个要介绍的是利用多GPU优化,因为在单卡上训练实在是太慢。这…

Camunda ServiceTask

一:Java class Java class实现JavaDelegate接口,只需要配置类的全限定名即可,不需要被Spring容器管理。 public class JavaClassServiceTask implements JavaDelegate {Overridepublic void execute(DelegateExecution execution) throws …

【mars3d】批量关闭矢量数据的startFlicker()闪烁或者全部关闭startFlicker()

问题 1.graphic/entity/billboard怎么能够批量关闭startFlicker()闪烁或者 全部关闭startFlicker()呢? 相关链接 1.http://mars3d.cn/editor-vue.html?idgraphic/entity/billboard 2.http://mars3d.cn/apidoc.html#FlickerEntity 期望效果 1.graphic.stopFlic…

【软考】二叉树的存储

目录 一、基本概念二、二叉树的顺序存储2.1 说明2.2 图示 三、二叉树的链表存储3.1 说明3.2 图示 一、基本概念 1.满二叉树:最深一层都没有子节点,其它层都有左右两个节点 2.完全二叉树:是满二叉树的子集,在完全二叉树中最深一层的…

微信小程序实战-02翻页时钟-2

微信小程序实战系列 《微信小程序实战-01翻页时钟-1》 文章目录 微信小程序实战系列前言计时功能实现clock.wxmlclock.wxssclock.js 运行效果总结 前言 接着《微信小程序实战-01翻页时钟-1》,继续完成“6个页面的静态渲染和计时”功能。 计时功能实现 clock.wxm…

shp格式样本转微软COCO格式样本标注

在做影像识别时,需要大量的样本,对于从事GIS和遥感专业的人员来说,可能使用ArcGIS对着影像,绘制样本效率更高。但是很多框架和开源的代码都是基于PASCAL VOC格式和微软COCO格式的样本。这里我分享一下如何将栅格和shp数据转换微软…

记录汇川:ITP与Autoshop进行仿真连接

1、定义如下程序: 2、ITP新建工程: 3、依次选择,最后修改IP 4、定义两个变量 5、拖一个按钮和一个圈出来,地址绑定:M1 6、地址绑定:Y1 7、PLC启动仿真 8、ITP启动在线模拟器 9、即可实现模拟仿真

Python中调用matplotlib库三维可视化图像像素曲面分布

为了更直观的从3D视角观察一副图像的像素分布,且拖动观察没一个像素细节,可以使用下面代码实现。 目录 一、代码二、效果展示 一、代码 使用代码修改修改的地方如下: 具体实现代码如下: import numpy as np import matplotlib.pyplot as …
最新文章