Pile de données
Récupération du cluster Galera
Une panne majeure du cluster Kubernetes ou une perturbation volontaire accidentelle peut entraîner une perte du quorum de Galera et un échec total du cluster.
Suivez l'étape suivante pour récupérer en réamorcant le cluster.
-
Exigence : Définir l'environnement de la station de travail :
export RELEASE=<release name>export CONFIG_REPO_BASEURL=https://raw.githubusercontent.com/actility/thingpark-enterprise-kubernetes/v$RELEASEeval $(curl $CONFIG_REPO_BASEURL/VERSIONS)# Set the deployment namespace as an environment variableexport NAMESPACE=thingpark-enterprise# Value in s,m,l,xl,xxlexport SEGMENT=l# Value azure,amazonexport HOSTING=azure
-
Vérifiez l'état du pod statefulset de Galera, il retournera des conditions d'échec :
kubectl get po -n $NAMESPACE -l app.kubernetes.io/name=mariadb-galera -o jsonpath='{.items[].status.containerStatuses[].ready}'$ kubectl get po -n $NAMESPACE -l app.kubernetes.io/name=mariadb-galera -o jsonpath='{.items[].status.containerStatuses[].state}'|jq{"waiting": {"message": "back-off 5m0s restarting failed container=mariadb-galera pod=tpe-mariadb-galera-0_thingpark-enterprise(6faab544-25fd-4e77-a6b9-185e058462dd)","reason": "CrashLoopBackOff"}} -
Arrêter le cluster en détruisant le statefulset et en arrêtant le proxy SQL
kubectl -n $NAMESPACE delete statefulsets.apps mariadb-galerakubectl -n $NAMESPACE scale deployment sql-proxy --replicas=0 -
Récupérez le contenu
grastate.datde chaque nœud en utilisant chaque nom de revendication de volumedata-mariadb-galera-0,data-mariadb-galera-1,data-mariadb-galera-2, par exemple :$ kubectl run --restart=Never -n $NAMESPACE -i --rm --tty volpod --overrides='{"apiVersion": "v1","kind": "Pod","metadata": {"name": "volpod"},"spec": {"containers": [{"command": ["cat","/mnt/data/grastate.dat"],"image": "bitnami/minideb","name": "mycontainer","volumeMounts": [{"mountPath": "/mnt","name": "galeradata"}]}],"restartPolicy": "Never","volumes": [{"name": "galeradata","persistentVolumeClaim": {"claimName": "data-mariadb-galera-0"}}]}}' --image="bitnami/minideb" -
En conséquence, vous obtenez l'état de chaque nœud, par exemple (cette situation reflète un arrêt incorrect du cluster (tous les safe_to_bootstrap égal à 0)) :
## Node 0# GALERA saved stateversion: 2.1uuid: f23062b8-3ed3-11eb-9979-0e1cb0f4f878seqno: 14safe_to_bootstrap: 0pod "volpod" deleted## Node 1# GALERA saved stateversion: 2.1uuid: f23062b8-3ed3-11eb-9979-0e1cb0f4f878seqno: 14safe_to_bootstrap: 0pod "volpod" deleted## Node 2# GALERA saved stateversion: 2.1uuid: f23062b8-3ed3-11eb-9979-0e1cb0f4f878seqno: 14safe_to_bootstrap: 0 -
Réamorcer le cluster :
-
Option 1 : Un nœud a un
safe_to_bootstrap: 1:# GALERA saved stateversion: 2.1uuid: f23062b8-3ed3-11eb-9979-0e1cb0f4f878seqno: 14safe_to_bootstrap: 1pod "volpod" deletedCe nœud devrait être utilisé pour réamorcer le cluster, par exemple avec le nœud 1 :
helm -n $NAMESPACE upgrade -i tpe-data actility/thingpark-data \--version $THINGPARK_DATA_VERSION --reuse-values \--set mariadb-galera.podManagementPolicy=Parallel \--set mariadb-galera.galera.bootstrap.forceBootstrap=true \--set mariadb-galera.galera.bootstrap.bootstrapFromNode=1 -
Option 2 : Tous les nœuds ont un
safe_to_bootstrap: 0:Le cluster doit être amorcé avec le nœud ayant le
seqnole plus élevé :helm -n $NAMESPACE upgrade -i tpe-data actility/thingpark-data \--version $THINGPARK_DATA_VERSION --reuse-values \--set mariadb-galera.podManagementPolicy=Parallel \--set mariadb-galera.galera.bootstrap.forceSafeToBootstrap=true \--set mariadb-galera.galera.bootstrap.forceBootstrap=true \--set mariadb-galera.galera.bootstrap.bootstrapFromNode=1
-
-
Attendez la fin de la récupération et réinitialisez les valeurs de version Helm de la manière suivante : en arrêtant le cluster Galera de cette manière :
# Wait until all pods became READYkubectl -n $NAMESPACE get statefulsets.apps mariadb-galera -w# Scale down gracefully mariadb galera cluster (wait until the end of pod deletion at each steps)kubectl -n $NAMESPACE scale statefulsets.apps mariadb-galera --replicas=2kubectl -n $NAMESPACE scale statefulsets.apps mariadb-galera --replicas=1# Delete stalefulsetkubectl -n $NAMESPACE delete statefulsets.apps mariadb-galera -
Et enfin, mettez à niveau la version tpe-data et redémarrez le déploiement du routeur SQL-proxy
helm upgrade -i tpe-data -n $NAMESPACE \actility/thingpark-data --version $THINGPARK_DATA_VERSION \-f $CONFIG_REPO_BASEURL/configs/$HOSTING/values-$SEGMENT-segment.yaml \-f custom-values.yamlkubectl scale -n $NAMESPACE deployment sql-proxy --replicas=2