PostgreSQL’de Primary-Standby Replication Yapısı İçin pg_upgrade Kullanımı

Yüsranur Tanrıverdi
2 min readJan 15, 2024

--

Pg_upgrade, PostgreSQL’deki major versiyon yükseltmeleri için kullanılır. Bu dokümanda, primary — standby replication yapısındaki veritabanlarının PostgreSQL 11'den PostgreSQL 14'e nasıl yükseltileceği anlatılacaktır.

Oracle Linux 8 işletim sistemi üzerinde PostgreSQL 11 kurulu olan iki sunucu bulunmaktadır; biri primary diğeri ise standby sunucudur.

Master Sunucu IP: 192.168.154.170
Standby Sunucu IP: 192.168.154.171

Primary ve standby sunucularda PostgreSQL 14 indirilir.

dnf install -y postgresql14-server

Yalnızca primary sunucuda PostgreSQL 14 initialize edilir.

/usr/pgsql-14/bin/postgresql-14-setup initdb

Primary ve standby sunucularda PostgreSQL 11 durdurulur ve disable duruma getirilir.

systemctl stop postgresql-11
systemctl disable postgresql-11

Veri tabanının upgrade’e hazır olup olmadığını kontrol etmek için pg_upgrade, aşağıdaki gibi check opsiyonuyla çalıştırılır.

/usr/pgsql-14/bin/pg_upgrade -b /usr/pgsql-11/bin -B /usr/pgsql-14/bin -d /var/lib/pgsql/11/data -D /var/lib/pgsql/14/data --check

Daha sonra primary sunucu, PostgreSQL 11'den PostgreSQL 14'e yükseltilirken, link opsiyonu kullanılarak verilerin yeni kümeye fiziksel olarak kopyalanması yerine linklenerek yeni cluster’a bağlanması sağlanır.

/usr/pgsql-14/bin/pg_upgrade -b /usr/pgsql-11/bin -B /usr/pgsql-14/bin -d /var/lib/pgsql/11/data -D /var/lib/pgsql/14/data --link

Eski clusterdaki configuration dosyaları yedeklendikten sonra, upgrade sonrası oluşan ./delete_old_cluster.sh scripti çalıştırılır.

./delete_old_cluster

Primary sunucuda çalıştırılan rsync komutu ile standby sunucu da upgrade edilir.


rsync --archive --delete --hard-links --size-only --no-inc-recursive --verbose /var/lib/pgsql/11/data /var/lib/pgsql/14/data 192.168.154.171:/var/lib/pgsql/14/

Primary ve standby sunucularda PostgreSQL 14 servisi başlatılır.

systemctl start postgresql-14.service
systemctl enable postgresql-14.service

Upgrade sonrasında primary sunucuda istatistiklerin taşınması için aşağıdaki komut çalıştırılır.

/usr/pgsql-14/bin/vacuumdb --all --analyze-in-stages

Standby sunucuda, PostgreSQL 12 ile birlikte recovery.conf dosyası yerine getirilen standby.signal dosyası oluşturulur ve primary_conninfo parametresi postgresql.conf dosyasında düzenlenir.

touch standby.signal 

Primary ve Standby sunucularda veritabanına bağlanılıp versiyonu kontrol edilir.

postgres=# select version();
version
----------------------------------------------------------------------------------------------------------
PostgreSQL 14.10 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-20), 64-bit
(1 row)

--

--