SlideShare a Scribd company logo
Новые
технологии
репликации в
PostgreSQL
Александр Алексеев
Коротко о себе
Для кого этот доклад
● Вы считаете, что репликация — это непостижимо сложно;
● Вы думаете, что масштабироваться можно только горизонтально;
● Вы никогда не настраивали физическую и/или логическую репликацию в
PostgreSQL;
● Вы не знаете, как настроить фейловер;
● Вы хотели бы узнать, что нового здесь появилось у PostgreSQL в
последнее время;
● Вы ищете идею для проекта =);
Чего в нем не будет
● Скучного пересказа документации на тему, что именно писать в
конфигах. То есть доклад, скорее, обзорный;
● Для заинтересованных в конце приводятся ссылки на дополнительные
материалы.
Небольшое отступление о железе
● В AWS инстанс x1.32xlarge (128 vCPU, 1952 Mb памяти, 2 x 1920 Mb SSD)
стоит 9603$ в месяц [1];
● SSD на 1 Тб стоит от ~20 000 рублей [2].
[1]: https://aws.amazon.com/ec2/pricing/on-demand/
[2]: Samsung MZ-75E1T0BW, https://market.yandex.ru/product/11929060
Репликация
Мастер
(Лидер)
Реплика
(Фоловер,
Слейв)
Зачем это нужно
● Распределение нагрузки
○ OLTP: на чтение ходим в реплики
○ OLAP: тяжелая аналитика на отдельной реплике
○ Снятие бэкапа с отдельной реплики
● Фейловер / High Availability
○ Бывает ручной и автоматический
● Отложенная репликация
● Не заменяет резервное копирование!
Потоковая (или физическая) репликация
● В сущности, заключается в передаче WAL по сети;
● Асинхронная
○ Быстро, но можно потерять данные;
● Синхронная
○ Медленнее (в рамках ДЦ не намного), но надежнее. Желательно иметь две реплики;
● Бывает еще каскадной (надо же было упомянуть об этом на каком-то
слайде).
Fun facts!
Потоковая репликация:
● Не работает между разными архитектурами;
● Не работает между разными версиями PostgreSQL [1].
[1] Согласно https://simply.name/ru/upgrading-postgres-to-9.4.html типичное
время даунтайма при обновлении версии составляет несколько минут.
Логическая репликация
● Начиная с PostgreSQL 10 — из коробки;
● Старые подходы: Slony, Londiste, pglogical;
○ Не рекомендуются, потому что медленные и/или плохо работают.
Зачем нужен еще один вид репликации?
● Репликация части данных, не всего подряд;
● Обновление без даунтайма;
● На реплике можно использовать временные таблицы, да и вообще
писать все что угодно, в т.ч. в реплицируемые таблицы;
● Одна реплика может тянуть данные с двух мастеров;
● В теории — можно изобразить multimaster;
● И другие сценарии, когда физическая репликация не подошла.
Fun facts!
● Схема таблиц на мастере и на реплике может различаться;
● Может отличаться порядок столбцов;
● Реплика может иметь дополнительные nullable-столбцы;
● НО мастер не может иметь больше столбцов, чем реплика, даже если в
этих столбцах всегда NULL.
Ограничения логической репликации
● Реплицируемые таблицы должны иметь primary key;
● DDL, TRUNCATE и sequences не реплицируются;
● Поддержка триггеров реализована не до конца [1].
[1]: https://postgr.es/m/20171009141341.GA16999@e733.localdomain
Logical decoding
$ pg_recvlogical --slot=myslot --dbname=eax --user=eax 
--create-slot --plugin=test_decoding
$ pg_recvlogical --slot=myslot --dbname=eax --user=eax --start -f -
BEGIN 560
COMMIT 560
BEGIN 561
table public.test: INSERT: k[text]:'aaa' v[text]:'bbb'
COMMIT 561
Logical decoding: JSON
● Есть больше одного стороннего расширения...
● … но на сегодня все сломаны на 10-ке [1][2] :(
[1]: https://github.com/eulerto/wal2json/issues/33
[2]: https://github.com/posix4e/jsoncdc/issues/77
Фейловер
● Ручной
○ Имеет смысл, когда серверов БД не много (~10 штук);
○ Кстати, сейчас не проблема купить машину с сотнями Гб памяти и несколькими Тб
места на диске;
● Автоматический
○ Может иметь смысл, когда вы приближаетесь к масштабам Google.
Решения для настройки автофейловера
● Физическая репликация
○ Своими велосипедами на Python ;)
○ Repmgr
○ Patroni
○ Stolon (нравится мне больше всего)
● Логическая репликация
○ Еще не написали :(
Stolon
Коротко о главном:
● Разрабатывается с 2015 года компанией Sorint.lab
● Написан на Go
● Полагается на Consul или etcd
● Умеет интегрироваться с Kubernetes
● Настраивается быстро и просто
● Корректно обрабатывает любые падения машин и нетсплиты
Stolon: как это работает?
Fun facts!
● Stolon направляет и чтение, и запись в мастер. Но есть воркэраунд [1];
● Использует Consul или etcd чисто как key-value, в частности, не знает
про поддержку Consul’ом DNS.
[1]: https://github.com/sorintlab/stolon/issues/132
Consul
Коротко о главном:
● Разрабатывается HashiCorp, подарившей миру Packer и Vagrant;
● Написан на языке Go, использует протокол Raft;
● Решение для service discovery, как ZooKeeper или etcd;
● Распределенное key-value хранилище с REST-интерфейсом;
● Имеет CAS, встроенный мониторинг, локи, подписки на обновления, …;
● Умеет отдавать информацию о сервисах по DNS;
● Тестируется Jepsen’ом [1].
[1]: https://www.consul.io/docs/internals/jepsen.html
Fun facts!
● У Consul есть красивый веб-интерфейс с информацией о
зарегистрированных сервисах;
● Поверх него (ровно как и поверх Cassandra или Couchbase) можно
довольно легко написать выбор лидера, используя подход под
названием leader lease [1].
[1]: http://eax.me/go-leader-election/
synchronous_commit
● synchronous_commit = off
○ Не ждем записи в WAL, можно потерять часть последних изменений
○ В отличие от fsync = off не приведет к неконсистентности базы
● synchronous_commit = on
○ Ждем подтверждения записи в WAL — свой и синхронной реплики
● synchronous_commit = remote_write
○ Аналогично on, но не дожидаемся fsync() на реплике
● synchronous_commit = local
○ Не ждем записи на реплике, пишем только локально
● synchronous_commit = remote_apply ( >= 9.6 )
○ Ждем, когда данные попадут в WAL реплики и применятся к данным
Fun fact!
● synchronous_commit можно менять не только в postgresql.conf, но и в
рамках сессии с помощью команды SET.
synchronous_standby_names
● synchronous_standby_names = ‘*’
○ Ждем подтверждения от одной любой реплики
● synchronous_standby_names = ANY 2(node1,node2,node3);
○ Коммит на кворум
○ Появилось в версии 10
● Другие варианты [1] не очень полезны.
[1]: https://www.postgresql.org/docs/current/static/runtime-config-replication.html
Что осталось за кадром
● Шардинг и решардинг
○ Реализуемы при помощи логической репликации и словаря на базе Consul;
● Распределенные транзакции
○ Percolator-like-транзакции достаточно просто реализуемы;
○ Дают snapshot isolation, возможна аномалия write skew;
○ Подойдет для большинства приложений, в частности Oracle только SI и предлагает;
○ Важно! Нужно использовать и при записи, и при чтении;
● Готовых решений нет, или я про них не знаю
● Если вам повезет, то никогда не придется всем этим заниматься
● Кое-какие подробности — http://eax.me/sharding/
Дополнительные материалы
● https://www.postgresql.org/docs/10/static/index.html
● https://www.consul.io/
● https://github.com/sorintlab/stolon/
● https://raft.github.io/
● https://jepsen.io/
● https://kubernetes.io/
● + есть статьи на http://eax.me/
Вопросы и ответы.
● a.alekseev@postgrespro.ru
● https://twitter.com/afiskon

More Related Content

What's hot (20)

Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Ontico
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
Ontico
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Ontico
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Ontico
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
Ontico
 
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Ontico
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Ontico
 
Benchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDBenchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSD
Alex Chistyakov
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Nikolay Samokhvalov
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
Ontico
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Ontico
 
Вячеслав Бахмутов
Вячеслав БахмутовВячеслав Бахмутов
Вячеслав Бахмутов
CodeFest
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Ontico
 
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Ontico
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
Andrey Smirnov
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
Ontico
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
Alex Chistyakov
 
Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"
Fwdays
 
RootConf 2015
RootConf 2015RootConf 2015
RootConf 2015
Evgeny Uskov
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Ontico
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
Ontico
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Ontico
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Ontico
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
Ontico
 
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Ontico
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Ontico
 
Benchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDBenchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSD
Alex Chistyakov
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Nikolay Samokhvalov
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
Ontico
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Ontico
 
Вячеслав Бахмутов
Вячеслав БахмутовВячеслав Бахмутов
Вячеслав Бахмутов
CodeFest
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Ontico
 
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Ontico
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
Andrey Smirnov
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
Ontico
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
Alex Chistyakov
 
Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"
Fwdays
 

Similar to Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgres Professional) (20)

