当前位置: 首页 > 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进阶--深入面向对象

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

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...