kubernetes部署Percona XtraDB Cluster集群


PXC介紹

全稱percona-xtradb-cluster,提供了MySQL高可用的一種實現方法。PXC集群以節點組成(推薦至少3節點,便於故障恢復),每個節點都是基於常規的 MySQL Server,意味着你可以從集群中分離出某節點單獨使用,集群中每個節點都包含完整的數據。

PXC特性

  • 同步復制
  • 支持多主復制
  • 支持並行復制
  • 作為高可用方案,實施相對簡單

架構圖如下所示

部署PXC集群到kubernetes

1、下載部署文件

git clone -b v1.5.0 https://github.com/percona/percona-xtradb-cluster-operator

2、創建CRD

[root@k8s-master001 deploy]# kubectl  apply -f crd.yaml
Warning: apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
customresourcedefinition.apiextensions.k8s.io/perconaxtradbclusters.pxc.percona.com created
customresourcedefinition.apiextensions.k8s.io/perconaxtradbclusterbackups.pxc.percona.com created
customresourcedefinition.apiextensions.k8s.io/perconaxtradbclusterrestores.pxc.percona.com created
customresourcedefinition.apiextensions.k8s.io/perconaxtradbbackups.pxc.percona.com created

3、創建namespace

[root@k8s-master001 deploy]# kubectl create namespace pxc
namespace/pxc created
[root@k8s-master001 deploy]# kubectl config set-context $(kubectl config current-context) --namespace=pxc
Context "kubernetes-admin@kubernetes" modified.

4、創建RBAC

[root@k8s-master001 deploy]# kubectl apply -f rbac.yaml
Warning: rbac.authorization.k8s.io/v1beta1 Role is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 Role
role.rbac.authorization.k8s.io/percona-xtradb-cluster-operator created
serviceaccount/percona-xtradb-cluster-operator created
serviceaccount/percona-xtradb-cluster-operator-workload created
Warning: rbac.authorization.k8s.io/v1beta1 RoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 RoleBinding
rolebinding.rbac.authorization.k8s.io/service-account-percona-xtradb-cluster-operator created

5、創建operator

[root@k8s-master001 deploy]# kubectl  apply -f operator.yaml
deployment.apps/percona-xtradb-cluster-operator created

[root@k8s-master001 deploy]# kubectl  get po -n pxc
NAME                                               READY   STATUS    RESTARTS   AGE
percona-xtradb-cluster-operator-54d9b7c858-hkmsp   1/1     Running   0          2m19s

6、創建secrets

創建root密碼,並修改secrets.yaml中的root字段為新生成的密碼
[root@k8s-master001 deploy]# echo -n 'pxcadmin' | base64
cHhjYWRtaW4=

[root@k8s-master001 deploy]# kubectl  apply -f secrets.yaml
secret/my-cluster-secrets created

7、創建Percona XtraDB Cluster
修改配置

 updateStrategy: OnDelete
 
指定存儲類和存儲大小
rook-ceph是k8s的存儲類,可以通過kubectl get sc獲取
       persistentVolumeClaim:
        storageClassName: rook-ceph
        accessModes: [ "ReadWriteOnce" ]
        resources:
          requests:
            storage: 6Gi

執行部署

[root@k8s-master001 deploy]# kubectl  apply -f cr.yaml
perconaxtradbcluster.pxc.percona.com/cluster1 created

[root@k8s-master001 deploy]# kubectl  get po -n pxc
NAME                                               READY   STATUS    RESTARTS   AGE
cluster1-haproxy-0                                 2/2     Running   0          17m
cluster1-haproxy-1                                 2/2     Running   0          15m
cluster1-haproxy-2                                 2/2     Running   0          13m
cluster1-pxc-0                                     1/1     Running   0          17m
cluster1-pxc-1                                     1/1     Running   0          6m28s
cluster1-pxc-2                                     1/1     Running   0          3m33s

8、驗證:

運行一個percona-client
kubectl run -i --rm --tty percona-client --image=percona:5.7 --restart=Never -- bash -il

查看3306代理,這里官方用的是haproxy
sh-4.2$ env|grep 3306  
CLUSTER1_HAPROXY_SERVICE_PORT=3306
CLUSTER1_HAPROXY_REPLICAS_PORT_3306_TCP_PORT=3306
CLUSTER1_HAPROXY_PORT=tcp://10.106.76.114:3306