Новые технологии репликации данных в PostgreSQL - Александр Алексеев
Новые технологии репликации данных в PostgreSQL - Александр АлексеевНовые технологии репликации данных в PostgreSQL - Александр Алексеев
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
Aleksander Alekseev
 
Перевод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQLПеревод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQL
Dmitry Kremer
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектах
Alexey Vasiliev
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Ontico
 
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо... PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
it-people
 
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Mail.ru Group
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
Nikolay Samokhvalov
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practice
Alexey Lesovsky
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
PostgreSQL-Consulting
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
Ontico
 
История небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинИстория небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир Бородин
Yandex
 
PostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноPostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. Молодёжно
Vladislav Bezverhiy
 
PostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationPostgreSQL Streaming Replication
PostgreSQL Streaming Replication
Alexey Lesovsky
 
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON
 
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
PavelKonotopov
 
Postgresql v509
Postgresql v509Postgresql v509
Postgresql v509
luis perez
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Ontico
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
Anastasia Lubennikova
 
Абак Пресс
Абак ПрессАбак Пресс
Абак Пресс
it-people
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
pgdayrussia
 
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
Новые технологии репликации данных в PostgreSQL - Александр АлексеевНовые технологии репликации данных в PostgreSQL - Александр Алексеев
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
Aleksander Alekseev
 
