Ответ
В моей практике как DevOps-инженера работа с базами данных сосредоточена на обеспечении их доступности, производительности и жизненного цикла в инфраструктуре. Я настраивал и поддерживал высокодоступные кластеры PostgreSQL с потоковой репликацией и автоматическим переключением при сбое (failover) с использованием Patroni и etcd. Для горизонтального масштабирования (шардинга) применял Citus. Также есть опыт работы с MongoDB в виде StatefulSet в Kubernetes, настройки точек монтирования для Persistent Volumes и резервного копирования с помощью mongodump и облачных снапшотов.
Пример настройки автоматического failover в Patroni (конфиг YAML):
scope: postgres-cluster
name: node-1
restapi:
listen: 0.0.0.0:8008
connect_address: 10.0.1.1:8008
etcd:
hosts: "10.0.1.10:2379,10.0.1.11:2379,10.0.1.12:2379"
bootstrap:
dcs:
ttl: 30
loop_wait: 10
retry_timeout: 10
maximum_lag_on_failover: 1048576
initdb:
- encoding: UTF8
- locale: en_US.UTF-8
pg_hba:
- host replication replicator 10.0.0.0/8 md5
- host all all 0.0.0.0/0 md5
Для управления миграциями схемы использовал Flyway, интегрированный в CI/CD пайплайн. Мониторинг осуществлял через Prometheus (экспортеры postgres_exporter, mongodb_exporter) и алертинг в Grafana. Оптимизацию запросов и индексов проводил совместно с разработчиками, анализируя планы запросов (EXPLAIN ANALYZE).