当前位置: 首页 > news >正文

【redis】redis部署1主2从3哨兵demo搭建示例

redis版本为7,搭建的架构为1主2从3哨兵的架构。本文是对搭建的过程做一个回忆,过程可能遗漏了某些步骤,见谅。

首先,需要有一个已经安装了的redis。我们从redis源码目录中,找到一个redis.conf文件,这个文件是redis作为server的配置文件模板,mkdir一个新的目录,将这个配置文件cp到新的目录中并对cv的新配置文件进行改动。

此外,还有一个sentinel.conf文件,这个是作为sentinel的配置文件,也可以复制过去。如果想要搭建一个demo,最小化配置即可,只需要简单几个配置放在一个新文件中,不需要复制这样的一个文件。

在这里插入图片描述

一,修改server配置文件

搭建的是demo,所以日志最好在前台输出,针对性的对配置文件做出修改如下:

对作为server的配置文件,需要准备3份,1主2从,port不同,其他的都和下面的配置一致即可。

#redis前台运行
daemonize no
#空字符串表示在前台输出
logfile ""
#指定端口
port 6379

二,修改sentinel配置文件

sentinel的最小化配置文件如下

#指定本台sentinel的端口为26379
port 26379
#指定的本机上的端口为6379的redis为master,master name叫mymaster,需要2台sentinel及以上,才能选举出新的master(本次共3台sentinel,为了防止脑裂,需要2台sentinel的选举结果一致)
sentinel monitor mymaster ::1 6379 2
#sentinel向其他sentinel广播自身ip时用的ip。如果是在一台机器上部署多个redis实例,这个配置是必写的。
sentinel announce-ip "127.0.0.1"

最后准备出如下的配置文件
在这里插入图片描述

三,启动伪集群

redis默认开机启动的话,需要先关闭redis,进入客户端后,关闭server

redis-cli -p 6379
127.0.0.1:6379> shutdown 
或者
redis-cli -p 6379 shutdown

查看redis进程

ps -fe | grep redis

确认redis关闭完后,启动master

#redis-server后面跟配置文件的路径
redis-server ~/test/6379.conf

启动replica

#可以通过--replica ip port,在启动的时候就作为replica,
#也可以在客户端中,通过replicaof命令转为指定ip port的redis的replica,格式和上面一样,replica可以通过replicaof no one重新作为独立的server。
redis-server ~/test/6380.conf --replicaof localhost 6379

启动sentinel

#--sentinel表示这台redsi作为哨兵启动
#也可以通过redis-sentinel,取消最后的--sentinel,启动
redis-server ~/test/26379.conf --sentinel

四,测试哨兵

查看master或replica日志,看到master和replica的sync成功,说明主从数据同步成功。

在这里插入图片描述

依次启动哨兵,下图中为第一台哨兵,可以看到它监测到了2台replica和2台其他哨兵的启动

在这里插入图片描述

此时关闭master6379,哨兵会重新选举master,选举结束后不指定replicaof重新启动6379,6379变为新的master6380的replica。


