Skip to content

Commit 0f24257

Browse files
authored
#1882 - Recovery and backup startegy patroni (#2057)
Recovery and backup startegy patroni
1 parent ed1d981 commit 0f24257

File tree

5 files changed

+73
-142
lines changed

5 files changed

+73
-142
lines changed

devops/Makefile

+52-108
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ export HOST_PREFIX := $(or $(HOST_PREFIX), $$HOST_PREFIX)
1313
export NEW_DB := $(or $(NEW_DB), $$NEW_DB)
1414
export JOB_NAME := $(or $(JOB_NAME), $$JN)
1515
export SITE_MINDER_LOGOUT_URL := $(or $(SITE_MINDER_LOGOUT_URL), https://logontest7.gov.bc.ca/clp-cgi/logoff.cgi)
16-
export BACKUP_POSTGRESQL_APP_NAME := $(or $(BACKUP_POSTGRESQL_APP_NAME), postgresql-backup)
17-
export BACKUP_MONGODB_APP_NAME := $(or $(BACKUP_MONGODB_APP_NAME), mongodb-backup)
18-
export BACKUP_CONFIGMAP_NAME := $(or $(BACKUP_CONFIGMAP_NAME), backup-conf)
16+
export PATRONI_SIMSDB_BACKUP_APP_NAME := $(or $(PATRONI_SIMSDB_BACKUP_APP_NAME), patroni-simsdb-backup)
17+
export PATRONI_SIMSDB_BACKUP_CONFIGMAP_NAME := $(or $(PATRONI_SIMSDB_BACKUP_CONFIGMAP_NAME), patroni-simsdb-backup-conf)
18+
export PATRONI_SIMSDB_BACKUP_CONFIG_FILE_NAME := $(or $(PATRONI_SIMSDB_BACKUP_CONFIG_FILE_NAME), patroni-simsdb-backup.conf)
1919
export BYPASS_CRA_INCOME_VERIFICATION := $(or $(BYPASS_CRA_INCOME_VERIFICATION), false)
2020
export BYPASS_APPLICATION_SUBMIT_VALIDATIONS := $(or $(BYPASS_APPLICATION_SUBMIT_VALIDATIONS), false)
2121
export SWAGGER_ENABLED := $(or ${SWAGGER_ENABLED}, true)
@@ -143,16 +143,15 @@ oc-build-forms: | print-status build-forms
143143
oc-deploy-ha-mongo: | print-status deploy-ha-mongo
144144
oc-deploy-forms: | print-status deploy-forms
145145

146-
# Create/delete backup structure
147-
# Create/delete config map shared accross postgresql and mongodb.
148-
oc-db-backup-configmap-init: | print-status db-backup-configmap
149-
oc-db-backup-configmap-delete: | print-status db-backup-configmap-delete
150-
# Create/delete structure for postgresql.
151-
oc-db-backup-init-postgresql: | print-status db-backup-build-postgresql db-backup-deploy-postgresql
152-
oc-db-backup-delete-postgresql: | print-status db-backup-build-delete-postgresql db-backup-deploy-delete-postgresql
153-
# Create/delete structure for mongodb.
154-
oc-db-backup-init-mongodb: | print-status db-backup-build-mongodb db-backup-deploy-mongodb
155-
oc-db-backup-delete-mongodb: | print-status db-backup-build-delete-mongodb db-backup-deploy-delete-mongodb
146+
# Build backup structure.
147+
oc-db-backup-patroni-simsdb-build: | print-status db-backup-build-patroni
148+
oc-db-backup-patroni-simsdb-build-delete: | print-status db-backup-build-patroni-delete
149+
150+
# Create/delete backup structure.
151+
# Create/delete structure for patroni.
152+
oc-db-backup-patroni-simsdb-deploy: | print-status db-backup-configmap db-backup-deploy-patroni
153+
oc-db-backup-patroni-simsdb-deploy-delete: | print-status db-backup-configmap-delete db-backup-deploy-patroni-delete
154+
156155

157156
print-status:
158157
@echo " +---------------------------------------------------------+ "
@@ -492,127 +491,72 @@ deploy-forms:
492491
$(call rollout_and_wait,dc/$(FORMS_NAME))
493492

494493
# Create database backup structure (build/configmap/deploy)
495-
496-
# Create the config map to be shared by POSTGRES and mongodb.
497-
db-backup-configmap:
498-
test -n "$(NAMESPACE)"
499-
test -n "$(BACKUP_POSTGRESQL_APP_NAME)"
500-
test -n "$(BACKUP_MONGODB_APP_NAME)"
501-
@echo "+\n++ Creating configmap resources for database backups on $(NAMESPACE)\n+"
502-
oc -n $(NAMESPACE) create configmap $(BACKUP_CONFIGMAP_NAME) --from-file=./openshift/database-backup/backup.conf
503-
504-
db-backup-configmap-delete:
505-
test -n "$(NAMESPACE)"
506-
@echo "+\n++ Removing configmap resoures for database backups on $(NAMESPACE)\n+"
507-
oc -n $(NAMESPACE) delete configmap/$(BACKUP_CONFIGMAP_NAME)
508-
509494
# Create the POSTGRES structure
510-
db-backup-build-postgresql:
495+
db-backup-build-patroni:
511496
test -n "$(BUILD_NAMESPACE)"
512-
test -n "$(BACKUP_POSTGRESQL_APP_NAME)"
497+
test -n "$(PATRONI_SIMSDB_BACKUP_APP_NAME)"
513498
@echo "+\n++ Creating build resources for database backups on $(BUILD_NAMESPACE)\n+"
514499
oc -n $(BUILD_NAMESPACE) process -f ./openshift/database-backup/backup-build.yaml \
515-
-p NAME=$(BACKUP_POSTGRESQL_APP_NAME) OUTPUT_IMAGE_TAG=v1 \
516-
-p BASE_IMAGE_FOR_BUILD=artifacts.developer.gov.bc.ca/docker-remote/centos/postgresql-12-centos7:20200917-804ef01 \
500+
-p NAME=$(PATRONI_SIMSDB_BACKUP_APP_NAME) OUTPUT_IMAGE_TAG=v1 \
501+
-p BASE_IMAGE_FOR_BUILD=quay.io/fedora/postgresql-14:14 \
517502
| oc -n $(BUILD_NAMESPACE) apply -f -
518503

519-
db-backup-build-delete-postgresql:
504+
db-backup-build-patroni-delete:
520505
test -n "$(NAMESPACE)"
521506
test -n "$(BUILD_NAMESPACE)"
522-
test -n "$(BACKUP_POSTGRESQL_APP_NAME)"
507+
test -n "$(PATRONI_SIMSDB_BACKUP_APP_NAME)"
523508
@echo "+\n++ Removing build resoures for database backups on $(NAMESPACE)\n+"
524-
oc -n $(BUILD_NAMESPACE) delete is/$(BACKUP_POSTGRESQL_APP_NAME) bc/$(BACKUP_POSTGRESQL_APP_NAME)
509+
oc -n $(BUILD_NAMESPACE) delete is/$(PATRONI_SIMSDB_BACKUP_APP_NAME) bc/$(PATRONI_SIMSDB_BACKUP_APP_NAME)
525510

526-
db-backup-deploy-postgresql:
527-
test -n "$(NAMESPACE)"
528-
test -n "$(BUILD_NAMESPACE)"
529-
test -n "$(BACKUP_POSTGRESQL_APP_NAME)"
530-
@echo "+\n++ Creating deploy config resoures for database backups on $(NAMESPACE)\n+"
531-
oc -n $(NAMESPACE) process -f ./openshift/database-backup/backup-deploy.yaml \
532-
-p NAME=$(BACKUP_POSTGRESQL_APP_NAME) \
533-
-p IMAGE_NAMESPACE=$(BUILD_NAMESPACE) \
534-
-p SOURCE_IMAGE_NAME=$(BACKUP_POSTGRESQL_APP_NAME) \
535-
-p TAG_NAME=v1 \
536-
-p FTP_SECRET_KEY=$(BACKUP_POSTGRESQL_APP_NAME)-ftp-secret \
537-
-p BACKUP_VOLUME_NAME=$(BACKUP_POSTGRESQL_APP_NAME)-pvc \
538-
-p BACKUP_VOLUME_SIZE=20Gi \
539-
-p VERIFICATION_VOLUME_SIZE=5Gi \
540-
-p ENVIRONMENT_NAME=$(NAMESPACE) \
541-
-p CONFIG_MAP_NAME=$(BACKUP_CONFIGMAP_NAME) \
542-
-p VERIFICATION_VOLUME_NAME=$(BACKUP_POSTGRESQL_APP_NAME)-verification-pvc \
543-
-p DATABASE_SERVER_NAME=PATRONI_MASTER \
544-
-p DATABASE_SECRET_NAME=patroni-creds \
545-
-p DATABASE_SECRET_USER_KEY_NAME=superuser-username \
546-
-p DATABASE_SECRET_PASSWORD_KEY_NAME=superuser-password \
547-
-p ENVIRONMENT_FRIENDLY_NAME='SIMS $(NAMESPACE) POSTGRESQL DB Backups' \
548-
| oc -n $(NAMESPACE) apply -f -
549-
550-
db-backup-deploy-delete-postgresql:
511+
# Create the config map to be shared by POSTGRES.
512+
db-backup-configmap:
551513
test -n "$(NAMESPACE)"
552-
test -n "$(BACKUP_POSTGRESQL_APP_NAME)"
553-
@echo "+\n++ Removing deploy resoures for database backups on $(NAMESPACE)\n+"
554-
oc -n $(NAMESPACE) delete \
555-
secret/$(BACKUP_POSTGRESQL_APP_NAME) \
556-
secret/$(BACKUP_POSTGRESQL_APP_NAME)-ftp-secret \
557-
dc/$(BACKUP_POSTGRESQL_APP_NAME) \
558-
networkpolicy/$(BACKUP_POSTGRESQL_APP_NAME)
559-
# The below PVCs are not deleted.
560-
# pvc/$(BACKUP_POSTGRESQL_APP_NAME)-pvc \
561-
# pvc/$(BACKUP_POSTGRESQL_APP_NAME)-verification-pvc \
562-
563-
# Create the MONGODB structure
564-
db-backup-build-mongodb:
565-
test -n "$(BUILD_NAMESPACE)"
566-
test -n "$(BACKUP_MONGODB_APP_NAME)"
567-
@echo "+\n++ Creating build resources for database backups on $(BUILD_NAMESPACE)\n+"
568-
oc -n $(BUILD_NAMESPACE) process -f ./openshift/database-backup/backup-build.yaml \
569-
-p NAME=$(BACKUP_MONGODB_APP_NAME) OUTPUT_IMAGE_TAG=v1 \
570-
-p BASE_IMAGE_FOR_BUILD=artifacts.developer.gov.bc.ca/redhat-docker-remote/rhscl/mongodb-36-rhel7 \
571-
| oc -n $(BUILD_NAMESPACE) apply -f -
514+
test -n "$(PATRONI_SIMSDB_BACKUP_APP_NAME)"
515+
@echo "+\n++ Creating configmap resources for database backups on $(NAMESPACE)\n+"
516+
oc -n $(NAMESPACE) create configmap $(PATRONI_SIMSDB_BACKUP_CONFIGMAP_NAME) --from-file=./openshift/database-backup/$(PATRONI_SIMSDB_BACKUP_CONFIG_FILE_NAME)
572517

573-
db-backup-build-delete-mongodb:
518+
db-backup-configmap-delete:
574519
test -n "$(NAMESPACE)"
575-
test -n "$(BUILD_NAMESPACE)"
576-
test -n "$(BACKUP_MONGODB_APP_NAME)"
577-
@echo "+\n++ Removing build resoures for database backups on $(NAMESPACE)\n+"
578-
oc -n $(BUILD_NAMESPACE) delete is/$(BACKUP_MONGODB_APP_NAME) bc/$(BACKUP_MONGODB_APP_NAME)
520+
@echo "+\n++ Removing configmap resoures for database backups on $(NAMESPACE)\n+"
521+
oc -n $(NAMESPACE) delete configmap/$(PATRONI_SIMSDB_BACKUP_CONFIGMAP_NAME)
579522

580-
db-backup-deploy-mongodb:
523+
# Deploy POSTGRES backup container.
524+
db-backup-deploy-patroni:
581525
test -n "$(NAMESPACE)"
582526
test -n "$(BUILD_NAMESPACE)"
583-
test -n "$(BACKUP_MONGODB_APP_NAME)"
527+
test -n "$(PATRONI_SIMSDB_BACKUP_APP_NAME)"
584528
@echo "+\n++ Creating deploy config resoures for database backups on $(NAMESPACE)\n+"
585529
oc -n $(NAMESPACE) process -f ./openshift/database-backup/backup-deploy.yaml \
586-
-p NAME=$(BACKUP_MONGODB_APP_NAME) \
530+
-p NAME=$(PATRONI_SIMSDB_BACKUP_APP_NAME) \
587531
-p IMAGE_NAMESPACE=$(BUILD_NAMESPACE) \
588-
-p SOURCE_IMAGE_NAME=$(BACKUP_MONGODB_APP_NAME) \
532+
-p SOURCE_IMAGE_NAME=$(PATRONI_SIMSDB_BACKUP_APP_NAME) \
589533
-p TAG_NAME=v1 \
590-
-p FTP_SECRET_KEY=$(BACKUP_MONGODB_APP_NAME)-ftp-secret \
591-
-p BACKUP_VOLUME_NAME=$(BACKUP_MONGODB_APP_NAME)-pvc \
592-
-p BACKUP_VOLUME_SIZE=5Gi \
593-
-p VERIFICATION_VOLUME_SIZE=1Gi \
534+
-p FTP_SECRET_KEY=$(PATRONI_SIMSDB_BACKUP_APP_NAME)-ftp-secret \
535+
-p BACKUP_VOLUME_NAME=$(PATRONI_SIMSDB_BACKUP_APP_NAME)-pvc \
536+
-p BACKUP_VOLUME_SIZE=20Gi \
537+
-p VERIFICATION_VOLUME_SIZE=5Gi \
594538
-p ENVIRONMENT_NAME=$(NAMESPACE) \
595-
-p CONFIG_MAP_NAME=$(BACKUP_CONFIGMAP_NAME) \
596-
-p VERIFICATION_VOLUME_NAME=$(BACKUP_MONGODB_APP_NAME)-verification-pvc \
597-
-p DATABASE_SERVER_NAME=MONGO \
598-
-p DATABASE_SECRET_NAME=mongodb-creds \
599-
-p DATABASE_SECRET_USER_KEY_NAME=username \
600-
-p DATABASE_SECRET_PASSWORD_KEY_NAME=password \
601-
-p ENVIRONMENT_FRIENDLY_NAME='SIMS $(NAMESPACE) MONGO DB Backups' \
602-
| oc -n $(NAMESPACE) apply -f -
539+
-p CONFIG_MAP_NAME=$(PATRONI_SIMSDB_BACKUP_CONFIGMAP_NAME) \
540+
-p CUSTOM_CONFIG_FILE_NAME=$(PATRONI_SIMSDB_BACKUP_CONFIG_FILE_NAME) \
541+
-p VERIFICATION_VOLUME_NAME=$(PATRONI_SIMSDB_BACKUP_APP_NAME)-verification-pvc \
542+
-p DATABASE_DEPLOYMENT_NAME=patroni-creds \
543+
-p DATABASE_USER_KEY_NAME=superuser-username \
544+
-p DATABASE_PASSWORD_KEY_NAME=superuser-password \
545+
-p ENVIRONMENT_FRIENDLY_NAME='SIMS $(NAMESPACE) POSTGRESQL DB Backups' \
546+
| oc -n $(NAMESPACE) apply -f -
603547

604-
db-backup-deploy-delete-mongodb:
548+
db-backup-deploy-patroni-delete:
605549
test -n "$(NAMESPACE)"
606-
test -n "$(BACKUP_MONGODB_APP_NAME)"
550+
test -n "$(PATRONI_SIMSDB_BACKUP_APP_NAME)"
607551
@echo "+\n++ Removing deploy resoures for database backups on $(NAMESPACE)\n+"
608552
oc -n $(NAMESPACE) delete \
609-
secret/$(BACKUP_MONGODB_APP_NAME) \
610-
secret/$(BACKUP_MONGODB_APP_NAME)-ftp-secret \
611-
dc/$(BACKUP_MONGODB_APP_NAME) \
612-
networkpolicy/$(BACKUP_MONGODB_APP_NAME)
553+
secret/$(PATRONI_SIMSDB_BACKUP_APP_NAME) \
554+
secret/$(PATRONI_SIMSDB_BACKUP_APP_NAME)-ftp-secret \
555+
dc/$(PATRONI_SIMSDB_BACKUP_APP_NAME) \
556+
networkpolicy/$(PATRONI_SIMSDB_BACKUP_APP_NAME)
613557
# The below PVCs are not deleted.
614-
# pvc/$(BACKUP_MONGODB_APP_NAME)-pvc
615-
# pvc/$(BACKUP_MONGODB_APP_NAME)-verification-pvc
558+
# pvc/$(PATRONI_SIMSDB_BACKUP_APP_NAME)-pvc \
559+
# pvc/$(PATRONI_SIMSDB_BACKUP_APP_NAME)-verification-pvc \
616560
617561
# Remove redis and resources including secrets from openshift namespace.
618562
delete-redis:

devops/openshift/database-backup/backup-build.yaml

+1-3
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ objects:
2828
strategy:
2929
type: Docker
3030
dockerStrategy:
31-
pullSecret:
32-
name: artifactory-secret-credential
3331
from:
3432
kind: DockerImage
3533
name: ${BASE_IMAGE_FOR_BUILD}
@@ -73,4 +71,4 @@ parameters:
7371
displayName: FROM Image Tag
7472
description: Base image to build from. Docker creds or Artificatory setup may be needed to alleviate docker rate-limiting
7573
required: true
76-
value: artifacts.developer.gov.bc.ca/docker-remote/centos/postgresql-12-centos7:20200917-804ef01
74+
value: docker.io/centos/postgresql-12-centos7:20200917-804ef01

devops/openshift/database-backup/backup-deploy.yaml

+16-22
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@ objects:
103103
app: ${APP_NAME}
104104
role: ${ROLE}
105105
env: ${TAG_NAME}
106-
app.kubernetes.io/part-of: ${GROUP_LABEL}
107106
spec:
108107
strategy:
109108
type: Recreate
@@ -141,7 +140,7 @@ objects:
141140
configMap:
142141
name: ${CONFIG_MAP_NAME}
143142
items:
144-
- key: ${CONFIG_FILE_NAME}
143+
- key: ${CUSTOM_CONFIG_FILE_NAME}
145144
path: ${CONFIG_FILE_NAME}
146145
containers:
147146
- name: ${NAME}
@@ -170,16 +169,16 @@ objects:
170169
value: ${MONGODB_AUTHENTICATION_DATABASE}
171170
- name: TABLE_SCHEMA
172171
value: ${TABLE_SCHEMA}
173-
- name: ${DATABASE_SERVER_NAME}_USER
172+
- name: DATABASE_USER
174173
valueFrom:
175174
secretKeyRef:
176-
name: ${DATABASE_SECRET_NAME}
177-
key: ${DATABASE_SECRET_USER_KEY_NAME}
178-
- name: ${DATABASE_SERVER_NAME}_PASSWORD
175+
name: ${DATABASE_DEPLOYMENT_NAME}
176+
key: ${DATABASE_USER_KEY_NAME}
177+
- name: DATABASE_PASSWORD
179178
valueFrom:
180179
secretKeyRef:
181-
name: ${DATABASE_SECRET_NAME}
182-
key: ${DATABASE_SECRET_PASSWORD_KEY_NAME}
180+
name: ${DATABASE_DEPLOYMENT_NAME}
181+
key: ${DATABASE_PASSWORD_KEY_NAME}
183182
- name: FTP_URL
184183
valueFrom:
185184
secretKeyRef:
@@ -271,22 +270,17 @@ parameters:
271270
description: This is only required if you are backing up mongo database with a separate authentication database.
272271
required: false
273272
value: ""
274-
- name: DATABASE_SECRET_NAME
273+
- name: DATABASE_DEPLOYMENT_NAME
275274
displayName: Database Deployment Name
276275
description: The name associated to the database deployment resources. In particular, this is used to wire up the credentials associated to the database.
277276
required: true
278277
value: postgresql
279-
- name: DATABASE_SERVER_NAME
280-
displayName: Database server name
281-
description: Database server name all uppercase. Should be the same server name from backup.conf file (e.g. PATRONI_MASTER).
282-
required: true
283-
value: SERVER_NAME
284-
- name: DATABASE_SECRET_USER_KEY_NAME
278+
- name: DATABASE_USER_KEY_NAME
285279
displayName: Database User Key Name
286280
description: The database user key name stored in database deployment resources specified by DATABASE_DEPLOYMENT_NAME.
287281
required: true
288282
value: database-user
289-
- name: DATABASE_SECRET_PASSWORD_KEY_NAME
283+
- name: DATABASE_PASSWORD_KEY_NAME
290284
displayName: Database Password Key Name
291285
description: The database password key name stored in database deployment resources specified by DATABASE_DEPLOYMENT_NAME.
292286
required: true
@@ -380,6 +374,11 @@ parameters:
380374
description: Used for backward compatibility only. Ignored when using the recommended `backup.conf` and cron backup strategy. Period (d,m,s) between backups in a format used by the sleep command
381375
required: false
382376
value: ""
377+
- name: CUSTOM_CONFIG_FILE_NAME
378+
displayName: Custom Config File Name
379+
description: The name of the custom configuration file.
380+
required: true
381+
value: backup.conf
383382
- name: CONFIG_FILE_NAME
384383
displayName: Config File Name
385384
description: The name of the configuration file.
@@ -449,9 +448,4 @@ parameters:
449448
displayName: Resources Memory Limit
450449
description: The resources Memory limit (in Mi, Gi, etc) for this build.
451450
required: true
452-
value: 0Mi
453-
- name: GROUP_LABEL
454-
displayName: Group label
455-
description: Group label for backup structure.
456-
required: true
457-
value: backups
451+
value: 0Mi

devops/openshift/database-backup/backup.conf

-9
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
postgres=patroni-master:5432/SIMSDB
2+
3+
# Run a backup at 1am Pacific every day.
4+
0 1 * * * default ./backup.sh -s

0 commit comments

Comments
 (0)