在这篇博文中,我将展示如何安装与mysql兼容的<一个href="//m.doggingzone.com/doc/kubernetes-operator-for-pxc/index.html">雷竞技下载官网Percona XtraDB Cluster (PXC) Operator一个>在Minikube以及执行一些基本的操作。我绝不是Kubernetes专家,这篇博客文章是我为本地MySQL Meetup做准备的探索的结果,所以如果你对如何做得更好有一些评论或建议,请评论!
在我的实验中,我使用<一个href="https://minikube.sigs.k8s.io/docs/start/">Minikube一个>版本1.26<一个href="https://minikube.sigs.k8s.io/docs/drivers/docker/">码头工人司机一个>在Ubuntu 22.04 LTS的最基本安装中,尽管它也应该与其他组合一起工作。您还可以找到官方的“在Minikube上运行Percona XtraDB集群”文雷竞技下载官网档<一个href="//m.doggingzone.com/doc/kubernetes-operator-for-pxc/minikube.html">在这里一个>。
你还需要kubectl年代pan>安装年代pan>为了使本教程有效。或者,你可以使用"年代pan>minikube kubectl年代pan>而不是"年代pan>kubectl年代pan>的例子。年代pan>
您还需要安装MySQL客户端,“jq”和sysbench实用程序。年代pan>
我还将在本教程中使用的命令和Yaml配置放在年代pan>minikube-pxc-tutorial年代pan>GitHub库年代pan>
在Minikube中启用度量服务器
由于我们可能希望在某些实验中查看资源使用情况,因此可以考虑启用年代pan>度量服务器插件年代pan>这是通过运行完成的:年代pan>
|
1
|
minikube年代pan>
插件年代pan>
启用年代pan>
指标年代pan>-<年代pan class="crayon-i">服务器年代pan>
|
在Kubernetes上安装和运行基本的MySQL
如果你使用年代pan>雷竞技下载官网Percona XtraDB集群操作符年代pan>对于你的MySQL部署在Kubernetes上,你需要做的第一件事是安装这个操作符:年代pan>
|
1
|
kubectl年代pan>
应用年代pan>
-<年代pan class="crayon-i">f年代pan>
https年代pan>
:年代pan>//<年代pan class="crayon-i">生年代pan>
.githubusercontent年代pan>
com年代pan>/<年代pan class="crayon-i">雷竞技下载官网/<年代pan class="crayon-i">雷竞技下载官网-<年代pan class="crayon-i">xtradb年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">操作符年代pan>/<年代pan class="crayon-i">v1年代pan>
。年代pan>
11.0年代pan>/<年代pan class="crayon-i">部署年代pan>/<年代pan class="crayon-i">包年代pan>
.yaml年代pan>
|
接下来,我们可以创建我们的集群,我们称之为“minimal-cluster”:年代pan>
|
1
|
kubectl年代pan>
应用年代pan>
-<年代pan class="crayon-i">f年代pan>
0年代pan>-<年代pan class="crayon-i">cr年代pan>-<年代pan class="crayon-i">最小的年代pan>
.yaml年代pan>
|
注意,这个命令的完成并不意味着集群已经准备好,可以操作了,而是启动了进程,可能需要一些时间才能完成。您可以通过运行以下命令来验证它是否已配置并准备好操作:年代pan>
|
1
2
3.
4
5
|
#看-n1 -d kubectl得到豆荚年代pan>
名字年代pan>
准备好了年代pan>
状态年代pan>
重新启动年代pan>
年龄年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">haproxy年代pan>-<年代pan class="crayon-cn">0年代pan>
2年代pan>/<年代pan class="crayon-cn">2年代pan>
运行年代pan>
0年代pan>
3 m1年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">0年代pan>
3.年代pan>/<年代pan class="crayon-cn">3.年代pan>
运行年代pan>
0年代pan>
3 m1年代pan>
雷竞技下载官网-<年代pan class="crayon-i">xtradb年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">操作符年代pan>-<年代pan class="crayon-cn">79949 dc46d年代pan>-<年代pan class="crayon-i">tdslj年代pan>
1年代pan>/<年代pan class="crayon-cn">1年代pan>
运行年代pan>
0年代pan>
3 m55年代pan>
|
您可以看到三个pod正在运行——一个是MySQL (Percona XtraDB集群),一个是pxc-雷竞技下载官网0节点,一个是HAproxy HAproxy -0节点,它用于为“真实”集群提供高可用性,其中有多个集群节点正在运行。
如果您不想尝试高可用性选项,那么对于基本的开发任务来说,这样的单节点部署就足够了。
雷竞技下载官网解释了MySQL自定义资源清单的Percona操作符
在进一步讨论之前,让我们先看看刚刚部署的YAML文件,看看其中有什么内容。有关支持的选项的完整列表,请参阅年代pan>文档年代pan>:年代pan>
|
1
2
3.
4
|
apiVersion年代pan>
:年代pan>
pxc年代pan>
.雷竞技下载官网percona年代pan>
com年代pan>/<年代pan class="crayon-i">v1年代pan>-<年代pan class="crayon-cn">11年代pan>-<年代pan class="crayon-cn">0年代pan>
种类年代pan>
:年代pan>
雷竞技下载官网PerconaXtraDBCluster年代pan>
元数据年代pan>
:年代pan>
名字年代pan>
:年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>
|
此资源定义对应于Percona XtraDB Cluster Operator 雷竞技下载官网version 1.11我们的集群将被命名年代pan>minimal-cluster。年代pan>
|
1
2
3.
|
规范年代pan>
:年代pan>
crVersion年代pan>
:年代pan>
1.11.0年代pan>
secretsName年代pan>
:年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">秘密年代pan>
|
再一次,我们指定了自定义资源定义的版本和这个集群将使用的“secrets”资源的名称。为了方便起见,它来源于集群名称,但实际上可以是任何名称。年代pan>
|
1
|
allowUnsafeConfigurations年代pan>
:年代pan>
真正的年代pan>
|
我们正在部署一个单节点集群(一开始),它被认为是一个不安全的配置,因此需要允许一个不安全的配置,这样的部署才能成功。对于生产部署,您不应该允许不安全的配置,除非您确实知道自己在做什么。年代pan>
|
1
2
3.
|
upgradeOptions年代pan>
:年代pan>
应用年代pan>
:年代pan>
8.0年代pan>-<年代pan class="crayon-e">推荐年代pan>
时间表年代pan>
:年代pan>
“0 4 * * *”年代pan>
|
该部分每天早上4点自动检查更新,并在可用的情况下执行推荐版本的升级。年代pan>
|
1
2
3.
4
5
6
7
8
|
pxc年代pan>
:年代pan>
大小年代pan>
:年代pan>
1年代pan>
图像年代pan>
:年代pan>
雷竞技下载官网/<年代pan class="crayon-i">雷竞技下载官网-<年代pan class="crayon-i">xtradb年代pan>-<年代pan class="crayon-i">集群年代pan>
:年代pan>
8.0.27年代pan>-<年代pan class="crayon-cn">18.1年代pan>
volumeSpec年代pan>
:年代pan>
persistentVolumeClaim年代pan>
:年代pan>
资源年代pan>
:年代pan>
请求年代pan>
:年代pan>
存储年代pan>
:年代pan>
6克年代pan>
|
PXC是这个pod的主容器,它包含集群本身——我们需要将数据存储在一个持久卷上,所以我们在这里定义它。使用默认卷请求6GB的容量年代pan>大小年代pan>参数定义要提供多少个节点年代pan>图像年代pan>要部署哪个特定的Percona XtraDB群集映像雷竞技下载官网。年代pan>
|
1
2
3.
4
|
haproxy年代pan>
:年代pan>
启用年代pan>
:年代pan>
真正的年代pan>
大小年代pan>
:年代pan>
1年代pan>
图像年代pan>
:年代pan>
雷竞技下载官网/<年代pan class="crayon-i">雷竞技下载官网-<年代pan class="crayon-i">xtradb年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">操作符年代pan>
:年代pan>
1.11.0年代pan>-<年代pan class="crayon-i">haproxy年代pan>
|
部署HAProxy来管理集群的高可用性。我们只部署了一个用于测试。但是在生产中,您至少需要两个以确保没有单点故障。年代pan>
|
1
2
3.
|
logcollector年代pan>
:年代pan>
启用年代pan>
:年代pan>
真正的年代pan>
图像年代pan>
:年代pan>
雷竞技下载官网/<年代pan class="crayon-i">雷竞技下载官网-<年代pan class="crayon-i">xtradb年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">操作符年代pan>
:年代pan>
1.11.0年代pan>-<年代pan class="crayon-i">logcollector年代pan>
|
从Percona XtraDB Cluste雷竞技下载官网r容器收集日志,这样即使该容器被销毁,日志也会被持久化。年代pan>
访问您提供的MySQL服务器<年代pan style="font-weight: 400;">
但是我们如何访问我们新提供的MySQL/Percona XtraDB集群实例呢?雷竞技下载官网年代pan>
默认情况下,出于安全考虑,该实例在Kubernetes集群之外是不可访问的,这意味着在Minikube环境之外,但在我们的情况下,如果我们想要它,我们需要公开它:年代pan>
|
1
|
kubectl年代pan>
暴露年代pan>
服务年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">haproxy年代pan>
--<年代pan class="crayon-r">类型年代pan>=<年代pan class="crayon-i">NodePort年代pan>
--<年代pan class="crayon-i">港口年代pan>=<年代pan class="crayon-cn">3306年代pan>
--<年代pan class="crayon-i">名字年代pan>=<年代pan class="crayon-i">mysql年代pan>-<年代pan class="crayon-r">测试年代pan>
|
我们可以通过运行以下命令查看该命令的结果:年代pan>
|
1
2
3.
4
5
6
7
8
9
|
l年代pan>
# kubectl获取服务年代pan>
名字年代pan>
类型年代pan>
集群年代pan>-<年代pan class="crayon-e">知识产权年代pan>
外部年代pan>-<年代pan class="crayon-e">知识产权年代pan>
港口年代pan>
(年代pan>
年代年代pan>
)年代pan>
年龄年代pan>
kubernetes年代pan>
ClusterIP年代pan>
10.96.0.1年代pan>
<年代pan>
没有一个年代pan>
>年代pan>
443年代pan>/<年代pan class="crayon-i">TCP年代pan>
34米年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-e">haproxy年代pan>
ClusterIP年代pan>
10.110.6.3年代pan>
<年代pan>
没有一个年代pan>
>年代pan>
3306年代pan>/<年代pan class="crayon-i">TCP年代pan>
,年代pan>
3309年代pan>/<年代pan class="crayon-i">TCP年代pan>
,年代pan>
33062年代pan>/<年代pan class="crayon-i">TCP年代pan>
,年代pan>
33060年代pan>/<年代pan class="crayon-i">TCP年代pan>
11米年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">haproxy年代pan>-<年代pan class="crayon-e">副本年代pan>
ClusterIP年代pan>
10.100.229.205年代pan>
<年代pan>
没有一个年代pan>
>年代pan>
3306年代pan>/<年代pan class="crayon-i">TCP年代pan>
11米年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-e">pxc年代pan>
ClusterIP年代pan>
没有一个年代pan>
<年代pan>
没有一个年代pan>
>年代pan>
3306年代pan>/<年代pan class="crayon-i">TCP年代pan>
,年代pan>
33062年代pan>/<年代pan class="crayon-i">TCP年代pan>
,年代pan>
33060年代pan>/<年代pan class="crayon-i">TCP年代pan>
11米年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-e">没准备的年代pan>
ClusterIP年代pan>
没有一个年代pan>
<年代pan>
没有一个年代pan>
>年代pan>
3306年代pan>/<年代pan class="crayon-i">TCP年代pan>
,年代pan>
33062年代pan>/<年代pan class="crayon-i">TCP年代pan>
,年代pan>
33060年代pan>/<年代pan class="crayon-i">TCP年代pan>
11米年代pan>
mysql年代pan>-<年代pan class="crayon-r">测试年代pan>
NodePort年代pan>
10.108.103.151年代pan>
<年代pan>
没有一个年代pan>
>年代pan>
3306年代pan>
:年代pan>
30504年代pan>/<年代pan class="crayon-i">TCP年代pan>
24岁的年代pan>
雷竞技下载官网-<年代pan class="crayon-i">xtradb年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-e">操作符年代pan>
ClusterIP年代pan>
10.101.38.244年代pan>
<年代pan>
没有一个年代pan>
>年代pan>
443年代pan>/<年代pan class="crayon-i">TCP年代pan>
12米年代pan>
|
与其他只能在Kubernetes集群内访问的服务(因此是ClusterIP类型)不同,我们的“年代pan>mysql-test年代pan>服务具有NodePort类型,这意味着它在本地节点的端口上公开。在我们的例子中,端口3306 (MySQL监听的标准端口)被映射到端口30504。年代pan>
注意IP年代pan>10.108.103.151年代pan>这里提到的是内部集群IP,不可访问。要找出你应该利用哪个IP,你可以使用:年代pan>
|
1
2
3.
4
5
6
7
8
9
10
11
12
13
14
|
# minikube服务列表年代pan>
|年代pan>-------------<年代pan class="crayon-sy">|年代pan>----------------------------------<年代pan class="crayon-sy">|年代pan>--------------<年代pan class="crayon-sy">|年代pan>---------------------------<年代pan class="crayon-sy">|年代pan>
|年代pan>
名称空间年代pan>
|年代pan>
名字年代pan>
|年代pan>
目标年代pan>
港口年代pan>
|年代pan>
URL年代pan>
|年代pan>
|年代pan>-------------<年代pan class="crayon-sy">|年代pan>----------------------------------<年代pan class="crayon-sy">|年代pan>--------------<年代pan class="crayon-sy">|年代pan>---------------------------<年代pan class="crayon-sy">|年代pan>
|年代pan>
默认的年代pan>
|年代pan>
kubernetes年代pan>
|年代pan>
没有年代pan>
节点年代pan>
港口年代pan>
|年代pan>
|年代pan>
默认的年代pan>
|年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">haproxy年代pan>
|年代pan>
没有年代pan>
节点年代pan>
港口年代pan>
|年代pan>
|年代pan>
默认的年代pan>
|年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">haproxy年代pan>-<年代pan class="crayon-i">副本年代pan>
|年代pan>
没有年代pan>
节点年代pan>
港口年代pan>
|年代pan>
|年代pan>
默认的年代pan>
|年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>
|年代pan>
没有年代pan>
节点年代pan>
港口年代pan>
|年代pan>
|年代pan>
默认的年代pan>
|年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-i">没准备的年代pan>
|年代pan>
没有年代pan>
节点年代pan>
港口年代pan>
|年代pan>
|年代pan>
默认的年代pan>
|年代pan>
mysql年代pan>-<年代pan class="crayon-r">测试年代pan>
|年代pan>
3306年代pan>
|年代pan>
http年代pan>
:年代pan>//<年代pan class="crayon-cn">192.168.49.2年代pan>
:年代pan>
30504年代pan>
|年代pan>
|年代pan>
默认的年代pan>
|年代pan>
雷竞技下载官网-<年代pan class="crayon-i">xtradb年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">操作符年代pan>
|年代pan>
没有年代pan>
节点年代pan>
港口年代pan>
|年代pan>
|年代pan>
kube年代pan>-<年代pan class="crayon-i">系统年代pan>
|年代pan>
kube年代pan>-<年代pan class="crayon-i">dns年代pan>
|年代pan>
没有年代pan>
节点年代pan>
港口年代pan>
|年代pan>
|年代pan>
kube年代pan>-<年代pan class="crayon-i">系统年代pan>
|年代pan>
指标年代pan>-<年代pan class="crayon-i">服务器年代pan>
|年代pan>
没有年代pan>
节点年代pan>
港口年代pan>
|年代pan>
|年代pan>-------------<年代pan class="crayon-sy">|年代pan>----------------------------------<年代pan class="crayon-sy">|年代pan>--------------<年代pan class="crayon-sy">|年代pan>---------------------------<年代pan class="crayon-sy">|年代pan>
|
尽管这不是一个HTTP协议服务,URL在显示我们可以用来访问MySQL的IP和端口方面是非常有用的。年代pan>
除了运行“expose service命令”进行公开,您还可以设置年代pan>haproxy.serviceType = NodePort年代pan>在清单。年代pan>
接下来,我们需要MySQL密码!为了保证安全,Percona Operator雷竞技下载官网 MySQL没有默认密码,而是生成一个唯一的安全密码,存储在Kubernetes Secrets中。事实上,这里创建了两个秘密:一个用于内部使用,另一个用于用户访问-这是我们将使用的秘密:年代pan>
|
1
2
3.
4
|
# kubectl获得秘密年代pan>
名字年代pan>
类型年代pan>
数据年代pan>
年龄年代pan>
内部年代pan>-<年代pan class="crayon-i">最小的年代pan>-<年代pan class="crayon-e">集群年代pan>
不透明的年代pan>
7年代pan>
94米年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-e">秘密年代pan>
不透明的年代pan>
7年代pan>
94米年代pan>
|
让我们更深入地了解最小集群的秘密:年代pan>
|
1
2
3.
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# kubectl获取secret minimum -cluster-secrets -o yaml年代pan>
apiVersion年代pan>
:年代pan>
v1年代pan>
数据年代pan>
:年代pan>
clustercheck年代pan>
:年代pan>
a3VMZktDUUhLd1JjM3BJaw年代pan>==
raybet雷竞技竞猜在线官网
:年代pan>
ZTdoREJoQXNhdDRaWlB4eg年代pan>==
操作符年代pan>
:年代pan>
SnZySWttRWFNNDRreWlvVlR5aA年代pan>==
proxyadmin年代pan>
:年代pan>
ZVcxTGpIQXNLT0NjemhxVEV3年代pan>
复制年代pan>
:年代pan>
OTEzY09mUnN2MjM1d3RlNUdOUA年代pan>==
根年代pan>
:年代pan>
bm1oemtOaDVRakxBcG05OUdQTw年代pan>==
xtrabackup年代pan>
:年代pan>
RHNTNkExYlhqNDkxZjdvY3k年代pan>=
种类年代pan>
:年代pan>
秘密年代pan>
元数据年代pan>
:年代pan>
creationTimestamp年代pan>
:年代pan>
“2022 - 07年- 07 - t18:33:03z”年代pan>
名字年代pan>
:年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-e">秘密年代pan>
名称空间年代pan>
:年代pan>
默认的年代pan>
resourceVersion年代pan>
:年代pan>
“1538”年代pan>
uid年代pan>
:年代pan>
3 ab006f1年代pan>-<年代pan class="crayon-cn">01 e2年代pan>-<年代pan class="crayon-cn">41 a7年代pan>-<年代pan class="crayon-i">b9f5年代pan>-<年代pan class="crayon-cn">465年aecb38a69年代pan>
类型年代pan>
:年代pan>
不透明的年代pan>
|
我们可以看到MySQL雷竞技下载官网的Percona Operator创建了许多用户,并将他们的密码存储在Kubernetes Secrets中。注意,这些值是用base64编码的。年代pan>
现在让我们获取我们讨论过的所有MySQL连接信息,并将其存储在不同的变量中:年代pan>
|
1
2
3.
|
出口年代pan>
MYSQL_HOST年代pan>=<年代pan class="crayon-sy">美元年代pan>
(年代pan>
kubectl年代pan>
得到年代pan>
节点年代pan>
-<年代pan class="crayon-i">o年代pan>
jsonpath年代pan>=<年代pan class="crayon-s">“{. items [0] .status.addresses [0] .address}”年代pan>
)年代pan>
出口年代pan>
MYSQL_TCP_PORT年代pan>=<年代pan class="crayon-sy">美元年代pan>
(年代pan>
kubectl年代pan>
得到年代pan>
服务年代pan>/<年代pan class="crayon-i">mysql年代pan>-<年代pan class="crayon-r">测试年代pan>
-<年代pan class="crayon-i">o年代pan>
去年代pan>-<年代pan class="crayon-i">模板年代pan>=<年代pan class="crayon-s">{{(.spec指数。港口年代0).节点Port}}'年代pan>
)年代pan>
出口年代pan>
MYSQL_PWD年代pan>=<年代pan class="crayon-sy">`年代pan>
kubectl年代pan>
得到年代pan>
秘密年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">秘密年代pan>
-<年代pan class="crayon-i">ojson年代pan>
|年代pan>
金桥年代pan>
-<年代pan class="crayon-i">r年代pan>
. data年代pan>
.root年代pan>
|年代pan>
base64年代pan>
-<年代pan class="crayon-i">d年代pan>
`年代pan>
|
我们使用这些特定的名称年代pan>mysql年代pan>命令行客户端(但不是年代pan>mysqladmin年代pan>),并将默认使用这些变量,这使得它非常方便。年代pan>
让我们检查MySQL是否可以使用这些凭证访问:年代pan>
|
1
2
3.
4
5
6
|
# mysql -e "select 1"年代pan>
+---+
|年代pan>
1年代pan>
|年代pan>
+---+
|年代pan>
1年代pan>
|年代pan>
+---+
|
效果好极了!年代pan>
在Kubernetes的MySQL上运行Sysbench
现在我们知道了如何访问MySQL,让我们创建一个测试数据库并加载一些数据:年代pan>
|
1
2
3.
4
5
6
7
8
9
|
创建数据库sbtest年代pan>
sysbench年代pan>
--<年代pan class="crayon-i">db年代pan>-<年代pan class="crayon-i">司机年代pan>=<年代pan class="crayon-i">mysql年代pan>
--<年代pan class="crayon-i">线程年代pan>=<年代pan class="crayon-cn">4年代pan>
--<年代pan class="crayon-i">mysql年代pan>-<年代pan class="crayon-i">宿主年代pan>=<年代pan class="crayon-sy">美元年代pan>
MYSQL_HOST年代pan>
--<年代pan class="crayon-i">mysql年代pan>-<年代pan class="crayon-i">港口年代pan>=<年代pan class="crayon-sy">美元年代pan>
MYSQL_TCP_PORT年代pan>
--<年代pan class="crayon-i">mysql年代pan>-<年代pan class="crayon-i">用户年代pan>=<年代pan class="crayon-i">根年代pan>
--<年代pan class="crayon-i">mysql年代pan>-<年代pan class="crayon-i">密码年代pan>=<年代pan class="crayon-sy">美元年代pan>
MYSQL_PWD年代pan>
--<年代pan class="crayon-i">mysql年代pan>-<年代pan class="crayon-i">db年代pan>=<年代pan class="crayon-i">sbt年代pan>
/<年代pan class="crayon-i">usr年代pan>/<年代pan class="crayon-i">分享年代pan>/<年代pan class="crayon-i">sysbench年代pan>/<年代pan class="crayon-i">oltp_point_select年代pan>
.lua年代pan>
--<年代pan class="crayon-i">报告年代pan>-<年代pan class="crayon-i">时间间隔年代pan>=<年代pan class="crayon-cn">1年代pan>
--<年代pan class="crayon-i">表格年代pan>-<年代pan class="crayon-i">大小年代pan>=<年代pan class="crayon-cn">1000000年代pan>
准备年代pan>
sysbench年代pan>
1.0.20年代pan>
(年代pan>
使用年代pan>
系统年代pan>
LuaJIT年代pan>
魅惑年代pan>-<年代pan class="crayon-i">beta3年代pan>
)年代pan>
初始化年代pan>
工人年代pan>
线程年代pan>
。年代pan>
。年代pan>
。年代pan>
创建年代pan>
表格年代pan>
“sbtest1”年代pan>
。年代pan>
。年代pan>
。年代pan>
插入年代pan>
1000000年代pan>
记录年代pan>
成年代pan>
“sbtest1”年代pan>
创建年代pan>
一个年代pan>
二次年代pan>
指数年代pan>
在年代pan>
“sbtest1”年代pan>
。年代pan>
。年代pan>
。年代pan>
|
现在我们可以做一个测试:年代pan>
|
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
|
# sysbench——db-driver=mysql——threads=8——mysql-host=$MYSQL_HOST——mysql-port=$MYSQL_TCP_PORT——mysql-user=root——mysql-password=$MYSQL_PWD——mysql-db=sbtest /usr/share/sysbench/oltp_point_selectLua——report-interval=1——table-size=1000000——report-interval=1——time=60运行年代pan>
运行年代pan>
的年代pan>
测试年代pan>
与年代pan>
后年代pan>
选项年代pan>
:年代pan>
数量年代pan>
的年代pan>
线程年代pan>
:年代pan>
8年代pan>
报告年代pan>
中间年代pan>
结果年代pan>
每一个年代pan>
1年代pan>
第二个年代pan>
(年代pan>
年代年代pan>
)年代pan>
初始化年代pan>
随机年代pan>
数量年代pan>
发电机年代pan>
从年代pan>
当前的年代pan>
时间年代pan>
初始化年代pan>
工人年代pan>
线程年代pan>
。年代pan>
。年代pan>
。年代pan>
线程年代pan>
开始年代pan>
!年代pan>
(年代pan>
1年代pan>
]年代pan>
野年代pan>
:年代pan>
8年代pan>
tps年代pan>
:年代pan>
27299.11年代pan>
每秒年代pan>
:年代pan>
27299.11年代pan>
(年代pan>
r年代pan>/<年代pan class="crayon-i">w年代pan>/<年代pan class="crayon-i">o年代pan>
:年代pan>
27299.11年代pan>/<年代pan class="crayon-cn">0.00年代pan>/<年代pan class="crayon-cn">0.00年代pan>
)年代pan>
纬度年代pan>
(年代pan>
女士年代pan>
,年代pan>
95年代pan>
%年代pan>
)年代pan>
:年代pan>
0.52年代pan>
犯错年代pan>/<年代pan class="crayon-i">年代年代pan>
:年代pan>
0.00年代pan>
reconn年代pan>/<年代pan class="crayon-i">年代年代pan>
:年代pan>
0.00年代pan>
(年代pan>
2 s年代pan>
]年代pan>
野年代pan>
:年代pan>
8年代pan>
tps年代pan>
:年代pan>
29983.13年代pan>
每秒年代pan>
:年代pan>
29983.13年代pan>
(年代pan>
r年代pan>/<年代pan class="crayon-i">w年代pan>/<年代pan class="crayon-i">o年代pan>
:年代pan>
29983.13年代pan>/<年代pan class="crayon-cn">0.00年代pan>/<年代pan class="crayon-cn">0.00年代pan>
)年代pan>
纬度年代pan>
(年代pan>
女士年代pan>
,年代pan>
95年代pan>
%年代pan>
)年代pan>
:年代pan>
0.46年代pan>
犯错年代pan>/<年代pan class="crayon-i">年代年代pan>
:年代pan>
0.00年代pan>
reconn年代pan>/<年代pan class="crayon-i">年代年代pan>
:年代pan>
0.00年代pan>
…
(年代pan>
60年代年代pan>
]年代pan>
野年代pan>
:年代pan>
8年代pan>
tps年代pan>
:年代pan>
30375.00年代pan>
每秒年代pan>
:年代pan>
30375.00年代pan>
(年代pan>
r年代pan>/<年代pan class="crayon-i">w年代pan>/<年代pan class="crayon-i">o年代pan>
:年代pan>
30375.00年代pan>/<年代pan class="crayon-cn">0.00年代pan>/<年代pan class="crayon-cn">0.00年代pan>
)年代pan>
纬度年代pan>
(年代pan>
女士年代pan>
,年代pan>
95年代pan>
%年代pan>
)年代pan>
:年代pan>
0.42年代pan>
犯错年代pan>/<年代pan class="crayon-i">年代年代pan>
:年代pan>
0.00年代pan>
reconn年代pan>/<年代pan class="crayon-i">年代年代pan>
:年代pan>
0.00年代pan>
SQL年代pan>
统计数据年代pan>
:年代pan>
查询年代pan>
执行年代pan>
:年代pan>
读年代pan>
:年代pan>
1807737年代pan>
写年代pan>
:年代pan>
0年代pan>
其他年代pan>
:年代pan>
0年代pan>
总计年代pan>
:年代pan>
1807737年代pan>
交易年代pan>
:年代pan>
1807737年代pan>
(年代pan>
30127.61年代pan>
每年代pan>
证券交易委员会年代pan>
。年代pan>
)年代pan>
查询年代pan>
:年代pan>
1807737年代pan>
(年代pan>
30127.61年代pan>
每年代pan>
证券交易委员会年代pan>
。年代pan>
)年代pan>
忽略了年代pan>
错误年代pan>
:年代pan>
0年代pan>
(年代pan>
0.00年代pan>
每年代pan>
证券交易委员会年代pan>
。年代pan>
)年代pan>
重新连接时年代pan>
:年代pan>
0年代pan>
(年代pan>
0.00年代pan>
每年代pan>
证券交易委员会年代pan>
。年代pan>
)年代pan>
一般年代pan>
统计数据年代pan>
:年代pan>
总计年代pan>
时间年代pan>
:年代pan>
60.0020秒年代pan>
总计年代pan>
数量年代pan>
的年代pan>
事件年代pan>
:年代pan>
1807737年代pan>
延迟年代pan>
(年代pan>
女士年代pan>
)年代pan>
:年代pan>
最小值年代pan>
:年代pan>
0.10年代pan>
avg年代pan>
:年代pan>
0.26年代pan>
马克斯年代pan>
:年代pan>
30.91年代pan>
第95位年代pan>
百分位年代pan>
:年代pan>
0.42年代pan>
总和年代pan>
:年代pan>
478882.64年代pan>
线程年代pan>
公平年代pan>
:年代pan>
事件年代pan>
(年代pan>
avg年代pan>/<年代pan class="crayon-i">stddev年代pan>
)年代pan>
:年代pan>
225967.1250年代pan>/<年代pan class="crayon-cn">1916.69年代pan>
执行年代pan>
时间年代pan>
(年代pan>
avg年代pan>/<年代pan class="crayon-i">stddev年代pan>
)年代pan>
:年代pan>
59.8603年代pan>/<年代pan class="crayon-cn">0.00年代pan>
|
很好,我们可以看到我们的小测试集群每秒可以运行大约30,000个查询!年代pan>
让我们让MySQL在Kubernetes上高度可用!
让我们看看我们是否可以将我们的单节点Percona XtraDB集群转换为一个高可用集群雷竞技下载官网(假的-因为MinKube运行在单节点上,我们不会受到实际硬件故障的保护)。年代pan>
为了实现这一点,我们可以简单地将集群扩展到三个节点:年代pan>
|
1
2
|
# kubectl scale——replicas=3 pxc/ minimum -cluster年代pan>
雷竞技下载官网perconaxtradbcluster年代pan>
.pxc年代pan>
.雷竞技下载官网percona年代pan>
com年代pan>/<年代pan class="crayon-i">最小的年代pan>-<年代pan class="crayon-e">集群年代pan>
按比例缩小的年代pan>
|
和往常一样,Kubernetes的“集群扩展”在这里并不是指实际扩展了什么集群,而是指配置了什么新的所需状态,然后操作员开始对集群进行扩展。年代pan>
您可以等待几分钟,然后注意到其中一个pod处于挂起状态,它看起来不像是在进行:年代pan>
|
1
2
3.
4
5
6
|
# kubectl得到豆荚年代pan>
名字年代pan>
准备好了年代pan>
状态年代pan>
重新启动年代pan>
年龄年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">haproxy年代pan>-<年代pan class="crayon-cn">0年代pan>
2年代pan>/<年代pan class="crayon-cn">2年代pan>
运行年代pan>
0年代pan>
127米年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">0年代pan>
3.年代pan>/<年代pan class="crayon-cn">3.年代pan>
运行年代pan>
0年代pan>
127米年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">1年代pan>
0年代pan>/<年代pan class="crayon-cn">3.年代pan>
等待年代pan>
0年代pan>
3 m31年代pan>
雷竞技下载官网-<年代pan class="crayon-i">xtradb年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">操作符年代pan>-<年代pan class="crayon-cn">79949 dc46d年代pan>-<年代pan class="crayon-i">tdslj年代pan>
1年代pan>/<年代pan class="crayon-cn">1年代pan>
运行年代pan>
0年代pan>
128米年代pan>
|
为了弄清楚发生了什么,我们可以描述这个豆荚:年代pan>
|
1
2
3.
4
5
6
7
8
|
# kubectl描述pod minimum -cluster- pxa -1年代pan>
…
事件年代pan>
:年代pan>
类型年代pan>
原因年代pan>
年龄年代pan>
从年代pan>
消息年代pan>
----<年代pan class="crayon-h">------<年代pan class="crayon-h">----<年代pan class="crayon-h">----<年代pan class="crayon-h">-------
警告年代pan>
FailedScheduling年代pan>
5 m26s年代pan>
默认的年代pan>-<年代pan class="crayon-i">调度器年代pan>
0年代pan>/<年代pan class="crayon-cn">1年代pan>
节点年代pan>
是年代pan>
可用年代pan>
:年代pan>
1年代pan>
圆荚体年代pan>
有年代pan>
未绑定年代pan>
立即年代pan>
PersistentVolumeClaims年代pan>
。年代pan>
抢占年代pan>
:年代pan>
0年代pan>/<年代pan class="crayon-cn">1年代pan>
节点年代pan>
是年代pan>
可用年代pan>
:年代pan>
1年代pan>
抢占年代pan>
是年代pan>
不年代pan>
有帮助的年代pan>
为年代pan>
调度年代pan>
。年代pan>
警告年代pan>
FailedScheduling年代pan>
5 m25公路年代pan>
默认的年代pan>-<年代pan class="crayon-i">调度器年代pan>
0年代pan>/<年代pan class="crayon-cn">1年代pan>
节点年代pan>
是年代pan>
可用年代pan>
:年代pan>
1年代pan>
节点年代pan>
(年代pan>
年代年代pan>
)年代pan>
没有年代pan>'<年代pan class="crayon-i">t年代pan>
匹配年代pan>
圆荚体年代pan>
反年代pan>-<年代pan class="crayon-e">亲和力年代pan>
规则年代pan>
。年代pan>
抢占年代pan>
:年代pan>
0年代pan>/<年代pan class="crayon-cn">1年代pan>
节点年代pan>
是年代pan>
可用年代pan>
:年代pan>
1年代pan>
没有年代pan>
抢占年代pan>
受害者年代pan>
发现年代pan>
为年代pan>
传入的年代pan>
圆荚体年代pan>
。年代pan>
警告年代pan>
FailedScheduling年代pan>
21岁年代pan>
默认的年代pan>-<年代pan class="crayon-i">调度器年代pan>
0年代pan>/<年代pan class="crayon-cn">1年代pan>
节点年代pan>
是年代pan>
可用年代pan>
:年代pan>
1年代pan>
节点年代pan>
(年代pan>
年代年代pan>
)年代pan>
没有年代pan>'<年代pan class="crayon-i">t年代pan>
匹配年代pan>
圆荚体年代pan>
反年代pan>-<年代pan class="crayon-e">亲和力年代pan>
规则年代pan>
。年代pan>
抢占年代pan>
:年代pan>
0年代pan>/<年代pan class="crayon-cn">1年代pan>
节点年代pan>
是年代pan>
可用年代pan>
:年代pan>
1年代pan>
没有年代pan>
抢占年代pan>
受害者年代pan>
发现年代pan>
为年代pan>
传入的年代pan>
圆荚体年代pan>
。年代pan>
|
输出中有很多信息,但对于我们的目的来说,事件部分是最重要的。
这里的警告消息是说只有一个节点可用,而反亲和规则阻止在这个节点上调度更多pod。这是有道理的——在真实的生产环境中,在同一个物理服务器上调度多个Percona XtraDB集群pod是不可接受的,因为这最终会导致单点故障。雷竞技下载官网年代pan>
不过,这是用于生产的,但对于测试,我们可以允许在同一台物理机器上运行多个pod,因为我们只有一台物理机器。因此,我们通过禁用反亲和保护来修改资源定义:年代pan>
|
1
2
3.
4
5
|
pxc年代pan>
:年代pan>
大小年代pan>
:年代pan>
1年代pan>
图像年代pan>
:年代pan>
雷竞技下载官网/<年代pan class="crayon-i">雷竞技下载官网-<年代pan class="crayon-i">xtradb年代pan>-<年代pan class="crayon-i">集群年代pan>
:年代pan>
8.0.27年代pan>-<年代pan class="crayon-cn">18.1年代pan>
亲和力年代pan>
:年代pan>
antiAffinityTopologyKey年代pan>
:年代pan>
“没有”年代pan>
|
让我们将修改后的配置应用到集群中。(你可以找到这个和另一个YAML文件在年代pan>GitHub年代pan>存储库)。年代pan>
|
1
2
|
# kubectl应用-f 1-affinity.yaml年代pan>
雷竞技下载官网perconaxtradbcluster年代pan>
.pxc年代pan>
.雷竞技下载官网percona年代pan>
com年代pan>/<年代pan class="crayon-i">最小的年代pan>-<年代pan class="crayon-e">集群年代pan>
配置年代pan>
|
再试着缩放一下:年代pan>
|
1
2
|
#kubectl scale——replicas=3 pxc/ minimum -cluster年代pan>
雷竞技下载官网perconaxtradbcluster年代pan>
.pxc年代pan>
.雷竞技下载官网percona年代pan>
com年代pan>/<年代pan class="crayon-i">最小的年代pan>-<年代pan class="crayon-e">集群年代pan>
按比例缩小的年代pan>
|
我们不需要不断地检查所有新节点的配置是否完成,而是可以观察pod的初始化进程,并检查是否有任何问题:年代pan>
|
1
2
3.
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#kubectl get Po -l app.kubernetes。io /组件= pxc——手表年代pan>
名字年代pan>
准备好了年代pan>
状态年代pan>
重新启动年代pan>
年龄年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">0年代pan>
3.年代pan>/<年代pan class="crayon-cn">3.年代pan>
运行年代pan>
0年代pan>
64年代年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">1年代pan>
0年代pan>/<年代pan class="crayon-cn">3.年代pan>
等待年代pan>
0年代pan>
0年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">1年代pan>
0年代pan>/<年代pan class="crayon-cn">3.年代pan>
等待年代pan>
0年代pan>
0年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">1年代pan>
0年代pan>/<年代pan class="crayon-cn">3.年代pan>
初始化年代pan>
:年代pan>
0年代pan>/<年代pan class="crayon-cn">1年代pan>
0年代pan>
0年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">1年代pan>
0年代pan>/<年代pan class="crayon-cn">3.年代pan>
PodInitializing年代pan>
0年代pan>
2 s年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">1年代pan>
2年代pan>/<年代pan class="crayon-cn">3.年代pan>
运行年代pan>
0年代pan>
4 s年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">1年代pan>
3.年代pan>/<年代pan class="crayon-cn">3.年代pan>
运行年代pan>
0年代pan>
60年代年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">2年代pan>
0年代pan>/<年代pan class="crayon-cn">3.年代pan>
等待年代pan>
0年代pan>
0年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">2年代pan>
0年代pan>/<年代pan class="crayon-cn">3.年代pan>
等待年代pan>
0年代pan>
0年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">2年代pan>
0年代pan>/<年代pan class="crayon-cn">3.年代pan>
等待年代pan>
0年代pan>
2 s年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">2年代pan>
0年代pan>/<年代pan class="crayon-cn">3.年代pan>
初始化年代pan>
:年代pan>
0年代pan>/<年代pan class="crayon-cn">1年代pan>
0年代pan>
2 s年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">2年代pan>
0年代pan>/<年代pan class="crayon-cn">3.年代pan>
PodInitializing年代pan>
0年代pan>
3 s年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">2年代pan>
2年代pan>/<年代pan class="crayon-cn">3.年代pan>
运行年代pan>
0年代pan>
6 s年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">2年代pan>
3.年代pan>/<年代pan class="crayon-cn">3.年代pan>
运行年代pan>
0年代pan>
62年代年代pan>
|
太棒了!我们看到另外两个“pxc”吊舱已经准备就绪并正在运行!年代pan>
在Kubernetes上设置MySQL的资源限制
到目前为止,我们还没有为我们的MySQL部署指定任何资源限制(除了持久卷大小)。这意味着它将使用主机上当前可用的所有资源,虽然这可能是测试生产环境的首选方法,但您可能会寻找更可预测的性能和更多的资源隔离,以便单个集群不会使节点过度饱和,从而降低运行在同一节点上的其他pod的性能。
为了设置资源限制,你需要在自定义资源定义中放置适当的部分:
|
1
2
3.
4
5
6
7
|
资源年代pan>
:年代pan>
请求年代pan>
:年代pan>
内存年代pan>
:年代pan>
1克年代pan>
cpu年代pan>
:年代pan>
200米年代pan>
限制年代pan>
:年代pan>
内存年代pan>
:年代pan>
1克年代pan>
cpu年代pan>
:年代pan>
500米年代pan>
|
这个资源定义意味着我们请求至少1GB的内存和0.2个CPU核心,并将此实例的资源限制为0.5个CPU核心和相同的1GB内存。
请注意,如果“请求”条件不能满足,即如果集群中没有所需的CPU或内存,pod将不会被调度,等待资源变得可用(可能永远)。
让我们把这些限制应用到集群中:
|
1
2
|
kubectl年代pan>
应用年代pan>
-<年代pan class="crayon-i">f年代pan>
2年代pan>-<年代pan class="crayon-i">小年代pan>-<年代pan class="crayon-i">限制年代pan>
.yaml年代pan>
雷竞技下载官网perconaxtradbcluster年代pan>
.pxc年代pan>
.雷竞技下载官网percona年代pan>
com年代pan>/<年代pan class="crayon-i">最小的年代pan>-<年代pan class="crayon-e">集群年代pan>
配置年代pan>
|
如果我们看看应用这个命令后pod发生了什么,我们可以看到:年代pan>
|
1
2
3.
4
5
6
7
8
9
10
11
|
#kubectl get Po -l app.kubernetes。io /组件= pxc——手表年代pan>
根年代pan>
@年代pan>
本地主机年代pan>
:年代pan>
~年代pan>/<年代pan class="crayon-i">minikube年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-i">教程年代pan>
# sh cluster-watch.sh年代pan>
名字年代pan>
准备好了年代pan>
状态年代pan>
重新启动年代pan>
年龄年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">0年代pan>
3.年代pan>/<年代pan class="crayon-cn">3.年代pan>
运行年代pan>
0年代pan>
3 h52m年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">1年代pan>
3.年代pan>/<年代pan class="crayon-cn">3.年代pan>
运行年代pan>
0年代pan>
3 h49m年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">2年代pan>
3.年代pan>/<年代pan class="crayon-cn">3.年代pan>
终止年代pan>
0年代pan>
3 h48m年代pan>
…
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">0年代pan>
0年代pan>/<年代pan class="crayon-cn">3.年代pan>
初始化年代pan>
:年代pan>
0年代pan>/<年代pan class="crayon-cn">1年代pan>
0年代pan>
1年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">0年代pan>
0年代pan>/<年代pan class="crayon-cn">3.年代pan>
PodInitializing年代pan>
0年代pan>
2 s年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">0年代pan>
2年代pan>/<年代pan class="crayon-cn">3.年代pan>
运行年代pan>
0年代pan>
4 s年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">0年代pan>
3.年代pan>/<年代pan class="crayon-cn">3.年代pan>
运行年代pan>
0年代pan>
30年代年代pan>
|
因此改变资源限制需要重新启动集群。年代pan>
如果您设置了资源限制,操作员将自动设置MySQL的一些配置参数(例如年代pan>max_connections年代pan>)根据年代pan>请求年代pan>(资源保证可用)。如果没有指定资源约束,操作人员将不执行任何自动配置。年代pan>
如果我们再次运行相同的Sysbench测试,我们将看到:年代pan>
|
1
|
查询年代pan>
:年代pan>
274076年代pan>
(年代pan>
4563.18年代pan>
每年代pan>
证券交易委员会年代pan>
。年代pan>
)年代pan>
|
这比不受限制地跑步的结果要温和得多。年代pan>
我们可以在运行基准测试时验证pods的实际CPU使用情况:年代pan>
|
1
2
3.
4
5
6
7
|
#观看kubectl顶级豆荚年代pan>
名字年代pan>
CPU年代pan>
(年代pan>
核年代pan>
)年代pan>
内存年代pan>
(年代pan>
字节年代pan>
)年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">haproxy年代pan>-<年代pan class="crayon-cn">0年代pan>
277米年代pan>
15米年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">0年代pan>
500米年代pan>
634米年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">1年代pan>
8米年代pan>
438米年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">2年代pan>
8米年代pan>
443米年代pan>
雷竞技下载官网-<年代pan class="crayon-i">xtradb年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">操作符年代pan>-<年代pan class="crayon-cn">79949 dc46d年代pan>-<年代pan class="crayon-i">tdslj年代pan>
6米年代pan>
23米年代pan>
|
我们可以观察到一些有趣的事情:年代pan>
- Percona XtraDB雷竞技下载官网集群的限制看起来很受尊重。年代pan>
- 我们可以看到只有一个Percona XtraDB集群节雷竞技下载官网点正在获得负载。这是预期的,因为HAProxy不负载均衡集群节点之间的查询,只是确保高可用性。如果希望查看查询负载均衡,可以使用单独的端口进行负载均衡读取,也可以部署ProxySQL年代pan>智能查询路由年代pan>。年代pan>
- HAProxy pod需要大约Percona XtraDB Cluster pod的50%的资源(这是雷竞技下载官网非常简单的内存查询的最坏情况),所以不要低估它的资源使用需求!年代pan>
在Kubernetes上暂停和恢复MySQL<年代pan style="font-weight: 400;">
如果你有一个用于测试/开发的MySQL实例,或者不需要它一直运行,如果你运行的是Linux,你可以停止MySQL进程,或者如果你运行的是Docker,停止MySQL容器。如何在Kubernetes中实现同样的目标?年代pan>
首先,你需要小心——如果你年代pan>删除集群实例,它将破坏计算和存储资源,您将丢失所有数据。而不是删除你需要的年代pan>暂停集群。年代pan>
要暂停集群,你可以在集群自定义资源定义中添加一个暂停选项:年代pan>
|
1
|
暂停年代pan>
:年代pan>
真正的年代pan>
|
让我们应用CR启用这个选项,看看会发生什么:年代pan>
|
1
2
|
# kubectl apply -f 4-pause .yaml年代pan>
雷竞技下载官网perconaxtradbcluster年代pan>
.pxc年代pan>
.雷竞技下载官网percona年代pan>
com年代pan>/<年代pan class="crayon-i">最小的年代pan>-<年代pan class="crayon-e">集群年代pan>
配置年代pan>
|
暂停过程完成后,我们将不会看到任何集群pod正在运行,只有operator:年代pan>
|
1
2
3.
|
l年代pan>
# kubectl得到荚年代pan>
名字年代pan>
准备好了年代pan>
状态年代pan>
重新启动年代pan>
年龄年代pan>
雷竞技下载官网-<年代pan class="crayon-i">xtradb年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">操作符年代pan>-<年代pan class="crayon-cn">79949 dc46d年代pan>-<年代pan class="crayon-i">tdslj年代pan>
1年代pan>/<年代pan class="crayon-cn">1年代pan>
运行年代pan>
0年代pan>
20 h年代pan>
|
然而,你仍然会看到包含集群数据的持久化卷声明:年代pan>
|
1
2
3.
4
5
|
# kubectl得到PVC年代pan>
名字年代pan>
状态年代pan>
体积年代pan>
能力年代pan>
访问年代pan>
模式年代pan>
STORAGECLASS年代pan>
年龄年代pan>
datadir年代pan>-<年代pan class="crayon-i">最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">0年代pan>
绑定年代pan>
聚氯乙烯年代pan>-<年代pan class="crayon-cn">866年c58c9年代pan>-<年代pan class="crayon-cn">65年b8年代pan>-<年代pan class="crayon-cn">4 cb4年代pan>-<年代pan class="crayon-i">ba2c年代pan>-<年代pan class="crayon-cn">7 b904c0eecf0年代pan>
6克年代pan>
两年代pan>
标准年代pan>
95米年代pan>
datadir年代pan>-<年代pan class="crayon-i">最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">1年代pan>
绑定年代pan>
聚氯乙烯年代pan>-<年代pan class="crayon-cn">11 f1ac22年代pan>-<年代pan class="crayon-i">caf0年代pan>-<年代pan class="crayon-cn">4 eb9年代pan>-<年代pan class="crayon-cn">99年a8年代pan>-<年代pan class="crayon-cn">772167 cf62bd年代pan>
6克年代pan>
两年代pan>
标准年代pan>
94米年代pan>
datadir年代pan>-<年代pan class="crayon-i">最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">2年代pan>
绑定年代pan>
聚氯乙烯年代pan>-<年代pan class="crayon-i">c949cc2f年代pan>-<年代pan class="crayon-cn">9 b54年代pan>-<年代pan class="crayon-cn">403 d年代pan>-<年代pan class="crayon-i">ba32年代pan>-<年代pan class="crayon-i">a739abd5256d年代pan>
6克年代pan>
两年代pan>
标准年代pan>
93米年代pan>
|
我们还可以通过这个命令看到集群处于暂停状态:年代pan>
|
1
2
3.
|
# kubectl get PXC年代pan>
名字年代pan>
端点年代pan>
状态年代pan>
PXC年代pan>
PROXYSQL年代pan>
HAPROXY年代pan>
年龄年代pan>
最小的年代pan>-<年代pan class="crayon-e">集群年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">haproxy年代pan>
.default年代pan>
停顿了一下年代pan>
97米年代pan>
|
我们可以通过应用与该值相同的CR来取消暂停集群年代pan>暂停:假年代pan>集群将在几分钟后恢复在线:年代pan>
|
1
2
3.
4
|
# kubectl apply -f 5-resume .yaml年代pan>
# kubectl get PXC年代pan>
名字年代pan>
端点年代pan>
状态年代pan>
PXC年代pan>
PROXYSQL年代pan>
HAPROXY年代pan>
年龄年代pan>
最小的年代pan>-<年代pan class="crayon-e">集群年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">haproxy年代pan>
.default年代pan>
准备好了年代pan>
3.年代pan>
1年代pan>
100米年代pan>
|
MySQL在Kubernetes备份(和恢复)
如果你关心你的数据,你需要备份,Percona Operator for MySQL提供了相当多的备雷竞技下载官网份年代pan>备份功能年代pan>包括计划备份、时间点恢复、备份到S3兼容存储等等。但是,在本演练中,我们将研究最简单的备份和恢复—将备份保存到持久卷。年代pan>
首先,我们需要为备份配置集群;我们需要配置将执行备份的存储,以及为负责管理备份的容器提供一个映像:年代pan>
|
1
2
3.
4
5
6
7
8
9
10
11
|
备份年代pan>
:年代pan>
图像年代pan>
:年代pan>
雷竞技下载官网/<年代pan class="crayon-i">雷竞技下载官网-<年代pan class="crayon-i">xtradb年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">操作符年代pan>
:年代pan>
1.11.0年代pan>-<年代pan class="crayon-i">pxc8年代pan>
。年代pan>
0年代pan>-<年代pan class="crayon-e">备份年代pan>
存储年代pan>
:年代pan>
fs年代pan>-<年代pan class="crayon-i">聚氯乙烯年代pan>
:年代pan>
类型年代pan>
:年代pan>
文件系统年代pan>
体积年代pan>
:年代pan>
persistentVolumeClaim年代pan>
:年代pan>
accessModes年代pan>
:年代pan>
(年代pan>
“ReadWriteOnce”年代pan>
]年代pan>
资源年代pan>
:年代pan>
请求年代pan>
:年代pan>
存储年代pan>
:年代pan>
6胃肠道年代pan>
|
和前面一样,我们可以应用一个包含此部分的新配置年代pan>kubectl年代pan>应用年代pan>-<年代pan class="crayon-i">f年代pan>6年代pan>-<年代pan class="crayon-cn">1年代pan>-<年代pan class="crayon-i">备份年代pan>-<年代pan class="crayon-i">配置年代pan>.yaml年代pan>。虽然我们可以安排自动执行备份,但我们将重点关注手动运行备份。为此,您可以应用以下备份CR:年代pan>
|
1
2
3.
4
5
6
7
|
apiVersion年代pan>
:年代pan>
pxc年代pan>
.雷竞技下载官网percona年代pan>
com年代pan>/<年代pan class="crayon-e">v1年代pan>
种类年代pan>
:年代pan>
雷竞技下载官网PerconaXtraDBClusterBackup年代pan>
元数据年代pan>
:年代pan>
名字年代pan>
:年代pan>
backup1年代pan>
规范年代pan>
:年代pan>
pxcCluster年代pan>
:年代pan>
最小的年代pan>-<年代pan class="crayon-e">集群年代pan>
storageName年代pan>
:年代pan>
fs年代pan>-<年代pan class="crayon-i">聚氯乙烯年代pan>
|
它基本上定义了为名为“minimal-cluster”的集群创建名为“backup1”的备份,并将其存储在“fs-pvc”存储卷上:年代pan>
|
1
2
3.
4
|
#kubectl应用-f 6-2-0-backup-exec.yaml年代pan>
#kubectl get pxc-backups年代pan>
名字年代pan>
集群年代pan>
存储年代pan>
目的地年代pan>
状态年代pan>
完成年代pan>
年龄年代pan>
backup1年代pan>
最小的年代pan>-<年代pan class="crayon-e">集群年代pan>
fs年代pan>-<年代pan class="crayon-e">聚氯乙烯年代pan>
聚氯乙烯年代pan>/<年代pan class="crayon-i">xb年代pan>-<年代pan class="crayon-e">backup1年代pan>
成功年代pan>
2 m14s年代pan>
2 m42年代pan>
|
备份任务成功完成后,可以查看备份任务的状态。年代pan>
现在让我们在尝试恢复之前搞乱我们的数据库:年代pan>
|
1
|
mysql年代pan>
-<年代pan class="crayon-i">e年代pan>
删除数据库sbtest年代pan>
;年代pan>
|
恢复与备份类似,在集群上运行restore Job,配置如下:年代pan>
|
1
2
3.
4
5
6
7
|
apiVersion年代pan>
:年代pan>
“pxc.雷竞技下载官网percona.com/v1”年代pan>
种类年代pan>
:年代pan>
“雷竞技下载官网PerconaXtraDBClusterRestore”年代pan>
元数据年代pan>
:年代pan>
名字年代pan>
:年代pan>
“restore1”年代pan>
规范年代pan>
:年代pan>
pxcCluster年代pan>
:年代pan>
“minimal-cluster”年代pan>
backupName年代pan>
:年代pan>
“backup1”年代pan>
|
我们可以通过应用配置并检查其状态来做到这一点:年代pan>
|
1
2
3.
4
|
# kubectl应用-f 6-3-1-restore-exec.yaml年代pan>
# kubectl get pxp -restore年代pan>
名字年代pan>
集群年代pan>
状态年代pan>
完成年代pan>
年龄年代pan>
restore1年代pan>
最小的年代pan>-<年代pan class="crayon-e">集群年代pan>
恢复年代pan>
61年代年代pan>
|
如果您再次搞乱了数据库(在开发环境中并不少见),并希望再次恢复相同的备份,该怎么办?年代pan>
如果您只是再次运行还原,它将不起作用。年代pan>
|
1
2
|
根年代pan>
@年代pan>
本地主机年代pan>
:年代pan>
~年代pan>/<年代pan class="crayon-i">minikube年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-i">教程年代pan>
# kubectl应用-f 6-3-1-restore-exec.yaml年代pan>
雷竞技下载官网perconaxtradbclusterrestore年代pan>
.pxc年代pan>
.雷竞技下载官网percona年代pan>
com年代pan>/<年代pan class="crayon-e">restore1年代pan>
不变年代pan>
|
由于系统中已经存在同名的作业,您可以使用不同的名称创建恢复作业,也可以删除恢复对象后重新运行:年代pan>
|
1
2
3.
4
|
# kubectl delete pxc-restore restore1 .使用实例年代pan>
雷竞技下载官网perconaxtradbclusterrestore年代pan>
.pxc年代pan>
.雷竞技下载官网percona年代pan>
com年代pan>
“restore1”年代pan>
删除年代pan>
# kubectl应用-f 6-3-1-restore-exec.yaml年代pan>
雷竞技下载官网perconaxtradbclusterrestore年代pan>
.pxc年代pan>
.雷竞技下载官网percona年代pan>
com年代pan>/<年代pan class="crayon-e">restore1年代pan>
创建年代pan>
|
注意,虽然删除恢复任务不会影响备份数据或正在运行的集群,但删除“backup”也会删除存储在此备份中的数据:年代pan>
|
1
2
|
# kubectl delete pxp -backup backup1 .使用实例年代pan>
雷竞技下载官网perconaxtradbclusterbackup年代pan>
.pxc年代pan>
.雷竞技下载官网percona年代pan>
com年代pan>
“backup1”年代pan>
删除年代pan>
|
raybet雷竞技竞猜在线官网使用Percona监视和管理(PMM)监视部署雷竞技下载官网
如果没有监控,你的MySQL部署就不完整,在Percona Operator for MySQL中,雷竞技下载官网raybet雷竞技竞猜在线官网<一个href="//m.doggingzone.com/software/database-tools/percona-monitoring-and-management">雷竞技下载官网Praybet雷竞技竞猜在线官网ercona监控和管理一个>(PMM)支持是内置的,可以很容易地启用。年代pan>
根据Kubernetes的最佳实践,访问PMM的凭证并不存储在资源定义中,而是存储在秘密中。年代pan>
按照建议,我们将使用年代pan>PMM API键年代pan>而不是用户名和密码。我们可以在API key配置部分获得它们:年代pan>

创建API Key后,我们可以将它存储在集群的secret中:年代pan>
|
1
2
3.
|
# export PMM_API_KEY="
# kubectl patch secret/ minimum -cluster-secrets -p '{"data":{"pmmserverkey": "'$(echo -n $PMM_API_KEY | base64 -w0)'"}}'年代pan>
秘密年代pan>/<年代pan class="crayon-i">最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-e">秘密年代pan>
打补丁的年代pan>
|
接下来,我们需要将PMM配置部分添加到集群自定义资源中,指定部署PMM服务器的服务器。年代pan>
|
1
2
3.
4
5
6
7
8
|
pmm年代pan>
:年代pan>
启用年代pan>
:年代pan>
真正的年代pan>
图像年代pan>
:年代pan>
雷竞技下载官网/<年代pan class="crayon-i">pmm年代pan>-<年代pan class="crayon-i">客户端年代pan>
:年代pan>
2.28.0年代pan>
serverHost年代pan>
:年代pan>
pmm年代pan>
.server年代pan>
.host年代pan>
资源年代pan>
:年代pan>
请求年代pan>
:年代pan>
内存年代pan>
:年代pan>
150米年代pan>
cpu年代pan>
:年代pan>
300米年代pan>
|
应用完整配置:年代pan>
|
1
|
kubectl年代pan>
应用年代pan>
-<年代pan class="crayon-i">f年代pan>
7年代pan>-<年代pan class="crayon-cn">2年代pan>-<年代pan class="crayon-i">pmm年代pan>
.yaml年代pan>
|
部署完成后,您应该会看到MySQL/PXC和HAProxy实例的统计数据在您指定的Percona监控和管理实例中可见:雷竞技下载官网raybet雷竞技竞猜在线官网年代pan>

