K8S配置MySQL主从自动水平扩展
前提环境
操作系统Ubuntu 22.04
K8S 1.28.2集群(1个master+2个node)
MySQL 5.7.44部署在K8S的主从集群
metrics-server v0.6.4
概念简介
在K8s中扩缩容分为两种
●Node层面:对K8s物理节点扩容和缩容,根据业务规模实现物理节点自动扩缩容
●Pod层面:一般会使用Deployment中的Replicas参数,设置多个副本集来保证服务的高可用,但是这是一个固定的值,比如设置10个副本,就会启10个pod同时Running来提供服务。如果这个服务平时流量很少的时候,也是10个Pod同时在Running,而流量突然暴增时,又可能出现10个Pod不够用的情况,针对这种情况就要使用自动扩容和缩容
HPA(Horizontal Pod Autoscaling)
Pod水平自动伸缩,HPA可以根据CPU利用率自动伸缩一个Replication
Controller、Deployment或者Replica Set 中的Pod 数量
(1)HPA基于Master上的kube-controller-manager服务启动参数horizontal-pod-autoscaler-sync-period定义的时长(默认为30秒),周期性的检测Pod的CPU使用率
(2)HPA与之前的RC、Deployment一样,也属于一种Kubernetes资源对象。通过追踪分析RC控制的所有目标Pod的负载变化情况,来确定是否需要针对性地调整目标Pod的副本数,这是HPA的实现原理
(3)metrics-server也需要部署到集群中, 它可以通过resource metrics API对外提供度量数据
HPA是kubernetes中实现自动扩缩容Pod副本数量的机制,它允许集群中的工作负载根据实际的负载情况自动调整pod的数量,以此来优化资源的使用和提高服务的响应能力
核心概念
●水平扩展(Horizontal Scaling):增加Pod的数量来分摊负载,与垂直扩展(增加单个Pod的资源)相对
●Pod副本(Pod Replicas):运行应用程序的容器实例,通常是在Deployment或ReplicaSet等控制器下管理的
●指标(Metrics):用于触发HPA扩缩容的度量值,如CPU使用率、内存使用量、自定义的应用程序指标等 HPA的关键参数
●ScaleTargetRef:指定HPA将要作用的资源对象,如 Deployment、Replica Set或RC的名称
●MinReplicas:最小副本数,即使在负载很低时也不会低于这个数量
●MaxReplicas:最大副本数,即使在负载很高时也不会超过这个数量
●Metrics:定义用于触发伸缩的度量标准和目标值。例如,可以设置CPU的利用率目标,当实际利用率超过这个目标值时,HPA会增加副本数量;当利用率低于目标值时,HPA会减少副本数量
安装metrics-server
简介
Kubernetes Metrics Server是Cluster核心监控数据的聚合器,kubeadm默认是不部署的。Metrics
Server供dashboard等其他组件使用,是一个扩展的APIServer,依赖于API Aggregator Metrics
API只可查询当前的度量数据,不保存历史数据,Metrics API
URI为/apis/metrics.k8s.io/,在k8s.io/metrics下维护。必须部署metrics-server才能使用该API,metrics-server通过调用kubelet
Summary API获取数据 Metrics Server从Kubelet收集资源指标,并通过Metrics
API将它们暴露在Kubernetes apiserver中,供水平Pod Autoscaler和垂直Pod
Autoscaler使用。kubectl top还可以访问Metrics API,这使得调试自动伸缩变得更容易。Metrics
Server不用于非自动伸缩,例如不要将其指标转发给监视解决方案,或作为监视解决方案指标的来源
下载地址
https://github.com/kubernetes-sigs/metrics-server/releases
$ wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.4/components.yaml
修改metrics-server启动参数
metrics-server会请求每台节点的kubelet接口来获取监控数据,但节点的kubelet使用的是自签证书,若metrics-server直接请求kubelet接口,将产生证书校验失败的错误,因此需要在components.yaml文件中加上–kubelet-insecure-tls启动参数。 由于metrics-server官方镜像仓库存储在k8s.gcr.io,如果无法拉取,可以使用阿里云仓库registry.aliyuncs.com/google_containers/metrics-server:v0.6.4
$ vim components.yaml
将文件按照截图中修改

$ kubectl apply -f components.yaml
$ kubectl get pods -n kube-system -l k8s-app=metrics-server

$ kubectl top nodes

$ kubectl top pods -n mysql-ns

