在K8S中安装MySQL-PXC集群

Operator仓库地址如下:percona-xtradb-cluster-operator 官网教程:percona-operator-for-mysql PXC集群的备份和恢复参考:pxc-backup-restore 1.

Operator仓库地址如下:percona-xtradb-cluster-operator

官网教程:percona-operator-for-mysql

PXC集群的备份和恢复参考:pxc-backup-restore

1.部署MySQL-PXC集群

创建CRD

kubectl apply -f deploy/crd.yaml

创建Namespace

kubectl create namespace pxc
kubectl config set-context $(kubectl config current-context) --namespace=pxc

授予RBAC权限

kubectl apply -f deploy/rbac.yaml

创建Operator

kubectl apply -f deploy/operator.yaml

其中会用到下面这个镜像,如果出现无法下载的情况,可以换仓库。

perconalab/percona-xtradb-cluster-operator:main

创建MySQL相关的密码的Secret资源清单:

kubectl create -f deploy/secrets.yaml

创建SSL相关的证书的Secret以及各种其他证书:

kubectl apply -f deploy/ssl-secrets.yaml
kubectl apply -f deploy/vault-secret.yaml 

接着使用如下的命令去安装PXC集群:

kubectl apply -f deploy/cr.yaml

其中会用到如下的这些镜像,如果镜像不能从DockerHub下载的话,可以修改cr.yaml当中的镜像仓库地址。

perconalab/percona-xtradb-cluster-operator:main-pxc8.0
perconalab/percona-xtradb-cluster-operator:main-haproxy
perconalab/percona-xtradb-cluster-operator:main-proxysql
perconalab/percona-xtradb-cluster-operator:main-logcollector
perconalab/pmm-client:dev-latest
perconalab/percona-xtradb-cluster-operator:main-pxc8.0-backup

其中会涉及到很多的StorageClass的配置,都需要替换成为自己的K8S集群所使用到的StorageClass。

PXC集群创建之后,接着可以通过如下的命令连接PXC集群:

# 指定haproxy的service和namespace进行访问
mysql -h {haproxy-service-name}.{pxc-namespace}.svc.cluster.local -u root -p

# example
mysql -h pxc-mysql-cluster-haproxy.pxc.svc.cluster.local -u root -p

2.MySQL-PXC集群的备份

参考官方文档:pxc/backups-storage

2.1 自动备份

自动备份的意思是,PXC集群可以基于CRON表达式去实现每天自动备份,只需要修改deploy/cr.yaml文件即可实现。

2.2 手动备份

手动备份的意思是:可能某一次需要进行相关的操作,需要将操作之前的数据备份起来,此时就会需要使用到手动备份。

backup.storages中,配置S3的对象存储,如果是使用的minio或者阿里云这类非官方AWS S3的对象存储,但是兼容S3协议的对象存储,需要额外配置endpointUrl

  backup:
    storages:
      s3:
        type: s3
        verifyTLS: false
        s3:
          bucket: mysql-pxc-backup
          credentialsSecret: pxc-mysql-backup-s3
          region: beijing-minio
          endpointUrl: http://10.168.1.209:31000

S3配置当中的credentialsSecret需要配置一个S3的AccessKey相关的配置信息的Secret,因此需要先执行下面的资源清单,再应用deploy/cr.yaml资源清单让它生效。

配置参考如下:对于AWS_ACCESS_KEY_ID需要配置accessKeyId,对于AWS_SECRET_ACCESS_KEY需要配置accessKey的密码,需要注意的是Secret的namespace需要和PXC集群所在的Namespace对应的上

apiVersion: v1
kind: Secret
metadata:
  namespace: pxc
  name: pxc-mysql-backup-s3
type: Opaque
stringData:
  AWS_ACCESS_KEY_ID: ...... 
  AWS_SECRET_ACCESS_KEY: ......

PXC集群创建备份,在deploy/backup/目录下,有一个backup.yaml的文件模板,可以借助这个模板去创建PXC集群。

apiVersion: pxc.percona.com/v1
kind: PerconaXtraDBClusterBackup
metadata:
#  finalizers:
#    - percona.com/delete-backup
  namespace: pxc
  name: pxc-backup-202501142137
spec:
  pxcCluster: pxc-mysql-cluster
  storageName: s3
#  activeDeadlineSeconds: 3600
#  containerOptions:
#    env:
#    - name: VERIFY_TLS
#      value: "false"
#    args:
#      xtrabackup:
#      - "--someflag=abc"
#      xbcloud:
#      - "--someflag=abc"
#      xbstream:
#      - "--someflag=abc"

其中pxcCluster需要和deploy/cr.yaml当中的pxcCluster配置保持一致,storageName需要和deploy/cr.yamlbackup.storages部分名字保持一致。

接着,使用kubectl apply -f deploy/backup/backup.yaml命令根据资源清单去进行创建PXC集群的备份。

Comment