Заметки по которым делал:
https://habr.com/ru/company/true_engineering/blog/437318/
https://github.com/rtshome/pgrepup
Устанавливал на тестовых машинах с нуля, поэтому ставил в том числе и postgresql. Сразу скажу, что на бою пока не делал, однако тестовые машинки обновлялись на ура. Судя по ману с хабра, базу можно обновить и до 11 версии, тем не менее я тестировал только до 10.
ubuntu 16.04
Подключаем репозиторий postgresql
https://www.postgresql.org/download/linux/ubuntu/
postgresql 9.5
apt install postgresql-9.5 postgresql-9.5-pglogical postgresql-9.5-pgl-ddl-deploy
vim /etc/postgresql/9.5/main/postgresql.conf
listen_addresses = '*' wal_level = logical shared_preload_libraries = 'pglogical.so' max_replication_slots = 2 # или больше max_wal_senders = 2 # или больше
vim /etc/postgresql/9.5/main/pg_hba.conf
в начало прописываем
host all postgres 192.168.0.0/24 trust host all postgres 127.0.0.1/32 trust host replication pgrepup_replication 127.0.0.1/32 md5 host all pgrepup_replication 127.0.0.1/32 md5
systemctl restart postgresql@9.5-main.service
postgresql 10
apt install postgresql-10 postgresql-10-pglogical postgresql-server-dev-10 checkinstall
vim /etc/postgresql/10/main/postgresql.conf
wal_level = logical shared_preload_libraries = 'pglogical.so,pgl_ddl_deploy.so'
vim /etc/postgresql/10/main/pg_hba.conf
в начало прописываем
host all postgres 192.168.0.0/24 trust host all postgres 127.0.0.1/32 trust host replication pgrepup_replication 127.0.0.1/32 md5 host all pgrepup_replication 127.0.0.1/32 md5
устанавливаем pgl_ddl_deploy
git clone https://github.com/enova/pgl_ddl_deploy.git cd pgl_ddl_deploy PATH=/usr/lib/postgresql/10/bin/:$PATH echo $PATH make CLANG=true checkinstall
systemctl restart postgresql@10-main.service
pgrepup
Ставим python2.7 и pgrepup
apt install python2.7 python-virtualenv
mkdir pgrepup python2.7 -m virtualenv pgrepup source pgrepup/bin/activate pip install pgrepup
Переходим в окружение
source pgrepup/bin/activate
Настраиваем конфиг
pgrepup config
cat ~/.pgrepup
[Security] encrypted_credentials = n tmp_folder = /tmp app_owner = postgres [Source] host = 127.0.0.1 port = 5432 connect_database = template1 user = postgres password = [Destination] host = 127.0.0.1 port = 5433 connect_database = template1 user = postgres password =
Правим баги pgrepup
1. Баг первый
grep "def .*()" pgrepup/lib/python2.7/site-packages/pgrepup/commands/*.py
vim pgrepup/lib/python2.7/site-packages/pgrepup/commands/
В каждом файле *.py добавляем пропущенные **kwargs в описании функции
Пример: меняем
def setup():
на
def setup(**kwargs):
2. Баг второй
vim pgrepup/lib/python2.7/site-packages/pgrepup/commands/setup.py
Ищем строки с sh -c и объединяем в одну
https://github.com/rtshome/pgrepup/pull/16/commits/ef582405cce90959c751157414e3fadab183bef5
Должно получиться:
os.system('sh -c "PGPASSFILE=%(pgpass)s pg_dumpall -U %(user)s -h %(host)s -p%(port)s -s -f %(fname)s --if-exists -c"' %
'sh -c "PGPASSFILE=%(pgpass)s psql -U %(user)s -h %(host)s -p%(port)s -f %(fname)s -d postgres >/dev/null 2>&1"'
3. Баг третий
Если в названии базы есть — , например test-base
vim pgrepup/lib/python2.7/site-packages/pgrepup/helpers/replication.py
Ищем строку:
c.execute('GRANT CREATE ON DATABASE ' + db + ' TO ' + user)
Правим на:
c.execute('GRANT CREATE ON DATABASE ' + '"' + db + '"' + ' TO ' + user)
Проверяем
pgrepup check
Если есть ошибки
pgrepup fix
Ставим
pgrepup setup pgrepup start pgrepup status ... Replication status > Database postgres > Replication status ..............................................replicating > Database template1 > Replication status ..............................................replicating > Database test-base > Replication status .............................................initializing > Xlog difference (bytes) ...................................................68128
Когда статус initializing перейдет в replicating можно останавливать
pgrepup stop
Удаляем хвосты
pgrepup uninstall
Выходим из окружения pgrepup
deactivate
centos 7
Подключаем репозиторий postgresql
https://www.postgresql.org/download/linux/redhat/
postgresql 9.5
yum install postgresql95 postgresql95-devel
Инициализируем базу
/usr/pgsql-9.5/bin/postgresql95-setup initdb
База и конфиг файлы здесь, там же и логи
ls -l /var/lib/pgsql/9.5/data/
postgresql 10
yum install postgresql10 postgresql10-devel
Инициализируем базу
/usr/pgsql-10/bin/postgresql-10-setup initdb
База и конфиг файлы здесь, там же и логи
ls -l /var/lib/pgsql/10/data/
Установка pglogical
— для 9.5
curl https://access.2ndquadrant.com/api/repository/dl/default/release/9.5/rpm | bash yum install postgresql95-pglogical
— для 10
curl https://access.2ndquadrant.com/api/repository/dl/default/release/10/rpm | bash yum install postgresql10-pglogical
Устанавливаем pgl_ddl_deploy extension
git clone https://github.com/enova/pgl_ddl_deploy.git cd pgl_ddl_deploy
— для 9.5
PATH=/usr/pgsql-9.5/bin/:$PATH USE_PGXS=1 make USE_PGXS=1 make install make clean
— для 10
PATH=/usr/pgsql-10/bin/:$PATH make CLANG=true make install
Настраиваем конфиг файлы
vim /var/lib/pgsql/9.5/data/postgresql.conf
listen_addresses = '*' wal_level = logical shared_preload_libraries = 'pglogical.so,pgl_ddl_deploy.so' max_replication_slots = 2 # или больше max_wal_senders = 2 # или больше
vim /var/lib/pgsql/9.5/data/pg_hba.conf
host all postgres 192.168.0.0/22 trust host all postgres 127.0.0.1/32 trust host replication pgrepup_replication 127.0.0.1/32 md5 host all pgrepup_replication 127.0.0.1/32 md5
systemctl restart postgresql@9.5-main.service
vim /var/lib/pgsql/10/data/postgresql.conf
port = 5433 wal_level = logical shared_preload_libraries = 'pglogical.so,pgl_ddl_deploy.so'
vim /var/lib/pgsql/10/data/pg_hba.conf
host all postgres 127.0.0.1/32 trust host all postgres 192.168.0.0/22 trust host replication pgrepup_replication 127.0.0.1/32 md5 host all pgrepup_replication 127.0.0.1/32 md5
systemctl restart postgresql@10-main.service
Настройку pgrepup идентична тому как на убунте