关于mysql:容器化-在-Kubernetes-上部署-RadonDB-MySQL-集群

53次阅读

共计 4692 个字符,预计需要花费 12 分钟才能阅读完成。

作者:程润科 数据库研发工程师

目前从事 RadonDB MySQL Kubernetes 研发,热衷于钻研数据库内核、K8s 相干技术。

RadonDB MySQL 是一款基于 MySQL 的开源、高可用、云原生集群解决方案。反对一主多从高可用架构,并具备平安、主动备份、监控告警、主动扩容等全套治理性能。目前曾经在生产环境中大规模的应用,蕴含 银行、保险、传统大企业 等。

RadonDB MySQL Kubernetes 反对在 Kubernetes 上装置部署和治理,主动执行与运行 RadonDB MySQL 集群无关的工作。

本教程次要演示如何应用 Git 和 Repo 命令行两种形式在 Kubernetes 上部署 RadonDB MySQL 集群。

部署筹备

已筹备可用 Kubernetes 集群。

形式一:通过 Git 部署

执行如下命令,将 RadonDB MySQL Chart 克隆到 Kubernetes 中。

$ git clone https://github.com/radondb/radondb-mysql-kubernetes.git

在 radondb-mysql-kubernetes 目录门路下,抉择如下形式,部署 release 实例。

release 是运行在 Kubernetes 集群中的 Chart 的实例。通过命令形式部署,需指定 release 名称。

以下命令指定 release 名为 demo,将创立一个名为demo-radondb-mysql 的有状态正本集。

  • 默认部署形式

    <For Helm v3>
     cd charts/helm
     helm install demo .
  • 指定参数部署形式

helm install 时应用--set key=value[,key=value],可指定参数部署。

以创立一个规范用户,且创立指定可拜访数据库为例。用户名为my-user、明码为my-password、受权数据库为my-database

cd charts/helm
helm install demo \
 --set mysql.mysqlUser=my-user,mysql.mysqlPassword=my-password,mysql.database=my-database .
  • 配置 yaml 参数形式

执行如下命令,可通过 value.yaml 配置文件,在装置时指定参数配置。

cd charts/helm
helm install demo -f values.yaml .

形式二:通过 repo 部署

增加并更新 helm 仓库。

$ helm repo add test https://charts.kubesphere.io/test
$ helm repo update

以下命令指定 release 名为 demo,将创立一个名为demo-radondb-mysql 的有状态正本集。

$ helm install demo test/radondb-mysql
NAME: demo
LAST DEPLOYED: Wed Apr 28 08:08:15 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The cluster is comprised of 3 pods: 1 leader and 2 followers. Each instance is accessible within the cluster through:
    <pod-name>.demo-radondb-mysql
To connect to your database:
1. Get mysql user `qingcloud`s password:
    kubectl get secret -n default demo-radondb-mysql -o jsonpath="{.data.mysql-password}" | base64 --decode; echo
2. Run an Ubuntu pod that you can use as a client:
    kubectl run ubuntu -n default --image=ubuntu:focal -it --rm --restart='Never' -- bash -il
3. Install the mysql client:
    apt-get update && apt-get install mysql-client -y
4. To connect to leader service in the Ubuntu pod:
    mysql -h demo-radondb-mysql-leader -u qingcloud -p
5. To connect to follower service (read-only) in the Ubuntu pod:
    mysql -h demo-radondb-mysql-follower -u qingcloud -p    

部署校验

集群创立胜利后,默认将创立一个有状态正本集(StatefulSet),以及三个用于拜访节点的服务。

以默认部署为例,可获取如下资源信息,则集群部署胜利。

$ kubectl get statefulset,svc
NAME                                  READY   AGE
statefulset.apps/demo-radondb-mysql   3/3     45m
NAME                                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/demo-radondb-mysql            ClusterIP   None            <none>        3306/TCP   45m
service/demo-radondb-mysql-follower   ClusterIP   10.96.84.254    <none>        3306/TCP   45m
service/demo-radondb-mysql-leader     ClusterIP   10.96.178.195   <none>        3306/TCP   45m

连贯 RadonDB MySQL

您须要筹备一个用于连贯 MySQL 的客户端。

与客户端在同一 NameSpace 中