Перевод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQLПеревод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQL
Dmitry Kremer
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектах
Alexey Vasiliev
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Ontico
 
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо... PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
it-people
 
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Mail.ru Group
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
Nikolay Samokhvalov
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practice
Alexey Lesovsky
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
PostgreSQL-Consulting
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
Ontico
 
История небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинИстория небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир Бородин
Yandex
 
PostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноPostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. Молодёжно
Vladislav Bezverhiy
 
PostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationPostgreSQL Streaming Replication
PostgreSQL Streaming Replication
Alexey Lesovsky
 
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON
 
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
PavelKonotopov
 
Postgresql v509
Postgresql v509Postgresql v509
Postgresql v509
luis perez
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Ontico
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
Anastasia Lubennikova
 
Абак Пресс
Абак ПрессАбак Пресс
Абак Пресс
it-people
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
pgdayrussia
 
Ad

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Ontico
 
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Ontico
 
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Ontico
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Ontico
 
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Ontico
 
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Ontico
 
Ad

Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgres Professional)

  • 3. Для кого этот доклад ● Вы считаете, что репликация — это непостижимо сложно; ● Вы думаете, что масштабироваться можно только горизонтально; ● Вы никогда не настраивали физическую и/или логическую репликацию в PostgreSQL; ● Вы не знаете, как настроить фейловер; ● Вы хотели бы узнать, что нового здесь появилось у PostgreSQL в последнее время; ● Вы ищете идею для проекта =);
  • 4. Чего в нем не будет ● Скучного пересказа документации на тему, что именно писать в конфигах. То есть доклад, скорее, обзорный; ● Для заинтересованных в конце приводятся ссылки на дополнительные материалы.
  • 5. Небольшое отступление о железе ● В AWS инстанс x1.32xlarge (128 vCPU, 1952 Mb памяти, 2 x 1920 Mb SSD) стоит 9603$ в месяц [1]; ● SSD на 1 Тб стоит от ~20 000 рублей [2]. [1]: https://aws.amazon.com/ec2/pricing/on-demand/ [2]: Samsung MZ-75E1T0BW, https://market.yandex.ru/product/11929060
  • 7. Зачем это нужно ● Распределение нагрузки ○ OLTP: на чтение ходим в реплики ○ OLAP: тяжелая аналитика на отдельной реплике ○ Снятие бэкапа с отдельной реплики ● Фейловер / High Availability ○ Бывает ручной и автоматический ● Отложенная репликация ● Не заменяет резервное копирование!
  • 8. Потоковая (или физическая) репликация ● В сущности, заключается в передаче WAL по сети; ● Асинхронная ○ Быстро, но можно потерять данные; ● Синхронная ○ Медленнее (в рамках ДЦ не намного), но надежнее. Желательно иметь две реплики; ● Бывает еще каскадной (надо же было упомянуть об этом на каком-то слайде).
  • 9. Fun facts! Потоковая репликация: ● Не работает между разными архитектурами; ● Не работает между разными версиями PostgreSQL [1]. [1] Согласно https://simply.name/ru/upgrading-postgres-to-9.4.html типичное время даунтайма при обновлении версии составляет несколько минут.
  • 10. Логическая репликация ● Начиная с PostgreSQL 10 — из коробки; ● Старые подходы: Slony, Londiste, pglogical; ○ Не рекомендуются, потому что медленные и/или плохо работают.
  • 11. Зачем нужен еще один вид репликации? ● Репликация части данных, не всего подряд; ● Обновление без даунтайма; ● На реплике можно использовать временные таблицы, да и вообще писать все что угодно, в т.ч. в реплицируемые таблицы; ● Одна реплика может тянуть данные с двух мастеров; ● В теории — можно изобразить multimaster; ● И другие сценарии, когда физическая репликация не подошла.
  • 12. Fun facts! ● Схема таблиц на мастере и на реплике может различаться; ● Может отличаться порядок столбцов; ● Реплика может иметь дополнительные nullable-столбцы; ● НО мастер не может иметь больше столбцов, чем реплика, даже если в этих столбцах всегда NULL.
  • 13. Ограничения логической репликации ● Реплицируемые таблицы должны иметь primary key; ● DDL, TRUNCATE и sequences не реплицируются; ● Поддержка триггеров реализована не до конца [1]. [1]: https://postgr.es/m/[email protected]
  • 14. Logical decoding $ pg_recvlogical --slot=myslot --dbname=eax --user=eax --create-slot --plugin=test_decoding $ pg_recvlogical --slot=myslot --dbname=eax --user=eax --start -f - BEGIN 560 COMMIT 560 BEGIN 561 table public.test: INSERT: k[text]:'aaa' v[text]:'bbb' COMMIT 561
  • 15. Logical decoding: JSON ● Есть больше одного стороннего расширения... ● … но на сегодня все сломаны на 10-ке [1][2] :( [1]: https://github.com/eulerto/wal2json/issues/33 [2]: https://github.com/posix4e/jsoncdc/issues/77
  • 16. Фейловер ● Ручной ○ Имеет смысл, когда серверов БД не много (~10 штук); ○ Кстати, сейчас не проблема купить машину с сотнями Гб памяти и несколькими Тб места на диске; ● Автоматический ○ Может иметь смысл, когда вы приближаетесь к масштабам Google.
  • 17. Решения для настройки автофейловера ● Физическая репликация ○ Своими велосипедами на Python ;) ○ Repmgr ○ Patroni ○ Stolon (нравится мне больше всего) ● Логическая репликация ○ Еще не написали :(
  • 18. Stolon Коротко о главном: ● Разрабатывается с 2015 года компанией Sorint.lab ● Написан на Go ● Полагается на Consul или etcd ● Умеет интегрироваться с Kubernetes ● Настраивается быстро и просто ● Корректно обрабатывает любые падения машин и нетсплиты
  • 19. Stolon: как это работает?
  • 20. Fun facts! ● Stolon направляет и чтение, и запись в мастер. Но есть воркэраунд [1]; ● Использует Consul или etcd чисто как key-value, в частности, не знает про поддержку Consul’ом DNS. [1]: https://github.com/sorintlab/stolon/issues/132
  • 21. Consul Коротко о главном: ● Разрабатывается HashiCorp, подарившей миру Packer и Vagrant; ● Написан на языке Go, использует протокол Raft; ● Решение для service discovery, как ZooKeeper или etcd; ● Распределенное key-value хранилище с REST-интерфейсом; ● Имеет CAS, встроенный мониторинг, локи, подписки на обновления, …; ● Умеет отдавать информацию о сервисах по DNS; ● Тестируется Jepsen’ом [1]. [1]: https://www.consul.io/docs/internals/jepsen.html
  • 22. Fun facts! ● У Consul есть красивый веб-интерфейс с информацией о зарегистрированных сервисах; ● Поверх него (ровно как и поверх Cassandra или Couchbase) можно довольно легко написать выбор лидера, используя подход под названием leader lease [1]. [1]: http://eax.me/go-leader-election/
  • 23. synchronous_commit ● synchronous_commit = off ○ Не ждем записи в WAL, можно потерять часть последних изменений ○ В отличие от fsync = off не приведет к неконсистентности базы ● synchronous_commit = on ○ Ждем подтверждения записи в WAL — свой и синхронной реплики ● synchronous_commit = remote_write ○ Аналогично on, но не дожидаемся fsync() на реплике ● synchronous_commit = local ○ Не ждем записи на реплике, пишем только локально ● synchronous_commit = remote_apply ( >= 9.6 ) ○ Ждем, когда данные попадут в WAL реплики и применятся к данным
  • 24. Fun fact! ● synchronous_commit можно менять не только в postgresql.conf, но и в рамках сессии с помощью команды SET.
  • 25. synchronous_standby_names ● synchronous_standby_names = ‘*’ ○ Ждем подтверждения от одной любой реплики ● synchronous_standby_names = ANY 2(node1,node2,node3); ○ Коммит на кворум ○ Появилось в версии 10 ● Другие варианты [1] не очень полезны. [1]: https://www.postgresql.org/docs/current/static/runtime-config-replication.html
  • 26. Что осталось за кадром ● Шардинг и решардинг ○ Реализуемы при помощи логической репликации и словаря на базе Consul; ● Распределенные транзакции ○ Percolator-like-транзакции достаточно просто реализуемы; ○ Дают snapshot isolation, возможна аномалия write skew; ○ Подойдет для большинства приложений, в частности Oracle только SI и предлагает; ○ Важно! Нужно использовать и при записи, и при чтении; ● Готовых решений нет, или я про них не знаю ● Если вам повезет, то никогда не придется всем этим заниматься ● Кое-какие подробности — http://eax.me/sharding/
  • 27. Дополнительные материалы ● https://www.postgresql.org/docs/10/static/index.html ● https://www.consul.io/ ● https://github.com/sorintlab/stolon/ ● https://raft.github.io/ ● https://jepsen.io/ ● https://kubernetes.io/ ● + есть статьи на http://eax.me/
  • 28. Вопросы и ответы. ● [email protected] ● https://twitter.com/afiskon