如何搭建基于Kubernates的Mysql多主机群
1、Persona XtraDB Cluster介绍:
Persona XtraDB Cluster集群是由HPE公司提出的基于Mysql的多主数据库集群,该集群主要是通过容器的方式实现Mysql集群的部署,并且能够依托Kubernates实现对集群节点的管理。
(1)集群的主要特点
Persona XtraDB Cluster集群的特点实现的是多主服务器协同工作,能够实现多节点共享和单独提供服务的能力。从而减少了因为master节点宕机造成的数据库运行效率低下或者无法提供服务的问题。根据官方资料,其拓扑结构及其特点如下图所示:
依据上图中的拓扑结构和特点,Percona XtraDB Cluster与原有的数据库相比,也存在比较大的优缺点:
2、PXC的部署过程
①创建Cluster服务
由于PXC(Percona XtraDB Cluster)主要是基于Kubernates进行部署,因此需要在Kubernates环境下创建相应的服务和Pod。当然基于k8s创建服务和Pod等主要是在k8s集群的master节点中完成。首先需要为PXC创建统一的集群服务。在此之前需要下载PXC的镜像,并且部署到自己的镜像服务器上,我们这边采用的私有服务器地址是:10.1.24.90:5000,这个地址在后续创建服务中会用到。我们创建配置脚本文件为:pxc-cluster-service.yaml 。其具体的脚本文件如下图所示:
如上图所示,我们在k8s中创建了一个名称叫做pxc-cluster的服务,端口号是3306
通过如下命令,执行上述脚本:
- $ Kubectl create -f ./pxc-cluster-service.yaml
执行上述脚本以后,提示创建服务成功。通过如下命令,可以查看系统中是否已经启动了相关的服务
- $ kubectl get svc --all-namespaces
通过上述命令以后,我们可以查看到如下状态:
如上图所示,我们发现刚才创建的cluster服务已经启动。
②创建Cluster的node1节点
在Kubernates系统中创建完成pxc-cluster服务以后,我们就开始着手创建集群的每个节点了。当然在k8s中创建的服务,自然是通过pod方式实现。因此每次添加新的节点都是通过配置脚本的方式来创建的,并且需要为每一个节点起一个名称。
特别需要注意的是,创建节点的时候Service和RC需要同时创建,如果仅有Service而无Endpoint的话,后续的SSL过程会失败,那么创建的节点也会自动停止,导致创建的pod停止,会被RC不断的重启。
因此在创建配置脚本过程中,需要创建两个部分:Service和RC,具体的源代码如下所示:
- Service部分:
- apiVersion: v1
- kind: Service
- metadata:
- name: pxc-node1
- labels:
- node: pxc-node1
- spec:
- ports:
- - port: 3306
- name: mysql
- - port: 4444
- name: state-snapshot-transfer
- - port: 4567
- name: replication-traffic
- - port: 4568
- name: incremental-state-transfer
- selector:
- node: pxc-node1
- ---
- RC部分:
- ---
- apiVersion: v1
- kind: ReplicationController
- metadata:
- name: pxc-node1
- spec:
- replicas: 1
- template:
- metadata:
- labels:
- node: pxc-node1
- unit: pxc-cluster
- spec:
- containers:
- - resources:
- limits:
- cpu: 0.3
- image: 10.1.24.90:5000/percona_xtradb_cluster_5_6
- name: pxc-node1
- ports:
- - containerPort: 3306
- - containerPort: 4444
- - containerPort: 4567
- - containerPort: 4568
- env:
- - name: GALERA_CLUSTER
- value: "true"
- - name: WSREP_CLUSTER_ADDRESS
- value: gcomm://
- - name: WSREP_SST_USER
- value: sst
- - name: WSREP_SST_PASSWORD
- value: sst
- - name: MYSQL_ROOT_PASSWORD
- value: root
- $ kubectl create -f ./pxc-node1.yaml
执行上述命令以后,执行如下命令,可以查看创建的pod是否启动:
- $ kubectl get pods
通过上图,我们发现在k8s系统中,我们启动的pod有我们刚刚创建好的pod。说明节点创建成功。
通过上述方法,我们可以成功创建node1,node2,node3等等,当然需要修改配置文件的名称以及相关service和RC的名称。
通过这种方法可以组建一个基于Kubernates的mysql集群。
3、验证mysql部署情况
执行如下命令,连接PXC数据库集群。
- $ kubectl exec -ti <POD-ID> --mysql-u root -proot -h pxc-cluster
其中POD-ID就是上述查询到的POD的名称。比如本文创建的POD节点有四个,分别是:
- pxc-node1-rkwj8
- pxc-node2-a6usw
- pxc-node3-oky8e
- pxc-node4-6q6bz
说明已经成功连接到mysql数据库中。
- $ mysql> show status like 'wsrep_cluster_size';