k8s使用operator部署Mysql InnoDB Cluster

一、解释Mysql InnoDB Cluster
 

MySQL InnoDB Cluster是MySQL数据库的高可用性和弹性扩展解决方案之一。它是MySQL官方推出的一项功能,旨在简化部署和管理分布式数据库环境。

InnoDB Cluster基于MySQL Group Replication和MySQL Shell技术构建。MySQL Group Replication是MySQL 5.7版本引入的一项复制功能,它提供了多主复制和自动故障转移的能力。MySQL Shell是一个交互式的命令行工具,可以用于管理和操作MySQL服务器。

InnoDB Cluster使用MySQL Group Replication实现了高可用性,它允许将多个MySQL服务器组成一个集群,其中每个服务器都可以作为主服务器来处理写入操作,并且可以自动进行故障检测和故障转移。如果一个主服务器发生故障,集群中的其他服务器会自动选择一个新的主服务器,以确保数据库的持续可用性。

此外,InnoDB Cluster还提供了自动的数据同步和复制,以确保集群中的所有服务器都具有相同的数据副本。它还提供了管理工具和命令行界面,使管理员可以轻松地创建、配置和监控数据库集群。

总结而言,MySQL InnoDB Cluster提供了一个简单而强大的解决方案,用于构建高可用性、弹性扩展的MySQL数据库集群,提供数据的持久性和可用性,以满足企业对可靠数据库系统的需求。

二、项目地址

项目地址:
https://github.com/mysql/mysql-operator

三、部署过程

一、安装crds 扩展资源对象

$> kubectl apply -f https://raw.githubusercontent.com/mysql/mysql-operator/trunk/deploy/deploy-crds.yaml

二、安装operator控制器

$> kubectl apply -f https://raw.githubusercontent.com/mysql/mysql-operator/trunk/deploy/deploy-operator.yaml

三、部署Mysql InnoDB Cluster

1、创建一个mysql的root secret。

$> kubectl create secret generic mypwds \
        --from-literal=rootUser=root \
        --from-literal=rootHost=% \
        --from-literal=rootPassword="sakila"

2、创建一个自定义资源对象-即定义的集群对象-下面是不带pvc的示例

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
  name: mycluster
spec:
  secretName: mypwds
  tlsUseSelfSigned: true
  instances: 3
  router:
    instances: 1

3、创建一个自定义资源对象-即定义的集群对象-下面是带pvc的示例

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
  name: idc-with-custom-config
  namespace: mysql-operator
spec:
  secretName: mypwds
  instances: 2
  router:
    instances: 1
  tlsUseSelfSigned: true
  datadirVolumeClaimTemplate:
    accessModes: [ "ReadWriteOnce" ]
    resources:
      requests:
        storage: 10Gi
    storageClassName: rook-ceph-block

四、项目文件内容

以上内容均项目clone到本地,在项目中的deploy、samples中可以找到。

[root@oula-k8s-01 deploy]# 

/xt-cloud/mysql-operator/deploy
-rw-r--r-- 1 root root 36796  7月 17 14:31 deploy-crds.yaml
-rw-r--r-- 1 root root  5749  7月 17 15:47 deploy-operator.yaml
-rwxr-xr-x 1 root root  3385  7月 17 14:31 patch_deployment.py

[root@oula-k8s-01 samples]# pwd
/xt-cloud/mysql-operator/samples

[root@oula-k8s-01 samples]# ls -l
总用量 24
-rw-r--r-- 1 root root 821  7月 17 14:31 sample-cluster-mycnf.yaml
-rw-r--r-- 1 root root 773  7月 17 14:31 sample-cluster-podspec-node-selector.yaml
-rw-r--r-- 1 root root 879  7月 17 14:31 sample-cluster-podspec-resources.yaml
-rw-r--r-- 1 root root 814  7月 18 11:08 sample-cluster-pvc.yaml
-rw-r--r-- 1 root root 769  7月 17 14:31 sample-cluster.yaml #带pvc的模版,需要自己添加SC的名称同上yaml
-rw-r--r-- 1 root root 743  7月 17 14:31 sample-secret.yaml #不带pvc

五、部署

kubectl apply -f  sample-cluster-pvc.yaml 即可。

六、验证

1、先查看申明的pvc是否bind了pv

2、再看创建的pod

 

 全部Runing则代表集群创建完成。

3、进行登录测试

$> kubectl run --rm -it myshell --image=container-registry.oracle.com/mysql/community-operator -- mysqlsh #这是拉去一个pod来进行管理mysql
If you don't see a command prompt, try pressing enter. #上面pod创建完后,输入回车。

MySQL JS>  \connect root@mycluster #代表使用root用户链接数据库,这个mycluster是你创建的mysql的svc的名称,kubectl get svc -n mysql-operator 可以看到,同时在这个容器的env也可以看到。

Creating a session to 'root@mycluster'
Please provide the password for 'root@mycluster': ******

MySQL mycluster JS> #到这里就代表容器已经完成验证。

 

猜你喜欢

转载自blog.csdn.net/weixin_46510209/article/details/131782499