您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

「云原生」MySQL on k8s 环境部署

时间:2022-09-23 16:10:00  来源:  作者:大数据老司机

一、概述

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。这里主要讲mysql部署在k8s上,mysql部署在k8s上的优势主要有以下几点:
  • 资源隔离
  • 动态弹性扩缩容
  • 环境一致性
  • 运维方便

 

官方文档:https://docs.oracle.com/en-us/iaas/mysql-database/doc/getting-started.html
MySQL 原理介绍也可以参考我这篇文章:MySQL原理介绍


 

二、开始部署(一主两从)


 

1)添加源 helm repo add bitnami https://charts.bitnami.com/bitnami helm pull bitnami/mysql tar -xf mysql-9.3.3.tgz 2)修改配置

  • 修改mysql/values.yaml
... image: registry: myharbor.com repository: bigdata/mysql tag: 8.0.30-debian-11-r15 ... architecture: replication ... primary: persistence: enabled: true size: 10Gi storageClass: "mysql-local-storage" # 目录需要提前在宿主机上创建 local: - name: mysql-0 host: "local-168-182-110" path: "/opt/bigdata/servers/mysql/data/data1" service: type: NodePort nodePorts: mysql: "30306" secondary: replicaCount: 2 persistence: enabled: true size: 10Gi storageClass: "mysql-local-storage" # 目录需要提前在宿主机上创建 local: - name: mysql-1 host: "local-168-182-111" path: "/opt/bigdata/servers/mysql/data/data1" - name: mysql-2 host: "local-168-182-112" path: "/opt/bigdata/servers/mysql/data/data1" service: type: NodePort nodePorts: mysql: "30307" ... metrics: ## @param metrics.enabled Start a side-car prometheus exporter ## enabled: true image: registry: myharbor.com repository: bigdata/mysqld-exporter tag: 0.14.0-debian-11-r33
  • 添加mysql/templates/pv.yaml
{{- range .Values.primary.persistence.local }} --- apiVersion: v1 kind: PersistentVolume metadata: name: {{ .name }} labels: name: {{ .name }} spec: storageClassName: {{ $.Values.primary.persistence.storageClass }} capacity: storage: {{ $.Values.primary.persistence.size }} accessModes: - ReadWriteOnce local: path: {{ .path }} nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kube.NETes.io/hostname operator: In values: - {{ .host }} --- {{- end }} {{- range .Values.secondary.persistence.local }} --- apiVersion: v1 kind: PersistentVolume metadata: name: {{ .name }} labels: name: {{ .name }} spec: storageClassName: {{ $.Values.secondary.persistence.storageClass }} capacity: storage: {{ $.Values.secondary.persistence.size }} accessModes: - ReadWriteOnce local: path: {{ .path }} nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - {{ .host }} --- {{- end }}
  • 添加mysql/templates/storage-class.yaml
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: {{ .Values.primary.persistence.storageClass }} provisioner: kubernetes.io/no-provisioner 3)开始安装 # 创建持久化目录 mkdir -p /opt/bigdata/servers/mysql/data/data1 # 先准备好镜像 Docker pull docker.io/bitnami/mysql:8.0.30-debian-11-r15 docker tag docker.io/bitnami/mysql:8.0.30-debian-11-r15 myharbor.com/bigdata/mysql:8.0.30-debian-11-r15 docker push myharbor.com/bigdata/mysql:8.0.30-debian-11-r15 # mysqld-exporter docker pull docker.io/bitnami/mysqld-exporter:0.14.0-debian-11-r33 docker tag docker.io/bitnami/mysqld-exporter:0.14.0-debian-11-r33 myharbor.com/bigdata/mysqld-exporter:0.14.0-debian-11-r33 docker push myharbor.com/bigdata/mysqld-exporter:0.14.0-debian-11-r33 # 开始安装 helm install mysql ./mysql -n mysql --create-namespace

 

NOTES

