Как организована работа с реляционными и нереляционными базами данных в DevOps-контексте?

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

Ответ

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

Реляционные БД (PostgreSQL, MySQL):

  • Provisioning как код: Создание инстансов RDS (AWS) или Cloud SQL (GCP) автоматизировано через Terraform. Это включает настройку параметров группы (instance type, storage), включение резервного копирования, репликации и мониторинга.

    resource "aws_db_instance" "postgres" {
      identifier     = "app-prod-db"
      engine         = "postgres"
      instance_class = "db.t3.large"
      allocated_storage = 100
      username       = var.db_master_user
      password       = var.db_master_password
      vpc_security_group_ids = [aws_security_group.rds.id]
      db_subnet_group_name   = aws_db_subnet_group.main.name
      backup_retention_period = 7
      publicly_accessible    = false
    }
  • Миграции схемы: Управление изменениями схемы БД (DDL) проводится через инструменты миграций (Liquibase, Flyway). Скрипты миграций хранятся в Git и применяются автоматически как часть пайплайна развертывания приложения.

  • Репликация и HA: Для production используется multi-AZ развертывание с автоматическим failover. Чтение можно масштабировать через read replicas.

  • Секреты: Учетные данные для доступа приложения к БД хранятся не в коде, а в специализированных системах (HashiCorp Vault, AWS Secrets Manager) и инжектируются в runtime как переменные окружения.

Нереляционные БД (Redis как кэш, MongoDB для документов):

  • Управляемые сервисы: Предпочтение отдается managed-сервисам (Amazon ElastiCache для Redis, Atlas для MongoDB), чтобы минимизировать операционные overhead.
  • Кэширование: Redis развернут в кластерном режиме (cluster mode enabled) для отказоустойчивости и разделения данных. Конфигурация кластера также описывается в Terraform.
  • Резервное копирование и восстановление: Настроены автоматические снепшоты с retention policy, соответствующий SLA приложения. Процедура восстановления документирована и по возможности автоматизирована.

Наблюдаемость для всех типов БД:

  • Метрики: Собираем ключевые метрики (CPU, memory, connections, query latency, cache hit ratio) через CloudWatch/Stackdriver или экспортеры в Prometheus.
  • Логи: Логи БД (slow query log, error log) перенаправляются в централизованную систему (ELK Stack или Loki) для анализа и алертинга.
  • Алерты: Настроены алерты на критические состояния: нехватка свободного места на диске, аномально высокое количество соединений, сбой репликации.