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

使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构(未做共享存储版)

文章目录

  • 使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构
  • Redis 主从架构部署 (`1.yaml`)
  • Redis Sentinel 部署 (`2.yaml`)
  • Sentinel 服务暴露 (`3.yaml`)
  • 部署步骤
  • 总结


使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构

本文将详细介绍如何在 Kubernetes 中部署 Redis 主从及 Sentinel 高可用架构,提供完整的 YAML 配置文件,并逐步解析其关键配置。命名空间已调整为 test

我这是单点,未做共享存储版


Redis 主从架构部署 (1.yaml)

首先,使用 StatefulSet 部署 Redis 主从结构,每个实例通过主机名确定角色:

apiVersion: apps/v1
kind: StatefulSet
metadata:name: redisnamespace: test
spec:serviceName: redisreplicas: 3selector:matchLabels:app: redistemplate:metadata:labels:app: redisspec:initContainers:- name: init-redisimage: docker.wctmd.us.kg/busybox:latestcommand: ["/bin/sh", "-c"]args: ["mkdir -p /data/redis/$(hostname)"]volumeMounts:- name: redis-datamountPath: /datacontainers:- name: redisimage: docker.wctmd.us.kg/redis:5.0.14ports:- containerPort: 6379command: ["/bin/sh"]args: - "-c"- |if [ $(hostname) = "redis-0" ]; thenredis-server --port 6379 --protected-mode no --replica-announce-ip $(hostname).rediselseredis-server --port 6379 --protected-mode no --replicaof redis-0.redis 6379 --replica-announce-ip $(hostname).redisfivolumeMounts:- name: redis-datamountPath: /datavolumes:- name: redis-datahostPath:path: /data/redistype: DirectoryOrCreate

关键点解析

  • 主从自动识别redis-0 为主节点,其它 Pod 配置为从节点并通过 --replicaof 指定主节点。
  • 数据持久化:使用 hostPath 存储 Redis 数据,映射到宿主机的 /data/redis
  • 独立目录管理:通过 initContainer 动态创建 /data/redis/$(hostname),避免目录冲突。

Redis Sentinel 部署 (2.yaml)

接下来,部署 Sentinel 来监控 Redis 主从并实现自动故障转移:

apiVersion: apps/v1
kind: Deployment
metadata:name: redis-sentinelnamespace: test
spec:replicas: 3selector:matchLabels:app: redis-sentineltemplate:metadata:labels:app: redis-sentinelspec:containers:- name: redis-sentinelimage: docker.wctmd.us.kg/redis:5.0.14ports:- containerPort: 26379command: [ "redis-sentinel" ]args: ["/data/sentinel.conf"]volumeMounts:- name: sentinel-confmountPath: /datainitContainers:- name: init-sentinelimage: docker.wctmd.us.kg/busybox:latestcommand: ["/bin/sh", "-c"]args:- cp /etc/redis/sentinel.conf /data/sentinel.conf && chmod 600 /data/sentinel.confvolumeMounts:- name: sentinel-confmountPath: /data- name: config-volumemountPath: /etc/redisvolumes:- name: sentinel-confemptyDir: {}- name: config-volumeconfigMap:name: sentinel-config
---
apiVersion: v1
kind: ConfigMap
metadata:name: sentinel-confignamespace: test
data:sentinel.conf: |sentinel monitor mymaster redis-0.redis 6379 2sentinel down-after-milliseconds mymaster 5000sentinel failover-timeout mymaster 60000sentinel parallel-syncs mymaster 1

关键点解析

  • 动态配置文件管理:通过 initContainer 将只读的 ConfigMap 文件复制到可写路径,并调整权限。
  • 多实例部署:使用 Deployment 创建 3 个 Sentinel 实例以实现高可用。
  • 监控配置ConfigMap 定义了 Sentinel 的监控规则,包括主节点、超时、同步参数等。

Sentinel 服务暴露 (3.yaml)

最后,通过 Service 将 Sentinel 对外暴露,便于外部访问:

apiVersion: v1
kind: Service
metadata:name: redis-sentinelnamespace: test
spec:type: NodePortports:- nodePort: 30154port: 26379targetPort: 26379protocol: TCPselector:app: redis-sentinel

关键点解析

  • 外部访问支持:使用 NodePort 暴露 Sentinel 服务,监听宿主机的 30154 端口。
  • 服务选择器:通过标签 app: redis-sentinel 将流量路由到 Sentinel Pod。

