pgrepup: обновление postgresql 9.5 до 10

Заметки по которым делал:
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 идентична тому как на убунте

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.