基于华为云kubernetes的应用多活的示例
1 概述
为避免地域级别的故障,需要将单机房架构变成双地域架构(两个机房物理距离越远,网络延时越大,网延时是业务研发首先关注的)。单边写的多机房架构,是落地性比较大的一个方案,相对于单元化架构。并且,通过域名作为中间层来屏蔽故障切换时的数据库IP变化,业务研发就不需要修改应用配置了,只需要平台组工程师在DNS服务器上进行DNS记录的变更即可,省去故障切换时应用配置的变更。
2 架构
3 环境
3.1 广州地域:
ELB的公网地址是:139.xx.xx.xxx
数据库内网地址是:10.0.29.52
数据库公网地址是:113.xx.xx.xx
数据库域名是:mysql.example.com
数据库的database是:demo
数据库的用户是:demo
3.2 上海地域:
ELB的公网地址是:122.xx.xx.xxx
数据库内网地址是:192.168.14.185
数据库公网地址是:116.xx.xx.xx
数据库域名是:mysql.example.com
数据库的database是:demo
数据库的用户是:demo
3.3 数据库同步
使用华为云DRS服务的实时灾备任务作为数据同步工具:
3.4 应用公网域名:
demo-mall.xxxxx.com
3.5 应用部署
环境变量DATA_CENTER,表示该用于属于哪个地域。
环境变量MYSQL_HOST,表示数据库的地址。
环境变量MYSQL_USER,表示数据库的账号。
环境变量MYSQL_PASSWORD:表示数据库的密码。
应用会自动初始化数据库记录。
应用对外暴露的接口:
curl http://127.0.0.1:8080/productscurl -XPOST http://127.0.0.1:8080/products -d '{"name": "Product-21", "price": 1088.29}'
广州应用的kubernetes yaml,环境变量DATA_CENTER设置为GZ,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: gorm-demoname: gorm-demo
spec:selector:matchLabels:app: gorm-demotemplate:metadata:labels:app: gorm-demospec:containers:- image: swr.cn-south-1.myhuaweicloud.com/migrator/gorm-demo:latestname: gorm-demoimagePullPolicy: Alwaysports:- containerPort: 8080protocol: TCPenv:- name: DATA_CENTERvalue: "GZ"- name: MYSQL_HOSTvalue: mysql.example.com- name: MYSQL_PASSWORDvalue: *****************your_password*****************- name: MYSQL_USERvalue: demoresources:limits:cpu: 500mmemory: 500Mirequests:cpu: 100mmemory: 128MilivenessProbe:failureThreshold: 30httpGet:path: /productsport: 8080scheme: HTTPperiodSeconds: 10successThreshold: 1timeoutSeconds: 3readinessProbe:failureThreshold: 3httpGet:path: /productsport: 8080scheme: HTTPperiodSeconds: 10successThreshold: 1timeoutSeconds: 3
---
apiVersion: v1
kind: Service
metadata:name: gorm-demo
spec:ports:- name: gorm-demoport: 80protocol: TCPtargetPort: 8080selector:app: gorm-demotype: ClusterIP
上海应用的kubernetes yaml,环境变量DATA_CENTER设置为SH,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: gorm-demoname: gorm-demo
spec:selector:matchLabels:app: gorm-demotemplate:metadata:labels:app: gorm-demospec:containers:- image: swr.cn-south-1.myhuaweicloud.com/migrator/gorm-demo:latestname: gorm-demoimagePullPolicy: Alwaysports:- containerPort: 8080protocol: TCPenv:- name: DATA_CENTERvalue: "SH"- name: MYSQL_HOSTvalue: mysql.example.com- name: MYSQL_PASSWORDvalue: *****************your_password*****************- name: MYSQL_USERvalue: demoresources:limits:cpu: 500mmemory: 500Mirequests:cpu: 100mmemory: 128MilivenessProbe:failureThreshold: 30httpGet:path: /productsport: 8080scheme: HTTPperiodSeconds: 10successThreshold: 1timeoutSeconds: 3readinessProbe:failureThreshold: 3httpGet:path: /productsport: 8080scheme: HTTPperiodSeconds: 10successThreshold: 1timeoutSeconds: 3
---
apiVersion: v1
kind: Service
metadata:name: gorm-demo
spec:ports:- name: gorm-demoport: 80protocol: TCPtargetPort: 8080selector:app: gorm-demotype: ClusterIP
3.6 公网访问效果
4 模拟源端数据故障
直接在web控制台,停止广州数据库实例:
会发现,应用的pod的状态变成非就绪,因为探针接口会访问数据库,数据库不可用则探针失败:
很显然,此时如果访问公网域名,ELB会返回如下响应,因为它对后端pod的健康检查失败:
此时,关闭DRS的容灾任务,让上海数据库实例变成正常状态:
接着,不修改广州应用的环境变量配置,只需要将广州地域的数据库域名修改成上海数据库的公网地址:
发现广州的pod又重新就绪了:
接着,不修改上海应用的环境变量配置,只需要将上海地域的数据库域名修改成上海数据库的内网地址:
发现上海的pod又重新就绪了:
此时,重新访问外部域名,服务又正常了:
现在系统的架构变成这样了:
5 小结
单边写的应用双活,是落地性比较大的一种双活架构。加之通过域名来屏蔽数据库IP的变化,进一步减少了故障转移时的应用配置的变化,应用配置变化越少,RTO则越短。
相关文章:
基于华为云kubernetes的应用多活的示例
1 概述 为避免地域级别的故障,需要将单机房架构变成双地域架构(两个机房物理距离越远,网络延时越大,网延时是业务研发首先关注的)。单边写的多机房架构,是落地性比较大的一个方案,相对于单元化…...
Linux动态库 vs 静态库:创建步骤与优缺点对比
Linux系列 文章目录 Linux系列前言一、动静态库的概念引入1.1 库的基本概念1.2 静态库(Static Library)1.3 动态库(Dynamic Library)1.4 动静态库的核心区别 二、动静态库的实现2.1 静态库的创建及使用2.2 动态库的创建和使用三、…...
分析下HashMap容量和负载系数,它是怎么扩容的?
很好,我们继续深入分析 HashMap 中 容量(capacity) 和 负载因子(load factor),以及它是如何进行 扩容(resize) 的。 🧱 一、容量(capacity)与负载…...
Linux权限管理:从入门到实践
目录 引言 编辑一、Linux用户类型 二、文件访问者分类 三、文件类型和访问权限 (一)文件类型 (二)基本权限 四、文件访问权限设置方法 (一)chmod命令 (二)chown命令 &…...
计算机网络(1)
名称解析 名称解析:将名称解析成对应地址,名字-->IP 名称解析优点:便以记忆、解耦(断开直接的练习) 容器 mini的虚拟机,该容器地址是动态的、生命周期短暂;可实现登录功能 如果用户想要登录该…...
第十一天 - MySQL/SQLite操作 - 数据库备份脚本 - 练习:监控数据存储系统
数据库实战入门:从零构建监控数据存储系统 前言 在物联网和系统监控领域,数据存储是核心基础环节。本文将通过MySQL/SQLite操作、数据库备份脚本和监控数据存储实战三个模块,带领初学者快速掌握数据库在真实场景中的应用。文章包含25个代码…...
编写文生视频提示词,制作抖音爆款视频
编写文生视频提示词,制作抖音爆款视频 一、理解文生视频提示词1.1 定义提示词1.1.1 提示词与创作工具的关系1.1.2 文生视频的功能 1.2 提示词的组成1.2.1 主体(Subject)1.2.2 动作(Action)1.2.3 场景(Scene…...
Linux: 线程控制
目录 一 前言 二 线程控制 1. POSIX线程库(原生线程库) 2. 创建线程 2.1 pthread_create 2.2pthread_self()获取线程id 3.线程终止 3.1.return 方式 3.2 pthread_exit 4 线程等待 三 理解线程tid 一 前言 在上一篇文章中我们已经学习了线程的概念,线程的创…...
为什么 npm list -g 没显示 node_modules?✨
揭秘:为什么 npm list -g 没显示 node_modules?🕵️♂️✨ 嗨,各位代码探险家!👋 今天我们要破解一个 npm 小谜团:运行 npm list -g --depth0 时,为什么输出的路径里看不到 node_…...
华为数字芯片机考2025合集4已校正
单选 1. 题目内容 影响芯片成本的主要因素是 Die Size 和封装,但电源、时钟等因素,特别是功耗对解决方案的成本影响较大,因此低成本设计需要兼顾低功耗设计:() 1. 解题步骤 1.1 分析题目 Die Size&…...
达摩院Paraformer-ONNX模型:一站式高精度中文语音识别工业级解决方案
文章目录 核心技术创新三大部署方案对比1. Docker极简部署(推荐)2. Python API直连调用3. 客户端实时测试工具 高阶调优技巧典型应用场景高频问题解决方案参考 阿里达摩院推出的speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-on…...
Llama 4的争议
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
React七案例下
代码下载 登录模块 用户登录 页面结构 新建 Login 组件,对应结构: export default function Login() {return (<div className{styles.root}><NavHeader className{styles.header}>账号登录</NavHeader><form className{styles.form}>&…...
Rust包管理与错误处理
文章目录 包管理箱(Crate)包(Package)模块(Module)访问权限use关键字 错误处理不可恢复错误可恢复错误错误传递kind方法 包管理 Rust的包管理有三个重要的概念,分别是箱、包、模块 箱…...
关于gitee的readme文档中的图片问题
使用markdown编辑readme文档,需要注意 添加图片,但是不显示问题 1.记得连图片一起上传到仓库中,不能只是在本地markdown文件中复制就结束了,因为存储的是本地图片地址,上传后找不到的 2.注意使用网络地址࿰…...
记录vscode连接不上wsl子系统下ubuntu18.04问题解决方法
记录vscode连接不上wsl子系统下ubuntu18.04问题解决方法 报错内容尝试第一次解决方法尝试第二次解决方法注意事项参考连接 报错内容 Unable to download server on client side: Error: Request downloadRequest failed unexpectedly without providing any details… Will tr…...
aws平台练习
注册 AWS 账户 访问 AWS 官方网站,点击“免费注册”按钮,按照提示完成账户注册: 提供电子邮件地址、密码和电话号码。 验证身份(可能需要手机验证码)。 设置 billing 信息。 2. 登录 AWS 管理控制台 使用注册的邮箱和…...
实战篇-梳理时钟树
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据 总结 前言 这是B站傅里叶的猫视频的笔记 一、建立工程 以Vivado的wave_gen为例子。为了引入异…...
【Hadoop入门】Hadoop生态之Hive简介
1 什么是Hive? 1.1 Hive概述 在大数据时代,如何让传统的数据分析师和SQL开发人员也能轻松处理海量数据?Hive应运而生。Hive是基于Hadoop构建的一套数据仓库分析系统,它提供了一种类似SQL的查询语言(HQL)&a…...
DSP复习【3章】
F2812提供了XINTF用于扩展并行接口的外设芯片。 XINTF(外部接口)所需的时钟是 SYSCLKOUT 和 XTIMCLK。 所以正确答案是: ✅ SYSCLKOUT 和 XTIMCLK 什么是XREADY信号,如何使用? 章节例题: 1. 如何通过软件判…...
Hadoop案例——流量统计
Hadoop案例——流量统计 在大数据时代,流量统计是许多企业和组织的关键需求之一。通过分析网络流量数据,企业可以优化网络资源分配、提升用户体验、制定精准的营销策略等。本文将介绍如何使用 Hadoop 框架实现一个简单的流量统计案例,包括数…...
Linux管道 有名管道(FIFO)工作机制全解:从理论到实践
有名管道(重要) 有名管道/命名管道,主要用于没有血缘关系进程间的通信 当然也支持有血缘关系的情况,只是如果有血缘关系,没有必要使用有名管道,无名管道效果更佳 引入 好了,现在使用条件有了…...
java基础-修饰符
java修饰符 修饰符分类访问修饰符的作用域代码说明访问修饰符总览 非访问修饰符staticfinalabstractsynchronizedvolatiletransientnativestrictfp非访问修饰符总览表 非访问修饰符组合与冲突规则 修饰符分类 分类:访问修饰符 和 非访问修饰符 1.访问修饰符 公共…...
解锁基因密码之重测序(从测序到分析)
在生命科学的奇妙世界中,基因恰似一本记录着生命奥秘的“天书”,它承载着生物体生长、发育、衰老乃至疾病等一切生命现象的关键信息。而重测序技术,则是开启基因“天书”奥秘的一把神奇钥匙。 试想,你手中有一本经典书籍的通用版…...
当使用 Docker Desktop 启动 Tomcat 镜像时时间不对
当使用 Docker Desktop 启动 Tomcat 镜像时时间不对,可能由以下原因导致并可采取相应解决方法: 宿主机时间设置问题:Docker 容器的时间是由宿主机提供的,如果宿主机的时间不正确,那么容器的时间也会不正确。需确保宿主…...
golang gmp模型分析
思维导图: 1. 发展过程 思维导图: 在单机时代是没有多线程、多进程、协程这些概念的。早期的操作系统都是顺序执行 单进程的缺点有: 单一执行流程、计算机只能一个任务一个任务进行处理进程阻塞所带来的CPU时间的浪费 处于对CPU资源的利用&…...
Redisson的RedLock与联锁(MultiLock)的区别
Redisson提供了两种分布式锁机制:RedLock(红锁)和MultiLock(联锁),它们在实现分布式锁时有重要区别。 1. RedLock (红锁) 设计原理: 基于Redis官方提出的Redlock算法实现目的是在Redis集群环境下提供更可靠的分布式锁需要至少3个独立的Redi…...
图灵逆向——题十-魔改算法
目录列表 过程分析JS代码还原代码实现运行结果 本题属于魔改标准加密算法,所以无法使用JS或Python中的标准库来进行模拟加密了,只能一步一步的还原它的环境咯。。。 过程分析 打开控制台发现有个无限debugger,直接过掉~[doge]。。。 OK过掉…...
K8S学习之基础七十九:关闭istio功能
关闭istio功能 kubectl get ns --show-labels kubectl label ns default istio-injection-有istio-injectionenabled的命名空间,pod都会开启istio功能 反之,如果要开启istio,在对应命名空间打上该标签即可...
AI大模型课程系列汇总-某客时间篇
某客时间系列篇章💥 NO.文章(点击可跳转)1【课程系列11】某客时间AI 大模型应用开发实战营_ai大模型应用开发实战营 百度云-CSDN博客2【课程系列12】某客时间AI大模型微调训练营_极客时间 大模型rag 网盘-CSDN博客3【课程系列15】2024某客时…...
【人工智能】大语言模型多义词解析技术揭秘——以“项目“歧义消解为例
今天田辛老师和小伙伴探讨了一个有趣的多义词问题, 在人工智能技术日新月异的今天,大语言模型(LLM)对自然语言的理解能力已经达到令人惊叹的水平。大模型到底是如何去区分多义词的? 比如:当用户提到"…...
Coze平台 发布AI测试Agent的完整实现方案
以下是基于 Coze平台 发布AI测试Agent的完整实现方案,包含架构设计、核心功能模块、集成方式和落地步骤: 一、方案架构图 #mermaid-svg-kzS7cltxrbetjROl {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-kzS7cltxr…...
OpenHarmony子系统开发 - 调测工具(二)
OpenHarmony子系统开发 - 调测工具(二) 三、hiperf使用指导 hiperf是为开发人员提供性能采样分析的工具,基于内核perf机制进行的用户态能力的扩展,可以对指定的程序或者整个系统进行性能采样。 hiperf支持的命令有:l…...
keil ERROR: L6220E 如何解决
最近调试MK8000方案,增加code后遇到: keil ERROR: L6220E: Execution region RW_RAM1 size (24592 bytes) execeeds limit (24568 bytes) .region contains 93 bytes of padding and 0 bytes of veneers (total 93 bytes of linker generated content) …...
c++比较器——priority_queue用 ; unordered_map 自定义哈希函数
文章目录 priority_queue自定义比较方法对 比较对象结构体 重载 <仿函数为什么是传一个类std::less<T> 和 std::greater<T> lambda unordered_map自定义哈希函数仿函数lambda priority_queue template<class T,class Container std::vector<T>,class…...
centos-LLM-生物信息-BioGPT安装
参考: GitHub - microsoft/BioGPT https://github.com/microsoft/BioGPT BioGPT:用于生物医学文本生成和挖掘的生成式预训练转换器 |生物信息学简报 |牛津学术 — BioGPT: generative pre-trained transformer for biomedical text generation and mini…...
esp32cam远程图传:AI Thinker ESP32-CAM -》 服务器公网 | 服务器 -》 电脑显示
用AI Thinker ESP32-CAM板子访问公网ip的5112端口并上传你的摄像头拍摄的图像视频数据,并写一段python程序打开弹窗接受图像实现超远程图像传输教程免费 1. 首先你要有一个公网ip也就是去买一台拥有公网的服务器电脑,我买的是腾讯云1年38元的服务器还可…...
今日踩坑之@Autowired与@Resource区别
案例说明 今天算是体验到了这俩注解的区别了,真所谓不报错就记不住这两注解区别,其实之前本人也是知道这俩注解的区别的只是我们往往项目上用习惯了Autowired就忘了,看来只有真正体会到报错才能记忆犹新o(╥﹏╥)o。 说明一下本人的踩坑情况&…...
在 M1 芯片的 Mac 电脑上安装 Redis 可以通过 Homebrew 快速完成
以下是详细步骤: 1. 安装 Homebrew(若未安装) 打开 终端,执行以下命令安装 Homebrew(已安装可跳过): /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/…...
【从零开始学习JVM | 第一篇】快速认识JVM
什么是JVM? JVM--Java虚拟机,它是Java实现平台无关性的基石。 Java程序运行的时候,编译器将Java代码编译为平台无关的Java字节码文件(.class),接下来对应平台的JVM对字节码进行运行解释,翻译成…...
linux 里的创建了一个tomcat用户 怎么禁止该用户使用crontab 功能
在 Linux 系统中,可以通过以下方法禁止 tomcat 用户使用 crontab 功能: 方法 1:通过 /etc/cron.deny 文件限制 这是 最推荐的标准方法,适用于所有主流 Linux 发行版(CentOS、Ubuntu 等)。 操作步骤&#…...
Elasticsearch入门指南(二)
一、RestClient操作索引库 什么是RestClient? ES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。官方文档地址: https://www.elastic.co/guide/en/elasticsearch/client/in…...
Mac监控新风尚:酷炫界面,性能监控更直观!
你是否曾经希望自己的Mac能够像Windows那样,轻松一按就能查看任务管理器来监控性能状态呢? 对于Mac用户来说,系统性能监控一直是个挑战——苹果公司并没有提供一个直观的性能监控工具,用户往往需要通过复杂的活动监视器来获取这些…...
碰一碰发视频源码开发深度解析,定制化开发
在移动应用开发领域,便捷的数据分享功能始终备受关注。碰一碰发视频这一创新功能,借助近场通信(NFC)技术,为用户提供了一种快速、直观的视频分享体验。本文将深入剖析碰一碰发视频功能的源码开发过程,涵盖从…...
基于 AI智能体、大模型、RAG、Agent 等技术构建公司内部闭环智能问答系统的详细方案,结合 Spring Boot + Vue 管理系统 的改造思路
以下是基于 AI智能体、大模型、RAG、Agent 等技术构建公司内部闭环智能问答系统的详细方案,结合 Spring Boot Vue 管理系统 的改造思路: 1. 系统架构设计 核心组件 数据源层 内部文档库:公司知识库(如操作手册、FAQ、流程文档&a…...
红宝书第三十四讲:零基础学会单元测试框架:Jest、Mocha、QUnit
红宝书第三十四讲:零基础学会单元测试框架:Jest、Mocha、QUnit 资料取自《JavaScript高级程序设计(第5版)》。 查看总目录:红宝书学习大纲 一、单元测试是什么? 就像给代码做“体检”,帮你检查…...
视觉分析AI赋能智慧水务多场景应用
利用视觉分析的方式智慧水务的AI算法方案 一、背景 在传统水务监管中,面临着诸多痛点。例如,对于河道污染、水面异常、河湖四乱问题以及水生态环境差等情况,传统监管效率低下,预警不及时,资源分散,监控功…...
网络2 IP与MAC IP地址
IP地址与MAC地址 一 1.关系: 网卡有唯一的物理地址:MAC地址,IP是配置在网卡上的逻辑地址。 IP地址、MAC地址是进行网络通信必不可少的 2.MAC地址是物理地址,不可更改,通常与IP地址绑定 3.MAC地址:48位 IP地…...
spark-Core
运行架构 核心组件 由上图可以看出,对于 Spark 框架有两个核心组件: Driver,Spark 驱动器节点 其中Spark 驱动器节点,用于执行 Spark 任务中的 main 方法,负责实际代码的执行工作。 Driver 在 Spark 作业执行时主要…...
前端开发中的问题排查与定位:HTML、CSS、JavaScript(报错的解决方式)
目录 1.html 1. 结构错误调试:标签未正确嵌套 2. 语法问题调试:缺失引号 3. 断点调试:动态生成内容时的 JavaScript 错误 4. 网络调试:资源加载错误 5. 性能调试:页面加载性能 总结: 2.CSS 1. 定位…...