SlideShare a Scribd company logo
1 of 31
Download to read offline
Павел Конотопов - kakoka@gmail.com
Леонид Альбрехт - lalbrekht@gmail.com
DBA team
inCountry
хранение регулируемых данных в 62 странах мира
Идея
• Давайте создадим и
предоставим
глобальному бизнесу
инфраструктуру для
локального хранения
регулируемых данных
• Инфраструктура должна соответствовать
определенным требованиям
2
Данные
• Регулируемые законодательством данные
Персональные данные: возможность однозначно
идентифицировать человека
«… любая информация, относящаяся к прямо или косвенно
определенному или определяемому физическому лицу —
субъекту персональных данных…»
• Обработка персональных данных
совокупность действий, совершаемых с персональными данными, включая сбор, запись,
систематизацию, накопление, хранение, уточнение, изменение, извлечение, использование,
передачу, обезличивание, блокирование, удаление, уничтожение
3
Требования
• Хранить данные в странах их происхождения;
• Геораспределенная инфраструктура;
• Но при этом данные не могут пересекать границ страны происхождения;
• Соответствие промышленным стандартам безопасности: SOC, PCI DSS, HIPAA,
ISO…;
• Соответствие локальным законодательствам: ФЗ-152, GDPR,CCPA…
• Уметь интегрироваться в уже готовые системы
• Поддержка шифрования и
• Приемлемая скорость работы
• Дешево (мы стартап)
4
Продукты
•REST API
- не требует дополнительных усилий
- модифицирует данные внутри уже
существующего сервиса
•SDK
Java, PHP, Python, Node.js SDKs
Self-service
Client-side encryption
•Border proxy
5
Архитектура сервиса
Пользователь
Распределенное
приложение
REST API
InCountry
точки присутствия
Кластер БД в стране
присутствия
6
Точки присутствия
FLIGHT RECORD
GDPR
PROFILE
PAYMENT
TRANSACTION
Приложение
Your frontend web service uses
actual data in-country
Customer ID: 98765
First Name: John
Last Name: Smith
SS#: 123-45-6789
Phone: +1-415-555-1212
Your backend web
service uses redacted data
Customer ID: 98765
First Name: HashKey.fname
Last Name: HashKey.lname
SS#: HashKey.ss
Phone: HaskKey.phone
7
Инфраструктура
• Точки присутствия – 62 страны
• 30% Cloud
• 70% BARE-METAL
• Сразу забыть про K8s
• 2 дата центра в стране
• От 4 до 8 сервера на страну
• Централизованная
инфраструктура развертывания
• Централизованная
инфраструктура управления
• Безопасность
• Мониторинг
8
Инфраструктура
Nomad cluster
Consul cluster
Zabbix EFK Grafana
Jenkins
Regional HUB
EDGE
Application
Database
Backup
EDGE
Application
Database
Backup
Country of presence
DC1 DC2
Regional hub
9
Дешево-сердито vs Дорого-богато vs Голос разума
• А давайте возьмем Open Source и сделаем Enterprise
• Но есть проблема
OpenSource + DevOps = T x $$$
Limited OpenSource + Devops = $ + T x $
Non-OpenSource + DevOps = $$$ + T x $
+ =
10
Технологический стек
• Terraform/Packer/Ansible/AWX
• Consul – discovery service
• Nomad – планировщик
• Vault – хранилище секретов
• Docker – контейнеризация
• Jenkins – CI/CD
• Nginx
• PostgreSQL/Pgbouncer/Patroni
• Zabbix/ElasticSearch/Fluentd/Grafana/Kibana
• JumpCloud – LDAP
• Cisco VPN
• OpsGenie – тревоги и
предупреждение
• JFROG artifactory –
хранение docker образов
OpenSource Не OpenSource
11
● Георассредоточенность
● 2 дата центра в одной стране
● Высокая доступность
● Синхронная реплика
● Автоматический failover
● Защита от второго мастера в кластере. Fencing
12
Задачи для PostgreSQL
● PostgreSQL
● pgbounсer - пулер соединений
● Patroni - как механизм управления кластером
● HashiCorp Consul
● Хранит информацию о состоянии кластера
● Хранит текущую конфигурацию кластера
● Consul Templates
● HashiCorp Nomad
● Автоматически поднимает контейнеры при их падении
● HashiCorp Vault - хранение секретов: статические и динамические роли
13
Шестеренки
14
PostgreSQL: Деплой
Сервер БД
● PostgreSQL из коробки не имеет решения для автоматического фейловера
● Демон запущенный рядом с PostgreSQL
● Он взаимодействует с DCS
● Демон Patroni принимает решение о promotion/demotion
● Конфиг в виде YAML
● patronictl - удобный инструмент не только для DBA
15
PostgreSQL: Patroni
● Минусы
● Нельзя так просто взять и
остановить контейнер
● В некоторых “особенных” случаях
контейнер срубается в
неожиданном месте
16
● Плюсы
● Единое место для управления
контейнерами
● Декларативный подход
● Удобное выделение ресурсов
для контейнера
PostgreSQL: Nomad
update {
max_parallel = 1
min_healthy_time = "10s"
healthy_deadline = "3m"
progress_deadline = "10m"
auto_revert = false
canary = 0
}
…
resources {
cpu = ${NOMAD_RESOURCES_CPU}
memory = ${NOMAD_RESOURCES_MEM}
network {
mbits = 1
port "${NOMAD_POSTGRES_SERVICE_NAME}" {
static = “${NOMAD_POSTGRES_PORT}"
…
17
Nomad.TemplateFile
port_map {
${NOMAD_PATRONI_SERVICE_NAME} = “$
{NOMAD_PATRONI_PORT}"
}
port_map {
${NOMAD_POSTGRES_SERVICE_NAME} = “$
{NOMAD_POSTGRES_PORT}”
}
mounts = [
{
type = "bind"
source = "/etc/patroni/patroni.yml"
target =
"/home/postgres/.config/patroni/patroni.yml"
readonly = true
},
18
● Persistent Storage для файлов базы
● Облегчение образа с помощью мульти-стейдж сборки
● ~70-90 мб образ
● Как следствие ускорение доставки до региона
● Прекрасно живется, если не падает контейнер
● Практически никакого оверхеда
PostgreSQL: Docker
19
PostgreSQL: HashiCorp Vault
Vault
PostgreSQLUser/Application
● Хранит статические секреты
● Позволяет обслуживать статические роли
● Соблюдает политику обновления
паролей
● Может создавать динамические роли
● Такие роли создаются на заданное
время при запросе к Vault
● Обладают необходимыми правами
● Удаляются после истечения срока
жизни
1. GET Creds 2. CREATE ROLE
3. SEND Creds
4. Login
20
● Слоты включены по умолчанию. Но не
нужно забывать про wal_keep_segments
● Особенности синхронной репликации:
● Узкое место - сеть
● synchronous mode
● maximum_lag_on_failover: 1048576 (1M)
PostgreSQL: Репликация
21
● pg_probackup
● Валидация
● Логирование и мониторинг
● Индивидуальные политики хранения для клиентов
● Особенности двух DC:
● Двойной WAL архив
● Двойной бекап архив
PostgreSQL: Резервное копирование
22
PostgreSQL: Резервное копирование
DC1
DB Master
Backup
DC2
DB StandBy
Backup
WAL push
WAL
Archive
Backup
storage
WAL
Archive
Backup
storage
Backup Fetch
23
• По умолчанию реплика создается с помощью утилиты pg_basebackup
• Это поведение можно переопределить параметром ‘create_replica_methods’
postgresql:
create_replica_methods:
- probackup
- basebackup
probackup:
command: "ssh dbbackup@192.168.0.250 ‘bash /var/backup/pg_restore.sh'"
no_params: True
basebackup:
max-rate: '100M'
PostgreSQL: Резервное копирование
24
● Возможность восстановиться из бекапа на любую точку по:
● Времени
● Id транзакции (xid)
● LSN транзакционной записи в журнале
● Редкое явление при синхронной реплике, но подготовиться надо:
bootstrap:
method: probackup
probackup:
command: ssh dbbackup@backup 'bash /var/backup/pg_restore.sh'
keep_existing_recovery_conf: false
recovery_conf:
recovery_target_timeline: latest
restore_command: pg_probackup archive-get -B /var/backup --instance db-mt --remote-user=dbbackup --wal-file-path %p --
wal-file-name %f —remote-host=255.255.255.255
PostgreSQL: восстановление кластера
25
● Docker образ для минимального запуска
● Скрипт восстановления из бекапа
● Минимальный postgresql.conf для старта
● Проверяем успешность запуска
● docker exec pgvalid pg_dump -h localhost -U postgres > /dev/null
● Служебная таблица для сравнения данных до и после бекапа
● amcheck
● CREATE EXTENSION amcheck
● pg_probackup checkdb —amcheck —heapallindexed
● Логируем и мониторим каждое действие и его (не)успешность
PostgreSQL: Валидация
● Все что связано с Consul-ом:
● Сетевые проблемы в одном из DC
● Недоступен из обоих DC
● Проблемы с репликацией и HA. Частые переключения при перебоях в сети
● Неожиданный рестарт контейнера
Troubleshooting
Troubleshooting: Расстояния
27
Troubleshooting: Аудит
• Personally identifiable information в логах
• Pgaudit - не хватает
• Собственный API – хранимые процедуры
• Ограничение доступа
• Даем права только для тех, кому это необходимо
• Выбираем датацентры которые сертифицированы
(PCI DSS)
Команда проекта
• Architecture team
• Developer team
• DevOps
• CloudOps/DevOps
• SRE
• Monitoring Team
• DBA Team
• Security Team
• Application Security team
• QA and Performance testing team
• NOC, SOC
Всё. Осталось вкрутить лампочку.
29
Роль DBA
• Роль DBA
• Немного Архитектор
• Немного DevOps
• Немного SecOps
• Немного Monitoring
• Немного QA&Perf
• Немного Developer
• Linux Administrator
30
inCountry team

More Related Content

What's hot

Практика применения Pinba в Badoo / Денис Карасик (Badoo)
Практика применения Pinba в Badoo / Денис Карасик (Badoo)Практика применения Pinba в Badoo / Денис Карасик (Badoo)
Практика применения Pinba в Badoo / Денис Карасик (Badoo)
Ontico
 
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Ontico
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Ontico
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Ontico
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Ontico
 
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Tanya Denisyuk
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Ontico
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
Ontico
 

What's hot (20)

Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
 
Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...
Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...
Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
 
Практика применения Pinba в Badoo / Денис Карасик (Badoo)
Практика применения Pinba в Badoo / Денис Карасик (Badoo)Практика применения Pinba в Badoo / Денис Карасик (Badoo)
Практика применения Pinba в Badoo / Денис Карасик (Badoo)
 
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
 
pgday17. How shared memory works in modern PostgreSQL
pgday17. How shared memory works in modern PostgreSQLpgday17. How shared memory works in modern PostgreSQL
pgday17. How shared memory works in modern PostgreSQL
 
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
 
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
 
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
 

Similar to Building the Enterprise infrastructure with PostgreSQL as the basis for storing personal data

Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
Mikhail Davydov
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
Nikita Borzykh
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
PVasili
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
drupalconf
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
drupalconf
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
Serguei Gitinsky
 
Симаков Алексей - Системы управления кластерами
 Симаков Алексей - Системы управления кластерами   Симаков Алексей - Системы управления кластерами
Симаков Алексей - Системы управления кластерами
Yandex
 

Similar to Building the Enterprise infrastructure with PostgreSQL as the basis for storing personal data (20)

Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
 
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
 
Введение в Docker
Введение в DockerВведение в Docker
Введение в Docker
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
GRANIT — Global Russian Advanced Network Initiative
GRANIT — Global Russian Advanced Network InitiativeGRANIT — Global Russian Advanced Network Initiative
GRANIT — Global Russian Advanced Network Initiative
 
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
 
DevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектомDevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектом
 
Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015
 
Симаков Алексей - Системы управления кластерами
 Симаков Алексей - Системы управления кластерами   Симаков Алексей - Системы управления кластерами
Симаков Алексей - Системы управления кластерами
 

Building the Enterprise infrastructure with PostgreSQL as the basis for storing personal data

  • 1. Павел Конотопов - kakoka@gmail.com Леонид Альбрехт - lalbrekht@gmail.com DBA team inCountry хранение регулируемых данных в 62 странах мира
  • 2. Идея • Давайте создадим и предоставим глобальному бизнесу инфраструктуру для локального хранения регулируемых данных • Инфраструктура должна соответствовать определенным требованиям 2
  • 3. Данные • Регулируемые законодательством данные Персональные данные: возможность однозначно идентифицировать человека «… любая информация, относящаяся к прямо или косвенно определенному или определяемому физическому лицу — субъекту персональных данных…» • Обработка персональных данных совокупность действий, совершаемых с персональными данными, включая сбор, запись, систематизацию, накопление, хранение, уточнение, изменение, извлечение, использование, передачу, обезличивание, блокирование, удаление, уничтожение 3
  • 4. Требования • Хранить данные в странах их происхождения; • Геораспределенная инфраструктура; • Но при этом данные не могут пересекать границ страны происхождения; • Соответствие промышленным стандартам безопасности: SOC, PCI DSS, HIPAA, ISO…; • Соответствие локальным законодательствам: ФЗ-152, GDPR,CCPA… • Уметь интегрироваться в уже готовые системы • Поддержка шифрования и • Приемлемая скорость работы • Дешево (мы стартап) 4
  • 5. Продукты •REST API - не требует дополнительных усилий - модифицирует данные внутри уже существующего сервиса •SDK Java, PHP, Python, Node.js SDKs Self-service Client-side encryption •Border proxy 5
  • 7. Точки присутствия FLIGHT RECORD GDPR PROFILE PAYMENT TRANSACTION Приложение Your frontend web service uses actual data in-country Customer ID: 98765 First Name: John Last Name: Smith SS#: 123-45-6789 Phone: +1-415-555-1212 Your backend web service uses redacted data Customer ID: 98765 First Name: HashKey.fname Last Name: HashKey.lname SS#: HashKey.ss Phone: HaskKey.phone 7
  • 8. Инфраструктура • Точки присутствия – 62 страны • 30% Cloud • 70% BARE-METAL • Сразу забыть про K8s • 2 дата центра в стране • От 4 до 8 сервера на страну • Централизованная инфраструктура развертывания • Централизованная инфраструктура управления • Безопасность • Мониторинг 8
  • 9. Инфраструктура Nomad cluster Consul cluster Zabbix EFK Grafana Jenkins Regional HUB EDGE Application Database Backup EDGE Application Database Backup Country of presence DC1 DC2 Regional hub 9
  • 10. Дешево-сердито vs Дорого-богато vs Голос разума • А давайте возьмем Open Source и сделаем Enterprise • Но есть проблема OpenSource + DevOps = T x $$$ Limited OpenSource + Devops = $ + T x $ Non-OpenSource + DevOps = $$$ + T x $ + = 10
  • 11. Технологический стек • Terraform/Packer/Ansible/AWX • Consul – discovery service • Nomad – планировщик • Vault – хранилище секретов • Docker – контейнеризация • Jenkins – CI/CD • Nginx • PostgreSQL/Pgbouncer/Patroni • Zabbix/ElasticSearch/Fluentd/Grafana/Kibana • JumpCloud – LDAP • Cisco VPN • OpsGenie – тревоги и предупреждение • JFROG artifactory – хранение docker образов OpenSource Не OpenSource 11
  • 12. ● Георассредоточенность ● 2 дата центра в одной стране ● Высокая доступность ● Синхронная реплика ● Автоматический failover ● Защита от второго мастера в кластере. Fencing 12 Задачи для PostgreSQL
  • 13. ● PostgreSQL ● pgbounсer - пулер соединений ● Patroni - как механизм управления кластером ● HashiCorp Consul ● Хранит информацию о состоянии кластера ● Хранит текущую конфигурацию кластера ● Consul Templates ● HashiCorp Nomad ● Автоматически поднимает контейнеры при их падении ● HashiCorp Vault - хранение секретов: статические и динамические роли 13 Шестеренки
  • 15. ● PostgreSQL из коробки не имеет решения для автоматического фейловера ● Демон запущенный рядом с PostgreSQL ● Он взаимодействует с DCS ● Демон Patroni принимает решение о promotion/demotion ● Конфиг в виде YAML ● patronictl - удобный инструмент не только для DBA 15 PostgreSQL: Patroni
  • 16. ● Минусы ● Нельзя так просто взять и остановить контейнер ● В некоторых “особенных” случаях контейнер срубается в неожиданном месте 16 ● Плюсы ● Единое место для управления контейнерами ● Декларативный подход ● Удобное выделение ресурсов для контейнера PostgreSQL: Nomad
  • 17. update { max_parallel = 1 min_healthy_time = "10s" healthy_deadline = "3m" progress_deadline = "10m" auto_revert = false canary = 0 } … resources { cpu = ${NOMAD_RESOURCES_CPU} memory = ${NOMAD_RESOURCES_MEM} network { mbits = 1 port "${NOMAD_POSTGRES_SERVICE_NAME}" { static = “${NOMAD_POSTGRES_PORT}" … 17 Nomad.TemplateFile port_map { ${NOMAD_PATRONI_SERVICE_NAME} = “$ {NOMAD_PATRONI_PORT}" } port_map { ${NOMAD_POSTGRES_SERVICE_NAME} = “$ {NOMAD_POSTGRES_PORT}” } mounts = [ { type = "bind" source = "/etc/patroni/patroni.yml" target = "/home/postgres/.config/patroni/patroni.yml" readonly = true },
  • 18. 18 ● Persistent Storage для файлов базы ● Облегчение образа с помощью мульти-стейдж сборки ● ~70-90 мб образ ● Как следствие ускорение доставки до региона ● Прекрасно живется, если не падает контейнер ● Практически никакого оверхеда PostgreSQL: Docker
  • 19. 19 PostgreSQL: HashiCorp Vault Vault PostgreSQLUser/Application ● Хранит статические секреты ● Позволяет обслуживать статические роли ● Соблюдает политику обновления паролей ● Может создавать динамические роли ● Такие роли создаются на заданное время при запросе к Vault ● Обладают необходимыми правами ● Удаляются после истечения срока жизни 1. GET Creds 2. CREATE ROLE 3. SEND Creds 4. Login
  • 20. 20 ● Слоты включены по умолчанию. Но не нужно забывать про wal_keep_segments ● Особенности синхронной репликации: ● Узкое место - сеть ● synchronous mode ● maximum_lag_on_failover: 1048576 (1M) PostgreSQL: Репликация
  • 21. 21 ● pg_probackup ● Валидация ● Логирование и мониторинг ● Индивидуальные политики хранения для клиентов ● Особенности двух DC: ● Двойной WAL архив ● Двойной бекап архив PostgreSQL: Резервное копирование
  • 22. 22 PostgreSQL: Резервное копирование DC1 DB Master Backup DC2 DB StandBy Backup WAL push WAL Archive Backup storage WAL Archive Backup storage Backup Fetch
  • 23. 23 • По умолчанию реплика создается с помощью утилиты pg_basebackup • Это поведение можно переопределить параметром ‘create_replica_methods’ postgresql: create_replica_methods: - probackup - basebackup probackup: command: "ssh dbbackup@192.168.0.250 ‘bash /var/backup/pg_restore.sh'" no_params: True basebackup: max-rate: '100M' PostgreSQL: Резервное копирование
  • 24. 24 ● Возможность восстановиться из бекапа на любую точку по: ● Времени ● Id транзакции (xid) ● LSN транзакционной записи в журнале ● Редкое явление при синхронной реплике, но подготовиться надо: bootstrap: method: probackup probackup: command: ssh dbbackup@backup 'bash /var/backup/pg_restore.sh' keep_existing_recovery_conf: false recovery_conf: recovery_target_timeline: latest restore_command: pg_probackup archive-get -B /var/backup --instance db-mt --remote-user=dbbackup --wal-file-path %p -- wal-file-name %f —remote-host=255.255.255.255 PostgreSQL: восстановление кластера
  • 25. 25 ● Docker образ для минимального запуска ● Скрипт восстановления из бекапа ● Минимальный postgresql.conf для старта ● Проверяем успешность запуска ● docker exec pgvalid pg_dump -h localhost -U postgres > /dev/null ● Служебная таблица для сравнения данных до и после бекапа ● amcheck ● CREATE EXTENSION amcheck ● pg_probackup checkdb —amcheck —heapallindexed ● Логируем и мониторим каждое действие и его (не)успешность PostgreSQL: Валидация
  • 26. ● Все что связано с Consul-ом: ● Сетевые проблемы в одном из DC ● Недоступен из обоих DC ● Проблемы с репликацией и HA. Частые переключения при перебоях в сети ● Неожиданный рестарт контейнера Troubleshooting
  • 28. Troubleshooting: Аудит • Personally identifiable information в логах • Pgaudit - не хватает • Собственный API – хранимые процедуры • Ограничение доступа • Даем права только для тех, кому это необходимо • Выбираем датацентры которые сертифицированы (PCI DSS)
  • 29. Команда проекта • Architecture team • Developer team • DevOps • CloudOps/DevOps • SRE • Monitoring Team • DBA Team • Security Team • Application Security team • QA and Performance testing team • NOC, SOC Всё. Осталось вкрутить лампочку. 29
  • 30. Роль DBA • Роль DBA • Немного Архитектор • Немного DevOps • Немного SecOps • Немного Monitoring • Немного QA&Perf • Немного Developer • Linux Administrator 30