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 主从复制

每台服务器配置:

​编辑进行编译安装:

定义systemd服务管理脚本:

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

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

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

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

验证主从效果:

二.Redis 哨兵模式

哨兵模式的作用:

哨兵结构由两部分组成:

主节点的选举:

哨兵模式工作过程:

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

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

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

修改文件:

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

查看哨兵信息:

故障模拟:

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

Redis集群模式:

Redis集群的工作原理:

Redis集群的数据分片:

Redis集群的主从复制模型:

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

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

修改6001的配置文件:

启动集群:

Cluster 集群增加节点动态扩容:

登录redis6001:

将6007的id跟6008做主从:

登录6007redis:


一.主从复制

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" ]; thenifconfig ens33:1 ${VIP}/24exit 0
else
ifconfig ens33:1 down
exit 0
fiexit 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看:

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

Cluster 集群增加节点动态扩容:

增加一主一从节点,将已有目录6001下的文件到新创建的目录下面:

删除不要的文件:

将配置文件修改下端口号:

开启服务:

登录redis6001:

登录redis6008:

将6007的id跟6008做主从:

给6007新加入的主节点是没有槽数的,只有初始化集群的时候,才会根据主的数据分配好,如新增的主节点,需要手动分配:

yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

登录6007redis:

完成扩容。

                                                                                                                                                                                                 

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

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

相关文章

【JavaScript】es6开发常用技巧

1.如何隐藏所有指定的元素 const hide (el) > Array.from(el).forEach(e > (e.style.display none)); // 事例: 隐藏页面上所有<p>元素 hide(document.querySelectorALL(p))2.如何检查元素是否具有指定的类&#xff1f; 页面DOM里面的每个节点上都有一个 $\colo…

Python 日志模块 logging 的最佳实践,内容干练简洁

文章目录 1. 引言2. 定义日志类3. 引用日志4. 参考 1. 引言 每次写 python 代码&#xff0c;想找一个日志模块 logging 的最佳实践&#xff0c;都要找一大圈&#xff0c;确不一定可以找到合适的最佳实践。 痛定思痛&#xff0c;我决定下笔记录目前觉得合适的 python 日志的用…

代码混淆:保护您的应用程序

目录 引言 什么是代码混淆&#xff1f; 代码混淆常见手段 代码混淆的作用 代码混淆可能带来的问题 常用的混淆工具 如何使用ipaguard进行混淆 总结 引言 在当今数字化时代&#xff0c;移动应用程序已经成为人们生活和工作中不可或缺的一部分。但是&#xff0c;随着应用…

Go语言实现数据结构栈和队列