在k8s-master节点上安装压测工具sysbench
$ sudo apt -y install sysbench
在mysql的master上创建测试数据库
$ kubectl exec -it mysql-0 -c mysql -n mysql-ns -c mysql -- bash -c "mysql -uroot -p'' -e 'create database sbtest;'"
注意:这里创建的sbtest测试库名,是lua脚本默认的库名,如果创建其他库名,需要改lua脚本 导入测试数据
$ sysbench --mysql-host=10.244.169.190 --mysql-port=3306 --mysql-user=root --mysql-password='' /usr/share/sysbench/oltp_common.lua --tables=10 --table_size=10000 prepare
--mysql-host=10.244.169.190 #master主库的pod IP
--mysql-port=3306 #master主库端口
--mysql-user=root #数据库用户名
--mysql-password='' #数据库密码
/usr/share/sysbench/oltp_common.lua#导入数据的lua脚本
--tables=10#创建测试表的数量
--table_size=10000#每张表10000行数据

实时监控pod中mysql容器的cpu和内存状态
$ watch -n 1 kubectl top pods --containers -n mysql-ns

开始压测
$ sysbench --threads=4 --time=20 --report-interval=5 --mysql-host=10.244.169.190 --mysql-port=3306 --mysql-user=root --mysql-password='' /usr/share/sysbench/oltp_read_write.lua --tables=10 --table_size=10000 run
--threads=4 #使用的线程数
--time=20 #最大执行时间
--report-interval=5 #间隔5秒统计信息


/usr/share/sysbench/oltp_read_write.lua#读写测试脚本,在/usr/share/sysbench/下有很多测试脚本可以使用,同时可以看到mysql主库的资源在发生变化
修改StatefulSet清单文件mysql-sts.yaml,添加资源限制
$ vim mysql-sts.yaml

$ kubectl apply -f mysql-sts.yaml
注意:由于更新了pod的资源限制,pod会发生重建操作,所以这个资源配额一定要在集群安装的初始时设置
配置HPA清单文件mysql-hpa.yaml
$ vim mysql-hpa.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:name: mysql-hpanamespace: mysql-ns
spec:minReplicas: 3maxReplicas: 5targetCPUUtilizationPercentage: 3scaleTargetRef:apiVersion: apps/v1kind: StatefulSetname: mysql$ kubectl create -f mysql-hpa.yaml
$ kubectl get hpa -n mysql-ns
测试HPA功能
查看mysql-read这个只读service的IP
$ kubectl get svc -n mysql-ns
压测(读)
$ sysbench --threads=6 --time=30 --report-interval=5 --mysql-host=10.99.87.143 --mysql-port=3306 --mysql-user=root --mysql-password='' /usr/share/sysbench/oltp_read_only.lua --tables=10 --table_size=10000 run

监控mysql主从集群中各个pod资源占用(读压测开始前就监控)
$ watch -n 1 kubectl top pods --containers -n mysql-ns

$ watch -n 1 kubectl get hpa -n mysql-ns -o wide

$ kubectl get pod -n mysql-ns --watch

通过以上监控可以发现,当HPA监测到targets的百分比超过了设置值,就会向statefulset请求并新增副本直到低于targets的百分比,或者达到maxReplicas的设定值。例如,原来mysql主从集群中副本数量(master数量+slave数量)共3个,所以HPA控制StatefulSet控制器新建副本,从而维持在targets目标的3%以下
当数据库的读压力降下来之后,HPA控制StatefulSet减少副本数量至minReplicas的值(需要等待一段时间)
$ watch -n 1 kubectl top pods --containers -n mysql-ns

$ kubectl get pod -n mysql-ns --watch

$ kubectl get hpa -n mysql-ns -o wide

$ kubectl get pod -n mysql-ns

以上为在K8S中配置MySQL主从水平扩展流程,哪里不懂可以在评论中评论~
文档持续更新中
相关文章:
K8S配置MySQL主从自动水平扩展
前提环境 操作系统Ubuntu 22.04 K8S 1.28.2集群(1个master2个node) MySQL 5.7.44部署在K8S的主从集群 metrics-server v0.6.4 概念简介 在K8s中扩缩容分为两种 ●Node层面:对K8s物理节点扩容和缩容,根据业务规模实现物理节点自动扩…...
Excel:将一列拆分成多列
实现的效果是: 操作步骤如下: 1.选中列 → 点击菜单栏中的"数据" → 分列 2.选择"分列符号",点击下一步 3.我想要按照空格分列,就选择空格 4.点击完成,就可以实现分列的效果了...
一款强大灵活的流程图引擎,支持React 和 Svelte 框架
大家好,今天给大家分享一个专注于处理流程可视化和交互的项目xyflow。它旨在为开发者和用户提供一种直观、高效的方式来表示、管理和操作各种流程。 项目介绍 xyflow是一款强大灵活的流程图引擎。该项目是用于构建基于节点的编辑器和交互式图表,支持 Re…...
基于STM32 ARM+FPGA+AD的电能质量分析仪方案设计(一)硬件设计
电能质量分析系统硬件设计 3.1 电能质量分析系统设计要求 本系统实现对电能质量的高精度测量,根据国家相关电能质量分析仪器规定 标准以及对市场电能质量分析仪的分析,指定以下设计目标。 ( 1 )电能质量参数测量精度…...
LLM - 配置 ModelScope SWIFT 测试 Qwen2-VL 视频微调(LoRA) 教程(3)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/142882496 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 SWIFT …...
jmeter实现SSL双向验证
前提: 预先了解:SSL单向/双向认证详解握手请求以及tomcat配置https请求的请到以下网址了解Java nginx https 双向认证 der,cer文件一般是二进制格式的,只放证书,不含私钥 crt 文件可能是二进制的,也可能是文本格式的,应该以文本格式居多,功能同der/cer pem文件一般是…...
数据结构 ——— 单链表oj题:相交链表(链表的共节点)
目录 题目要求 手搓两个相交简易链表 代码实现 题目要求 两个单链表的头节点 headA 和 headB ,请找出并返回两个单链表相交的起始节点,如果两个链表不存在相交节点,则返回 NULL 手搓两个相交简易链表 代码演示: struct Lis…...
【WKWebview】WKWebView Cookie 同步
个人实测:js注入的方式更靠谱一点 ⌈iOS⌋WKWebView Cookie 同步的一种方式 屈服于 Apple 的“淫威”,开发者不得不将 App 的网页容器从 UIWebView 迁移到 WKWebView。我们在享受后者带来的性能和功能提升的同时,也被诸如 Cookie 同步、截图…...
vue-router拦截器
在 Vue 项目中,vue-router 的路由拦截器和组件内部的路由拦截器(如 beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave)虽然都能拦截路由,但它们的作用范围和使用场景有所不同。下面是二者的区别总结: 1. 全局路…...
SpringBoot驱动的人事管理系统:高效办公新选择
1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…...
大数据干了什么?
1.大数据技术主要解决的问题是海量数据的 存储 和 查询...
android studio可用下载地址
AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载 在此记录一下...
HTTP 协议详解
HTTP 协议是 Web 的基石,它定义了客户端和服务器之间的通信规则。本文将深入地探讨 HTTP 的核心概念,包括工作原理、请求方法、状态码以及不同 HTTP 版本的演进。 一、HTTP 的工作原理 HTTP 协议基于客户端-服务器模型,遵循请求-响应的循环&…...
【力扣 | SQL题 | 每日四题】力扣534, 574, 2314, 2298
今天的每日四题比较简单,主要其中两题可以用窗口函数轻松解决。 1. 力扣534:游戏玩法分析3 1.1 题目: 表:Activity ----------------------- | Column Name | Type | ----------------------- | player_id | int | …...
Gitxray:一款基于GitHub REST API的网络安全工具
关于Gitxray Gitxray是一款基于GitHub REST API的网络安全工具,支持利用公共 GitHub REST API 进行OSINT、信息安全取证和安全检测等任务。 Gitxray(Git X-Ray 的缩写)是一款多功能安全工具,专为 GitHub 存储库而设计。它可以用于…...
Chrome(谷歌)浏览器 数据JSON格式美化 2024显示插件安装和使用
文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 没有美化的格式浏览器展示 美化之后效果图 安装流程 下载地址 https://github.com/gildas-lormeau/JSONVue 点击下载 下载成功,如图所示 解压文件 添加成功,如图所示 通过浏览器…...
关于相机的一些零碎知识点
热成像,英文为Thermal Imaging,例如型号500T,其实指的就是热成像500分辨率。 相机的CMOS,英文为Complementary Metal Oxide Semiconductor,是数码相机的核心成像部件,是一种互补金属氧化物导体器件。 DPI…...
看不懂来打我!让性能提升56%的Vue3.5响应式重构
前言 在Vue3.5版本中最大的改动就是响应式重构,重构后性能竟然炸裂的提升了56%。之所以重构后的响应式性能提升幅度有这么大,主要还是归功于:双向链表和版本计数。这篇文章我们来讲讲使用双向链表后,Vue内部是如何实现依赖收集和…...
Halcon 极坐标变换
(1)极坐标的展开:polar_trans_image_ext(Image : PolarTransImage : Row, Column, AngleStart, AngleEnd, RadiusStart, RadiusEnd, Width, Height, Interpolation : ) (2)极坐标的逆变换:polar_trans_ima…...
JavaScript进阶--深入面向对象
深入面向对象 编程思想 面向过程:多个步骤> 解决问题 性能较高,适合跟硬件联系很紧密的东西,如单片机 但代码维护成本高,扩展性差 面向对象:问题所需功能分解为一个一个的对象(分工合作)>…...
UPS 蓄电池在线监控系统是什么?工业 UPS 电源有必要安装吗?
在机房、工业生产、医疗设备等依赖 UPS 不间断电源的场景中,蓄电池往往被视为设备的 “心脏”。很多用户配置了优质 UPS 电源,却忽略了对蓄电池的实时管理,等到突发停电才发现电池亏电、失效,导致 UPS 无法正常供电,引…...
别再卡在‘Setup is running’了!PowerBuilder 9.0保姆级安装避坑指南(附安全模式备用方案)
PowerBuilder 9.0安装全攻略:从卡死困境到高效部署 "Setup is running"这个看似简单的提示框,曾让无数PowerBuilder开发者陷入漫长的等待和反复的重启循环。作为一款承载了二十余年企业级应用开发记忆的经典工具,PowerBuilder 9.0的…...
如何用一句话让小爱音箱播放你的私人音乐库?Docker部署XiaoMusic完全指南
如何用一句话让小爱音箱播放你的私人音乐库?Docker部署XiaoMusic完全指南 【免费下载链接】xiaomusic 使用小爱音箱播放音乐,音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic 你是否曾经想过,只…...
别光抄答案!用Python函数通关Educoder计算思维训练,我总结了这3个实战技巧
用Python函数通关Educoder计算思维训练的3个实战技巧 当你在Educoder平台面对Python函数题目时,是否曾陷入"看懂答案却不会独立解题"的困境?本文将从计算思维的本质出发,分享三个突破函数学习瓶颈的实战技巧。不同于直接提供参考答…...
Go语言系统编程与命令行工具
Go语言系统编程与命令行工具 一、命令行参数解析 Go语言提供了多个标准库来处理命令行参数,包括flag包和os包。 使用flag包 package mainimport ("flag""fmt" )func main() {// 定义命令行参数name : flag.String("name", "Gues…...
7th grade math (2026.05.15)Binary Linear Equation Group
Binary Linear Equation Group 七年纪(下)数学第十章《二元一次方程组》作业评价参考答案-zwf 错误题型分析...
Wwise音频工具完全指南:3步轻松解包和修改游戏音频文件
Wwise音频工具完全指南:3步轻松解包和修改游戏音频文件 【免费下载链接】wwiseutil Tools for unpacking and modifying Wwise SoundBank and File Package files. 项目地址: https://gitcode.com/gh_mirrors/ww/wwiseutil 还在为无法编辑游戏音频文件而烦恼…...
不止Keil5:VSCode+GCC也能玩转GD32单片机?手把手教你搭建轻量级开发环境
超越Keil5:用VSCodeGCC打造高效GD32开发环境 在嵌入式开发领域,Keil MDK长期以来一直是ARM架构单片机开发的主流选择。然而,随着现代开发工具的演进,越来越多的开发者开始寻求更轻量、更灵活且完全免费的替代方案。本文将带你探索…...
【NotebookLM海洋学研究辅助实战指南】:20年海洋数据科学家亲授AI笔记法,3步构建专属科研知识图谱
更多请点击: https://intelliparadigm.com 第一章:NotebookLM海洋学研究辅助 NotebookLM 是 Google 推出的基于用户上传文档进行深度语义理解与推理的 AI 工具,特别适用于海洋学这类多源异构、长周期、高专业性的科研场景。研究人员可将 PDF…...
懒人必备!OpenClaw 汉化版一键配置上手教程
一、Windows 11 安装 OpenClaw 必看说明 OpenClaw(国内用户昵称"小龙虾")是一款广受欢迎的开源本地AI助手,GitHub星标数已超28万。它集成了多项实用功能:电脑自动操控、智能文件管理、浏览器自动化以及办公流程自动化等…...

