Расскажи про свой опыт с базами данных

«Расскажи про свой опыт с базами данных» — вопрос из категории Базы данных, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В моей практике как 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).