будем запускать перкону в кубере.
БАЗА В КОНТЕЙНЕРАХ ЭТО ЗЛО!!!!!!!!
https://www.percona.com/doc/kubernetes-operator-for-pxc/kubernetes.html
[root@kub-master-1 ~]# git clone -b v1.7.0 https://github.com/percona/percona-xtradb-cluster-operator
[root@kub-master-1 ~]# cd percona-xtradb-cluster-operator
Если в качестве постоянных томов иcпользуются localstorage, то предварительно необходимо создать pv по числу реплик в statefulset (cr.yaml)
[root@kub-master-1 percona-xtradb-cluster-operator]# kubectl create ns pxc
[root@kub-master-1 percona-xtradb-cluster-operator]# kubectl apply -f deploy/crd.yaml -n pxc
[root@kub-master-1 percona-xtradb-cluster-operator]# kubectl config set-context $(kubectl config current-context) --namespace=pxc
[root@kub-master-1 percona-xtradb-cluster-operator]# kubectl apply -f deploy/rbac.yaml -n pxc
[root@kub-master-1 percona-xtradb-cluster-operator]# kubectl apply -f deploy/operator.yaml -n pxc
[root@kub-master-1 percona-xtradb-cluster-operator]# kubectl create -f deploy/secrets.yaml -n pxc
Для данных используем наш nfs-provisioner - managed-nfs-storage
[root@kub-master-1 percona-xtradb-cluster-operator]# vim deploy/cr.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
pxc: size: 3 image: percona/percona-xtradb-cluster:8.0.21-12.1 autoRecovery: true volumeSpec: # emptyDir: {} # hostPath: # path: /data # type: Directory persistentVolumeClaim: storageClassName: managed-nfs-storage accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 6Gi gracePeriod: 600 |
[root@kub-master-1 percona-xtradb-cluster-operator]# kubectl apply -f deploy/cr.yaml -n pxc
всё сидим на жопе ровно ждём когда скачаются образы и запустятся:
1 2 3 4 5 6 7 8 9 10 |
[root@kub-master-1 percona-xtradb-cluster-operator]# kubectl get pod -n pxc NAME READY STATUS RESTARTS AGE cluster1-haproxy-0 2/2 Running 0 5m12s cluster1-haproxy-1 2/2 Running 0 2m34s cluster1-haproxy-2 0/2 Pending 0 2m14s cluster1-pxc-0 3/3 Running 0 5m13s cluster1-pxc-1 3/3 Running 0 3m19s cluster1-pxc-2 0/3 Pending 0 17s percona-xtradb-cluster-operator-6f77c6799f-skmx6 1/1 Running 0 5m37s |
у меня не хватило железки на запуск 3ей реплики.
проверяем как завелось:
[root@kub-master-1 percona-xtradb-cluster-operator]# kubectl run -i --rm --tty percona-client --image=percona:8.0 --restart=Never -- bash -il
подключаемся к базе:
[mysql@percona-client /]$ mysql -h cluster1-haproxy -uroot -proot_password
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 450 Server version: 8.0.21-12.1 Percona XtraDB Cluster (GPL), Release rel12, Revision 4d973e2, WSREP version 26.4.3 Copyright (c) 2009-2020 Percona LLC and/or its affiliates Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. |
создадим базу и глянем что есть:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mysql> create database test; Query OK, 1 row affected (0.36 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test | +--------------------+ 5 rows in set (0.01 sec) |
При удалении perconadb необходимо удалять в обратном порядке относительно установки:
kubectl delete -f cr.yaml -n pxc
kubectl delete -f secrets.yaml -n pxc
kubectl delete -f operator.yaml -n pxc
kubectl delete -f rbac.yaml -n pxc
kubectl delete -f crd.yaml -n pxc
kubectl delete ns pxc
Если при удалении namespace возникает ошибка, то необходимо проверить не осталось ли каких-то ресурсов в ns:
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n pxc
если пусто, то:
kubectl get namespace pxc -o json > pxc.json kubectl replace --raw "/api/v1/namespaces/pxc/finalize" -f ./pxc.json kubectl delete ns pxc
если остался ресурс perconaxtradbcluster.pxc.percona.com/cluster-mysql
то:
kubectl get crd | grep perconaxtradbclusters.pxc.percona.com perconaxtradbclusters.pxc.percona.com 2021-03-24T07:24:00Z
kubectl patch crd/perconaxtradbclusters.pxc.percona.com -p '{"metadata":{"finalizers":[]}}' --type=merge
После этого все должно удалиться автоматически.
При повторном запуске percona db (а именно statefulset cr.yaml) если созданные стейтфулсетом по новой pxc не видят существующие pv, то необходимо изменить значение поля claimed в pv:
kubectl patch pv percona-pv1 -p '{"spec":{"claimRef": null}}'
kubectl patch pv percona-pv2 -p '{"spec":{"claimRef": null}}'
kubectl patch pv percona-pv3 -p '{"spec":{"claimRef": null}}'
Очистка Memcache:
echo "flush_all" | nc localhost 11211
kubectl exec -it prod-mcrouter-memcached-2 sh