NAME: mysql LAST DEPLOYED: Mon Sep 19 23:57:18 2022 NAMESPACE: mysql STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: CHART NAME: mysql CHART VERSION: 9.3.3 App VERSION: 8.0.30 ** Please be patient while the chart is being deployed ** Tip: Watch the deployment status using the command: kubectl get pods -w --namespace mysql Services: echo Primary: mysql-primary.mysql.svc.cluster.local:3306 echo Secondary: mysql-secondary.mysql.svc.cluster.local:3306 Execute the following to get the administrator credentials: echo Username: root MYSQL_ROOT_PASSword=$(kubectl get secret --namespace mysql mysql -o jsonpath="{.data.mysql-root-password}" | base64 -d) To connect to your database: 1. Run a pod that you can use as a client: kubectl run mysql-client --rm --tty -i --restart='Never' --image myharbor.com/bigdata/mysql:8.0.30-debian-11-r15 --namespace mysql --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash 2. To connect to primary service (read/write): mysql -h mysql-primary.mysql.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD" 3. To connect to secondary service (read-only): mysql -h mysql-secondary.mysql.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD" To access the MySQL Prometheus metrics from outside the cluster execute the following commands: kubectl port-forward --namespace mysql svc/mysql-metrics 9104:9104 & curl http://127.0.0.1:9104/metrics


 


查看pod状态

kubectl get pods,svc -n mysql -owide


 

4)测试验证

【温馨提示】从库(slave)是只读的。就是简单的读写测试,还有就是pod挂了,能否正常拉起等等。这个测试验证比较简单。这里就不一步步的演示了。
5)Prometheus监控

 

Prometheus:https://prometheus.k8s.local/targets?search=mysql


 


可以通过命令查看采集数据

kubectl get --raw http://10.244.0.74:9104/metrics kubectl get --raw http://10.244.1.125:9104/metrics kubectl get --raw http://10.244.2.178:9104/metrics

Grafana:https://grafana.k8s.local/
账号:admin,密码通过下面命令获取

kubectl get secret --namespace grafana grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

导入grafana模板,集群资源监控:7362
官方模块下载地址:https://grafana.com/grafana/dashboards/


 

6)卸载 helm uninstall mysql -n mysql kubectl delete pod -n mysql `kubectl get pod -n mysql |awk 'NR>1{print $1}'` --force kubectl patch ns mysql -p '{"metadata":{"finalizers":null}}' kubectl delete ns mysql --force

这里只是实现了mysql 的主从,没有实现高可用,官方目前没有出mysql ok k8s高可用的实现方案,虽然网上也有高可用的实现方案,但是我们公司没真正去落地使用,所以不予评价网上的高可用的方案,有兴趣的小伙伴可以去试试,其实mysql在大数据领域一般只是作为元数据存储,主挂了,影响不是很大。目前也在研究mysql on k8s 的高可用实现方案,如果后期有mysql on k8s高可用真正落地到生产环境中使用,到时候再来分享一下。MySQL on k8s 环境部署就先这里了,有疑问的小伙伴欢迎给我留言~


Tags:MySQL   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、概述mysql是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (...【详细内容】
2022-09-23  Tags: MySQL  点击:(0)  评论:(0)  加入收藏
时隔很久,又开始码字了,在最近这段时间将会给大家带来MySQL相关的面试知识点分享,从原理及面试考察点全面剖析、浓缩、提炼面试表达点。 前言本次分享MySQL间隙锁及RR隔离级别...【详细内容】
2022-09-18  Tags: MySQL  点击:(22)  评论:(0)  加入收藏
错误日志(log_error)--记录启动\关闭\日常运行过程中,状态信息,警告,错误默认就是开启的: /数据路径下/hostname.err 手工设定: Master [(none)]>select @@log_error; vim /...【详细内容】
2022-09-13  Tags: MySQL  点击:(19)  评论:(0)  加入收藏
MySQL定义VARCHAR(M)最多可以是65535个字节,M表示的是「字符数量」,但是实际存储中并不能存储那么多字节。如果一个字段超过了65535个字节,可以选择使用TEXT或者BLOB类型。对于...【详细内容】
2022-09-13  Tags: MySQL  点击:(37)  评论:(0)  加入收藏
一、排序排序查询语法: select * from 表名 order by 列1 asc/desc [,列2 asc/desc,...] 语法说明: 先按照列1进行排序,如果列1的值相同时,则按照列2排序 asc:升序排序(从小到大) ...【详细内容】
2022-09-10  Tags: MySQL  点击:(19)  评论:(0)  加入收藏
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的 计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问...【详细内容】
2022-09-10  Tags: MySQL  点击:(22)  评论:(0)  加入收藏
第一种#1.查询是否锁表 mysql> show OPEN TABLES where In_use > 0; #2.查询进程(如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程) ...【详细内容】
2022-09-07  Tags: MySQL  点击:(33)  评论:(0)  加入收藏
今天接到一个新的业务需求,客户需要将指定的中文汉字转换成拼音(含:简拼、首全拼、尾全拼)。1. 创建基础数据表 -- ---------------------------- -- Table str...【详细内容】
2022-09-06  Tags: MySQL  点击:(33)  评论:(0)  加入收藏
由于最近项目上进行了大升级,shardingsphere从3升级到了shardingsphere5.1.1,导致mybatis中写的定制化的好多SQL语句报错:sytax error,很显然诸如case when这类的语法已经不支...【详细内容】
2022-09-05  Tags: MySQL  点击:(37)  评论:(0)  加入收藏
MySQL权限说明MySQL是经常要使用的一种关系型数据库,数据库作为存储重要数据的地方,相应的,对数据库的授权管理,也必须很小心,下面,我将MySQL的权限作了整理,方便需要的时候查看。...【详细内容】
2022-09-03  Tags: MySQL  点击:(35)  评论:(0)  加入收藏
▌简易百科推荐
一、概述mysql是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (...【详细内容】
2022-09-23  大数据老司机    Tags:MySQL   点击:(0)  评论:(0)  加入收藏
时隔很久,又开始码字了,在最近这段时间将会给大家带来MySQL相关的面试知识点分享,从原理及面试考察点全面剖析、浓缩、提炼面试表达点。 前言本次分享MySQL间隙锁及RR隔离级别...【详细内容】
2022-09-18  代码生活圈  今日头条  Tags:间隙锁   点击:(22)  评论:(0)  加入收藏
错误日志(log_error)--记录启动\关闭\日常运行过程中,状态信息,警告,错误默认就是开启的: /数据路径下/hostname.err 手工设定: Master [(none)]>select @@log_error; vim /...【详细内容】
2022-09-13  孙龙程序员  今日头条  Tags:mysql日志   点击:(19)  评论:(0)  加入收藏
MySQL定义VARCHAR(M)最多可以是65535个字节,M表示的是「字符数量」,但是实际存储中并不能存储那么多字节。如果一个字段超过了65535个字节,可以选择使用TEXT或者BLOB类型。对于...【详细内容】
2022-09-13  索码理  今日头条  Tags:MySQL   点击:(37)  评论:(0)  加入收藏
一、排序排序查询语法: select * from 表名 order by 列1 asc/desc [,列2 asc/desc,...] 语法说明: 先按照列1进行排序,如果列1的值相同时,则按照列2排序 asc:升序排序(从小到大) ...【详细内容】
2022-09-10   互联网资讯看板  网易号  Tags:MySQL   点击:(19)  评论:(0)  加入收藏
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的 计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问...【详细内容】
2022-09-10  互联共商     Tags:Mysql   点击:(22)  评论:(0)  加入收藏
第一种#1.查询是否锁表 mysql> show OPEN TABLES where In_use > 0; #2.查询进程(如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程) ...【详细内容】
2022-09-07  198兜兜里有糖  今日头条  Tags:MySQL   点击:(33)  评论:(0)  加入收藏
今天接到一个新的业务需求,客户需要将指定的中文汉字转换成拼音(含:简拼、首全拼、尾全拼)。1. 创建基础数据表 -- ---------------------------- -- Table str...【详细内容】
2022-09-06  198兜兜里有糖  今日头条  Tags:MySQL   点击:(33)  评论:(0)  加入收藏
MySQL权限说明MySQL是经常要使用的一种关系型数据库,数据库作为存储重要数据的地方,相应的,对数据库的授权管理,也必须很小心,下面,我将MySQL的权限作了整理,方便需要的时候查看。...【详细内容】
2022-09-03  心平氣和    Tags:MySQL   点击:(35)  评论:(0)  加入收藏
搭建步骤1、拉取镜像docker pull mysql:latest2、查看镜像docker images—————————————&m...【详细内容】
2022-09-01  马士兵教育CTO    Tags:MySQL   点击:(25)  评论:(0)  加入收藏
站内最新
站内热门
站内头条