CentOS 8'de PostgreSQL 12 Akış Çoğaltma Nasıl Yapılandırılır


PostgreSQL veritabanı, yüksek kullanılabilirliğe sahip, ölçeklenebilir, hataya dayanıklı uygulamalar oluşturmak için çeşitli çoğaltma çözümlerini destekler; bunlardan biri Önceden Yazma Günlüğü (WAL)'dir. ) Nakliye. Bu çözüm, dosya tabanlı günlük gönderimi veya akış çoğaltması veya mümkün olduğunda her iki yaklaşımın bir kombinasyonu kullanılarak bir yedek sunucunun uygulanmasına olanak tanır.

Akış çoğaltmayla, bir yedek (çoğaltma bağımlı) veritabanı sunucusu, WAL kayıtlarını oluşturuldukları anda, WAL beklemeden beklemeye aktaran ana/birincil sunucuya bağlanacak şekilde yapılandırılır. doldurulacak dosya.

Varsayılan olarak, akış çoğaltma, birincil sunucuda bir işlem gerçekleştirildikten sonra verilerin bekleme sunucularına yazıldığı eşzamansız bir işlemdir. Bu, ana sunucuda bir işlemin gerçekleştirilmesi ile değişikliklerin yedek sunucuda görünür hale gelmesi arasında küçük bir gecikme olduğu anlamına gelir. Bu yaklaşımın bir dezavantajı, ana sunucunun çökmesi durumunda kaydedilmemiş işlemlerin kopyalanamaması ve bunun veri kaybına neden olabilmesidir.

Bu kılavuz, CentOS 8'de Postgresql 12 ana yedek akış çoğaltmasının nasıl kurulacağını gösterir. Ana sunucunun eski WAL segmentlerini beklemedekileri almadan önce geri dönüştürmesini önlemek için bir çözüm olarak beklemede "çoğaltma yuvaları" kullanacağız.

Diğer yöntemlerle karşılaştırıldığında çoğaltma yuvalarının yalnızca gerekli olduğu bilinen segment sayısını koruduğunu unutmayın.

Test Ortamı:

Bu kılavuz, ana ve yedek veritabanı sunucularınıza kök olarak SSH yoluyla bağlandığınızı varsaymaktadır (yönetici haklarına sahip normal bir kullanıcı olarak bağlanıyorsanız, gerektiğinde Sudo komutunu kullanın):

Postgresql master database server: 		10.20.20.9
Postgresql standby database server:		10.20.20.8

Her iki veritabanı sunucusunda da Postgresql 12 kurulu olmalıdır, aksi takdirde bkz.: CentOS 8'de PostgreSQL ve pgAdmin Nasıl Kurulur.

Not: PostgreSQL 12, çoğaltma uygulaması ve yapılandırmasında recovery.conf'un değiştirilmesi gibi büyük değişikliklerle birlikte gelir ve recovery.conf parametrelerinin normal PostgreSQL yapılandırma parametrelerine dönüştürülmesi, küme çoğaltmasının yapılandırılmasını çok daha kolay hale getirir.

Adım 1: PostgreSQL Ana/Birincil Veritabanı Sunucusunu Yapılandırma

1. Ana sunucuda, postgres sistem hesabına geçin ve ana sunucunun istemcilerden gelen bağlantıları dinleyeceği IP adreslerini yapılandırın.

Bu durumda hepsi anlamına gelen * kullanacağız.

su - postgres
psql -c "ALTER SYSTEM SET listen_addresses TO '*';"

ALTER SYSTEM SET SQL komutu, bir sunucunun yapılandırma parametrelerini doğrudan bir SQL sorgusu ile değiştirmeye yönelik güçlü bir özelliktir. Yapılandırmalar, veri klasörünün kökünde bulunan postgresql.conf.auto dosyasına (ör. /var/lib/pgsql/12/data/) kaydedilir ve ek okunur postgresql.conf'da depolananlara. Ancak ilkindeki yapılandırmalar, sonraki ve diğer ilgili dosyalardaki yapılandırmalara göre önceliklidir.

2. Ardından, createuser programını kullanarak, bekleme sunucusundan ana sunucuya bağlantılar için kullanılacak bir çoğaltma rolü oluşturun. Aşağıdaki komutta, -P bayrağı yeni rol için parola ister ve -e, createuser'in oluşturup veritabanı sunucusuna gönderdiği komutları yansıtır.

su – postgres
createuser --replication -P -e replicator
exit

3. Ardından /var/lib/pgsql/12/data/pg_hba.conf istemci kimlik doğrulama yapılandırma dosyasının sonuna veritabanı alanı şu şekilde ayarlanmış olarak aşağıdaki girişi girin: ekran görüntüsünde gösterildiği gibi çoğaltma.

host    replication     replicator      10.20.20.8/24     md5

4. Şimdi değişiklikleri uygulamak için aşağıdaki systemctl komutunu kullanarak Postgres12 hizmetini yeniden başlatın.

systemctl restart postgresql-12.service

5. Ardından, güvenlik duvarı hizmeti çalışıyorsa, yedek sunucudan ana sunucuya gelen isteklere izin vermek için güvenlik duvarı yapılandırmasına Postgresql hizmetini eklemeniz gerekir.

firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload

Adım 2: Bekleme Sunucusunu Önyüklemek için Temel Yedekleme Yapma

6. Daha sonra, yedek sunucudan ana sunucunun temel yedeğini almanız gerekir; bu, bekleme sunucusunun önyüklemesine yardımcı olur. Bekleme sunucusunda postgresql 12 hizmetini durdurmanız, postgres kullanıcı hesabına geçmeniz, veri dizinini (/var/lib/pgsql/12/data/) yedeklemeniz, ardından altındaki her şeyi silmeniz gerekir. gösterildiği gibi, temel yedeklemeyi almadan önce.

systemctl stop postgresql-12.service
su - postgres
cp -R /var/lib/pgsql/12/data /var/lib/pgsql/12/data_orig
rm -rf /var/lib/pgsql/12/data/*

7. Ardından, temel yedeği doğru sahiplikle (veritabanı sistemi kullanıcısı, yani Postgres, içinde) almak için pg_basebackup aracını kullanın. Postgres kullanıcı hesabı) ve doğru izinlere sahip.

Aşağıdaki komutta seçenek:

  • -h – ana sunucu olan ana bilgisayarı belirtir.
  • -D – veri dizinini belirtir.
  • -U – bağlantı kullanıcısını belirtir.
  • -P – ilerleme raporlamasını etkinleştirir.
  • -v – ayrıntılı modu etkinleştirir.
  • -R – kurtarma yapılandırmasının oluşturulmasını sağlar: Bir standby.signal dosyası oluşturur ve bağlantı ayarlarını verilerin altındaki postgresql.auto.conf dosyasına ekler dizin.
  • -X – gerekli yazma öncesi günlük dosyalarını (WAL dosyaları) yedeklemeye dahil etmek için kullanılır. Stream değeri, yedekleme oluşturulurken WAL'nin akışını sağlamak anlamına gelir.
  • -C – yedeklemeye başlamadan önce -S seçeneğiyle adlandırılan bir çoğaltma yuvasının oluşturulmasını sağlar.
  • -S – çoğaltma yuvası adını belirtir.
pg_basebackup -h 10.20.20.9 -D /var/lib/pgsql/12/data -U replicator -P -v  -R -X stream -C -S pgstandby1
exit

8. Yedekleme işlemi tamamlandığında yedek sunucudaki yeni veri dizini ekran görüntüsündeki gibi görünmelidir. Bir standby.signal oluşturulur ve bağlantı ayarları postgresql.auto.conf dosyasına eklenir. ls komutunu kullanarak içeriğini listeleyebilirsiniz.

ls -l /var/lib/pgsql/12/data/

postgresql.conf dosyasında hot_standby parametresi açık (varsayılan değer) olarak ayarlanmışsa, bir çoğaltma yardımcı programı "Çalışır Beklemede" modunda çalışacaktır ve veri dizininde bir standby.signal dosyası var.

9. Artık ana sunucuya döndüğünüzde, pg_replication_slots görünümünü açtığınızda pgstandby1 adlı replikasyon yuvasını aşağıdaki gibi görebilmelisiniz.

su - postgres
psql -c "SELECT * FROM pg_replication_slots;"
exit

10. postgresql.auto.conf dosyasına eklenen bağlantı ayarlarını görüntülemek için cat komutunu kullanın.

cat /var/lib/pgsql/12/data/postgresql.auto.conf

11. Şimdi PostgreSQL hizmetini aşağıdaki gibi başlatarak yedek sunucuda normal veritabanı işlemlerine başlayın.

systemctl start postgresql-12

3. Adım: PostgreSQL Akış Çoğaltmasını Test Etme

12. Ana sunucu ile bekleme arasında başarılı bir bağlantı kurulduğunda, bekleme sunucusunda akış durumuna sahip bir WAL alıcı işlemi göreceksiniz, bunu kontrol edebilirsiniz pg_stat_wal_receiver görünümünü kullanarak.

psql -c "\x" -c "SELECT * FROM pg_stat_wal_receiver;"

ve ana/birincil sunucuda akış durumu ve eşzamansız sync_state ile karşılık gelen bir WAL gönderen işlemi varsa, bu pg_stat_replication pg_stat_replication görünümünü kontrol edebilirsiniz.

psql -c "\x" -c "SELECT * FROM pg_stat_replication;"

Yukarıdaki ekran görüntüsünden, akış çoğaltmasının eşzamansız olduğu görülmektedir. Bir sonraki bölümde, isteğe bağlı olarak eşzamanlı çoğaltmanın nasıl etkinleştirileceğini göstereceğiz.

13. Şimdi ana sunucuda bir test veritabanı oluşturarak çoğaltmanın düzgün çalışıp çalışmadığını test edin ve yedek sunucuda mevcut olup olmadığını kontrol edin.
[master]postgres=# VERİTABANI OLUŞTUR tecmint;
[bekleme]postgres=# \l

İsteğe bağlı: Eşzamanlı Çoğaltmayı Etkinleştirme

14. Eşzamanlı çoğaltma, birincil veritabanına ve beklemedeki/çoğaltmaya aynı anda bir işlem gerçekleştirme (veya veri yazma) olanağı sunar. Yalnızca işlem tarafından yapılan tüm değişiklikler bir veya daha fazla senkronize bekleme sunucusuna aktarıldığında işlemin başarılı olduğu doğrulanır.

Senkronize çoğaltmayı etkinleştirmek için synchronous_commit'in de açık olarak ayarlanması gerekir (bu, varsayılan değerdir, dolayısıyla herhangi bir değişikliğe gerek yoktur) ve ayrıca synchronous_standby_names parametresini de ayarlamanız gerekir. boş olmayan bir değere. Bu kılavuz için bunu herkese ayarlayacağız.

psql -c "ALTER SYSTEM SET synchronous_standby_names TO  '*';"

15. Ardından yeni değişiklikleri uygulamak için PostgreSQL 12 hizmetini yeniden yükleyin.

systemctl reload postgresql-12.service

16. Artık birincil sunucudaki WAL gönderen işlemini bir kez daha sorguladığınızda, akış durumunu ve sync_state değerini göstermelidir. güçlü>senkronizasyon.

psql -c "\x" -c "SELECT * FROM pg_stat_replication;"

Bu rehberin sonuna geldik. CentOS 8'de PostgreSQL 12 ana yedek veritabanı akışı çoğaltmasının nasıl kurulacağını gösterdik. Ayrıca PostgreSQL veritabanı kümesinde eşzamanlı çoğaltmanın nasıl etkinleştirileceğini de ele aldık.

Çoğaltmanın birçok kullanım alanı vardır ve her zaman BT ortamınıza ve/veya uygulamaya özel gereksinimlerinizi karşılayan bir çözümü seçebilirsiniz. Daha fazla ayrıntı için PostgreSQL 12 belgelerindeki Günlük Gönderimi Yedek Sunucuları konusuna gidin.