SlideShare a Scribd company logo
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
История 
небольшого успеха 
с PostgreSQL 
Владимир Бородин 
Системный администратор
3 
Коротко 
• Про сборщики 
• Масштабирование 
• Отказоустойчивость 
• Мониторинг 
• Проблемы 
• Итоги
Про сборщики
5 Что это?
6 
Как это было? 
• Все метаданные в oracle 
• Шардирование по пользователям на 
стороне другого сервиса 
• Все запросы только в мастер 
• Сборщик работает с чанком из 1000 
заданий 
• Чанки распределяются между сборщиками с 
помощью хранимой логики в базе
7 
Почему сборщики? 
• Легко отчуждаемы 
– Нет взаимосвязей с другими данными в 
oracle 
• Наименее критичный по SLA сервис 
– Имеет право не работать единицы минут 
• Ощутимые объём данных и нагрузка 
– 2+ ТБ данных и ~40k rps
Масштабирование
9 Общая схема
10 
PLProxy 
• Положительный опыт у ребят из Skype 
• Нет необходимости в костылях для 
шардирования в другом сервисе 
• Больший контроль в руках DBA 
• Более простой вариант смены СУБД для 
приложения 
– Шардирование и отказоустойчивость 
– Хранимая логика в базе
11 
PLProxy 
• Шардирование по диапазонам ключей 
• Ключи из sequence'ов, которые на конечных 
базах разные 
• При добавлении нового шарда мастер 
конечной базы: 
– через FDW заносит информацию на 
pgmeta 
– меняет sequence'ы 
• Эта информация доезжает до всех plproxy- 
машин
Отказоустойчивость 
• pgcheck 
• pgswitch 
• pgsync
13 
pgcheck 
• Назначает приоритеты машинам конечных 
баз в зависимости от: 
– Живости машины, 
– Её роли (мастер/реплика), 
– В случае реплик: 
• Удалённости (ЦОД), 
• (А)синхронности, 
• Нагрузки, 
• TODO: отставания. 
• Это меняет поведение функции 
plproxy.get_cluster_partitions
14 Деградация в read-only в случае потери мастера
15 
pgswitch 
• Скрипт для планового переключения 
мастера, запускаемый на реплике 
• Проверяет всё, что можно и нужно, на 
старом и новых мастерах 
• Переключает мастера и все реплики на 
нового мастера 
• В любой непонятной ситуации паникует
16 
pgsync 
• Живёт на конечных базах 
• Меняет репликацию с синхронной на 
асинхронную и обратно 
• Автоматическое переключение мастера без 
потери данных 
• Пока только в тестинге
Мониторинг
18 
Проверки 
pg-active-sessions | Количество активных сессий 
pg-connections | Количество свободных соединений 
pg-log-errors | Количество ошибок в журнале(-ах) за 
последнюю минуту 
pg-mounted-nfs | Смонтированность nfs-каталогов 
pg-ping | SELECT 1 в PostgreSQL 
pg-replication-alive | Количество живых реплик 
pg-replication-lag | Лаг реплики в байтах 
pg-vacuum | Время последнего vacuum/analyze для 
всех таблиц 
pg-xlog-files | Количество незаархивированных xlog'ов 
pgbouncer | TCP chat на порт 6432 на каждой 
машине 
yrpop-errors | Количество ошибок ymod_pq в yrpop.log
19 
Графики 
• Начинали с pg_stats_reporter 
• Сейчас ищем ему замену 
• И почти всё рисуем в graphite
20 Пример дашборда
Проблемы
22 
По первости 
• По привычке отрезали много памяти под 
shared_buffers 
• Много оптимизировали дисковую 
подсистему 
– raid'ы с файловыми системами 
– page cache 
– Checkpoints/autovacuum/bgwriter
23 
RUN ON ALL 
• Шардирование сделали по 
идентификаторам сборщика и чанка 
• Сборщики одного пользователи могут 
попадать в разные шарды 
• Запрос “покажи мне все сборщики 
конкретного пользователя” вынужден 
выполняться с RUN ON ALL 
• Начинали с 32 (!) логических шардов 
• Запрос оказался весьма частым 
• Наедались соединениями
24 
RUN ON ALL 
• Не стоит использовать для частых запросов 
• Сократили количество шардов с 32 до 4 
• Закэшировали результаты этого запроса в 
приложении
25 
Нам не хватает: 
• Интерфейс ожиданий и трассировка сессии 
• Возможность отдать под shared_buffers всю 
память и включить O_DIRECT 
• Нормальное партиционирование 
• Полусинхронная репликация 
• Параллелизм: 
– Восстановление реплики 
– pg_basebackup 
– Другие операции 
• Advisory locks с таймаутами
Итоги
27 
Итоги 
• 2+ ТБ данных (15+ млрд. строк) 
• 40000+ rps 
• ~ -1 oracle 
• ~ 6 месяцев 0,5 человека 
• Хорошее начало светлого пути: 
– Много полезного опыта для DBA 
– Много переиспользуемого кода для 
разработчиков 
– Положительное мнение о PostgreSQL у 
всех :)
Владимир Бородин 
Системный администратор 
d0uble@yandex-team.ru 
+7 495 739-70-00 (доб. 7255) 
119021, Москва, ул. Льва 
Толстого, 18Б 
Спасибо

