广告位联系
返回顶部
分享到

MySQL on k8s 云原生环境部署介绍

Mysql 来源:互联网 作者:佚名 发布时间:2022-09-26 21:03:13 人浏览
摘要

一、概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational

一、概述

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。这里主要讲mysql部署在k8s上,mysql部署在k8s上的优势主要有以下几点:

  • 资源隔离
  • 动态弹性扩缩容
  • 环境一致性
  • 运维方便

官方文档:docs.oracle.com/en-us/iaas/… MySQL 原理介绍也可以参考我这篇文章:MySQL原理介绍

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

1)添加源

1

2

3

helm repo add bitnami https://charts.bitnami.com/bitnami

helm pull bitnami/mysql

tar -xf mysql-9.3.3.tgz

2)修改配置

  • 修改mysql/values.yaml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

...

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

{{- 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: kubernetes.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

1

2

3

4

5

kind: StorageClass

apiVersion: storage.k8s.io/v1

metadata:

  name: {{ .Values.primary.persistence.storageClass }}

provisioner: kubernetes.io/no-provisioner

3)开始安装

1

2

3

4

5

6

7

8

9

10

11

12

# 创建持久化目录

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

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状态

1

kubectl get pods,svc -n mysql -owide

4)测试验证

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

5)Prometheus监控

Prometheus:

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

1

2

3

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 账号:admin,密码通过下面命令获取

1

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

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

6)卸载

1

2

3

4

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高可用真正落地到生产环境中使用,到时候再来分享一下。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://juejin.cn/post/7146232037542723598
相关文章
  • 深入了解MySQL中的慢查询
    一、什么是慢查询 什么是MySQL慢查询呢?其实就是查询的SQL语句耗费较长的时间。 具体耗费多久算慢查询呢?这其实因人而异,有些公司慢
  • MySQL中with rollup的用法及说明

    MySQL中with rollup的用法及说明
    MySQL with rollup的用法 当需要对数据库数据进行分类统计的时候,往往会用上groupby进行分组。 而在groupby后面还可以加入withcube和withrollup等关
  • mysql分组统计并求出百分比的方法

    mysql分组统计并求出百分比的方法
    mysql分组统计并求出百分比 1、mysql 分组统计并列出百分比 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 SELECT point_id, pname_cn, play_
  • 30种SQL语句优化的方法总结
    1)对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2)应尽量避免在 where 子句中使用!=或操作符
  • 达梦数据库获取SQL实际执行计划的方法

    达梦数据库获取SQL实际执行计划的方法
    环境说明: 操作系统:银河麒麟V10 数据库:DM8 相关关键字:DM数据库、SQL实际执行计划 一、set autotrace trace disql下执行set autotrace trace开启
  • MySQL数据库约束的介绍

    MySQL数据库约束的介绍
    基本介绍 约束用于确保数据库的数据满足特定的商业规则 在mysql中,约束包括:not null,unique,primary key,foreign key 和check5种 1.primary key(主键
  • MySQL索引的介绍

    MySQL索引的介绍
    1. MySQL 索引的最左前缀原则 左前缀原则是联合索引在使用时要遵循的原则,查询索引可以使用联合索引的一部分,但是必须从最左侧开始。
  • windows下Mysql多实例部署的操作方法
    当存在多个项目的时候,需要同时部署时,且只有一台服务器时,哪么就需要部署Mysql多个实例,原理很简单,多个mysql服务运行使用不同的
  • MySQL客户端/服务器运行架构介绍

    MySQL客户端/服务器运行架构介绍
    之前对MySQL的认知只限于会写些SQL,本篇开始进行对MySQL进行深入的学习,记录和整理下自己对MySQL不熟悉的地方。如果有需要可以关注我的
  • mysql8.0主从复制搭建与配置方案

    mysql8.0主从复制搭建与配置方案
    mysql主从搭建 环境:ubuntu20.04.1,mysql:8.0.22。 主:192.168.87.3 备:192.168.87.6 安装数据库 1 2 3 sudo apt-get install mysql-server sudo apt-get install mysql
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计