作者:程润科 数据库研发工程师
编辑:张莉梅 高级文档工程师
视频:钱芬 高级测试工程师
本文将演示在 Kubernetes 上部署 RadonDB MySQL Kubernetes 2.X(Operator)的步骤,快速实现 MySQL 高可用集群部署,以及部署集群的校验和卸载方式。
部署版本为 RadonDB MySQL Kubernetes 2.1.2。
添加 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
以下指定 release 名为 demo , 创建一个名为 demo-mysql-operator 的 Deployment[1]。
helm install demo radondb/mysql-operator
在这一步中,默认将同时创建集群所需的 CRD[2]。
执行以下指令,以默认参数为 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]。
查看 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
执行如下命令,将查看到如下 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],配置端口转发、负载均衡等连接方式。
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
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
卸载当前命名空间下 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
*相关部署视频可至 RadonDB 开源社区 B 站账号观看(搜索:RadonDB)
我正在尝试部署在Puma和jruby上运行的Rails应用程序。Procfile如下web:bundleexecpuma-Cconfig/puma.rb-p$PORT-e$RACK_ENVPuma的配置放在config/puma.rbifENV['RACK_ENV']!='production'||ENV['RAILS_ENV']!='production'workersInteger(ENV['PUMA_WORKERS']||4)endthreadsInteger(ENV['MIN_THREADS']||1),Integer(ENV['MAX_THREADS']||4)rackupD
开门见山|拉取镜像dockerpullelasticsearch:7.16.1|配置存放的目录#存放配置文件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/config#存放数据的文件夹mkdir-p/opt/docker/elasticsearch/node-1/data#存放运行日志的文件夹mkdir-p/opt/docker/elasticsearch/node-1/log#存放IK分词插件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/plugins若你使用了moba,直接右键新建即可如上图所示依次类推创建
文章目录查看ES信息查看节点信息查看分片信息实际场景下ES分片及副本数量应该怎么分关于ES的灵活使用查看ES信息查看版本kibana:GET/查看节点信息GET/_cat/nodes?v解释:ip:集群中节点的ip地址;heap.percent:堆内存的占用百分比;ram.percent:总内存的占用百分比,其实这个不是很准确,因为buff/cache和available也被当作使用内存;cpu:cpu占用百分比;load_1m:1分钟内cpu负载;load_5m:5分钟内cpu负载;load_15m:15分钟内cpu负载;node.role:上图的dilmrt代表全部权限master:*代表
elasticsearch查看当前集群中的master节点是哪个需要使用_cat监控命令,具体如下。查看方法es主节点确定命令,以kibana上查看示例如下:GET_cat/nodesv返回结果示例如下:ipheap.percentram.percentcpuload_1mload_5mload_15mnode.rolemastername172.16.16.188529952.591.701.45mdi-elastic3172.16.16.187329950.990.991.19mdi-elastic2172.16.16.231699940.871.001.03mdi-elastic4172
文章目录一、污点(Taint)1、污点简介2、污点的组成3、污点的设置和去除二、容忍(Tolerations)1、容忍简介2、容忍的基本用法3、示例4、多污点与多容忍配置三、警戒(cordon)和转移(drain)四、Pod启动阶段(相位phase)五、故障排除步骤一、污点(Taint)节点亲和性,是Pod的一种属性(偏好或硬性要求),它使Pod被吸引到一类特定的节点Taint则相反,它使节点能够排斥一类特定的PodTaint和Toleration相互配合,可以用来避免Pod被分配到不合适的节点上。每个节点上都可以应用一个或多个taint,这表示对于那些不能容忍这些taint的Pod,是不会被
Kubernetes(K8s)是一个用于管理容器化应用程序的开源平台,可以帮助开发人员更轻松地部署、管理和扩展应用程序。在Kubernetes中,集群划分是一种重要的概念,可以帮助我们更好地组织和管理集群中的节点和资源。本文将介绍如何使用Kubernetes对集群进行划分,并提供详细的操作示例,希望能够帮助读者更好地了解和使用Kubernetes平台。Node划分Node划分是将集群中的节点按照一定的规则进行划分。在Kubernetes中,可以使用NodeSelector和Affinity机制来实现Node划分。NodeSelectorNodeSelector是一种将Pod调度到符合特定节点标
文章目录Kubernetes(k8s)工作负载一、Workloads二、Pod三、Deployment四、RC、RS、DaemonSet、StatefulSet五、Job、CronJob1、Job2、CronJob六、GCKubernetes(k8s)工作负载一、Workloads什么是工作负载(Workloads)工作负载是运行在Kubernetes上的一个应用程序。一个应用很复杂,可能由单个组件或者多个组件共同完成。无论怎样我们可以用一组Pod来表示一个应用,也就是一个工作负载Pod又是一组容器(Containers)所以关系又像是这样工作负载(Workloads)控制一组PodPod控制
前言 前端时间PHP项目部署升级需要,需要把Laravel开发的项目部署K8s上,下面以laravel项目为例,讲解采用yaml文件方式部署项目。一、部署步骤1.创建Dockerfile文件Dockerfile是一个用来构建镜像的文本文件,在容器运行时,需要把项目文件和项目运行所必须的组件安装其中。#基础镜像FROMphp:7.4-fpm#时区ARGTZ=Asia/Shanghai#更换容器时区RUNcp"/usr/share/zoneinfo/$TZ"/etc/localtime&&echo"$TZ">/etc/timezone#替换成阿里apt-get源RUNsed-i"s@http
我正在尝试重构我的sinatra代码以将我的主文件分成单独的文件,使用来自thisresponse的一些技巧,我在部署到heroku时遇到了麻烦。以前我没有config.ru文件,只是使用了我的Procfile,它是:web:bundleexecrubyweb.rb-p$PORT根据thisarticle.从重构开始,我现在将Procfile更改为web:bundleexecthin-Rconfig.rustart-p$PORT我的config.ru文件是root=::File.dirname(__FILE__)require::File.join(root,'web')runMyAp
Closed.Thisquestionisopinion-based。它当前不接受答案。想改善这个问题吗?更新问题,以便editingthispost用事实和引用来回答。5年前关闭。Improvethisquestion关于我自己的一些事。我今年24岁,去年从北卡罗莱纳州立大学获得分析学硕士学位。统计,数学之类的东西。我没有很强的编程背景,这对我的问题来说非常重要。如果我说没有任何意义的话,那就是为什么。自从毕业以来,我一直在和其他人一起全职研究Rails应用程序。我的编程经验主要是RubyonRails(1.2年。)我知道R,SAS(统计语言,对这个问题没有帮助。)显然,这意味着它已