PostgreSQL’de Wal, Replikasyon ve Yedekleme Semineri – (Devrim Gündüz) Notlarım

PostgreSQL
Postgre Sql Eğitimi Devrim Gündüz

Bilge Adam Yazılım Semineri kapsamında düzenlenen PostgreSQL’de Wal Replikasyon ve Yedekleme Semineri’ne katıldım.

Seminer konuşmacısı Türkiye’de PostgreSQL dediğimizde aklımıza ilk gelen kişi PostgreSQL Major Contributor ve #RHCE unvanlarına sahip Gündüz Bilişim Kurucusu Devrim Gündüzdü.

Daha önce konferanslarda da izleme fırsatı bulduğum Devrim Gündüz‘den eğitim alma imkanım olmamıştı.

Başlıktan da anlaşıldığı gibi PostgreSQL’de Wal, Replikasyon ve Yedekleme konu başlıklarında dolu dolu bir 4 saat geçirdim. Zamanın nasıl geçtiğini anlamadım.

PostgreSQL bilgim başlangıç seviyesinde ve bu bilgimi bir yazılımcı olarak ilerletmek istiyorum. Bu eğitim sayesinde PostgreSQL hakkında bilgiler edindim ve çok verimli oldu.

Ayrıca Bilge Adam’ın misafirperveliği içinde teşekkür ederim.

Eğitim kapsamında aldığım/alabildiğim notları paylaşmak ve kendime saklamak istiyorum.

Not: Aldığım notlarda yanlışlık/eksiklik olabilir bilginize.

WAL (Write Ahead Logging)

Wal : Transaction Loglarının yazıldığı kaydedilmesidir.

  • Kesinlikle el ile silmeyeceğiz.
  • Wal veri kaybını önlemek için tasarlanmıştır.
  • 16 mb’lık dosyalarda tutulur.
  • Veri dosyaları her transaction’da değiştirilmez. O nedenle performans artışı olmasına katkı sağlar.
  • PostgreSQL’de yapılan her işlem bir transactiondur. O nedenle transaction iptal olsa bile Wal’a kaydedilir.
  • Varsayılan olarak Wal boyutu 1 GB’tır.
  • Tüm sorgular Shared Buffer’da gerçekleşir.
  • Ramdeki bir veri disktekindeyken farklı ise buna Dirt Buffer diyoruz.
  • Dirty Buffer’leri bgwriter ya da checkpointler sayesinde diske yazıyoruz.

WAL: LSN Log Sequence Number

  • Wal kaydının içerisindeki yerini bildirir sayıdır.
  • 64-bit tamsayı.
  • Bu sayı sayesinde veritabanı sunucularının çökme durumunda kayıp veri varsa kurtarma esnasında page LSN ve Wal’deki LSN’ler karşılaştılır. Büyük olan hangisi ise tam veri oradadır.

  • Bir wal kaydını bgwriter ya da checkpointler diske yazarken zarar görebilir. Tam yazma anında sistem çöktüğü anda diskin üzerinde bulunan page’de bozulur. Her checkpoint sonrasında her sayfa değiştiğinde sayfanın kopsayı Wal’a yazılır. Ve bu sayede veri kurtarılmış olur.
  • Yarım kalırsa Full-page image yapar ve backup block olur.

Replikasyon ve PG 12 Yenilikleri

  • Önceki sürümlerde bulunan Recovery.conf PostgreSQL’de kaldırıldı. Çoğu parametre artık Pgconfig’de yazılıyor.
  • Bazı recovery ile ilgili parametreler artık restart etmeden değiştirilebiliyor.
  • Auto.conf’ta yazılan ayarlamalar postgresql.conf’da yazılan ayarlamaları ezmektedir.
Replikasyon – Genel Özelliker (© Gündüz Bilişim Danışmanlık)
  • Primary yazılabilen ve okunabilen yapıdadır.
  • Standby sadece okunabilen yapıdadır.
  • Teorik olarak 2^32 adet stanby oluşturabiliriz.
  • Replikasyon yaparken kapatmaya gerek yok.

Replikasyon Hazırlıkları

  1. PostgreSQL kurulumu
  2. Primary sunucu yapılandırılması
  3. Replikasyon yetkisine sahip kullanıcı oluşturmak
  4. Replikasyon slot kavramı
  5. pg_basebackup
  • Postgresql.conf Değişiklikleri
listen_adresses = 'localhost'

satırında;

listen_adresses = *

olarak değiştiriyoruz ve sunucuyu yeniden başlatıyoruz.
Kontrol etmek için aşağıdaki komutu yazalım ve sonucuna bakalım.

postgres=# show listen_addresses;

listen_addresses
----------------
*
(1 row)

Konfigürasyonumuz düzgün çalışıyor.

  • Kullanıcı Oluşturma

Kullanıcı ya sadece replikasyon yetkisi vereceğiz.

postgres=# CREATE ROLE replicationuser encrypted password 'sifre' LOGIN REPLICATION;

Varsayılan olarak gelen postgres kullanıcı SUPER ADMIN yetkisine sahip olduğu için replikasyon rölünü bu kullanıcıdan alıyoruz.

postgres=# ALTER ROLE postgres NOREPLICATION ;

Bu kullancıya bağlanma yetkisi vereceğiz. Nasıl olduğunu daha önce yazmıştım. (Buradan) Bu işlemi yaptıktan sonra yeniden başlıyoruz.

Yazdığımız rolün geçerli olması için reload yapmamız gerekiyor. Bu kod;

postgres=# select pg_reload_conf();

Yapılandırma dosyasının geçerli olup olmadığını görmek için ise;

postgres=# select * from pg_hba_file_rules;
  • Root kullanıcısıyla kesinlikle işlem yapılmayacak.

Replikasyon yapılacak makinede yedekleme işlemini başlatıcağız.

/usr/pgsql-12/bin/pg_basebackup -D /var/lib/pgsql/12/repdata -Fp -X stream -C -S neswlot1 -c fast -h ip_adress -p 5432 -R -U replicationuser -P

Parametrelere bakalım.

  • -D: Datanın bulunduğu dizini verir.
  • -Fp: 2 farklı yedekleme şekli bulunmaktadır. Sıkıştırılmış ve Full. Burada full alıyoruz.
  • -h: Bağlanacağımız primary sunucusunun host adı.
  • -p: Port numarası.
  • -U: Kullanıcı adı.
  • -P: İşlem yüzdesini gösterir.
  • Standby sunucusunda veritabanı oluşturmuyoruz.
  • İşlem Senkron ya da Asenkron yapılabilir.

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Burak KUTBAY 2010 - 2019
%d blogcu bunu beğendi: