SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
Новые технологии репликации
данных в PostgreSQL
Александр Алексеев
@afiskon
Два слова о себе
Для кого этот доклад
● Вы считаете, что репликация настраивается
непостижимо сложно.
● Вы никогда не настраивали репликацию в
PostgreSQL или хотели бы освежить знания.
● Вы хотели бы знать, что тут появилось
нового за последнее время.
Бонусы!
Репликация
Зачем это нужно
● Распределение нагрузки
○ OLTP: на чтение ходим в реплики
○ OLAP: тяжелая аналитика на реплике
○ Снятие бэкапов
● Фейловер / HA
○ Ручной (лучше!) или автоматический
● Отложенная репликация
● Не заменяет резервное копирование!
Коротко о главном
● Потоковая репликация
○ Асинхронная
■ Используется по умолчанию. Быстро,
но можно потерять данные.
○ Синхронная
■ Медленнее (в рамках одного ДЦ не
намного), но надежнее. Желательно
иметь две реплики.
○ Каскадная
Коротко о главном
● Логическая репликация
○ Slony
■ Медленно, стабильно.
○ pglogical
■ Быстро, но пока что сыро.
Fun fact!
Потоковая репликация:
● Не работает между разными архитектурами
● Не работает между разными версиями PostgreSQL
Настройка master - pg_hba.conf
host replication postgres 10.0.3.0/24 md5
host all postgres 10.0.3.0/24 md5
Настройка master - postgresql.conf
wal_level = hot_standby
# это нужно, чтобы работал pg_rewind
wal_log_hints = on
max_wal_senders = 8 # default: 0
# если хотим синхронную репликацию
# на одну любую реплику
synchronous_standby_names = '*'
hot_standby = on
9.6: synchronous_standby_names
synchronous_standby_names = '2(alpha, beta, gamma)'
(например, можно сделать репликацию на кворум)
Настройка slave - pg_basebackup
cd /var/lib/postgresql/9.5/
rm -rf main
mkdir main
chmod go-rwx main
pg_basebackup -P -R -X stream -c fast 
-h 10.0.3.245 -U postgres -D ./main
(не поленитесь почитать ман, он классный!)
Настройка slave - main/recovery.conf
# по умолчанию восстанавливаемся до текущего
# таймлайна, а нам нужно до максимального
# таймлайна в архиве
recovery_target_timeline = 'latest'
# чтобы отставать от мастера
recovery_min_apply_delay = 10min
(+ правим pg_hba.conf и postgresql.conf аналогично
мастеру)
Проверка репликации
На мастере:
SELECT * FROM pg_stat_replication;
На слейве:
SELECT now()-pg_last_xact_replay_timestamp();
Где я (false - на мастере, true - на реплике):
SELECT pg_is_in_recovery();
Полезные параметры
Не дожидаемся fsync на реплике:
SET synchronous_commit = 'remote_write';
Пишем только локально, не ждем подтверждения от реплики:
SET synchronous_commit = 'local';
Возвращаем обычное поведение:
SET synchronous_commit = 'on';
9.6: дожидаемся, пока изменения применятся к таблицам:
SET synchronous_commit = 'remote_apply';
Промоутим реплику до мастера
pg_ctl promote -D /var/lib/postgresql/9.5/main/
… и смотрим в логи.
Все равно лучше сделать restart, чтобы клиенты
перепроверили, куда они подключены - к мастеру или слейву.
Переключение реплик на новый мастер
pg_rewind 
-D /var/lib/postgresql/9.5/main/ 
--source-server="host=?? port=?? user=?? password=??"
cd /var/lib/postgresql/9.5/main/
mv recovery.done reconvery.conf
vim recovery.conf
# проверяем IP мастера и наличие строчки:
# recovery_target_timeline = 'latest'
ERROR
Если видим:
requested WAL segment 00200000005 has already been removed
Значит, реплика слишком сильно отстала. Вместо pg_rewind нужно
использовать pg_basebackup, как было описано выше.
Автофейловер
На что стоит посмотреть:
● http://www.repmgr.org/
● https://github.com/sorintlab/stolon
Вопросы?
Что почитать (бонусный слайд)
Про PostgreSQL:
● Официальная документация!
● PostgreSQL 9.0 High Performance, Gregory Smith
● PostgreSQL Server Programming, Hannu Krosing et al
Про РСУБД:
● Database System Implementation, Hector Garcia-Molina et al
Про распределенные системы:
● Distributed systems for fun and profit, Mikito Takada
● Introduction to Reliable and Secure Distributed Programming, Christian
Cachin et al
Про NoSQL-решения (бонусный слайд)
Почему неплохо бы держать рядом NoSQL:
● Автошардинг / решардинг (Amazon RDS? Heroku?)
● Счетчики, сессии и коды капч не стоит держать в РСУБД
(блоатинг, rand() % 1000 == 0)
● Колоночные хранилища и транзакции несовместимы
● Для неизменяемых данных не очень-то нужны транзакции
● Полнотекстовый поиск - ОК (GIN, GiST индексы)
● Очереди - ОК (SELECT FROM … FOR UPDATE SKIP LOCKED)
Что посмотреть (не в качестве основной СУБД):
● [ + ] Memcached, Redis, RethinkDB (драйверы?), CockroachDB (?)
● [+/-] Tarantool (мало использовал), Cassandra (200 мс stop the world?)
● [ -- ] Couchbase, MongoDB, Riak
Cм также: Sphinx, ElasticSearch, RabbitMQ, Storm / Heron
Колоночные хранилища? Таймсерии?

Weitere ähnliche Inhalte

Was ist angesagt?

Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Ontico
 
Kostja Root Conf
Kostja Root ConfKostja Root Conf
Kostja Root Conf
Liudmila Li
 
Server-side JavaScript
Server-side JavaScriptServer-side JavaScript
Server-side JavaScript
Media Gorod
 
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Alexey Lesovsky
 

Was ist angesagt? (20)

Apache Kafka and stream processing peculiarities [ru]
Apache Kafka and stream processing peculiarities [ru]Apache Kafka and stream processing peculiarities [ru]
Apache Kafka and stream processing peculiarities [ru]
 
Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.
 
Профилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системахПрофилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системах
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
 
Thumbtack Expertise Days # 5 - Ansible
Thumbtack Expertise Days # 5 - AnsibleThumbtack Expertise Days # 5 - Ansible
Thumbtack Expertise Days # 5 - Ansible
 
Первые шаги с RabbitMQ
Первые шаги с RabbitMQПервые шаги с RabbitMQ
Первые шаги с RabbitMQ
 
Kostja Root Conf
Kostja Root ConfKostja Root Conf
Kostja Root Conf
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru
 
Drupal 8 и хостинг
Drupal 8 и хостингDrupal 8 и хостинг
Drupal 8 и хостинг
 
"Fault tolerant workflow orchestration on PHP", Anton Tsitou
"Fault tolerant workflow orchestration on PHP", Anton Tsitou"Fault tolerant workflow orchestration on PHP", Anton Tsitou
"Fault tolerant workflow orchestration on PHP", Anton Tsitou
 
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
 
PostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of HellPostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of Hell
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 
А.Горбов, А.Фефелов. Секреты АБАК-ПРЕСС
А.Горбов, А.Фефелов. Секреты АБАК-ПРЕССА.Горбов, А.Фефелов. Секреты АБАК-ПРЕСС
А.Горбов, А.Фефелов. Секреты АБАК-ПРЕСС
 
Server-side JavaScript
Server-side JavaScriptServer-side JavaScript
Server-side JavaScript
 
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.
 
Node.js (RichClient)
 Node.js (RichClient) Node.js (RichClient)
Node.js (RichClient)
 

Andere mochten auch

New features-in-mariadb-and-mysql-optimizers
New features-in-mariadb-and-mysql-optimizersNew features-in-mariadb-and-mysql-optimizers
New features-in-mariadb-and-mysql-optimizers
Sergey Petrunya
 
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Yulia Tsisyk
 
Илья Космодемьянский (PostgreSQL-Consulting.com)
Илья Космодемьянский (PostgreSQL-Consulting.com)Илья Космодемьянский (PostgreSQL-Consulting.com)
Илья Космодемьянский (PostgreSQL-Consulting.com)
Ontico
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
Ontico
 
Введение в Akka
Введение в AkkaВведение в Akka
Введение в Akka
Zheka Kozlov
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
Ontico
 

Andere mochten auch (20)

Работа с Akka Cluster - Александр Алексеев
Работа с Akka Cluster - Александр АлексеевРабота с Akka Cluster - Александр Алексеев
Работа с Akka Cluster - Александр Алексеев
 
Функциональное программирование - Александр Алексеев
Функциональное программирование - Александр АлексеевФункциональное программирование - Александр Алексеев
Функциональное программирование - Александр Алексеев
 
Cisco или Asterisk: битва гигантов IP-телефонии (Грушко)
Cisco или Asterisk: битва гигантов IP-телефонии (Грушко)Cisco или Asterisk: битва гигантов IP-телефонии (Грушко)
Cisco или Asterisk: битва гигантов IP-телефонии (Грушко)
 
New features-in-mariadb-and-mysql-optimizers
New features-in-mariadb-and-mysql-optimizersNew features-in-mariadb-and-mysql-optimizers
New features-in-mariadb-and-mysql-optimizers
 
Эволюция репликации в MySQL и MariaDB
Эволюция репликации в MySQL и MariaDBЭволюция репликации в MySQL и MariaDB
Эволюция репликации в MySQL и MariaDB
 
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
 
Илья Космодемьянский (PostgreSQL-Consulting.com)
Илья Космодемьянский (PostgreSQL-Consulting.com)Илья Космодемьянский (PostgreSQL-Consulting.com)
Илья Космодемьянский (PostgreSQL-Consulting.com)
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDB
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
 
Введение в Akka
Введение в AkkaВведение в Akka
Введение в Akka
 
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
 
Akka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодAkka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный код
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
 
Виртуальная АТС Virgin Connect
Виртуальная АТС Virgin ConnectВиртуальная АТС Virgin Connect
Виртуальная АТС Virgin Connect
 
ZSON, или прозрачное сжатие JSON
ZSON, или прозрачное сжатие JSONZSON, или прозрачное сжатие JSON
ZSON, или прозрачное сжатие JSON
 
Impact of Variable Transmission Range and Scalability With Respect To Mobilit...
Impact of Variable Transmission Range and Scalability With Respect To Mobilit...Impact of Variable Transmission Range and Scalability With Respect To Mobilit...
Impact of Variable Transmission Range and Scalability With Respect To Mobilit...
 
M livingstone
M livingstoneM livingstone
M livingstone
 
Personal loans
Personal loansPersonal loans
Personal loans
 
Apresentação1
Apresentação1Apresentação1
Apresentação1
 

Ähnlich wie Новые технологии репликации данных в PostgreSQL - Александр Алексеев

SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON
 
Абак Пресс
Абак ПрессАбак Пресс
Абак Пресс
it-people
 
Application deployment & configuration management
Application deployment & configuration managementApplication deployment & configuration management
Application deployment & configuration management
Alexander Kirillov
 
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (..."Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
AvitoTech
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?
phpdevby
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Ontico
 

Ähnlich wie Новые технологии репликации данных в PostgreSQL - Александр Алексеев (20)

SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
 
PostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationPostgreSQL Streaming Replication
PostgreSQL Streaming Replication
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
 
Optimization of a big PostgreSQL database
Optimization of a big PostgreSQL databaseOptimization of a big PostgreSQL database
Optimization of a big PostgreSQL database
 
Абак Пресс
Абак ПрессАбак Пресс
Абак Пресс
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектах
 
PostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноPostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. Молодёжно
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
Application deployment & configuration management
Application deployment & configuration managementApplication deployment & configuration management
Application deployment & configuration management
 
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (..."Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
 
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
 
OpenSource SQL Databases Enter Millions Queries per Second Era
OpenSource SQL Databases Enter Millions Queries per Second EraOpenSource SQL Databases Enter Millions Queries per Second Era
OpenSource SQL Databases Enter Millions Queries per Second Era
 
pgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recoverypgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recovery
 
Java 9 - Back to the Future
Java 9 - Back to the FutureJava 9 - Back to the Future
Java 9 - Back to the Future
 

Mehr von Aleksander Alekseev (9)

Growing up new PostgreSQL developers (pgcon.org 2018)
Growing up new PostgreSQL developers (pgcon.org 2018)Growing up new PostgreSQL developers (pgcon.org 2018)
Growing up new PostgreSQL developers (pgcon.org 2018)
 
PostgreSQL and Compressed Documents (pgconf.ru 2018)
PostgreSQL and Compressed Documents (pgconf.ru 2018)PostgreSQL and Compressed Documents (pgconf.ru 2018)
PostgreSQL and Compressed Documents (pgconf.ru 2018)
 
PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)
PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)
PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)
 
Data recovery using pg_filedump
Data recovery using pg_filedumpData recovery using pg_filedump
Data recovery using pg_filedump
 
Full Text Search in PostgreSQL
Full Text Search in PostgreSQLFull Text Search in PostgreSQL
Full Text Search in PostgreSQL
 
pg_filedump
pg_filedumppg_filedump
pg_filedump
 
Quality Assurance in PostgreSQL
Quality Assurance in PostgreSQLQuality Assurance in PostgreSQL
Quality Assurance in PostgreSQL
 
In-core compression: how to shrink your database size in several times
In-core compression: how to shrink your database size in several timesIn-core compression: how to shrink your database size in several times
In-core compression: how to shrink your database size in several times
 
Haskell - это просто - Александр Алексеев
Haskell - это просто - Александр АлексеевHaskell - это просто - Александр Алексеев
Haskell - это просто - Александр Алексеев
 

Новые технологии репликации данных в PostgreSQL - Александр Алексеев

  • 1. Новые технологии репликации данных в PostgreSQL Александр Алексеев @afiskon
  • 3. Для кого этот доклад ● Вы считаете, что репликация настраивается непостижимо сложно. ● Вы никогда не настраивали репликацию в PostgreSQL или хотели бы освежить знания. ● Вы хотели бы знать, что тут появилось нового за последнее время.
  • 6. Зачем это нужно ● Распределение нагрузки ○ OLTP: на чтение ходим в реплики ○ OLAP: тяжелая аналитика на реплике ○ Снятие бэкапов ● Фейловер / HA ○ Ручной (лучше!) или автоматический ● Отложенная репликация ● Не заменяет резервное копирование!
  • 7. Коротко о главном ● Потоковая репликация ○ Асинхронная ■ Используется по умолчанию. Быстро, но можно потерять данные. ○ Синхронная ■ Медленнее (в рамках одного ДЦ не намного), но надежнее. Желательно иметь две реплики. ○ Каскадная
  • 8. Коротко о главном ● Логическая репликация ○ Slony ■ Медленно, стабильно. ○ pglogical ■ Быстро, но пока что сыро.
  • 9. Fun fact! Потоковая репликация: ● Не работает между разными архитектурами ● Не работает между разными версиями PostgreSQL
  • 10. Настройка master - pg_hba.conf host replication postgres 10.0.3.0/24 md5 host all postgres 10.0.3.0/24 md5
  • 11. Настройка master - postgresql.conf wal_level = hot_standby # это нужно, чтобы работал pg_rewind wal_log_hints = on max_wal_senders = 8 # default: 0 # если хотим синхронную репликацию # на одну любую реплику synchronous_standby_names = '*' hot_standby = on
  • 12. 9.6: synchronous_standby_names synchronous_standby_names = '2(alpha, beta, gamma)' (например, можно сделать репликацию на кворум)
  • 13. Настройка slave - pg_basebackup cd /var/lib/postgresql/9.5/ rm -rf main mkdir main chmod go-rwx main pg_basebackup -P -R -X stream -c fast -h 10.0.3.245 -U postgres -D ./main (не поленитесь почитать ман, он классный!)
  • 14. Настройка slave - main/recovery.conf # по умолчанию восстанавливаемся до текущего # таймлайна, а нам нужно до максимального # таймлайна в архиве recovery_target_timeline = 'latest' # чтобы отставать от мастера recovery_min_apply_delay = 10min (+ правим pg_hba.conf и postgresql.conf аналогично мастеру)
  • 15. Проверка репликации На мастере: SELECT * FROM pg_stat_replication; На слейве: SELECT now()-pg_last_xact_replay_timestamp(); Где я (false - на мастере, true - на реплике): SELECT pg_is_in_recovery();
  • 16. Полезные параметры Не дожидаемся fsync на реплике: SET synchronous_commit = 'remote_write'; Пишем только локально, не ждем подтверждения от реплики: SET synchronous_commit = 'local'; Возвращаем обычное поведение: SET synchronous_commit = 'on'; 9.6: дожидаемся, пока изменения применятся к таблицам: SET synchronous_commit = 'remote_apply';
  • 17. Промоутим реплику до мастера pg_ctl promote -D /var/lib/postgresql/9.5/main/ … и смотрим в логи. Все равно лучше сделать restart, чтобы клиенты перепроверили, куда они подключены - к мастеру или слейву.
  • 18. Переключение реплик на новый мастер pg_rewind -D /var/lib/postgresql/9.5/main/ --source-server="host=?? port=?? user=?? password=??" cd /var/lib/postgresql/9.5/main/ mv recovery.done reconvery.conf vim recovery.conf # проверяем IP мастера и наличие строчки: # recovery_target_timeline = 'latest'
  • 19. ERROR Если видим: requested WAL segment 00200000005 has already been removed Значит, реплика слишком сильно отстала. Вместо pg_rewind нужно использовать pg_basebackup, как было описано выше.
  • 20. Автофейловер На что стоит посмотреть: ● http://www.repmgr.org/ ● https://github.com/sorintlab/stolon
  • 22. Что почитать (бонусный слайд) Про PostgreSQL: ● Официальная документация! ● PostgreSQL 9.0 High Performance, Gregory Smith ● PostgreSQL Server Programming, Hannu Krosing et al Про РСУБД: ● Database System Implementation, Hector Garcia-Molina et al Про распределенные системы: ● Distributed systems for fun and profit, Mikito Takada ● Introduction to Reliable and Secure Distributed Programming, Christian Cachin et al
  • 23. Про NoSQL-решения (бонусный слайд) Почему неплохо бы держать рядом NoSQL: ● Автошардинг / решардинг (Amazon RDS? Heroku?) ● Счетчики, сессии и коды капч не стоит держать в РСУБД (блоатинг, rand() % 1000 == 0) ● Колоночные хранилища и транзакции несовместимы ● Для неизменяемых данных не очень-то нужны транзакции ● Полнотекстовый поиск - ОК (GIN, GiST индексы) ● Очереди - ОК (SELECT FROM … FOR UPDATE SKIP LOCKED) Что посмотреть (не в качестве основной СУБД): ● [ + ] Memcached, Redis, RethinkDB (драйверы?), CockroachDB (?) ● [+/-] Tarantool (мало использовал), Cassandra (200 мс stop the world?) ● [ -- ] Couchbase, MongoDB, Riak Cм также: Sphinx, ElasticSearch, RabbitMQ, Storm / Heron Колоночные хранилища? Таймсерии?