
Bu yazıda, Patroni Cluster’da Postgresql Minor Upgrade işlemini adım adım anlatacağım. Postgresql versiyonumuz 15.6 olup 15.12 versiyonuna upgrade yapılacaktır.
Çoğu database de olduğu gibi Postgresql de her bir version için release note yayınlamaktadır. Bu not da yapılan değişiklikler ve yenilikler bulunmaktadır. Özellikle prod ortamlarda yapılacak upgrade işlemleri için release notların mutlaka okunması gerekmektedir. Mevcutta yapılan bir değişiklik uygulama tarafında kullanılan bir kısma hit ederse upgrade sonrası sorun yaşanmaması adına bu kısım önemlidir.
Postgresql 15.12 release note resmi dokümantasyon için tıklayınız.
Upgrade işlemi öncesi özellikle prod ortam için mutlaka backup alınması önerilir.
Upgrade için benim ortamımda 3 nodlu bir Patroni cluster bulunmaktadır. Önce replica (slave) node lar update yapılıp, ardından primary (master) node güncellenir. Bu işlem sırasında veri kaybı yaşamadan geçiş yapılması hedeflenir. İşletim sistemi Ubuntu olup uygulama adımları diğer linux versiyonları için sadece apt,yum vs paketler değişmektedir.
Upgrade adımları
- Öncelikle mevcut cluster mızı kontrol ediyoruz:
┌── postgres@postgres1 ── ~ ─
└─$ patronictl list
+ Cluster: pg_cluster (232232343434343434) ---+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+------------+--------------+---------+---------+----+-----------+
| postgres1 | 192.168.26.101 | Leader | running | 24 | |
| postgres2 | 192.168.26.102 | Replica | running | 24 | 0 |
| postgres3 | 192.168.26.103 | Replica | running | 24 | 0 |
+------------+--------------+---------+---------+----+-----------+
Maintenance mode: on
Eğer maintenance mode
açık ise, servislerin başlamasında özellikle
patroniyi start ettiğinde veri tabanını start etmiyor o sebeple öncelikle maintenance mode kapatıyoruz.
┌── postgres@postgres1── ~ ─
└─$ patronictl resume pg_cluster
Success: cluster management is resumed
- PostgreSQL Paket Repolarını Güncelleyin
Sunucularımızda bulunan repo paketlerini güncelliyoruz. Bu işlem sadece repoları günceller ve 3 sunucu içinde yapıyoruz.
root@postgres1:# apt update
root@postgres2:# apt update
root@postgres3:# apt update
- Reponun durumu kontrol edilir: Update sonrası aşağıdaki komutla sistemde hangi PostgreSQL 15 sürümünün olduğunu ve hangi sürümün yüklenmeye hazır olduğunu kontrol ediyoruz:
root@postgres3:/etc/apt# apt-cache policy postgresql-15
postgresql-15:
Installed: 15.6-1.pgdg22.04+1
Candidate: 15.12-1.pgdg22.04+1
- PostgreSQL ve Client Upgrade: Upgrade işlemini aşağıdaki komut ile gerçekleştirin. Bu işlem PostgreSQL’in yeni sürüme upgrade edecektir. Var olan konfigürasyonlar ve veriler korunur.
root@postgres3:/etc/apt# apt install postgresql-15 postgresql-client-15
NOT: Yukarıdaki komut yüklenebilir son versionu yükler. Fakat son versionu yüklemek istemezsek aşağıdaki gibi version belirtip kurulum yapabiliriz.
root@postgres3:/etc/apt# apt install postgresql-15=15.11-1.pgdg22.04+1 postgresql-client-15=15.11-1.pgdg22.04+1
- Patroni Servisini Yeniden Başlatın: Patroni cluster da upgrade işlemlerini alması için patroni servisinin restart edilmesi gerekmektedir. Eğer Single instance da upgrade yapıyorsanız database restart a gerek yoktur.
root@postgres3:/usr/lib/postgresql/15/bin# systemctl stop patroni
root@postgres3:/usr/lib/postgresql/15/bin# systemctl start patroni
root@postgres3:/usr/lib/postgresql/15/bin# systemctl status patroni
Şu an 3. node yani slave database lerden bir tanesinin upgrade işlemi tamamlandı. Diğer sunuculara geçmeden önce patroni ve database loglarında herhangi bir hata olup olmadığını kontrol ediyoruz. Şu an minor versiyon olarak diğer nodelardan ileridedir. Cluster bu şekilde çalışır fakat uzun süre bu şekilde çalışılması önerilmez.
Eğer herhangi bir sorun yoksa diğer slave (postgres2) ve daha sonra master ( postgres1) veri tabanlarında aynı adımlar takip edilerek upgrade ediyoruz.
Master database upgrade işleminden sonra patroni restart etmeden önce hizmet kesintisi yaşamamak için switchover yapıyoruz.
┌── postgres@postgres1── ~ ─
└─$ patronictl switchover
Master [postgres1]:postgres1
Candidate ['postgres2''postgres3'] []:postgres2
Psql ile bağlanıp version son durumu kontrol ediyoruz.
postgres=# select version();
version
-------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 15.12
Bu yazımızda, Patroni Cluster’da Postgresql Minor Upgrade(15.6 to 15.12) işlemini adım adım gerçekleştirmiş olduk. Bu işlemleri internete açık olan ortamlar için uyguladık. İnternet erişimi kapalı ortamlar için ise başka bir ortamda install paketlerini ve bağımlılıkları indirip upgrade yapacağımız makineye attıktan sonra kurulum işlemini yapabiliriz.
PostgreSQL ile ilgili diğer yazılarımız için tıklayınız.
Leave a Comment