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

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 )电能质量参数测量精度&#xf…...

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进阶--深入面向对象

深入面向对象 编程思想 面向过程:多个步骤> 解决问题 性能较高,适合跟硬件联系很紧密的东西,如单片机 但代码维护成本高,扩展性差 面向对象:问题所需功能分解为一个一个的对象(分工合作)>…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

Cursor实现用excel数据填充word模版的方法

cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章

用 Rust 重写 Linux 内核模块实战&#xff1a;迈向安全内核的新篇章 ​​摘要&#xff1a;​​ 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言&#xff0c;受限于 C 语言本身的内存安全和并发安全问题&#xff0c;开发复杂模块极易引入难以…...

【R语言编程——数据调用】

这里写自定义目录标题 可用库及数据集外部数据导入方法查看数据集信息 在R语言中&#xff0c;有多个库支持调用内置数据集或外部数据&#xff0c;包括studentdata等教学或示例数据集。以下是常见的库和方法&#xff1a; 可用库及数据集 openintro库 该库包含多个教学数据集&a…...

Go 语言中的内置运算符

1. 算术运算符 注意&#xff1a; &#xff08;自增&#xff09;和--&#xff08;自减&#xff09;在 Go 语言中是单独的语句&#xff0c;并不是运算符。 package mainimport "fmt"func main() {fmt.Println("103", 103) // 13fmt.Println("10-3…...