Go语言实现数据结构栈和队列 1、栈 package mainimport "fmt"func main(){// 创建栈stack : make([]int, 0)// push压入栈stack append(stack, 10)// pop弹出v : stack[len(stack)-1]// 10fmt.Println(v)stack stack[:len(stack)-1]// 检查栈空// truefmt.Printl…

PPT插件-大珩助手-清除同类

清除同类-颜色 对于选定的形状&#xff0c;删除相同颜色 清除同类-文本 删除当前幻灯片中的文本对象 清除同类-非文本 删除当前幻灯片中的非文本对象 清空当页 删除当前幻灯片中的所有对象 选中的形状动画 删除选中的对象上的形状动画 当前页形状动画 对于当前页中的…

2023.9.1最长上升子序列

56368795 最长上升子序列&#xff1a;5679(严格小于号连接&#xff0c;LIS 最长不降子序列&#xff1a;56679&#xff08;&#xff1c;连接,LNDS 最长下降子序列&#xff1a;875(LDS 最长不升子序列&#xff1a;665(LNIS 上升子序列最小划分数&#xff1a;划分成多个上升子…

MIB 变更周期

MIB 始终以 80 ms 的周期在 BCH 上传输并在 80 ms 内重复&#xff0c;并且它包括从小区获取 SIB1 所需的参数&#xff1b;如果 SSB 的周期大于 80 ms&#xff0c;则 MIB 的发送周期与 SSB 的周期相同。 在UE初始搜索时&#xff0c;SSB在半帧内的周期是20ms&#xff1b;所以对于…

Kotlin Collection KTX:让你的集合操作如丝般顺滑

当今移动应用开发&#xff0c;常常需要使用各种集合类型来存储和操作数据。Kotlin 提供了 Collection KTX 扩展库&#xff0c;为我们操作集合提供了非常方便的 API。在本篇文章中&#xff0c;我们将介绍 Collection KTX 中包含的所有扩展函数&#xff0c;让你的集合操作变得更加…

2024系统分析师---论软件的可靠性设计

摘要&#xff1a; 本人于2018年1月参与了中石化XX油田XX采油厂“用电管理系统”的项目建设&#xff0c;该系统建设目标是实现分单位、分线路、分系统评价、优化、考核&#xff0c;全面提升采油厂用电管理水平。在该项目组中我担任系统架构师一职&#xff0c;主要负责系统整体架…

Linux第23步_安装windows下的stm32cubeprogram软件

stm32cubeprogram软件是通过USB3.0接口烧写系统软件。 1、双击“05、开发工具\02、ST官方开发工具\en.stm32cubeprog_v2-5-0\SetupSTM32CubeProgrammer-2.5.0.exe”。 2、点击“Next” 3、点击“Next” 4、勾选“I agree”&#xff0c;点击“Next” 5、点击“Next” 6、点…

阴盘奇门八字排盘马星位置计算方法php代码

如下位置&#xff0c;马星的四个位置。 计算方法&#xff1a; 1。先根据出生年月日&#xff0c;计算得八字四柱。比如 2024年01月09日&#xff0c;四柱为 其中时柱地支为“申” 2。然后根据以下对应的数组&#xff0c;来找到id号&#xff0c;即马星位置。 根据下表来找到&am…

iPhone语音备忘录怎么导出?这3种方法任你选择!

作为iPhone用户&#xff0c;我们应该会经常使用语音备忘录来记录一些重要的信息。有时候&#xff0c;我们可能需要将这些语音备忘录导出&#xff0c;以方便分享或备份。iphone语音备忘录怎么导出&#xff1f;今天&#xff0c;小编将为大家介绍3种导出iPhone语音备忘录的方法&am…

阿里云RDMA通信库XRDMA论文详解

RDMA(remote direct memory access)即远端直接内存访问&#xff0c;是一种高性能网络通信技术&#xff0c;具有高带宽、低延迟、无CPU消耗等优点。RDMA相比TCP在性能方面有明显的优势&#xff0c;但在编程复杂度上RDMA verbs却比TCP socket复杂一个数量级。 开源社区和各大云厂…

fpga目前就业形势咋样?

FPGA今年各厂给本科生的薪资大概是15-30K&#xff0c;研究生是20-40K&#xff0c;平均薪资在25k左右&#xff0c; 当然具体薪资还要看去哪个公司&#xff0c;哪个城市&#xff0c;以及个人的学校、专业、能力水平、及包括面试时的表现&#xff0c;运气等&#xff0c;这些都会导…

雍禾植发袁宣心中有“术”,雍禾医疗帮用户重启人生

从公立医院烧伤外科来到雍禾&#xff0c;可以说是袁宣职业生涯里最重要的一个决定。据了解&#xff0c;袁宣医生所在的雍禾植发&#xff0c;是国内最大的毛发医疗机构。截至2022年12月31日&#xff0c;雍禾医疗已组建1341人的专业医疗团队&#xff0c;其中毛发医生294人&#x…

从零实现一套低代码(保姆级教程) --- 【15】实现轮播图组件并增加容器子节点类型的控制

摘要 接上一篇&#xff0c;我们继续实现另外一个比较常见的组件。轮播图&#xff0c;在一些官网的页面中&#xff0c;这个组件是非常常见的。 如果你是第一次看到这一篇文章&#xff0c; 建议先看一下第一节内容&#xff1a; 从零实现一套低代码&#xff08;保姆级教程&#…

一个Pygame的Hello World示例程序

创建一个标题为Hello World的窗口&#xff0c;窗口中间显示有Pygame的Logo的python代码 import sys import pygamedef main():pygame.init()screen pygame.display.set_mode((800, 400))pygame.display.set_caption("Hello World")logo pygame.image.load("p…

2024 年 API 管理新趋势预测

本文译自&#xff1a;What Will Be the API Management Trends for 2024&#xff1f; 原文链接&#xff1a;What Will Be the API Management Trends for 2024? - The New Stack 原文作者&#xff1a;Kenn Hussey 预计到 2030 年末&#xff0c;API 管理 市场的规模将增长六倍&…

frp 通过自定义域名访问内网的 Web 服务 --来自官网

通过自定义域名访问内网的 Web 服务 通过简单配置 HTTP 类型的代理&#xff0c;您可以让用户通过自定义域名访问内网的 Web 服务。 HTTP 类型的代理非常适合将内网的 Web 服务通过自定义域名提供给外部用户。相比于 TCP 类型代理&#xff0c;HTTP 代理不仅可以复用端口&#…