PXC介绍


因为今天要测PXC数据库,插播一篇


全称percona-xtradb-cluster,提供了MySQL高可用的一种实现方法。PXC集群以节点组成(推荐至少3节点,便于故障恢复),每个节点都是基于常规的 MySQL Server,意味着你可以从集群中分离出某节点单独使用,集群中每个节点都包含完整的数据。
PXC特性
同步复制
支持多主复制
支持并行复制
作为高可用方案,实施相对简单
架构图如下所示

部署PXC集群到kubernetes
1、下载部署文件
1git clone -b v1.5.0 https://github.com/percona/percona-xtradb-cluster-operator
2、创建CRD
1[root@k8s-master001 deploy]# kubectl apply -f crd.yaml
2Warning: apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
3customresourcedefinition.apiextensions.k8s.io/perconaxtradbclusters.pxc.percona.com created
4customresourcedefinition.apiextensions.k8s.io/perconaxtradbclusterbackups.pxc.percona.com created
5customresourcedefinition.apiextensions.k8s.io/perconaxtradbclusterrestores.pxc.percona.com created
6customresourcedefinition.apiextensions.k8s.io/perconaxtradbbackups.pxc.percona.com created
3、创建namespace
1[root@k8s-master001 deploy]# kubectl create namespace pxc
2namespace/pxc created
3[root@k8s-master001 deploy]# kubectl config set-context $(kubectl config current-context) --namespace=pxc
4Context "kubernetes-admin@kubernetes" modified.
4、创建RBAC
1[root@k8s-master001 deploy]# kubectl apply -f rbac.yaml
2Warning: rbac.authorization.k8s.io/v1beta1 Role is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 Role
3role.rbac.authorization.k8s.io/percona-xtradb-cluster-operator created
4serviceaccount/percona-xtradb-cluster-operator created
5serviceaccount/percona-xtradb-cluster-operator-workload created
6Warning: rbac.authorization.k8s.io/v1beta1 RoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 RoleBinding
7rolebinding.rbac.authorization.k8s.io/service-account-percona-xtradb-cluster-operator created
5、创建operator
1[root@k8s-master001 deploy]# kubectl apply -f operator.yaml
2deployment.apps/percona-xtradb-cluster-operator created
3
4[root@k8s-master001 deploy]# kubectl get po -n pxc
5NAME READY STATUS RESTARTS AGE
6percona-xtradb-cluster-operator-54d9b7c858-hkmsp 1/1 Running 0 2m19s
6、创建secrets
1创建root密码,并修改secrets.yaml中的root字段为新生成的密码
2[root@k8s-master001 deploy]# echo -n 'pxcadmin' | base64
3cHhjYWRtaW4=
4
5[root@k8s-master001 deploy]# kubectl apply -f secrets.yaml
6secret/my-cluster-secrets created
7、创建Percona XtraDB Cluster
修改配置
1 updateStrategy: OnDelete
2
3指定存储类和存储大小
4rook-ceph是k8s的存储类,可以通过kubectl get sc获取
5 persistentVolumeClaim:
6 storageClassName: rook-ceph
7 accessModes: [ "ReadWriteOnce" ]
8 resources:
9 requests:
10 storage: 6Gi
执行部署
1[root@k8s-master001 deploy]# kubectl apply -f cr.yaml
2perconaxtradbcluster.pxc.percona.com/cluster1 created
3
4[root@k8s-master001 deploy]# kubectl get po -n pxc
5NAME READY STATUS RESTARTS AGE
6cluster1-haproxy-0 2/2 Running 0 17m
7cluster1-haproxy-1 2/2 Running 0 15m
8cluster1-haproxy-2 2/2 Running 0 13m
9cluster1-pxc-0 1/1 Running 0 17m
10cluster1-pxc-1 1/1 Running 0 6m28s
11cluster1-pxc-2 1/1 Running 0 3m33s
8、验证:
1运行一个percona-client
2kubectl run -i --rm --tty percona-client --image=percona:5.7 --restart=Never -- bash -il
3
4查看3306代理,这里官方用的是haproxy
5sh-4.2$ env|grep 3306
6CLUSTER1_HAPROXY_SERVICE_PORT=3306
7CLUSTER1_HAPROXY_REPLICAS_PORT_3306_TCP_PORT=3306
8CLUSTER1_HAPROXY_PORT=tcp://10.106.76.114:3306
9
10连接数据库,查看集群信息,wsrep_cluster_size=3,表示现在集群有3个节点 ,更多信息自己查看输出信息
11sh-4.2$ mysql -h10.106.76.114 -uroot -ppxcadmin
12Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
13mysql>
14mysql> show status like 'wsrep%';
15+----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
16| Variable_name | Value |
17+----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
18| wsrep_local_state_uuid | 703296d1-f72b-11ea-93ec-5267957b341b |
19| wsrep_cluster_capabilities | |
20| wsrep_cluster_conf_id | 5 |
21| wsrep_cluster_size | 3 |
22| wsrep_cluster_state_uuid | 703296d1-f72b-11ea-93ec-5267957b341b |
23| wsrep_cluster_status | Primary |
24| wsrep_connected | ON |
25| wsrep_local_bf_aborts | 0 |
26| wsrep_local_index | 2 |
27| wsrep_provider_capabilities | :MULTI_MASTER:CERTIFICATION:PARALLEL_APPLYING:TRX_REPLAY:ISOLATION:PAUSE:CAUSAL_READS:INCREMENTAL_WRITESET:UNORDERED:PREORDERED:STREAMING:NBO: |
28| wsrep_provider_name | Galera |
29| wsrep_provider_vendor | Codership Oy <info@codership.com> |
30| wsrep_provider_version | 4.3(r752664d) |
31| wsrep_ready | ON |
32| wsrep_thread_count | 3 |
33+----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
3475 rows in set (0.01 sec)
9、说明
1kubectl get po -n pxc
2NAME READY STATUS RESTARTS AGE
3cluster1-haproxy-0 2/2 Running 0 39m
4cluster1-haproxy-1 2/2 Running 0 36m
5cluster1-haproxy-2 2/2 Running 0 35m
6cluster1-pxc-0 1/1 Running 1 39m
7cluster1-pxc-1 1/1 Running 0 28m
8cluster1-pxc-2 1/1 Running 0 25m
9percona-client 1/1 Running 0 16m
10percona-xtradb-cluster-operator-54d9b7c858-hkmsp 1/1 Running 0 65m
11
12NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
13service/cluster1-haproxy ClusterIP 10.106.76.114 <none> 3306/TCP,3309/TCP 43m
14service/cluster1-haproxy-replicas ClusterIP 10.104.239.57 <none> 3306/TCP 43m
15service/cluster1-pxc ClusterIP None <none> 3306/TCP 43m
16service/cluster1-pxc-unready ClusterIP None <none> 3306/TCP 43m
从以上输出可以看到,运行了三个pxc节点,这里可以视为物理机三个mysql节点,除此之外,还有三个haproxy。说明使用haproxy来为pxc集群提供代理服务,进入到cluster1-haproxy-0 可以看到如下信息
1server cluster1-pxc-0 cluster1-pxc-0.cluster1-pxc.pxc.svc.cluster.local:3306 check inter 10000 rise 1 fall 2 weight 1
2server cluster1-pxc-1 cluster1-pxc-1.cluster1-pxc.pxc.svc.cluster.local:3306 check inter 10000 rise 1 fall 2 weight 1
3server cluster1-pxc-2 cluster1-pxc-2.cluster1-pxc.pxc.svc.cluster.local:3306 check inter 10000 rise 1 fall 2 weight 1
再来看service,创建了cluster1-haproxy,如果在kubernetes集群内部,可以直接通过CLUSTER-IP+PORT访问到数据库
如果想在集群外部访问到数据库,可以使用前文介绍的Ingress来暴露TCP服务,如果测试,也可创建一个NodePort来暴露服。

注:文中图片来源于网络,如有侵权,请联系我及时删除。
下面的是我的公众号二维码图片,欢迎关注。

文章转载自菜鸟运维杂谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