注意,在撰写本文时(Percona Monitori雷竞技下载官网nraybet雷竞技竞猜在线官网g and Management 2.28), PMM还不能完全感知Kubernetes,因此它将报告节点上下文中的CPU和内存使用情况,而不是特定pod可用的CPU和内存使用情况。年代pan>
在Kubernetes上配置MySQL
到目前为止,我们一直在默认设置下运行MySQL (Percona 雷竞技下载官网XtraDB Cluster),尽管Percona Operator for MySQL会自动配置一些选项以获得最佳性能,但您可能会想要更改一些配置选项。年代pan>
雷竞技下载官网Percona操作符为MySQL提供年代pan>多种方式年代pan>改变选项,我们将专注于我认为最简单和实用的-包括他们在CR定义。年代pan>
简单地添加为一个部分:年代pan>
|
1
2
3.
4
|
配置年代pan>
:年代pan>
|年代pan>
(年代pan>
mysqld年代pan>
]年代pan>
max_connections年代pan>=<年代pan class="crayon-cn">One hundred.年代pan>
innodb_log_file_size年代pan>=<年代pan class="crayon-cn">128米年代pan>
|
它将被添加到您的MySQL配置文件中,因此将覆盖任何默认值或操作员在部署期间所做的任何调整。年代pan>
与往常一样,您可以应用一个新的配置来查看通过运行应用的配置年代pan>Kubectl应用-f 8-config.yaml。年代pan>
如果您曾经拼写错配置选项名称,您可能想知道会发生什么。年代pan>
操作人员将尝试将配置应用到其中一个节点,这将失败,其中一个节点将反复崩溃并重新启动,但集群将以降级状态可用。年代pan>
|
1
2
3.
4
5
6
7
8
|
# kubectl得到豆荚年代pan>
名字年代pan>
准备好了年代pan>
状态年代pan>
重新启动年代pan>
年龄年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">haproxy年代pan>-<年代pan class="crayon-cn">0年代pan>
3.年代pan>/<年代pan class="crayon-cn">3.年代pan>
运行年代pan>
0年代pan>
56米年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">0年代pan>
4年代pan>/<年代pan class="crayon-cn">4年代pan>
运行年代pan>
0年代pan>
17米年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">1年代pan>
4年代pan>/<年代pan class="crayon-cn">4年代pan>
运行年代pan>
0年代pan>
28米年代pan>
最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">pxc年代pan>-<年代pan class="crayon-cn">2年代pan>
3.年代pan>/<年代pan class="crayon-cn">4年代pan>
CrashLoopBackOff年代pan>
6年代pan>
(年代pan>
85年代年代pan>
前年代pan>
)年代pan>
11米年代pan>
雷竞技下载官网-<年代pan class="crayon-i">xtradb年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">操作符年代pan>-<年代pan class="crayon-cn">79949 dc46d年代pan>-<年代pan class="crayon-i">tdslj年代pan>
1年代pan>/<年代pan class="crayon-cn">1年代pan>
运行年代pan>
0年代pan>
24小时年代pan>
恢复年代pan>-<年代pan class="crayon-i">工作年代pan>-<年代pan class="crayon-i">restore1年代pan>-<年代pan class="crayon-i">最小的年代pan>-<年代pan class="crayon-i">集群年代pan>-<年代pan class="crayon-i">lp4jg年代pan>
0年代pan>/<年代pan class="crayon-cn">1年代pan>
完成年代pan>
0年代pan>
165米年代pan>
|
要解决这个问题,只需纠正配置错误并重新应用。年代pan>
访问MySQL日志
为了在Kubernetes部署中解决MySQL问题,您可能需要访问MySQL日志。日志在每个PXC节点pod中的“Logs”容器中提供。(年代pan>更多信息年代pan>)要访问它们,您可以使用以下命令:年代pan>
|
1
2
3.
4
5
6
|
# kubectl logs minimal-cluster-pxc-0 -c logs——tail年代pan>
{年代pan>
“日志”年代pan>
:年代pan>
"2022-07-08T19:08:36.664908Z 0[备注][MY-000000] [Galera] (70d46e6b-9729, 'tcp://0.0.0.0:4567')关闭消息中继请求关闭\n"年代pan>
,年代pan>
“文件”年代pan>
:年代pan>
" / var / lib / mysql / mysqld-error.log”年代pan>
}年代pan>
{年代pan>
“日志”年代pan>
:年代pan>
"2022-07-08T19:08:36.696000Z 0[注][MY-000000] [Galera]成员0.0 (minimum -cluster-pxc-2)请求从' minimum -cluster-pxc-1 '传输状态。选择2.0 (minimum -cluster-pxc-1)(SYNCED)作为供体。\n"年代pan>
,年代pan>
“文件”年代pan>
:年代pan>
" / var / lib / mysql / mysqld-error.log”年代pan>
}年代pan>
{年代pan>
“日志”年代pan>
:年代pan>
"2022-07-08T19:08:37.000623Z 0[备注][MY-000000] [Galera] 2.0 (minimum -cluster-pxc-1): State transfer to 0.0 (minimum -cluster-pxc-2) complete.\n"年代pan>
,年代pan>
“文件”年代pan>
:年代pan>
" / var / lib / mysql / mysqld-error.log”年代pan>
}年代pan>
{年代pan>
“日志”年代pan>
:年代pan>
"2022-07-08T19:08:37.000773Z 0[备注][MY-000000] [Galera] Member 2.0 (minimum -cluster-pxc-1) synchronized with group.\n"年代pan>
,年代pan>
“文件”年代pan>
:年代pan>
" / var / lib / mysql / mysqld-error.log”年代pan>
}年代pan>
{年代pan>
“日志”年代pan>
:年代pan>
"2022-07-08T19:08:37.881614Z 0[备注][MY-000000] [Galera] 0.0 (minimum -cluster- pxcc -2):状态传输从2.0 (minimum -cluster- pxcc -1)完成。\n"年代pan>
,年代pan>
“文件”年代pan>
:年代pan>
" / var / lib / mysql / mysqld-error.log”年代pan>
}年代pan>
|
注意:如您所见,日志是JSON格式提供的,如果需要,可以使用“jq”命令进行处理。年代pan>
删除MySQL部署
删除已部署的集群非常容易,所以请记住年代pan>能力越大,责任越大年代pan>。只需一个命令就会破坏整个集群及其所有数据:年代pan>
|
1
2
|
# kubectl删除PXC最小集群年代pan>
雷竞技下载官网perconaxtradbcluster年代pan>
.pxc年代pan>
.雷竞技下载官网percona年代pan>
com年代pan>
“minimal-cluster”年代pan>
删除年代pan>
|
注意:这只适用于PXC集群;从集群中获取的任何备份都被视为单独的对象,该操作不会删除。年代pan>
保护室内室不被删除
这对于你的生产环境来说可能还不够好,你可能想要有更多的保护来防止你的数据意外丢失,而Percona Operator for MySQL允许这样做。雷竞技下载官网如果年代pan>finalizers.delete-pxc-pvc年代pan>如果未配置,则在删除集群后不会删除持久卷声明(pvc),因此使用相同的声明重新创建集群将允许您恢复数据。如果这是您选择的路线,请记住使用自己的进程来管理pvc—否则,您可能会看到旧集群占用大量空间。年代pan>
总结
我希望这个演练能帮助您了解MySQL的Percona Operator的强大功能,以及在Kubernetes上运行MySQL的样子。雷竞技下载官网我建议您不要以阅读结束,而是部署您自己的Minikube,并尝试本文中提到的场景。中包含了所有脚本(以及更多内容)<一个href="https://github.com/PeterZaitsev/minikube-pxc-tutorial">GitHub库一个>通过练习而不是独自阅读,你会学得更快!






嘿,谢谢你的文章!我试图按照您的指示设置集群,但我在开始时试图应用manifest 0-2-cr-minimal.yaml。容器pxc正在运行,但从未准备就绪,在pode事件中,我可以看到警告不健康54m (x14超过77m) kubelet活探测失败:ERROR 2003 (HY000):无法连接到MySQL服务器上' 172.17.0.5:33062 '。你遇到过类似的问题吗?
嗨,请在Percona论坛上寻求帮助雷竞技下载官网<一个href="https://forums.percona.com/" rel="nofollow ugc">https://forums.雷竞技下载官网percona.com/一个>