Redis主从复制哨兵及集群

news2024/12/26 0:56:45

目录

一.主从复制

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

主从复制的作用:

搭建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.coloradmin.cn/o/1369958.html

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

相关文章

HCIA-Datacom题库(自己整理分类的)_15_VRP平台多选【9道题】

1.VRP操作平台存在哪些命令行视图? 用户视图 接口视图 协议视图 系统视图 2.以下哪些存储介质是华为路由器常用的存储介质 SDRAM NVRAM Flash Hard Disk SD Card 解析:Hard Disk是硬盘,一般网络设备没有。 3.VRP支持通过哪几种方式对路由器…

红队打靶练习:DERPNSTINK: 1

目录 信息收集 1、arp 2、netdiscover 3、nmap 4、nikto 5、whatweb 目录探测 1、gobuster 2、dirsearch WEB get flag1 robots.txt /php/phpmyadmin /temporary /weblog wordpress wpscan扫描 漏洞发现 提权 系统信息收集 mysql登录 john get flag2 s…

Java中的装箱和拆箱

自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。 一.什么是装箱?什么是拆箱? 我们…

Python画国旗

前言 今天,我们来用turtle库来绘制国旗 一、美国国旗 国旗的形状是长方形;国旗的长宽之比为19:10,美国国旗由红、白、蓝三色组成;画面格局由两部分组成,旗的左上方蓝底上排列着50颗白色的星,6颗一排与5颗一排相间排列&#xff…

使用Process Explorer和Dependency Walker排查程序启动时缺少ucrtbase.dll等运行时库以及报0xC000007B错误

目录 1、问题描述 2、分析软件问题的常用分析工具 3、使用Dependency Walker排查启动程序时报找不到ucrtbase.dll、vcruntime140.dll等运行时库的问题 3.1、使用Dependency Walker查看exe程序的库依赖关系,排查找不到ucrtbase.dll、vcruntime140.dll库问题 3.2…

指针的含义、表示、规范、存储、运用

指针的含义、表示、规范、存储、运用 指针的含义指针的表示指针的规范先声明再定义声明和定义一起表示错误表示 指针的存储理解一个变量的存储过程和原理理解一个指针的存储过程和原理理解多个指针的存储过程和原理 指针的运用 指针的含义 表示某个变量或数据所在的内存地址 注…

大模型笔记 【1】 大模型初探

以下是Andrej Karpathy一小时讲解chatgpt的笔记。 Andrej Karpathy做自动驾驶的人应该比较熟悉,他是李飞飞的学生。在openAI做了一年半的科学家之后,去了特斯拉。在Tesla AI day讲解tesla自动驾驶方案的就是他。 这里我的主要收获是两个 大模型是一个有…

12V 全桥驱动芯片GC9008——可替代TMI8118,应用于摄像机、消费类产品上

GC9008 是一款 12V 全桥驱动芯片,为提供高性价比的方案。它能提供 0.1A 的持续输出电流。可以工作在 4.5~15V 的电源电压上。 具有 PWM(IN1/IN2)输入接口,与行业标准器件兼容.是 SOP8封装,GC9008D是DIP封装芯片特点 ● H 桥电机驱…

关于burpsuite对app(移动端)进行抓包的配置

可以使用手机模拟器,我这里以自己手机(物理机)演示配置过程 如果是使用的模拟器那么肯定和电脑是在同一局域网 如果使用物理机,那么可以通过连接同一WiFi确保在同一局域网环境下 查看电脑内网ip:192.168.1.105 &am…

2023 年精选:ChatGPT 会取代开发者吗?

由于最近发布了ChatGPT,人工智能再次热闹起来,ChatGPT 是一种自然语言聊天机器人,人们用它来写电子邮件、诗歌、歌词和大学论文。早期采用者甚至用它来编写Python 代码,以及对 shellcode 进行逆向工程并用 C 重写。ChatGPT 给那些…

Docker实战09|使用AUFS包装busybox

前几篇文章中,重点讲解了如何实现构建容器,需要回顾的小伙伴可以看以下文章: 《Docker实战06|深入剖析Docker Run命令》《Docker实战07|Docker增加容器资源限制》《Docker实战08|Docker管道及环境变量识别…

1879_什么是丝印

Grey 全部学习内容汇总: GitHub - GreyZhang/g_hardware_basic: You should learn some hardware design knowledge in case hardware engineer would ask you to prove your software is right when their hardware design is wrong! 1873_什么是丝印 丝印这个词…

Android平板浏览器远程Ubuntu服务器使用code-server编程写代码

文章目录 1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 1.ubuntu本地安装code-server 准备一台虚拟机,Ubuntu或者centos都可以,这里以VMwhere ubuntu系统为例 下载code server服务,浏览器…

我在工作一年时怎么都看不懂的编程写法。今天手把手教给你

作为一名程序员,你一定遇到或亲自写过这样的代码。有人将它形象的形容为shi山,或者被戏称为“面向保就业编程”。 以下面这个代码为例,其中的问题也显而易见,当越来越多的条件判断时,代码会变得非常臃肿,难…

记录汇川:H5U与Fctory IO测试5

主程序: 子程序: IO映射 子程序: 自动程序 Fctory IO配置: 触摸屏如下: 实际动作如下: Fctory IO测试5

mybatis plus相同Id与xml配置错误时,mybatis plus解决逻辑

前言 处理做项目的问题,其中不乏奇奇怪怪的问题,其中mybatis plus的问题感觉有点隐蔽,有些是运行时出现,有些是运行到具体的逻辑触发,对于应用的状态监控提出了极大的挑战,应用的状态由健康检查接口提供&a…

VMware复制粘贴共享文件夹

win和虚拟机之间,无法复制粘贴,共享文件夹的解决方案。 安装VMware tools 1,先检查虚拟机设置部分。共享文件夹已启用。复制粘贴已启用。 2,安装tools.选择重新安装VMware tools. (此图片为安装过的截图) 成功后会显示如图。…

【Python书籍】字节大佬爆肝整理的Python背记手册最佳入门书籍,刷爆这本书你的Python就牛了!

前言: 现今有很多人都想学习Python,但是不乏有一些英语不好和非计算机专业的小伙伴,在最基础入门阶段会跟不上被甩在身后,就是在知识点的理解方面有所缺失,对于计算机的运算,计算机语言,计算机…

家政服务系统有哪些优势及特点

🌈家政系统小程序,有哪些功能优势! 1、平台依托:🌍小程序极速开发。 2、人员保障:顾客轻松注册,家政服务人员也有独立账号。 3、地域无忧:后台自定义开放城市范围。🌟 4、…

MySQL决战:MySQL数据导入导出

目录 前言 一.navact数据导入导出(第三方工具) 1.导入数据 2.数据导出 二. mysqldump命令导入导出数据 1.mysqldump介绍 2.数据导出 3.数据导入 三.load data file进行数据导入导出(只限于单表) 1.数据导出 增加导出权…