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 идентична тому как на убунте

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

Ваш адрес email не будет опубликован.

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

Материалы распространяются под лицензией Creative Commons: Атрибуция — Некоммерческое использование — С сохранением условий (Attribution-NonCommercial-ShareAlike) 3.0 Unported.
Рейтинг@Mail.ru