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

PDF
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PDF
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
PDF
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
PPTX
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
PDF
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
PDF
Константин Осипов
PDF
Профилирование кода на C/C++ в *nix системах
PDF
Олег Бартунов и Иван Панченко
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Константин Осипов
Профилирование кода на C/C++ в *nix системах
Олег Бартунов и Иван Панченко

What's hot (20)

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

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

PDF
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
PDF
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
PDF
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
PDF
ZFS - файловая система будущего
PPTX
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
PDF
Streaming replication in practice
PDF
My talk on Salt and Ansible from DevConf 2014
PDF
My talk on HBase ops engineering at TBD Jun 2016
PDF
HBase on Dev{Highload}
PDF
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
PPTX
Применяем Ansible
PDF
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
PDF
Разработка API для большого, нагруженного сервиса
PDF
Разработка API для большого, нагруженного сервиса
PDF
SaltStack vs Chef, HappyDev 2013
PDF
специализированные http-демона (Сергей Боченков, Александр Панков)
PDF
Павел Юрийчук - Разработка приложений под мобильные браузеры
PDF
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
PPTX
Что такое Postgresql (Максим Богук)
PDF
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
ZFS - файловая система будущего
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
Streaming replication in practice
My talk on Salt and Ansible from DevConf 2014
My talk on HBase ops engineering at TBD Jun 2016
HBase on Dev{Highload}
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
Применяем Ansible
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
SaltStack vs Chef, HappyDev 2013
специализированные http-демона (Сергей Боченков, Александр Панков)
Павел Юрийчук - Разработка приложений под мобильные браузеры
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Что такое Postgresql (Максим Богук)
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
Ad

More from Ontico (20)

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

Новые технологии репликации данных в 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/20171009141341.GA16999@e733.localdomain
  • 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. Вопросы и ответы. ● a.alekseev@postgrespro.ru ● https://twitter.com/afiskon