Giter VIP home page Giter VIP logo

postgres-replication's Introduction

PostgreSQL Physical Streaming Replication

Репозиторий содержит практически всё необходимое для запуска нескольких docker контейнеров c СУБД PostgreSQL в режиме physical streaming replication (синхронном или асинхронном)

primary

setup-primary.sh - этот сценарий копируется в образ при сборке и запускается во время старта контейнера. В нём выполняется создание роли для подключения сервера, работающего в режиме standby, добавляются параметры логирования в postgresql.conf и включается (если указано при запуске) синхронная репликация с сервером с именем replica.

standby

entry-point.sh - точка запуска контейнера. Отличается от оригинального скрипта entry-point.sh, взятого из официального репозтория postgresql docker image блоком, в котором выполняется pg_basebackup и перевод кластера в режим standby.

Step-by-step example

  1. Клонируем репозиторий на локальную машину
git clone https://github.com/vkutas/postgres-replication
cd postgres-replication
  1. Создаём .env файл следующего вида:
POSTGRES_PASSWORD=yourPostgresPassword
REPLICATOR_PASS=passwordForReplicatorUser
PRIMARY_ADDR=192.168.99.2
STAND_BY_ADDR=192.168.99.3
NETWORK_MASK=8
SYNC_REPLICATION_ON=0

Для запуска кластеров в режиме синхронной репликации необходимо установить SYNC_REPLICATION_ON в 1.

  1. Запускаем контейнеры с помощью Docker Compose

docker-compose up -d

Если всё загрузилось успешно, то docker-compose ps отобразит примерно следующее:

 Name                Command              State    Ports  
----------------------------------------------------------
primary   docker-entrypoint.sh postgres   Up      5432/tcp
standby   entry-point.sh postgres         Up      5432/tcp

Если какой либо из контейнеров не запустился, то смотрим логи:
docker-compose logs - для обоих контейнеров docker logs primary и docker logs stanby - для каждого в отдельности

  1. C помощью скрипта test-replication-lag.sh можно примерно оценить задержку репликации.

В нем создаётся база данных play с таблицей dates_series, которая заполняется с помощью generate_series. При каждой вставке выводится время выполения запроса и примерное время задержки репликации, которое вычисляется по формуле now()-pg_last_xact_replay_timestamp() на стороне standby сервера.

  1. C помощью pgbench.sh можно запустить простой бенчмарк. Скрипт состоит всего из 3 команд:

    Создание БД для запуска бенчмарка
    docker exec primary /bin/bash -c "echo \"SELECT 'CREATE DATABASE pgbench' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'pgbench')\gexec\" | psql -U postgres"

    Инициализация БД данными на 800 MB (5 000 000 записей)
    docker exec --user postgres primary pgbench -i -s 50 pgbench

    Запускаем проверку baseline performance с 12 клиентами и 2 потоками
    docker exec --user postgres primary pgbench -c 10 -j 2 -t 10000 pgbench

Результат может выглядить так:

 transaction type: <builtin: TPC-B (sort of)>  
 scaling factor: 50  
 query mode: simple  
 number of clients: 10  
 number of threads: 2  
 number of transactions per client: 10000  
 number of transactions actually processed: 100000/100000  
 latency average = 3.356 ms  
 tps = 2980.141159 (including connections establishing)  
 tps = 2980.558788 (excluding connections establishing)   
  1. Теперь, получив достаточное количество логов, можно проанализировать их с помощью bgbadger
docker cp primary:/var/lib/postgresql/data/pg_log  .
pgbadger postgresql-2021-04-09_14* 

Пример отчёта можно увидеть в /pgbadger_reports

postgres-replication's People

Contributors

vkutas avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.