Kubernetes - Резервное копирование и восстановление контейнерных баз данных PostgreSQL | SonarQube

Thank you for reading this post, don't forget to subscribe!

самое глав­ное - БАЗА В КОНТЕЙНЕРЕ - ЭТО ЗЛО !!!!!!!!!!!!!!  мне­ние моё не обя­за­тель­но правильное

Исполь­зо­ва­ние кон­тей­нер­ных баз дан­ных в Kubernetes быст­ро и удобно.

Но как мы смо­жем обес­пе­чить резерв­ное копи­ро­ва­ние и вос­ста­нов­ле­ние работы?

Давай­те рас­смот­рим это на моем люби­мом при­ме­ре за послед­нее вре­мя, Sonarqube.

Предпосылки

  • AKS рабо­та­ет с Sonarqube ( уста­нов­ка helm / sonarqube)
  • вы исполь­зу­е­те (по умол­ча­нию) кон­тей­нер­ную базу дан­ных PostgreSQL

Определите ваш под PostgreSQL

Вой­ди­те в систе­му от име­ни адми­ни­стра­то­ра и зай­ди­те в Administration -> System

Вой­ти в Kubernetes;

$ az login
$ az aks get-credentials --name my-aks-cluster --resource-group my-aks-rg
Отоб­ра­зи­те поды:

Мы видим, что xxxxxxx-sonarqube-infra-postgresql-6f58d97bdc-7twk7 соот­вет­ству­ет нашей стро­ке JDBC.

Создание резервной копии PSQL

Вооб­ще есть несколь­ко спо­со­бов, но про­ще все­го исполь­зо­вать ути­ли­ты, кото­рые, как мы зна­ем, суще­ству­ют в поде базы данных.

Мы так­же можем сдам­пить все (хотя нам дей­стви­тель­но нуж­на толь­ко база дан­ных sonarDB – sonar не созда­ет допол­ни­тель­ных поль­зо­ва­те­лей базы данных)
# pg_dumpall -f /tmp/dball.out
# ls -lh /tmp/db*
-rw-r--r-- 1 root root 4.8M Mar 20 12:16 /tmp/dball.out
-rw-r--r-- 1 root root 4.8M Mar 20 12:15 /tmp/db.out
ПРИМЕЧАНИЕ. Базе дан­ных Azure для PostgreSQL потре­бу­ет­ся сжа­тая вер­сия (полез­но при пере­хо­де на пред­ло­же­ние PaaS)
$ pg_dump -Fc -v --dbname=sonarDB > /tmp/114-try2.dump

Вый­ди­те из поды и ско­пи­руй­те фай­лы локально:
$ kubectl cp xxxxxxx-sonarqube-infra-postgresql-6f58d97bdc-7twk7:/tmp/db.out ./92-db.out
$ kubectl cp xxxxxxx-sonarqube-infra-postgresql-6f58d97bdc-7twk7:/tmp/dball.out ./92-dball.out

На дан­ный момент у нас есть момен­таль­ное резерв­ное копи­ро­ва­ние кон­тей­нер­ной базы данных.

Про­вер­ка
Уда­ли­те под и восстановите.

Это долж­но сбро­сить базу дан­ных, и наш экзем­пляр дол­жен хра­нить­ся до наше­го восстановления …

Давай­те под­твер­дим, что мы можем вос­ста­но­вить­ся из бэкапа.

MUG тестирование

(malicious user group – я уве­рен, что есть дру­гие име­на для это­го типа тести­ро­ва­ния, но я захо­тел исполь­зо­вать этот термин)

Пло­хой админ уда­ля­ет проект

Восстановление базы данных контейнера

Сна­ча­ла мы копи­ру­ем резерв­ную копию в новую поду, а  затем мы долж­ны вой­ти в систе­му и уни­что­жить соеди­не­ния, что­бы мы мог­ли уда­лить и вос­ста­но­вить суще­ству­ю­щую базу данных.

Нако­нец, мы долж­ны сно­ва вклю­чить соеди­не­ния (ина­че Sonarqube не смо­жет ее использовать):

Теперь вы може­те поду­мать, что про­стой пере­за­пуск обрез­жет базу;

Но сер­вер кеши­ру­ет мно­го дан­ных для производительности.

Един­ствен­ный вер­ный спо­соб убе­дить­ся, что SonarQube извле­ка­ет све­жие дан­ные из базы дан­ных, – это убить саму поду SonarQube и обно­вить его:

Когда сер­вис под­ни­мет­ся, мы дей­стви­тель­но уви­дим, что уда­лен­ный про­ект был восстановлен:

Загруз­ка базы дан­ных Azure для PostgreSQL с дан­ны­ми из бэка­па контейнера.
Во-пер­вых, убе­ди­тесь, что резерв­ное копи­ро­ва­ние пода со сжа­ти­ем, если вы не про­ве­ри­ли ранее

pg_dump -Fc -v --dbname=sonarDB > /tmp/mydump.dump
Вы може­те исполь­зо­вать SSH в поде для вос­ста­нов­ле­ния (или сде­лать это локально).

Вам нуж­но при­ну­ди­тель­но уста­но­вить SSL, если это тре­бу­ет­ся вашей базе дан­ных Azure

$ export PGSSLMODE=require
$ pg_restore -v --no-owner --host=sonar.postgres.database.azure.com --port=5432 --username=sonar