#epoch1表示开启了一个新的纪元1,也就是说选举出来一个新的主人master。不得不说redis作者有点恶趣味的。
9667:X 31 Jul 2023 04:38:44.108 # +new-epoch 1
9667:X 31 Jul 2023 04:38:44.108 # +try-failover master mymaster 127.0.0.1 6379
9667:X 31 Jul 2023 04:38:44.128 * Sentinel new configuration saved on disk
9667:X 31 Jul 2023 04:38:44.128 # +vote-for-leader 2588ffd5f5be5c93c66544b82b3d39dca44de508 1
9667:X 31 Jul 2023 04:38:44.130 # a87c3d3f480da6b1edc0c99f1187a20a1e332bfa voted for a87c3d3f480da6b1edc0c99f1187a20a1e332bfa 1
9667:X 31 Jul 2023 04:38:44.159 # 166b0a6fa12f54717be667b4eccd59ec5ff7015b voted for 2588ffd5f5be5c93c66544b82b3d39dca44de508 1
#监测到了master6379的失联
9667:X 31 Jul 2023 04:38:44.221 # +elected-leader master mymaster 127.0.0.1 6379
#6379是失联状态
9667:X 31 Jul 2023 04:38:44.221 # +failover-state-select-slave master mymaster 127.0.0.1 6379
#选举6380准备代替6379
9667:X 31 Jul 2023 04:38:44.321 # +selected-slave slave [::1]:6380 ::1 6380 @ mymaster 127.0.0.1 6379
#后面sentinel更新了自己的配置文件,并发送给了其他sentinel,等待6379失联的最终确定。
9667:X 31 Jul 2023 04:38:44.321 * +failover-state-send-slaveof-noone slave [::1]:6380 ::1 6380 @ mymaster 127.0.0.1 6379
9667:X 31 Jul 2023 04:38:44.374 * +failover-state-wait-promotion slave [::1]:6380 ::1 6380 @ mymaster 127.0.0.1 6379
9667:X 31 Jul 2023 04:38:45.197 * Sentinel new configuration saved on disk
9667:X 31 Jul 2023 04:38:45.197 # +promoted-slave slave [::1]:6380 ::1 6380 @ mymaster 127.0.0.1 6379
9667:X 31 Jul 2023 04:38:45.197 # +failover-state-reconf-slaves master mymaster 127.0.0.1 6379
9667:X 31 Jul 2023 04:38:45.257 * +slave-reconf-sent slave [::1]:6381 ::1 6381 @ mymaster 127.0.0.1 6379
9667:X 31 Jul 2023 04:38:46.223 * +slave-reconf-inprog slave [::1]:6381 ::1 6381 @ mymaster 127.0.0.1 6379
9667:X 31 Jul 2023 04:38:46.223 * +slave-reconf-done slave [::1]:6381 ::1 6381 @ mymaster 127.0.0.1 6379
#最终确认6379失联了
9667:X 31 Jul 2023 04:38:46.294 # -odown master mymaster 127.0.0.1 6379
#失联状态结束,后面它就是down状态了
9667:X 31 Jul 2023 04:38:46.294 # +failover-end master mymaster 127.0.0.1 6379
#转换新的master6380
9667:X 31 Jul 2023 04:38:46.294 # +switch-master mymaster 127.0.0.1 6379 ::1 6380
#通知2个replica6380 6381进行对应的转换,6380变为master,6381变为6380的replica
9667:X 31 Jul 2023 04:38:46.294 * +slave slave [::1]:6381 ::1 6381 @ mymaster ::1 6380
9667:X 31 Jul 2023 04:38:46.294 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster ::1 6380
9667:X 31 Jul 2023 04:38:46.317 * Sentinel new configuration saved on disk
#6379也要变为6380的replica,只不过6379现在是down的状态,重新启动6379,不需要--replica指定,6379就会变成6380的replica
9667:X 31 Jul 2023 04:38:49.334 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster ::1 6380
9667:X 31 Jul 2023 04:46:10.375 # -sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster ::1 6380
#重新启动6379,不需要指定--replicaof,直接变为6380的replica
9667:X 31 Jul 2023 04:46:29.370 * +slave slave [::1]:6379 ::1 6379 @ mymaster ::1 6380
9667:X 31 Jul 2023 04:46:29.371 * Sentinel new configuration saved on disk

在这里插入图片描述

五,注意事项

1,是如果是同一台linux装了这些redis,前面提到的sentinel announced-ip配置项一定要配置,不然sentinel会争抢ip。

2,如果在启动sentinel的过程中出现了问题,如果想恢复并重新启动1主2从3哨兵,那么仅仅是通过命令启动,或者将新选举出来的master改为我们想要的port,是不够的。
因为sentinel会自动对sentinel和server replica的配置文件进行追加,追加内容主要是master replica 其他sentinel的ip端口,唯一id,还有状态等。