部署步骤

  1. 创建命名空间 test
    kubectl create namespace test
    
  2. 应用 1.yaml 部署 Redis:
    kubectl apply -f 1.yaml
    
  3. 应用 2.yaml 部署 Sentinel:
    kubectl apply -f 2.yaml
    
  4. 应用 3.yaml 创建服务:
    kubectl apply -f 3.yaml
    
  5. 验证部署状态:
    kubectl -n test get pods
    kubectl -n test get svc
    

总结

本文展示了如何使用 Kubernetes 部署 Redis 主从架构和 Sentinel 高可用集群。通过灵活的 StatefulSetDeployment 配置,我们实现了高可靠性和动态配置管理,同时确保数据持久化和集群安全性。

建议:在生产环境中,可以进一步优化存储方案(如使用 PersistentVolume)并增强安全配置(如启用 Redis/Sentinel 认证)。

相关文章:

使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构(未做共享存储版)

文章目录 使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构Redis 主从架构部署 (1.yaml)Redis Sentinel 部署 (2.yaml)Sentinel 服务暴露 (3.yaml)部署步骤总结 使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构 本文将详细介绍如何在 Kubernetes 中部署 Redis …...

AI开发 - 用GPT写一个GPT应用的真实案例

就在昨天,我的同事推荐给我了一个第三方的公共大模型API,这个API集合了国际上上几乎所有知名的大模型,只需要很少的费用,就可以接入到这些大模型中并使用它们。成本之低,令人乍舌!包括我们现在无法试用的 G…...

C#—索引器

C#—索引器 索引器(Indexer)是类中的一个特殊成员,它能够让对象以类似数组的形式来操作,使程序看起来更为直观,更容易编写。索引器与属性类似,在定义索引器时同样会用到 get 和 set 访问器,不同…...

杨振宁大学物理视频中黄色的字去掉(稳定简洁版本,四)

杨振宁大学物理1214 色带矩形带来很大麻烦! 今天想到一个方法,整个色带矩形拉通,做个通铺处理,不计算,代码做最小化,最稳定追求。 因为黄色字稳定,我们找到他的中心,而这个色带矩形…...

排序算法(5):归并排序

问题 排序 [30, 24, 5, 58, 18, 36, 12, 42, 39] 归并排序 归并排序采用分治法,将序列分成若干子序列,每个子序列有序后再合并成有序的完整序列。 在数组排序中,如果只有一个数,那么它本身就是有序的。如果有两个数&#xff0…...

Gate学习(7)引入体素源

一、从GitHub下载体素源模型源码 下载地址:BenAuer2021/Phantoms-for-Nuclear-Medicine-Imaging-Simulation:用于核医学成像应用的模型(闪烁显像、SPECT 和 PET) --- BenAuer2021/Phantoms-For-Nuclear-Medicine-Imaging-Simulat…...

2024.12.14 TCP/IP 网络模型有哪几层?

2024.12.14 TCP/IP 网络模型有哪几层? 2024.12.14 今天周六 看到大伙都在考六级,我来复盘小林coding的计算机网络的知识点: TCP/IP 网络模型有哪几层? 问大家,为什么要有 TCP/IP 网络模型? 对于同一台设备上的进程间通信,有…...

item2 for macos

安装Item2 brew install iterm2 查看终端类型 cat /etc/shells Mac OS X 10.15 已经将默认的shell从Bash换成了zsh,所以不用安装,10.15以前的可以使用下面的命令进行安装 brew install zsh 安装Oh My ZSH # curl sh -c "$(curl -fsSL https://ra…...

二维三维空间上两点之间的距离

二维三维路径上,路径总距离以及途径点与障碍物之间的距离等都需要计算两点之间的距离。两点之间的距离有多种计算方法,这些计算方法主要取决于所考虑的空间维度、点的属性以及具体的应用场景。以下是一些常见的距离计算方法: 1. 曼哈顿距离(Manhattan distance) 定义:也…...

相机测距原理

基础概念的回顾 焦距的定义 焦距是指透镜或镜头的光学中心(通常是透镜的几何中心)到其焦点的距离。 焦点是光线的交点,它指的是透镜或镜头聚焦所有入射光线后汇聚的位置。焦点的位置与透镜的曲率和光线的入射角度相关。就是说所有光线经过…...

Debezium SchemaNameAdjuster 分析

Debezium SchemaNameAdjuster 分析 目录 1. 概述2. 核心功能3. 实现原理4. 应用场景5. 扩展示例6. 总结1. 概述 SchemaNameAdjuster 是 Debezium 中的一个工具类,主要用于确保 Schema 名称符合 Avro 命名规范。在数据库变更事件被转换为 Kafka 消息时,需要为每个表和字段创…...

