SlideShare a Scribd company logo
История небольшого успеха с PostgreSQL – Владимир Бородин
История 
небольшого успеха 
с 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

What's hot (20)

PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Ontico
 
PDF
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Roman Pavlushko
 
PDF
Загрузка больших объемов данных для бизнес-аналитики
Badoo Development
 
PDF
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Badoo Development
 
PPTX
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Ontico
 
PDF
Near-realtime аналитика событий в высоконагруженном проекте
Alexandr Krasheninnikov
 
PPTX
Масштабирование баз данных. (Database Scalability)
Andrew Avdeev
 
PPTX
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Ontico
 
PDF
pgconf.ru 2015.avito postgresql recovery
Михаил Тюрин
 
PDF
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Ontico
 
PDF
Нагруженный поиск на Sphinx
Roman Pavlushko
 
PPTX
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Ontico
 
PDF
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Ontico
 
PDF
Советы для начинающих разработчиков PostgreSQL
Anastasia Lubennikova
 
PPTX
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
Ontico
 
PDF
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Ontico
 
PDF
Hacking PostgreSQL. Обзор архитектуры.
Anastasia Lubennikova
 
PPTX
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
Ontico
 
PDF
Обзор перспективных баз данных для highload / Юрий Насретдинов
Ontico
 
PDF
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Ontico
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Roman Pavlushko
 
Загрузка больших объемов данных для бизнес-аналитики
Badoo Development
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Badoo Development
 
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Ontico
 
Near-realtime аналитика событий в высоконагруженном проекте
Alexandr Krasheninnikov
 
Масштабирование баз данных. (Database Scalability)
Andrew Avdeev
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Ontico
 
pgconf.ru 2015.avito postgresql recovery
Михаил Тюрин
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Ontico
 
Нагруженный поиск на Sphinx
Roman Pavlushko
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Ontico
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Ontico
 
Советы для начинающих разработчиков PostgreSQL
Anastasia Lubennikova
 
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
Ontico
 
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Ontico
 
Hacking PostgreSQL. Обзор архитектуры.
Anastasia Lubennikova
 
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
Ontico
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Ontico
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Ontico
 

Similar to История небольшого успеха с PostgreSQL – Владимир Бородин (20)

PDF
История небольшого успеха с PostgreSQL
dev1ant
 
PDF
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
it-people
 
ODP
МойСклад, облачный сервис ERP
Oleg Alexeev
 
PDF
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
Alex Chistyakov
 
PDF
Перевод новостного приложения на БД PostgreSQL
Dmitry Kremer
 
PDF
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Mail.ru Group
 
ODP
Scaling PostgreSQL
Дмитрий Васильев
 
PDF
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Ontico
 
PDF
Максим Богук. Postgres-XC
PostgreSQL-Consulting
 
PPTX
Что такое Postgresql (Максим Богук)
Ontico
 
PDF
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
pgdayrussia
 
PDF
Postgresql v509
luis perez
 
PPT
Rybak Big Projects New
Ontico
 
PDF
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
PavelKonotopov
 
PDF
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
Ontico
 
PDF
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Ontico
 
PPTX
pgconf.ru 2017
Andy Fefelov
 
PDF
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
Ontico
 
PDF
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Ontico
 
PDF
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Mail.ru Group
 
История небольшого успеха с PostgreSQL
dev1ant
 
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
it-people
 
МойСклад, облачный сервис ERP
Oleg Alexeev
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
Alex Chistyakov
 
Перевод новостного приложения на БД PostgreSQL
Dmitry Kremer
 
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Mail.ru Group
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Ontico
 
Максим Богук. Postgres-XC
PostgreSQL-Consulting
 
Что такое Postgresql (Максим Богук)
Ontico
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
pgdayrussia
 
Postgresql v509
luis perez
 
Rybak Big Projects New
Ontico
 
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
PavelKonotopov
 
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
Ontico
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Ontico
 
pgconf.ru 2017
Andy Fefelov
 
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
Ontico
 
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Ontico
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Mail.ru Group
 
Ad

More from Yandex (20)

PDF
Предсказание оттока игроков из World of Tanks
Yandex
 
PDF
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Yandex
 
PDF
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Yandex
 
PDF
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Yandex
 
PDF
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Yandex
 
PDF
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Yandex
 
PDF
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Yandex
 
PDF
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Yandex
 
PDF
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Yandex
 
PDF
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Yandex
 
PDF
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Yandex
 
PDF
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Yandex
 
PDF
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Yandex
 
PDF
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Yandex
 
PDF
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Yandex
 
PDF
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Yandex
 
PDF
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Yandex
 
PDF
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Yandex
 
PDF
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Yandex
 
PDF
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Yandex
 
Предсказание оттока игроков из World of Tanks
Yandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Yandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Yandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Yandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Yandex
 
Ad

История небольшого успеха с PostgreSQL – Владимир Бородин

  • 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. Владимир Бородин Системный администратор [email protected] +7 495 739-70-00 (доб. 7255) 119021, Москва, ул. Льва Толстого, 18Б Спасибо