PostgreSQL’de Primary-Standby Replication Yapısı İçin pg_upgrade Kullanımı
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)