2. データバックアップ・リストア¶
2.1. 目的¶
本書では、Exastroシステムで利用する永続データのバックアップとリストア手順について説明します。
パブリッククラウドの仕組みにより、データバックアップの仕組みが利用可能であればそちらを利用しても問題ありません。
2.2. 前提条件¶
本頁で紹介するバックアップ・リストア手順では、下記の前提条件を満たしている必要があります。
2.2.1. 条件¶
- 下記のコマンドが利用可能なこと
tar
kubectl
- 作業環境のサーバで充分なディスクの空き容量があること
2.2.2. 暗号化キーのバックアップ¶
Exastro システムのパスワードや認証情報といった機密情報はすべて暗号化されています。
必ず、下記で取得した暗号化キーをバックアップして、適切に保管してください。
危険
暗号化キーを紛失した場合、バックアップデータからシステムを復旧した際にデータの復号ができなくなります。
# Exastro IT Automation ENCRYPT_KEY
kubectl get secret ita-secret-ita-global -n exastro -o jsonpath='{.data.ENCRYPT_KEY}' | base64 -d
JnIoXzJtPic2MXFqRl1yI1chMj8hWzQrNypmVn41Pk8=
# Exastro Platform ENCRYPT_KEY
kubectl get secret platform-secret-pf-global -n exastro -o jsonpath='{.data.ENCRYPT_KEY}' | base64 -d
bHFZe2VEVVM2PmFeQDMqNG4oZT4lTlglLjJJekxBTHE=
2.3. 概要¶
バックアップ・リストア対象となるデータは下記の3つです。
- バックアップ・リストア対象
Exastro Platform のデータベース
Exastro IT Automation のデータベース
Exastro IT Automation の共有ファイル
これらのデータを kubectl コマンドを利用してバックアップ・リストアします。
作業の流れは、まず、ユーザからのデータの書き込みを制限するために、リバースプロキシを停止します。
次にバックヤード処理を停止し、データのバックアップを実施します。
最後に、作業前の数に Pod 数を戻します。
リストアの際の作業も同様の流れになります。
危険
本手順では、サービスの停止が発生します。
2.4. バックアップ¶
2.4.1. サービス停止¶
Pod 起動数の確認
作業前の Pod 起動数の確認をし、状態を記録します。RS_AE=`kubectl get deploy ita-by-ansible-execute -o jsonpath='{@.spec.replicas}{"\n"}' -n exastro` RS_ALRV=`kubectl get deploy ita-by-ansible-legacy-role-vars-listup -o jsonpath='{@.spec.replicas}{"\n"}' -n exastro` RS_ATS=`kubectl get deploy ita-by-ansible-towermaster-sync -o jsonpath='{@.spec.replicas}{"\n"}' -n exastro` RS_CS=`kubectl get deploy ita-by-conductor-synchronize -o jsonpath='{@.spec.replicas}{"\n"}' -n exastro` RS_MC=`kubectl get deploy ita-by-menu-create -o jsonpath='{@.spec.replicas}{"\n"}' -n exastro` RS_PA=`kubectl get deploy platform-auth -o jsonpath='{@.spec.replicas}{"\n"}' -n exastro`
リバースプロキシの停止
リバースプロキシ (platform-auth) の Pod 起動数を 0 に変更し、エンドユーザーからのアクセスを制限します。kubectl scale deployment platform-auth -n exastro --replicas=0
バックヤード処理の停止
バックヤード処理 (ita-by-***) の Pod 起動数を 0 に変更し、データベースの更新を停止します。kubectl scale deployment ita-by-ansible-execute -n exastro --replicas=0 kubectl scale deployment ita-by-ansible-legacy-role-vars-listup -n exastro --replicas=0 kubectl scale deployment ita-by-ansible-towermaster-sync -n exastro --replicas=0 kubectl scale deployment ita-by-conductor-synchronize -n exastro --replicas=0 kubectl scale deployment ita-by-menu-create -n exastro --replicas=0
Pod 起動数の確認
上記で停止した対象の Pod 数が 0 になっていることを確認kubectl get deployment -n exastro
NAME READY UP-TO-DATE AVAILABLE AGE mariadb 1/1 1 1 3h41m ita-web-server 1/1 1 1 3h41m platform-web 1/1 1 1 3h41m ita-api-admin 1/1 1 1 3h41m ita-api-organization 1/1 1 1 3h41m platform-api 1/1 1 1 3h41m keycloak 1/1 1 1 3h41m ita-by-menu-create 0/0 0 0 3h41m ita-by-ansible-execute 0/0 0 0 3h41m ita-by-ansible-legacy-role-vars-listup 0/0 0 0 3h41m ita-by-ansible-towermaster-sync 0/0 0 0 3h41m ita-by-conductor-synchronize 0/0 0 0 3h41m platform-auth 0/0 0 0 3h41m
2.4.2. バックアップ¶
Exastro システム内で、Exastro Platform と Exastro IT Automation でデータベースを共有するか、分離するかによって手順が異なります。
メンテナンス用コンテナの作成
バックアップ作業用コンテナの作成をします。1cat <<_EOF_ | kubectl apply -f - -n exastro 2apiVersion: v1 3kind: Pod 4metadata: 5 name: exastro-maintenance 6 namespace: exastro 7spec: 8 containers: 9 - command: 10 - sh 11 - -c 12 args: 13 - | 14 #!/bin/bash 15 sleep 3600 16 env: 17 - name: PF_DB_DATABASE 18 valueFrom: 19 configMapKeyRef: 20 key: DB_DATABASE 21 name: platform-params-pf-database 22 - name: PF_DB_HOST 23 valueFrom: 24 configMapKeyRef: 25 key: DB_HOST 26 name: platform-params-pf-database 27 - name: PF_DB_PORT 28 valueFrom: 29 configMapKeyRef: 30 key: DB_PORT 31 name: platform-params-pf-database 32 - name: PF_DB_ADMIN_PASSWORD 33 valueFrom: 34 secretKeyRef: 35 key: DB_ADMIN_PASSWORD 36 name: platform-secret-pf-database 37 - name: PF_DB_ADMIN_USER 38 valueFrom: 39 secretKeyRef: 40 key: DB_ADMIN_USER 41 name: platform-secret-pf-database 42 - name: ITA_DB_DATABASE 43 valueFrom: 44 configMapKeyRef: 45 key: DB_DATABASE 46 name: ita-params-ita-database 47 - name: ITA_DB_HOST 48 valueFrom: 49 configMapKeyRef: 50 key: DB_HOST 51 name: ita-params-ita-database 52 - name: ITA_DB_PORT 53 valueFrom: 54 configMapKeyRef: 55 key: DB_PORT 56 name: ita-params-ita-database 57 - name: ITA_STORAGEPATH 58 valueFrom: 59 configMapKeyRef: 60 key: STORAGEPATH 61 name: ita-params-ita-global 62 - name: ITA_DB_ADMIN_PASSWORD 63 valueFrom: 64 secretKeyRef: 65 key: DB_ADMIN_PASSWORD 66 name: ita-secret-ita-database 67 - name: ITA_DB_ADMIN_USER 68 valueFrom: 69 secretKeyRef: 70 key: DB_ADMIN_USER 71 name: ita-secret-ita-database 72 image: mariadb:10.9 73 imagePullPolicy: IfNotPresent 74 name: exastro-maintenance 75 resources: {} 76 securityContext: 77 allowPrivilegeEscalation: false 78 readOnlyRootFilesystem: false 79 runAsGroup: 1000 80 runAsNonRoot: true 81 runAsUser: 1000 82 volumeMounts: 83 - mountPath: /storage 84 name: volume-ita-backup-storage 85 volumes: 86 - name: volume-ita-backup-storage 87 persistentVolumeClaim: 88 claimName: pvc-ita-global 89 restartPolicy: Always 90 securityContext: {} 91 serviceAccount: default 92 serviceAccountName: default 93_EOF_
データベースのバックアップ取得
データベースに対して mysqldump バックアップを取得します。Exastro Platform と Exastro IT Automation でデータベースサーバを共有するか、分離するかによって手順が異なります。kubectl exec -it exastro-maintenance -n exastro -- sh -c 'mysqldump -h ${PF_DB_HOST} -P ${PF_DB_PORT} -u ${PF_DB_ADMIN_USER} -p${PF_DB_ADMIN_PASSWORD} --all-databases --add-drop-table' | gzip > exastro_mysqldump_platform_db_`date +"%Y%m%d-%H%M%S"`.sql.gz
kubectl exec -it exastro-maintenance -n exastro -- sh -c 'mysqldump -h ${PF_DB_HOST} -P ${PF_DB_PORT} -u ${PF_DB_ADMIN_USER} -p${PF_DB_ADMIN_PASSWORD} --allow-keywords mysql' | gzip > exastro_mysqldump_platform_user_`date +"%Y%m%d-%H%M%S"`.sql.gz
kubectl exec -it exastro-maintenance -n exastro -- sh -c 'mysqldump -h ${PF_DB_HOST} -P ${PF_DB_PORT} -u ${PF_DB_ADMIN_USER} -p${PF_DB_ADMIN_PASSWORD} --all-databases --add-drop-table' | gzip > exastro_mysqldump_platform_db_`date +"%Y%m%d-%H%M%S"`.sql.gz
kubectl exec -it exastro-maintenance -n exastro -- sh -c 'mysqldump -h ${PF_DB_HOST} -P ${PF_DB_PORT} -u ${PF_DB_ADMIN_USER} -p${PF_DB_ADMIN_PASSWORD} --allow-keywords mysql' | gzip > exastro_mysqldump_platform_user_`date +"%Y%m%d-%H%M%S"`.sql.gz
kubectl exec -it exastro-maintenance -n exastro -- sh -c 'mysqldump -h ${ITA_DB_HOST} -P ${ITA_DB_PORT} -u ${ITA_DB_ADMIN_USER} -p${ITA_DB_ADMIN_PASSWORD} --all-databases --add-drop-table' | gzip > exastro_mysqldump_ita_db_`date +"%Y%m%d-%H%M%S"`.sql.gz
kubectl exec -it exastro-maintenance -n exastro -- sh -c 'mysqldump -h ${ITA_DB_HOST} -P ${ITA_DB_PORT} -u ${ITA_DB_ADMIN_USER} -p${ITA_DB_ADMIN_PASSWORD} --allow-keywords mysql' | gzip > exastro_mysqldump_ita_user_`date +"%Y%m%d-%H%M%S"`.sql.gz
ファイルのバックアップ取得
Exastro IT Automation のファイルのバックアップを取得します。kubectl exec -i exastro-maintenance -n exastro -- sh -c 'tar zcvf - ${ITA_STORAGEPATH}' > exastro_storage_backup_ita_`date +"%Y%m%d-%H%M%S"`.tar.gz
メンテナンス用コンテナの削除
バックアップ作業用コンテナの作成をします。kubectl delete pod exastro-maintenance -n exastro
2.4.3. サービス再開¶
サービス再開
サービス停止時に取得した各 Deployment の Pod 起動数を元に戻します。kubectl scale deployment ita-by-ansible-execute -n exastro --replicas=${RS_AE} kubectl scale deployment ita-by-ansible-legacy-role-vars-listup -n exastro --replicas=${RS_ALRV} kubectl scale deployment ita-by-ansible-towermaster-sync -n exastro --replicas=${RS_ATS} kubectl scale deployment ita-by-conductor-synchronize -n exastro --replicas=${RS_CS} kubectl scale deployment ita-by-menu-create -n exastro --replicas=${RS_MC} kubectl scale deployment platform-auth -n exastro --replicas=${RS_PA}
Pod 起動数の確認
上記で起動した対象の Pod 数が元に戻りすべて READY になっていることを確認kubectl get deployment -n exastro
NAME READY UP-TO-DATE AVAILABLE AGE mariadb 1/1 1 1 3h7m ita-web-server 1/1 1 1 3h7m platform-web 1/1 1 1 3h7m ita-api-admin 1/1 1 1 3h7m ita-api-organization 1/1 1 1 3h7m platform-api 1/1 1 1 3h7m keycloak 1/1 1 1 3h7m ita-by-ansible-legacy-role-vars-listup 1/1 1 1 3h7m ita-by-conductor-synchronize 1/1 1 1 3h7m ita-by-ansible-execute 1/1 1 1 3h7m ita-by-ansible-towermaster-sync 1/1 1 1 3h7m platform-auth 1/1 1 1 3h7m ita-by-menu-create 0/0 0 0 3h7m
2.5. リストア¶
2.5.1. サービス停止¶
Pod 起動数の確認
作業前の Pod 起動数の確認をし、状態を記録します。RS_AE=`kubectl get deploy ita-by-ansible-execute -o jsonpath='{@.spec.replicas}{"\n"}' -n exastro` RS_ALRV=`kubectl get deploy ita-by-ansible-legacy-role-vars-listup -o jsonpath='{@.spec.replicas}{"\n"}' -n exastro` RS_ATS=`kubectl get deploy ita-by-ansible-towermaster-sync -o jsonpath='{@.spec.replicas}{"\n"}' -n exastro` RS_CS=`kubectl get deploy ita-by-conductor-synchronize -o jsonpath='{@.spec.replicas}{"\n"}' -n exastro` RS_MC=`kubectl get deploy ita-by-menu-create -o jsonpath='{@.spec.replicas}{"\n"}' -n exastro` RS_PA=`kubectl get deploy platform-auth -o jsonpath='{@.spec.replicas}{"\n"}' -n exastro`
リバースプロキシの停止
リバースプロキシ (platform-auth) の Pod 起動数を 0 に変更し、エンドユーザーからのアクセスを制限します。kubectl scale deployment platform-auth -n exastro --replicas=0
バックヤード処理の停止
バックヤード処理 (ita-by-***) の Pod 起動数を 0 に変更し、データベースの更新を停止します。kubectl scale deployment ita-by-ansible-execute -n exastro --replicas=0 kubectl scale deployment ita-by-ansible-legacy-role-vars-listup -n exastro --replicas=0 kubectl scale deployment ita-by-ansible-towermaster-sync -n exastro --replicas=0 kubectl scale deployment ita-by-conductor-synchronize -n exastro --replicas=0 kubectl scale deployment ita-by-menu-create -n exastro --replicas=0
Pod 起動数の確認
上記で停止した対象の Pod 数が 0 になっていることを確認kubectl get deployment -n exastro
NAME READY UP-TO-DATE AVAILABLE AGE mariadb 1/1 1 1 3h41m ita-web-server 1/1 1 1 3h41m platform-web 1/1 1 1 3h41m ita-api-admin 1/1 1 1 3h41m ita-api-organization 1/1 1 1 3h41m platform-api 1/1 1 1 3h41m keycloak 1/1 1 1 3h41m ita-by-menu-create 0/0 0 0 3h41m ita-by-ansible-execute 0/0 0 0 3h41m ita-by-ansible-legacy-role-vars-listup 0/0 0 0 3h41m ita-by-ansible-towermaster-sync 0/0 0 0 3h41m ita-by-conductor-synchronize 0/0 0 0 3h41m platform-auth 0/0 0 0 3h41m
2.5.2. リストア¶
Exastro システム内で、Exastro Platform と Exastro IT Automation でデータベースを共有するか、分離するかによって手順が異なります。
メンテナンス用コンテナの作成
リストア作業用コンテナの作成をします。1cat <<_EOF_ | kubectl apply -f - -n exastro 2apiVersion: v1 3kind: Pod 4metadata: 5 name: exastro-maintenance 6 namespace: exastro 7spec: 8 containers: 9 - command: 10 - sh 11 - -c 12 args: 13 - | 14 #!/bin/bash 15 sleep 3600 16 env: 17 - name: PF_DB_DATABASE 18 valueFrom: 19 configMapKeyRef: 20 key: DB_DATABASE 21 name: platform-params-pf-database 22 - name: PF_DB_HOST 23 valueFrom: 24 configMapKeyRef: 25 key: DB_HOST 26 name: platform-params-pf-database 27 - name: PF_DB_PORT 28 valueFrom: 29 configMapKeyRef: 30 key: DB_PORT 31 name: platform-params-pf-database 32 - name: PF_DB_ADMIN_PASSWORD 33 valueFrom: 34 secretKeyRef: 35 key: DB_ADMIN_PASSWORD 36 name: platform-secret-pf-database 37 - name: PF_DB_ADMIN_USER 38 valueFrom: 39 secretKeyRef: 40 key: DB_ADMIN_USER 41 name: platform-secret-pf-database 42 - name: ITA_DB_DATABASE 43 valueFrom: 44 configMapKeyRef: 45 key: DB_DATABASE 46 name: ita-params-ita-database 47 - name: ITA_DB_HOST 48 valueFrom: 49 configMapKeyRef: 50 key: DB_HOST 51 name: ita-params-ita-database 52 - name: ITA_DB_PORT 53 valueFrom: 54 configMapKeyRef: 55 key: DB_PORT 56 name: ita-params-ita-database 57 - name: ITA_STORAGEPATH 58 valueFrom: 59 configMapKeyRef: 60 key: STORAGEPATH 61 name: ita-params-ita-global 62 - name: ITA_DB_ADMIN_PASSWORD 63 valueFrom: 64 secretKeyRef: 65 key: DB_ADMIN_PASSWORD 66 name: ita-secret-ita-database 67 - name: ITA_DB_ADMIN_USER 68 valueFrom: 69 secretKeyRef: 70 key: DB_ADMIN_USER 71 name: ita-secret-ita-database 72 image: mariadb:10.9 73 imagePullPolicy: IfNotPresent 74 name: exastro-maintenance 75 resources: {} 76 securityContext: 77 allowPrivilegeEscalation: false 78 readOnlyRootFilesystem: false 79 runAsGroup: 1000 80 runAsNonRoot: true 81 runAsUser: 1000 82 volumeMounts: 83 - mountPath: /storage 84 name: volume-ita-backup-storage 85 volumes: 86 - name: volume-ita-backup-storage 87 persistentVolumeClaim: 88 claimName: pvc-ita-global 89 restartPolicy: Always 90 securityContext: {} 91 serviceAccount: default 92 serviceAccountName: default 93_EOF_
データベースのリストア実施
データベースに対して mysqldump リストアを実施します。Exastro Platform と Exastro IT Automation でデータベースサーバを共有するか、分離するかによって手順が異なります。gzip -dc exastro_mysqldump_platform_user_YYYYMMDD-HHmmss.sql.gz | kubectl exec -i exastro-maintenance -n exastro -- sh -c 'mysql -h ${PF_DB_HOST} -P ${PF_DB_PORT} -u ${PF_DB_ADMIN_USER} -p${PF_DB_ADMIN_PASSWORD} mysql'
gzip -dc exastro_mysqldump_platform_db_YYYYMMDD-HHmmss.sql.gz | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/'| kubectl exec -i exastro-maintenance -n exastro -- sh -c 'mysql -h ${PF_DB_HOST} -P ${PF_DB_PORT} -u ${PF_DB_ADMIN_USER} -p${PF_DB_ADMIN_PASSWORD}'
gzip -dc exastro_mysqldump_platform_user_YYYYMMDD-HHmmss.sql.gz | kubectl exec -i exastro-maintenance -n exastro -- sh -c 'mysql -h ${PF_DB_HOST} -P ${PF_DB_PORT} -u ${PF_DB_ADMIN_USER} -p${PF_DB_ADMIN_PASSWORD} mysql'
gzip -dc exastro_mysqldump_platform_db_YYYYMMDD-HHmmss.sql.gz | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/'| kubectl exec -i exastro-maintenance -n exastro -- sh -c 'mysql -h ${PF_DB_HOST} -P ${PF_DB_PORT} -u ${PF_DB_ADMIN_USER} -p${PF_DB_ADMIN_PASSWORD}'
gzip -dc exastro_mysqldump_ita_user_YYYYMMDD-HHmmss.sql.gz | kubectl exec -i exastro-maintenance -n exastro -- sh -c 'mysql -h ${ITA_DB_HOST} -P ${ITA_DB_PORT} -u ${ITA_DB_ADMIN_USER} -p${ITA_DB_ADMIN_PASSWORD} mysql'
gzip -dc exastro_mysqldump_ita_db_YYYYMMDD-HHmmss.sql.gz | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/'| kubectl exec -i exastro-maintenance -n exastro -- sh -c 'mysql -h ${ITA_DB_HOST} -P ${ITA_DB_PORT} -u ${ITA_DB_ADMIN_USER} -p${ITA_DB_ADMIN_PASSWORD}'
ファイルのリストア実施
Exastro IT Automation のファイルのバックアップを取得します。kubectl exec -i exastro-maintenance -n exastro -- sh -c 'tar zxvf - -C ${ITA_STORAGEPATH}' < exastro_storage_backup_ita_YYYYMMDD-HHmmss.tar.gz
メンテナンス用コンテナの削除
バックアップ作業用コンテナの作成をします。kubectl delete pod exastro-maintenance -n exastro
2.5.3. サービス再開¶
サービス再開
サービス停止時に取得した各 Deployment の Pod 起動数を元に戻します。kubectl scale deployment ita-by-ansible-execute -n exastro --replicas=${RS_AE} kubectl scale deployment ita-by-ansible-legacy-role-vars-listup -n exastro --replicas=${RS_ALRV} kubectl scale deployment ita-by-ansible-towermaster-sync -n exastro --replicas=${RS_ATS} kubectl scale deployment ita-by-conductor-synchronize -n exastro --replicas=${RS_CS} kubectl scale deployment ita-by-menu-create -n exastro --replicas=${RS_MC} kubectl scale deployment platform-auth -n exastro --replicas=${RS_PA}
Pod 起動数の確認
上記で起動した対象の Pod 数が元に戻りすべて READY になっていることを確認kubectl get deployment -n exastro
NAME READY UP-TO-DATE AVAILABLE AGE mariadb 1/1 1 1 3h7m ita-web-server 1/1 1 1 3h7m platform-web 1/1 1 1 3h7m ita-api-admin 1/1 1 1 3h7m ita-api-organization 1/1 1 1 3h7m platform-api 1/1 1 1 3h7m keycloak 1/1 1 1 3h7m ita-by-ansible-legacy-role-vars-listup 1/1 1 1 3h7m ita-by-conductor-synchronize 1/1 1 1 3h7m ita-by-ansible-execute 1/1 1 1 3h7m ita-by-ansible-towermaster-sync 1/1 1 1 3h7m platform-auth 1/1 1 1 3h7m ita-by-menu-create 0/0 0 0 3h7m
2.6. トラブルシューティング¶
2.6.1. リストア後に500エラーが発生する¶
事象
リストア作業実施後に画面にて、500エラーが発生する。
対処
全リソースを一度削除した後、再度 helm install コマンドによりインストールを実施してください。