More Related Content

PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
Профилирование кода на C/C++ в *nix системах
PDF
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
PDF
RootConf 2015
PDF
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
PDF
Консольные приложения на Go
PPTX
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
PDF
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Профилирование кода на C/C++ в *nix системах
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
RootConf 2015
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Консольные приложения на Go
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...

What's hot (20)

PPTX
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
PDF
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
PDF
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PDF
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
PDF
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
PDF
Twisted Framework - сетевые приложения в Python
PDF
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
PDF
Реализация восстановления после аварий / Сергей Бурладян (Avito)
PPTX
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
PPTX
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
PDF
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
PPTX
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
PDF
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
PDF
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
PPTX
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)
PDF
Механика DDoS (Александр Крижановский)
PDF
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
PPT
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
PDF
Современная операционная система: что надо знать разработчику / Александр Кри...
PPTX
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Twisted Framework - сетевые приложения в Python
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
«Секретные» технологии инвестиционных банков / Алексей Рагозин (Дойче Банк)
Механика DDoS (Александр Крижановский)
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Современная операционная система: что надо знать разработчику / Александр Кри...
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Ad

Viewers also liked (20)

PDF
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
ODP
PostgreSQL Moscow Meetup - September 2014 - Oleg Bartunov and Alexander Korotkov
DOCX
PDF
6d7263d5-4f34-412d-a961-2c254e8e445d-160416041943
PDF
Синие против красных
PDF
~20081006 Highload2008 Postgresql самохвалов
PDF
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
PDF
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
PPTX
PostgreSQL. Стильно. Модно. Молодёжно
PDF
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PDF
PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky
PPTX
Что такое Postgresql (Максим Богук)
PDF
Pgconfru 2015 kosmodemiansky
PDF
Полнотекстовый поиск в PostgreSQL за миллисекунды (Олег Бартунов, Александр К...
PDF
Владимир Бородин - PostgreSQL
PDF
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
PDF
Get to know PostgreSQL!
PPT
Postgres Presentation
PDF
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
PDF
Benchmarking PostgreSQL in Linux and FreeBSD
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
PostgreSQL Moscow Meetup - September 2014 - Oleg Bartunov and Alexander Korotkov
6d7263d5-4f34-412d-a961-2c254e8e445d-160416041943
Синие против красных
~20081006 Highload2008 Postgresql самохвалов
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
PostgreSQL. Стильно. Модно. Молодёжно
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PostgreSQL Moscow Meetup - September 2014 - Ilya Kosmodemyansky
Что такое Postgresql (Максим Богук)
Pgconfru 2015 kosmodemiansky
Полнотекстовый поиск в PostgreSQL за миллисекунды (Олег Бартунов, Александр К...
Владимир Бородин - PostgreSQL
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Get to know PostgreSQL!
Postgres Presentation
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
Benchmarking PostgreSQL in Linux and FreeBSD
Ad

Similar to 2014.09.24 история небольшого успеха с PostgreSQL (Yandex) (20)

PDF
История небольшого успеха с PostgreSQL
PDF
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
ODP
МойСклад, облачный сервис ERP
PDF
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
PDF
Перевод новостного приложения на БД PostgreSQL
PDF
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
PDF
PostgreSQL в высоконагруженных проектах
ODP
PDF
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
PDF
Максим Богук. Postgres-XC
PDF
Postgresql v509
PPT
Rybak Big Projects New
PDF
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
PDF
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
PPTX
pgconf.ru 2017
PDF
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
PDF
Hacking PostgreSQL. Обзор архитектуры.
PDF
Optimization of a big PostgreSQL database
PDF
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
PPTX
Диагностика postgresql для системного администратора
История небольшого успеха с PostgreSQL
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
МойСклад, облачный сервис ERP
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
Перевод новостного приложения на БД PostgreSQL
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
PostgreSQL в высоконагруженных проектах
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Максим Богук. Postgres-XC
Postgresql v509
Rybak Big Projects New
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
pgconf.ru 2017
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Hacking PostgreSQL. Обзор архитектуры.
Optimization of a big PostgreSQL database
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
Диагностика postgresql для системного администратора

More from Nikolay Samokhvalov (20)

PDF
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
PDF
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
PDF
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
PDF
Nancy CLI. Automated Database Experiments
PDF
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
PDF
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
PDF
Database First! О распространённых ошибках использования РСУБД
PDF
2016.10.13 PostgreSQL in Russia
PDF
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
PDF
#noBackend, или Как выжить в эпоху толстеющих клиентов
PPTX
#PostgreSQLRussia в банке Тинькофф, доклад №1
PDF
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
PDF
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
PPTX
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
PDF
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
PDF
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
PPTX
2014.12.23 Александр Андреев, Parallels
PDF
2014.10.15 Сергей Бурладян, Avito.ru
PDF
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
PDF
2014.10.15 блиц-доклад PostgreSQL kNN search
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
Nancy CLI. Automated Database Experiments
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
Database First! О распространённых ошибках использования РСУБД
2016.10.13 PostgreSQL in Russia
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#noBackend, или Как выжить в эпоху толстеющих клиентов
#PostgreSQLRussia в банке Тинькофф, доклад №1
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Александр Андреев, Parallels
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 блиц-доклад PostgreSQL kNN search

2014.09.24 история небольшого успеха с PostgreSQL (Yandex)

  • 2. История небольшого успеха с PostgreSQL Владимир Бородин Системный администратор
  • 3. 3 Коротко • Про сборщики • Масштабирование • Отказоустойчивость • Мониторинг • Проблемы • Итоги
  • 6. 6 Как это было? • Все метаданные в oracle • Шардирование по пользователям на стороне другого сервиса • Все запросы только в мастер • Сборщик работает с чанком из 1000 заданий • Чанки распределяются между сборщиками с помощью хранимой логики в базе
  • 7. 7 Почему сборщики? • Легко отчуждаемы – Нет взаимосвязей с другими данными в oracle • Наименее критичный по SLA сервис – Имеет право не работать единицы минут • Ощутимые объём данных и нагрузка – 2+ ТБ данных и ~40k rps
  • 10. 10 PLProxy • Положительный опыт у ребят из Skype • Нет необходимости в костылях для шардирования в другом сервисе • Больший контроль в руках DBA • Более простой вариант смены СУБД для приложения – Шардирование и отказоустойчивость – Хранимая логика в базе
  • 11. 11 PLProxy • Шардирование по диапазонам ключей • Ключи из sequence'ов, которые на конечных базах разные • При добавлении нового шарда мастер конечной базы: – через FDW заносит информацию на pgmeta – меняет sequence'ы • Эта информация доезжает до всех plproxy- машин
  • 13. 13 pgcheck • Назначает приоритеты машинам конечных баз в зависимости от: – Живости машины, – Её роли (мастер/реплика), – В случае реплик: • Удалённости (ЦОД), • (А)синхронности, • Нагрузки, • TODO: отставания. • Это меняет поведение функции plproxy.get_cluster_partitions
  • 14. 14 Деградация в read-only в случае потери мастера
  • 15. 15 pgswitch • Скрипт для планового переключения мастера, запускаемый на реплике • Проверяет всё, что можно и нужно, на старом и новых мастерах • Переключает мастера и все реплики на нового мастера • В любой непонятной ситуации паникует
  • 16. 16 pgsync • Живёт на конечных базах • Меняет репликацию с синхронной на асинхронную и обратно • Автоматическое переключение мастера без потери данных • Пока только в тестинге
  • 18. 18 Проверки pg-active-sessions | Количество активных сессий pg-connections | Количество свободных соединений pg-log-errors | Количество ошибок в журнале(-ах) за последнюю минуту pg-mounted-nfs | Смонтированность nfs-каталогов pg-ping | SELECT 1 в PostgreSQL pg-replication-alive | Количество живых реплик pg-replication-lag | Лаг реплики в байтах pg-vacuum | Время последнего vacuum/analyze для всех таблиц pg-xlog-files | Количество незаархивированных xlog'ов pgbouncer | TCP chat на порт 6432 на каждой машине yrpop-errors | Количество ошибок ymod_pq в yrpop.log
  • 19. 19 Графики • Начинали с pg_stats_reporter • Сейчас ищем ему замену • И почти всё рисуем в graphite
  • 22. 22 По первости • По привычке отрезали много памяти под shared_buffers • Много оптимизировали дисковую подсистему – raid'ы с файловыми системами – page cache – Checkpoints/autovacuum/bgwriter
  • 23. 23 RUN ON ALL • Шардирование сделали по идентификаторам сборщика и чанка • Сборщики одного пользователи могут попадать в разные шарды • Запрос “покажи мне все сборщики конкретного пользователя” вынужден выполняться с RUN ON ALL • Начинали с 32 (!) логических шардов • Запрос оказался весьма частым • Наедались соединениями
  • 24. 24 RUN ON ALL • Не стоит использовать для частых запросов • Сократили количество шардов с 32 до 4 • Закэшировали результаты этого запроса в приложении
  • 25. 25 Нам не хватает: • Интерфейс ожиданий и трассировка сессии • Возможность отдать под shared_buffers всю память и включить O_DIRECT • Нормальное партиционирование • Полусинхронная репликация • Параллелизм: – Восстановление реплики – pg_basebackup – Другие операции • Advisory locks с таймаутами
  • 27. 27 Итоги • 2+ ТБ данных (15+ млрд. строк) • 40000+ rps • ~ -1 oracle • ~ 6 месяцев 0,5 человека • Хорошее начало светлого пути: – Много полезного опыта для DBA – Много переиспользуемого кода для разработчиков – Положительное мнение о PostgreSQL у всех :)
  • 28. Владимир Бородин Системный администратор d0uble@yandex-team.ru +7 495 739-70-00 (доб. 7255) 119021, Москва, ул. Льва Толстого, 18Б Спасибо