如果想恢复,一定要将包括master replica sentinel在内的6个配置文件中,包括新选举的master的ip,和sentinel自动追加的内容全部修改或删除,重新依次启动,才能完成恢复。

相关文章:

【redis】redis部署1主2从3哨兵demo搭建示例

redis版本为7,搭建的架构为1主2从3哨兵的架构。本文是对搭建的过程做一个回忆,过程可能遗漏了某些步骤,见谅。 首先,需要有一个已经安装了的redis。我们从redis源码目录中,找到一个redis.conf文件,这个文件…...

C++数据结构之平衡二叉搜索树(一)——AVL的实现(zig-zag/左右双旋/3+4重构)

目录 00.BBST——平衡二叉搜索树01.AVL树02.AVL的插入2.1单旋——zig 与 zag2.2插入节点后的单旋实例2.3手玩小样例2.4双旋实例2.5小结 03.AVL的删除3.1单旋删除3.2双旋删除3.3小结 04.34重构05.综合评价AVL5.1优点5.2缺点 00.BBST——平衡二叉搜索树 本文是介绍众多平衡二叉搜…...

免疫疗法勘察兵——DC细胞

DC细胞又叫树状细胞或者树突细胞,1869年由保罗兰格尔翰斯发现,一开始被误以为是神经细胞的一种,直到1973年皮肤科医师Inga Silberberg发现了他的免疫功能,同年,被拉尔夫斯坦曼和赞威尔A科恩两人正式命名为“dendritic…...

Django实现音乐网站 ⑷

使用Python Django框架制作一个音乐网站,在系列文章3的基础上继续开发, 本篇主要是后台歌曲类型表、歌单表模块功能开发。 目录 表结构设计 歌曲类型表结构 歌单表结构 创建表模型 创建表 后台注册表模型 引入表模型 后台自定义 总结 表结构设计…...

2023年华数杯数学建模C题思路 - 母亲身心健康对婴儿成长的影响

# 1 赛题 C 题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一,她不仅为婴儿提供营养物质和身体保护, 还为婴儿提供情感支持和安全感。母亲心理健康状态的不良状况,如抑郁、焦虑、 压力等,可能会对婴儿的认知、情…...

openGauss学习笔记-30 openGauss 高级数据管理-别名

文章目录 openGauss学习笔记-30 openGauss 高级数据管理-别名30.1 语法格式30.1.1 列别名语法30.1.2 表别名语法 30.2 参数说明30.3 示例 openGauss学习笔记-30 openGauss 高级数据管理-别名 SQL可以重命名一张表或者一个字段的名称,这个名称为该表或该字段的别名。…...

C#实现多线程局域网扫描器的思路与具体代码

C#实现多线程局域网扫描器的思路与具体代码 思路: 获取局域网内所有 IP 地址遍历所有 IP 地址,使用 Ping 命令测试主机是否在线如果主机在线,则扫描主机上的所有端口,确定哪些端口是开放的输出扫描结果 在上述过程中&#xff0…...

Redis秒杀:一人一单问题及初步解决

优惠券秒杀一人一单 前言一、需求以及之前存在的问题二、增加一人一单逻辑1.初步代码2.封装一人一单逻辑3.控制锁的粒度 三、事务控制问题四、总结 前言 跟随黑马虎哥学习redis: 这是我认为b站上最好的redis教程,各方面讲解透彻,知识点覆盖…...

python 数据分析面试题:求分组排第n名的记录数据