連接數據庫,查看集群信息,wsrep_cluster_size=3,表示現在集群有3個節點 ,更多信息自己查看輸出信息
sh-4.2$ mysql -h10.106.76.114 -uroot -ppxcadmin
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> 
mysql> show status like 'wsrep%';
+----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name                    | Value                                                                                                                                                                |
+----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| wsrep_local_state_uuid           | 703296d1-f72b-11ea-93ec-5267957b341b                                                                                                                                                                                                                                                          |
| wsrep_cluster_capabilities       |                                                                                                                                                                      |
| wsrep_cluster_conf_id            | 5                                                                                                                                                                    |
| wsrep_cluster_size               | 3                                                                                                                                                                    |
| wsrep_cluster_state_uuid         | 703296d1-f72b-11ea-93ec-5267957b341b                                                                                                                                 |
| wsrep_cluster_status             | Primary                                                                                                                                                              |
| wsrep_connected                  | ON                                                                                                                                                                   |
| wsrep_local_bf_aborts            | 0                                                                                                                                                                    |
| wsrep_local_index                | 2                                                                                                                                                                    |
| wsrep_provider_capabilities      | :MULTI_MASTER:CERTIFICATION:PARALLEL_APPLYING:TRX_REPLAY:ISOLATION:PAUSE:CAUSAL_READS:INCREMENTAL_WRITESET:UNORDERED:PREORDERED:STREAMING:NBO:                       |
| wsrep_provider_name              | Galera                                                                                                                                                               |
| wsrep_provider_vendor            | Codership Oy <info@codership.com>                                                                                                                                    |
| wsrep_provider_version           | 4.3(r752664d)                                                                                                                                                        |
| wsrep_ready                      | ON                                                                                                                                                                   |
| wsrep_thread_count               | 3                                                                                                                                                                    |
+----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
75 rows in set (0.01 sec)

9、說明

kubectl  get po -n pxc
NAME                                               READY   STATUS    RESTARTS   AGE
cluster1-haproxy-0                                 2/2     Running   0          39m
cluster1-haproxy-1                                 2/2     Running   0          36m
cluster1-haproxy-2                                 2/2     Running   0          35m
cluster1-pxc-0                                     1/1     Running   1          39m
cluster1-pxc-1                                     1/1     Running   0          28m
cluster1-pxc-2                                     1/1     Running   0          25m
percona-client                                     1/1     Running   0          16m
percona-xtradb-cluster-operator-54d9b7c858-hkmsp   1/1     Running   0          65m

NAME                                			   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
service/cluster1-haproxy            	  ClusterIP   10.106.76.114   <none>        3306/TCP,3309/TCP   43m
service/cluster1-haproxy-replicas     ClusterIP   10.104.239.57   <none>        3306/TCP            43m
service/cluster1-pxc               			 ClusterIP   None            <none>        3306/TCP            43m
service/cluster1-pxc-unready        	ClusterIP   None            <none>        3306/TCP            43m
  1. 從以上輸出可以看到,運行了三個pxc節點,這里可以視為物理機三個mysql節點,除此之外,還有三個haproxy。說明使用haproxy來為pxc集群提供代理服務,進入到cluster1-haproxy-0 可以看到如下信息
server cluster1-pxc-0 cluster1-pxc-0.cluster1-pxc.pxc.svc.cluster.local:3306 check inter 10000 rise 1 fall 2 weight 1
server cluster1-pxc-1 cluster1-pxc-1.cluster1-pxc.pxc.svc.cluster.local:3306 check inter 10000 rise 1 fall 2 weight 1
server cluster1-pxc-2 cluster1-pxc-2.cluster1-pxc.pxc.svc.cluster.local:3306 check inter 10000 rise 1 fall 2 weight 1
  1. 再來看service,創建了cluster1-haproxy,如果在kubernetes集群內部,可以直接通過CLUSTER-IP+PORT訪問到數據庫

  2. 如果想在集群外部訪問到數據庫,可以使用前文介紹的Ingress來暴露TCP服務,如果測試,也可使創建一個NodePort來暴露服。務下一篇我們就來就使用前文介紹過的Ingress來把mysql的服務暴露出去,順便介紹Nginx-Ingress。

Tips: 更多好文章,請關注首發微信公眾號“菜鳥運維雜談”!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM