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

编辑:张莉梅 高级文档工程师

视频:钱芬 高级测试工程师

本文将演示在 Kubernetes 上部署 RadonDB MySQL Kubernetes 2.X(Operator)的步骤,快速实现 MySQL 高可用集群部署,以及部署集群的校验和卸载方式。

部署版本为 RadonDB MySQL Kubernetes 2.1.2。

部署准备

  • Kubernetes 集群
  • MySQL 客户端工具

部署过程

步骤 1: 添加 Helm 仓库

添加 Helm 仓库 radondb

helm repo add radondb https://radondb.github.io/radondb-mysql-kubernetes/

校验仓库信息,可查看到名为 radondb/mysql-operator 的 chart。

$ helm search repo
NAME CHART VERSION APP VERSION DESCRIPTION
radondb/mysql-operator 0.1.0 v2.1.2 Open Source,High Availability Cluster,based on MySQL

步骤 2: 部署 Operator

以下指定 release 名为 demo , 创建一个名为 demo-mysql-operator 的 Deployment[1]。

helm install demo radondb/mysql-operator

在这一步中,默认将同时创建集群所需的 CRD[2]。

步骤 3: 部署 RadonDB MySQL 集群

执行以下指令,以默认参数为 CRD mysqlclusters.mysql.radondb.com 创建一个实例,即创建 RadonDB MySQL 集群。

kubectl apply -f https://github.com/radondb/radondb-mysql-kubernetes/releases/latest/download/mysql_v1alpha1_mysqlcluster.yaml

自定义集群部署参数,可参考 配置参数[3]。

部署校验

校验 RadonDB MySQL Operator

查看 demo 的 Deployment 和对应监控服务,回显如下信息则部署成功。

$ kubectl get deployment,svc
NAME READY UP-TO-DATE AVAILABLE AGE
demo-mysql-operator 1/1 1 1 7h50m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/mysql-operator-metrics ClusterIP 10.96.142.22 <none> 8443/TCP 8h

校验 RadonDB MySQL 集群

执行如下命令,将查看到如下 CRD。

$ kubectl get crd | grep mysql.radondb.com
backups.mysql.radondb.com 2021-11-02T07:00:01Z
mysqlclusters.mysql.radondb.com 2021-11-02T07:00:01Z
mysqlusers.mysql.radondb.com 2021-11-02T07:00:01Z

以默认部署为例,执行如下命令将查看到名为 sample-mysql 的三节点 RadonDB MySQL 集群及用于访问节点的服务。

$ kubectl get statefulset,svc
NAME READY AGE
sample-mysql 3/3 7h33m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/sample-follower ClusterIP 10.96.131.84 <none> 3306/TCP 7h37m
service/sample-leader ClusterIP 10.96.111.214 <none> 3306/TCP 7h37m
service/sample-mysql ClusterIP None <none> 3306/TCP 7h37m

访问集群

在 Kubernetes 集群内,支持使用 service_name 或者 clusterIP 方式,访问 RadonDB MySQL。

RadonDB MySQL 提供 Leader 和 Follower 两种服务,分别用于客户端访问主从节点。Leader 服务始终指向主节点(可读写),Follower 服务始终指向从节点(只读)。

RadonDB MySQL 集群架构图

以下为客户端与数据库在同一 Kubernetes 集群内,访问 RadonDB MySQL 的方式。

当客户端的与数据库部署在不同 Kubernetes 集群,请参考 Kubernetes 访问集群中的应用程序[4],配置端口转发、负载均衡等连接方式。

ClusterIP 方式

RadonDB MySQL 的高可用读写 IP 指向 Leader 服务的 clusterIP,高可用只读 IP 指向 Follower 服务的 clusterIP

mysql -h <clusterIP> -P <mysql_Port> -u <user_name> -p

以下示例用户名为 radondb_usr, Leader 服务的 clusterIP 为 10.10.128.136 ,连接示例如下:

mysql -h 10.10.128.136 -P 3306 -u radondb_usr -p

service_name 方式

Kubernetes 集群的 Pod 之间支持通过 service_name 方式访问 RadonDB MySQL。

service_name 方式不适用于从 Kubernetes 集群的物理机访问数据库 Pod。

连接 Leader 服务(RadonDB MySQL 主节点)

mysql -h <leader_service_name>.<namespace> -u <user_name> -p

用户名为 radondb_usr,release 名为 sample,RadonDB MySQL 命名空间为 default ,连接示例如下:

mysql -h sample-leader.default -u radondb_usr -p

连接 Follower 服务(RadonDB MySQL 从节点)

mysql -h <follower_service_name>.<namespace> -u <user_name> -p

用户名为 radondb_usr,release 名为 sample,RadonDB MySQL 命名空间

为 default ,连接示例如下:

mysql -h sample-follower.default -u radondb_usr -p

卸载

卸载 Operator

卸载当前命名空间下 release 名为 demo 的 RadonDB MySQL Operator。

helm delete demo

卸载集群

卸载 release 名为 sample RadonDB MySQL 集群。

kubectl delete mysqlclusters.mysql.radondb.com sample

卸载自定义资源

kubectl delete customresourcedefinitions.apiextensions.k8s.io mysqlclusters.mysql.radondb.com
kubectl delete customresourcedefinitions.apiextensions.k8s.io mysqlusers.mysql.radondb.com
kubectl delete customresourcedefinitions.apiextensions.k8s.io backups.mysql.radondb.com

引用参考

  1. Deploymenthttps://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/
  2. CRDhttps://kubernetes.io/zh/docs/concepts/extend-kubernetes/api-extension/custom-resources/
  3. 配置参数https://github.com/radondb/radondb-mysql-kubernetes/blob/main/docs/zh-cn/config_para.md
  4. Kubernetes 访问集群中的应用程序https://kubernetes.io/zh/docs/tasks/access-application-cluster/

*相关部署视频可至 RadonDB 开源社区 B 站账号观看(搜索:RadonDB)

容器化 | 在 K8s 上部署 RadonDB MySQL Operator 和集群的更多相关文章

  1. 使用elasticsearch7.3版本在一台主机上部署多个实例组建集群

    系统:centos 7.4 x64 主机ip:192.168.0.160 软件包:elasticsearch-7.3.0-linux-x86_64.tar.gz 配置步骤 vim /etc/secur ...

  2. 在 K8S 上部署以 mysql 数据库作为后端存储的单机版 nacos

    Nacos 被用于: 服务发现 微服务配置信息管理 部署 nacos 时,需要用到如下两个镜像,这两个镜像均来自于 nacos 官方发布到 docker hub 的镜像, nacos/nacos-se ...

  3. 【集群监控】Docker上部署Prometheus+Alertmanager+Grafana实现集群监控

    Docker部署 下载 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.re ...

  4. 容器化 | 在 KubeSphere 中部署 MySQL 集群

    程润科 数据库研发工程师,目前从事 RadonDB MySQL Kubernetes 研发,热衷于研究数据库内核.K8s 相关技术. 张莉梅 高级文档工程师,目前负责数据库产品文档开发.维护和管理工作 ...

  5. Kubernetes容器化工具Kind实践部署Kubernetes v1.18.x 版本, 发布WordPress和MySQL

    Kind 介绍 Kind是Kubernetes In Docker的缩写,顾名思义是使用Docker容器作为Node并将Kubernetes部署至其中的一个工具.官方文档中也把Kind作为一种本地集群 ...

  6. 优化:在k8s上部署的gitlab

    gitlab组件图 gitlab在k8s上占用资源 # kubectl top pods -n default | grep git* gitlab-gitaly-0 9m 444Mi gitlab- ...

  7. 【docker】centOS7上部署的mysql和spring boot服务,要求,mysql的时间、java程序服务的时间和宿主机的时间完全保持一致【修改mysql时区,临时和永久】【修改spring boot配置文件时区】【修改docker启动spring boot实例程序时区】

    要求:centOS7上部署的mysql和spring boot服务,要求,mysql的时间.java程序服务的时间和宿主机的时间完全保持一致: ============================ ...

  8. 定期从Docker上部署的MySQL备份数据

    前段时间公司停电,正巧赶上周一领导要开会要过一遍项目,然而项目所依赖的MySQL数据库是直接部署在宿主机,且因为各人部署方式不同的原因,花了很久才在开会前启动起来.于是开完会后,我第一件事就是把原先依 ...

  9. kubernetes之三 使用kubectl在k8s上部署应用

    在上一篇中,我们学习了使用minikube来搭建k8s集群.k8s集群启动后,就可以在上面部署应用了.本篇,我们就来学习如何使用kubectl在k8s上部署应用. 学习之前,可以先从下面这篇博客上了解 ...

随机推荐

  1. 《PHP程序员面试笔试宝典》——如何处理与面试官持不同观点这个问题?

    如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 在面试的过程中,求职者所持有的观点不可能与面试官一模一样,在对某个问题的看法上,很有可能两个人相去甚远.当与面试官持不同 ...

  2. Deformable Templates For Eye Detection

    1 Abstract This approach was published On "Deformable Templates for Face Recognition" by A ...

  3. python 定时任务apscheduler的使用

    apscheduler 的使用   我们项目中总是避免不了要使用一些定时任务,比如说最近的项目,用户点击报名考试以后需要在考试日期临近的时候推送小程序消息提醒到客户微信上,翻了翻 fastapi 中的 ...

  4. 私有化轻量级持续集成部署方案--05-持续部署服务-Drone(上)

    提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记 持续部署概述 持续部署是能以自动化方式,频繁而且持续性的,将软件部署到生产环境.使软件产品能够快速迭代. 在之前部署 ...

  5. 查看树莓派系统相关信息的shell代码

    一.系统信息 1.显示系统名.系统版本和cpu架构等 在命令行中输入下面的指令 uname -a 2.系统位数 在命令行中输入下面的指令 getconf LONG_BIT 如图,显示多少就是多少位 3 ...

  6. jenkins pipeline构建项目

    以前用的jenkins自由风格发布代码.界面丑陋,出现问题位置不够清晰.今天改进一下流程使用jenkins pipeline构建项目. 学习使我快乐 步骤一.安装pipeline插件 点击系统管理-& ...

  7. docker下安装nginx,启动ngixn,修改nginx配置等--超详细

    1.获取nginx版本 docker中nginx版本信息:https://hub.docker.com/_/nginx?tab=tags&page=1&ordering=last_up ...

  8. 八大排序算法之直接插入排序(InsertionSort)

    常见的排序算法 今天复习[直接插入排序] 核心思想:有序数组中 找位置 -- 给无序数组第一个 找位置 ` public class InsertionSort { // 核心思想:有序数组中 找位置 ...

  9. embarrass的writeup

    大家好,这次我要为大家带来都是攻防世界misc部分embarrass的writeup.     首先下载附件,是一个压缩包,解压后找到一个流量包.用wireshark打开,直接在搜索框中输入flag{ ...

  10. 跟Excel说拜拜,这款可视化报表制作工具入股不亏!

    ​相信很多人如果看到漂亮的图表都会很感叹,"为什么可以做的这么漂亮,这么好看?","这个应该怎么做呢?用什么工具可以实现呢?".制作漂亮的可视化一般有这样几个方 ...