Stable Diffusion绘画 | SDXL模型使用注意事项

注意事项 SDXL模型的使用,对电脑配置要求更高,需要 8GB 以上显存的显卡SDXL模型兼容性不太好,容易出现错误,对 Mac 电脑不友好只能选择 SDXL模型 训练的 LoRA 使用不能使用旧的 VAE文件 SDXL 专用 VAE 文件:sdxl_vae.…...

(五)机器学习 - 数据分布

数据分布(Data Distribution)是指数据在不同值或值区间内的分布情况,它描述了数据点在整个数据集中是如何分散或集中的。数据分布可以通过多种方式来分析和表示,包括图形和数值方法。 常见的数据分布特征和描述数据分布的方法&…...

Flink State面试题和参考答案-(上)

什么是 Flink 中的状态(State)? Flink 中的状态是指在 Flink 流处理程序中,操作符或函数用于存储和访问数据的机制。状态可以看作是在事件流处理过程中,随着时间推移而累积或变更的数据集合。在 Flink 的有状态流处理…...

利用开源Stable Diffusion模型实现图像压缩比竞争方法用更低的比特率生成更逼真的图像

概述 论文地址:https://studios.disneyresearch.com/app/uploads/2024/09/Lossy-Image-Compression-with-Foundation-Diffusion-Models-Paper.pdf 迪士尼的研究部门正在提供一种新的图像压缩方法,利用开源Stable Diffusion V1.2 模型,以比竞…...

QT信号与槽机制详解

当信号发出后,被连接的槽函数会自动被回调,类似观察者模式,当发生了感兴趣的事件,某一个操作就会被自动触发。信号是由于用户对窗口或控件进行了某些操作,导致窗口或控件产生了某个特定事件,这时Qt对应的窗…...

openGauss开源数据库实战二十二

文章目录 任务二十二 使用JDBC访问openGauss数据库任务目标实施步骤一、查看和设置隔离级别1.查看系统默认的隔离级别2.设置系统默认的隔离级别3.查看当前会话的隔离级别4.设置当前会话的隔离级别5.设置当前事务的隔离级别 二、读提交隔离级别测试三、可重复读隔离级别测试 任务…...

BurpSuite解决暴力破解时需要验证码问题

学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章。 笔记只是方便学习,以下内容只涉及学习内容,切莫逾越法律红线。 安全见闻,包含了各种网络安全,网络技术,旨在明白自己的渺小,知识的广博&a…...

WPF Combox使用 Text无法选择正确获取CHange后的Text

使用固定ComboxItem 无法通过 selectitem as object 来进行回去到 Content内的对香数据。那我只能这个样干&#xff1a; private void CBPaiweiLeixingSelect_Change(object sender, SelectionChangedEventArgs e){ ComboBox ThisBox sender as ComboBox;List<EDaxiaosuixi…...

【速览】设计模式(更新中)

目录 模式的历史设计模式是什么设计原则 SOLID1. 单一职责原则&#xff08;Single Responsibility Principle, SRP&#xff09;2. 开闭原则&#xff08;Open/Closed Principle, OCP&#xff09;3. 里氏替换原则&#xff08;Liskov Substitution Principle, LSP&#xff09;4. 接…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

java+webstock

maven依赖 <dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.3.5</version></dependency><dependency><groupId>org.apache.tomcat.websocket</groupId&…...

【字节拥抱开源】字节团队开源视频模型 ContentV: 有限算力下的视频生成模型高效训练

本项目提出了ContentV框架&#xff0c;通过三项关键创新高效加速基于DiT的视频生成模型训练&#xff1a; 极简架构设计&#xff0c;最大化复用预训练图像生成模型进行视频合成系统化的多阶段训练策略&#xff0c;利用流匹配技术提升效率经济高效的人类反馈强化学习框架&#x…...

信息系统分析与设计复习

2024试卷 单选题&#xff08;20&#xff09; 1、在一个聊天系统(类似ChatGPT)中&#xff0c;属于控制类的是&#xff08;&#xff09;。 A. 话语者类 B.聊天文字输入界面类 C. 聊天主题辨别类 D. 聊天历史类 ​解析 B-C-E备选架构中分析类分为边界类、控制类和实体类。 边界…...

Xcode 16.2 版本 pod init 报错

Xcode 版本升级到 16.2 后&#xff0c;项目执行 pod init 报错&#xff1b; ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchron…...