近期面试遇到一个面试题,分享给大家。 文中会提供详细的解题思路以及问题延伸 一、面试题 面试题:输出各学科总分第一名的学员姓名、年龄、分数数据: class_a {name: [学员1, 学员2, 学员3, 学员4,学员5],age: [23, 24, 26, 27,25],course…...

eclipse常用快捷键

Eclipse常用快捷键 补全代码的声明:alt /快速修复: ctrl 1批量导包:ctrl shift o使用单行注释:ctrl /使用多行注释: ctrl shift /取消多行注释:ctrl shift \复制指定行的代码:ctrl alt down 或…...

什么是OCR?OCR技术详解

光学字符识别(Optical Character Recognition)简称为“OCR”。ORC是指对包含文本资料的图像文件进行分析识别处理,获取文字及版面信息的技术。 一般包括以下几个过程: 1.图像输入 针对不同格式的图像,有着不同的存储格式和压缩方式。目前&…...

【大模型】开源且可商用的大模型通义千问-7B(Qwen-7B)来了

【大模型】开源且可商用的大模型通义千问-7B(Qwen-7B)来了 新闻通义千问 - 7B 介绍评测表现快速使用环境要求安装相关的依赖库推荐安装flash-attention来提高你的运行效率以及降低显存占用使用 Transformers 运行模型使用 ModelScope 运行模型 量化长文本…...

SQL分类及通用语法数据类型

一、SQL分类 DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)DML: 数据操作语言,用来对数据库表中的数据进行增删改DQL: 数据查询语言,用来查询数据库中表的记录DCL: 数据控制语言,用来创建数据库…...

亿欧智库:2023中国功效型护肤产品成分解析研究报告(附下载

关于报告的所有内容,公众【营销人星球】获取下载查看 核心观点 消费端:“纯净美妆〞概念火热,消费驱动因素向成分来源硬核转变 新冠疫情过后,消费者对于生活健康:自然,可持续的关注度持续上升。在消费者…...

Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装

Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署(二)ETCD集群部署 Kubernetes高可用集群二进制部署(三)部署…...

python与深度学习(十二):CNN和猫狗大战二

目录 1. 说明2. 猫狗大战的CNN模型测试2.1 导入相关库2.2 加载模型2.3 设置保存图片的路径2.4 加载图片2.5 图片预处理2.6 对图片进行预测2.7 显示图片 3. 完整代码和显示结果4. 多张图片进行测试的完整代码以及结果 1. 说明 本篇文章是对上篇文章猫狗大战训练的模型进行测试。…...

React(1)——快速入门

目录 一、React背景简介 ❤️ 官网和资料 📚 介绍描述 🐧 React的特点 🔨 React高效的原因 🙏🏻 二、React的基本使用 💻 三、React JSX(JSX:JavaScript XML)📦 …...

【论文】【生成对抗网络五】Wasserstein GAN (WGAN)

【题目、作者】: 紫色:要解决的问题或发现的问题 红色:重点内容 棕色:关联知识,名称 绿色:了解内容,说明内容 论文地址: 论文下载 本篇文章仅为原文翻译,仅作参考。…...

学习率Learn_rate是什么(深度学习)

学习率是指在训练神经网络时用于调整参数的步进大小,它决定了每次梯度更新时参数的调整程度。学习率的选择直接关系到模型的性能和训练过程的效果。 学习率变化可能带来的影响: 收敛速度:较高的学习率可以加快模型的收敛速度,因为…...

webpack基础知识五:说说Loader和Plugin的区别?编写Loader,Plugin的思路?

一、区别 前面两节我们有提到Loader与Plugin对应的概念,先来回顾下 loader 是文件加载器,能够加载资源文件,并对这些文件进行一些处理,诸如编译、压缩等,最终一起打包到指定的文件中plugin 赋予了 webpack 各种灵活的…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes&#xff0…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"&#xff0…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

消息队列系统设计与实践全解析

文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...

Python爬虫(四):PyQuery 框架

PyQuery 框架详解与对比 BeautifulSoup 第一部分:PyQuery 框架介绍 1. PyQuery 是什么? PyQuery 是一个 Python 的 HTML/XML 解析库,它采用了 jQuery 的语法风格,让开发者能够用类似前端 jQuery 的方式处理文档解析。它的核心特…...