当客户端与 RadonDB MySQL 集群在同一个 NameSpace 中时,可应用 leader/follower service 名称代替具体的 IP 和端口。

  • 连贯主节点(读写节点)。

    $ mysql -h <leader service 名称 > -u < 用户名 > -p

    用户名为 radondb_mysql,release 名为 demo,连贯示例如下:

    $ mysql -h demo-radondb-mysql-leader -u radondb_mysql -p
  • 连贯从节点(只读节点)。

    $ mysql -h <follower service 名称 > -u < 用户名 > -p

    用户名为 radondb_mysql,release 名为 demo,连贯示例如下:

    $ mysql -h demo-radondb-mysql-follower -u qradondb_mysql-p  

    与客户端不在同一 NameSpace 中

当客户端与 RadonDB MySQL 集群不在同一个 NameSpace 中时,能够通过 podIP 或服务 ClusterIP 来连贯对应节点。

  • 查问 pod 列表和服务列表,别离获取须要连贯的节点所在的 pod 名称或对应的服务名称。

    $ kubectl get pod,svc
  • 查看 pod/ 服务的详细信息,获取对应的 IP。

    $ kubectl describe pod <pod 名称 >
    $ kubectl describe svc < 服务名称 >

    留神:pod 重启后 pod IP 会更新,每次重启后需从新获取 pod IP。

  • 连贯节点。

    $ mysql -h <pod IP/ 服务 ClusterIP> -u < 用户名 > -p

用户名为 radondb_mysql,pod IP 为 10.10.128.136,连贯示例如下:

$ mysql -h 10.10.128.136 -u radondb_mysql -p

长久化

MySQL 镜像在容器门路 /var/lib/mysql 中存储 MySQL 数据和配置。

默认状况下,会创立一个 PVC 并将其挂载到指定目录中。若想禁用此性能,您能够更改 values.yaml 禁用长久化,改用 emptyDir。

当 Pod 调配给节点后,将首先创立一个 emptyDir 卷,只有 Pod 在节点上继续运行,则存储卷便继续存在;当 Pod 节点中删除时,emptyDir 中的数据也将被永恒删除。

留神

  • PVC 中能够应用不同个性的长久卷(PersistentVolume,PV),其 I/O 性能会影响数据库的初始化性能。所以当应用 PVC 启用长久化存储时,可能须要调整 livenessProbe.initialDelaySeconds 的值。
  • 数据库初始化的默认限度是 60 秒 (livenessProbe.initialDelaySeconds + livenessProbe.periodSeconds * livenessProbe.failureThreshold)。如果初始化工夫超过限度,kubelet 将重启数据库容器,数据库初始化被中断,会导致持久数据不可用。

自定义 MySQL 配置

mysql.configFiles 中增加 / 更改 MySQL 配置。

configFiles:
   node.cnf: |
    [mysqld]
    default_storage_engine=InnoDB
    max_connections=65535
    
    # custom mysql configuration.
    expire_logs_days=7

参考

[1].RadonDB MySQLkubernetes:https://github.com/radondb/radondb-mysql-kubernetes
[2].MySQL 镜像:https://hub.docker.com/repository/docker/zhyass/percona57
[3].PVC:https://kubernetes.io/zh/docs/concepts/storage/persistent-volumes/
[4].Helm Charts 配置:https://github.com/radondb/radondb-mysql-kubernetes/tree/main/charts/helm

对于 RadonDB

RadonDB 开源社区是一个面向云原生、容器化的数据库开源社区,为数据库技术爱好者提供围绕支流开源数据库(MySQL、PostgreSQL、Redis、MongoDB、ClickHouse 等)的技术分享平台,并提供企业级 RadonDB 开源产品及服务。

目前 RadonDB 开源数据库系列产品已被 光大银行、浦发硅谷银行、哈密银行、泰康保险、太平保险、安盛保险、阳光保险、百年人寿、安吉物流、安畅物流、蓝月亮、天财商龙、罗克佳华、升哲科技、无锡汇跑体育、北京电信、江苏交通控股、四川航空、昆明航空、国控生物 等上千家企业及社区用户采纳。

RadonDB 可基于云平台与 Kubernetes 容器平台交付,不仅提供笼罩多场景的数据库产品解决方案,而且提供业余的集群治理和自动化运维能力,次要性能个性包含:高可用主从切换、数据强一致性、读写拆散、一键装置部署、多维指标监控 & 告警、弹性扩容 & 缩容、横向自在扩大、主动备份 & 复原、同城多活、异地灾备 等。RadonDB 仅需企业及社区用户专一于业务层逻辑开发,无需关注集群高可用选型、治理和运维等简单问题,帮忙企业及社区用户大幅度晋升业务开发与价值翻新的效率!

GitHub:

https://github.com/radondb

微信群: 请搜寻增加群助手微信号 radondb

正文完
 0