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主从水平扩展流程,哪里不懂可以在评论中评论~
文档持续更新中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/447203.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《大规模语言模型从理论到实践》第一轮学习--强化学习(RLHF、PPO)

个人学习笔记,如有错误欢迎指出。 一、强化学习的意义 RLHF(Reinforcement Learning from Human Feedback):强化学习(Reinforcement Learning)结合人类反馈(Human Feedback)来微调大语言模型。 大语言模型的训练步骤包括:预训练、指令微调(SFT)、对齐。 对齐(a…

MWD天气图像多分类数据集,用于图像分类-共6个类别,共60000张图像数据 ,含有模型

MWD天气图像多分类数据集,用于图像分类- MWD天气图像多分类数据集,用于图像分类-共6个类别,共60000张图像数据 ,含有模型 MWD天气图像多分类数据集及模型介绍 数据集概述 名称:MWD天气图像多分类数据集图像数量&…

使用node.js控制CMD命令——修改本机IP地址

设置每次打开cmd命令行窗口都是以管理员身份运行: 1. 按下Ctrl Shift Esc键组合,打开任务管理器。 2. 在任务管理器中,点击“文件”菜单,选择“运行新任务”。 3. 在“创建新任务”对话框中,输入cmd,勾…

基于知识图谱的宁夏非遗问答系统

八维视角探索宁夏非遗文化——基于知识图谱的非遗问答系统 作为一名程序员,能将大数据与文化传承结合,赋予历史新的生命,是件多么振奋的事!今天给大家介绍的是一款基于知识图谱技术的宁夏非物质文化遗产问答系统。无论你是学术研…

Scrapy网络爬虫基础

使用Spider提取数据 Scarpy网络爬虫编程的核心就是爬虫Spider组件,它其实是一个继承与Spider的类,主要功能设计封装一个发送给网站服务器的HTTP请求,解析网站返回的网页及提取数据 执行步骤 1、Spider生成初始页面请求(封装于R…

【未公开0day】9.9付费进群系统 wxselect SQL注入漏洞【附poc下载】

免责声明:本文仅用于技术学习和讨论。请勿使用本文所提供的内容及相关技术从事非法活动,若利用本文提供的内容或工具造成任何直接或间接的后果及损失,均由使用者本人负责,所产生的一切不良后果均与文章作者及本账号无关。 fofa语…

Java Maven day1014

ok了家人们,今天学习了如何安装和配置Maven项目,我们一起去看看吧 一.Maven概述 1.1 Maven作用 Maven 是专门用于管理和构建 Java 项目的工具,它的主要功能有: 提供了一套标准化的项目结构 提供了一套标准化的构建流程&#x…

【2D/3D-Lidar-SLAM】 2D/3D激光SLAM以及GMapping 与 Cartographer

这里写自定义目录标题 1. 激光SLAM分类2. 2D Lidar SLAM3. 3D Lidar SLAM4. GMapping**1. GMapping 系统架构**1.1 **粒子滤波器Particle Filter**1.2 **运动模型Motion Model**1.3 **传感器模型Sensor Model**1.4 **地图更新Map Update**1.5 **重采样Resampling**1.6 **闭环检…

nbsaas vue3管理后台框架

nbsaas vue3管理后台框架 一、项目概述 Nbsaas Admin Vue 是一个基于 Vue.js 3.0 构建的轻量级后台管理系统,结合了现代前端技术栈的最佳实践,旨在帮助开发者快速构建具有高可扩展性和良好用户体验的后台管理系统。该项目拥有简洁的 UI 设计&#xff0…

【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)

目录 零.前置篇章 一.make的由来 二.安装make 三.编写Makefile 四.编译运行 五.删除可执行文件 零.前置篇章 第一篇【Linux快速入门】Linux与ROS学习之编译基础(gcc编译)_linuxros-CSDN博客 一.make的由来 "make"是一个用于自…

STL.string(中)

string 迭代器findswapsubstrrfindfind_first_of(用的很少)find_last_of(用的很少)find_first_not_of(用的很少) 迭代器 int main() {//正向迭代器string s1("hello world!");string::iterator i…

力扣 237. 删除链表中的节点【狸猫换太子】

题目 解题 该题中链表节点的值都是唯一的,且只给出待删除的节点 node,而没有给出 head,显然是不可以遍历链表找到相应值来进行删除节点的。注意到题目只要求给定节点的值不在链表中,且链表节点个数减少一个即可,并非严…

起吊机革新:协议转换器解锁安全与效率

重工起吊机设备在工业生产中扮演着至关重要的角色,但其在实际应用中面临着一系列痛点问题。这些问题不仅影响了起吊机的性能和安全性,还限制了生产效率的提升。我们自主研发的MG协议转换器能够高效解决这些痛点,同时MG协议转换器作为一种关键…

第十五届蓝桥杯C/C++学B组(解)

1.握手问题 解题思路一 数学方法 50个人互相握手 (491)*49/2 ,减去7个人没有互相握手(61)*6/2 答案:1024 解题思路二 思路: 模拟 将50个人从1到50标号,对于每两个人之间只握一…

[Linux] 逐层深入理解文件系统 (2)—— 文件重定向

标题:[Linux] 逐层深入理解文件系统 (2)—— 文件重定向 个人主页水墨不写bug (图片来源于网络) 目录 一、文件的读取和写入 二、文件重定向的本质 1.手动模拟重定向的过程——把标准输出重定向到redir.txt 2.重定向…

分享两种安装windows系统教程,学会后再也不需要花钱装系统了。

前期准备工作: 需要一个8G或16G的空U盘需要你安装的系统的镜像文件 一般是一个以 .iso 后缀结尾的文件 2.1 镜像文件获取方式 1) 去windows 官网获取 2)去 我告诉你 网址下载所需要的镜像文件 这个网址 分享了很多 我们常用的系统 大家可以按…

C++面向对象--------继承篇

目录 一.继承(重点) 1.1 概念 1.2 构造函数 1.2.1 派生类与基类的构造函数关系 1.2.2 解决方案 1.2.2.1 补充基类的无参构造函数 1.2.2.2 手动在派生类中调用基类构造函数 1.2.2.2.1 透传构造 1.2.2.2.2 委托构造 1.2.2.2.3 继承构造 1.3 对象…

中标麒麟v5安装qt512.12开发软件

注意 需要联网操作 遇到问题1:yum提示没有可用软件包问题 终端执行如下命令 CentOS7将yum源更换为国内源保姆级教程 中标麒麟V7-yum源的更换(阿里云源) wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Cento…

mysql 慢查询日志slowlog

慢查询参数 slow log 输出示例 # Time: 2024-08-08T22:39:12.80425308:00 #查询结束时间戳 # UserHost: root[root] localhost [] Id: 83 # Query_time: 2.331306 Lock_time: 0.000003 Rows_sent: 9762500 Rows_examined: 6250 SET timestamp1723127950; select *…

PS证件照换底色

ps工具:Adobe Photoshop 2021 文章目录 1. 扣取人物2. 更换底色 1. 扣取人物 2. 更换底色