PostgreSQL 9.1'de yük devretmeyi otomatikleştirme


18

PostgreSQL 9.1'de otomatik yük devretme için iki özdeş sunucu nasıl kurulur?

işletim sistemi

Centos 5
PostgreSQL 9.1 kaynaktan derlendi
Postgres kullanıcı hesabı her iki makinede de mevcuttur ve her iki makineye bağlanmak için ssh şifresiz bir anahtara sahiptir.

Geçerli Kurulumum:

Ana sunucu yapılandırması:

postgresql.conf:

listen_address = '*'
wal_level = hot_standby
max_wal_senders = 3
checkpoint_segments = 16    
wal_keep_segments = 8 
archive_mode = on    
archive_command = 'cp "%p" /opt/pgsql91/archive/"%f"'  

pg_hba.conf:

 host  replication   all   10.0.66.1/32      trust
 host  replication   all   10.0.66.2/32      trust

Bekleme Sunucusu

postgresql.conf ve pg_hba.conf ana sunucuda yapılandırılanla aynıdır.

recovery.conf:

 standby_mode = 'on'
 primary_conninfo = 'host=10.0.66.1'
 trigger_file = '/opt/pgsql91/data/trigger.txt'

HzRoot sayesinde, sunucuyu bekleme modundan master'a nasıl geçireceğimizi şimdi anlıyorum.

Aşağıdaki komutları kullanarak, yeni slave'i yeni master ile senkronize edebilir ve daha sonra replikasyon yedekleme ve çalıştırma elde edebilirim.

Yeni master'da (10.0.66.2)

  1. su - postgres
  2. / opt / pgsql91 / data / içindeki tetikleyici.txt'ye dokunun
  3. recovery.conf, recovery.done olur
  4. psql -c "; SEÇ pg_start_backup ('yedekleme', doğru)";
  5. rsync -a -v -e ssh / opt / pgsql91 / data / 10.0.66.1:/opt/pgsql91/data/ - postmaster.pid'i ekleyin
  6. psql -c "; SEÇ pg_stop_backup ()";

Yeni köle (10.0.66.1)

  1. recovery.conf dosyasını oluşturun: cp recovery.done to recovery.conf
  2. vi recovery.conf ip adresini değiştir: Primary_conninfo = 'host = 10.0.66.2'
  3. postgresql başlat

Sorularım şu an:

  1. Rolleri değiştirmenin doğru yolu bu mu?
  2. Kimse bu süreci otomatikleştirdi, eğer öyleyse ne yaptınız?
  3. Eşzamanlı çoğaltma etkinse, yeni ana sunucunun, slave'in yanıt vermesini beklediği için herhangi bir işlem yapmayacağını fark ettim. Ancak diğer sunucu, eski master kapalı olduğu için köle yoktur. Bu doğru mu veya yeni bağımlı çalışırken eşzamanlı çoğaltmayı geçici olarak devre dışı bırakmam gerekir mi?

1. evet doğru 2. olabilir bu süreci otomatikleştirmek değil daha iyi. 3. en az 2 köle ve 1 master gerekir. çünkü dediğin gibi senkronize et. çoğaltma, eşitleme işlemlerini gerçekleştirmek için en az 2 düğüme ihtiyaç duyar. sadece bir ana düğüm varsa, taahhüt edemeyeceksiniz ..
sftsz

adım 4, 5 ve 6 yeni master'da gerekli değildir, çünkü başlangıç ​​için çoğalıyorsunuzdur. İkincisi, ya master öldüyse ve çevrimdışıysa - ona bağlanamazsınız. Adım 4,5, ve 6 tipik olarak çoğaltma havuzuna katılan yeni bir ikincil düğüm üzerinde gerçekleştirilir.
Eric

@Bununla oynadığım gibi, eski ustayı çalışma durumuna geri getirmek için adım 4,5,6 gereklidir. Bekleme modunu yeni birincil yapmak hemen yeni WAL girişi yapar, bu yüzden şimdi eski ustanın 1 girişi ileride. Eski master'ı bekleme modunda başlatmak bana hatalar attı, bu yüzden yeni master ile senkronize etmek için eski master'da 4,5,6 adımlarını yapmak zorunda kaldım (yeni master'dan tüm xlog'u aktarabilen pg_basebackup kullanarak) - postgres 4.5,6 adımlarını değiştirir> = 9.1 sanırım). Doğru muyum yoksa yanlış bir şey mi yaptım ve bu gerekli değil mi?
Dalibor Filus

Yanıtlar:


8

Repmrg'ye göz atın :

repmgr, DBA'lara ve Sistem yöneticilerine PostgreSQL veritabanları kümesini yönetme konusunda yardımcı olan bir dizi açık kaynak aracıdır.

PostgreSQL 9'da sunulan Otomatik Yedekleme özelliğinden yararlanarak repmgr, yüksek kullanılabilirlik ve ölçeklenebilirlik gereksinimleri ile veritabanı kurma ve yönetme işlemini büyük ölçüde basitleştirir.

repmgr yönetimi ve günlük yönetimi basitleştirir, üretkenliği artırır ve PostgreSQL kümesinin genel maliyetlerini şu şekilde azaltır:

  • çoğaltma işleminin izlenmesi; DBA'ların yüksek yayın yapmalarına izin vermek
  • geçişler ve başarısızlıklar gibi kullanılabilirlik işlemleri.

İki şey yapar:

  1. repmgr: kümenizdeki görevleri gerçekleştiren ve sonra çıkan komut programı
  2. repmgrd: kümeyi izleyen ve uzaktan eylemleri otomatikleştirebilen yönetim ve izleme arka plan programı.

Otomatik yük devretme için repmgrd hile yapar ve ağınızda pgPool gibi bir SPOF değildir. Bununla birlikte, tüm deamonları izlemek ve başarısızlıktan sonra onları geri getirmek hala önemlidir.

Sürüm 2.0, RPM'ler de dahil olmak üzere piyasaya sürülmek üzere.


Merhaba Frank, cevabınız için teşekkür ederim. Repmrg duymadım ve kesinlikle bir deneyin.
Craig Efrein

Tekrar merhaba Frank, Repmgr için teşekkürler, tam da aradığım şey buydu. Sonunda bugün denemeliyim.
Craig Efrein

4

recovery.conf dosyanızda postgres'i master'dan slave'e yük devretmeye bildiren bir satır eklemelisiniz. eklemelisin

trigger_file = '/any/file/to/trigger'

bu dosyayı verilen yolda oluşturduğunuzda. düğümler değişecektir. (dosya sadece bir tetikleyici olan hiçbir şey içermez)

akış çoğaltması hakkında ek bilgi bulabilirsiniz

Öte yandan, bazı hilelerle otomatik olarak oluşturulabilir, ancak izleme araçlarını kullanmak ve manuel olarak başarısız yapmak daha iyi olacaktır.


Cevap için teşekkürler. Test edebilmem birkaç gün alabilir ama kesinlikle size geri döneceğim.
Craig Efrein

Süreci büyük ölçüde düzene sokmamda bana yardımcı olan trigger_file cevabı için +1 vereceğim. Süreci tam olarak nasıl otomatikleştireceğiniz, tüm cevap değildir. Fark ettiğim bir diğer şey de, master kapalıyken işlemlerin tamamlanmayacağı, çünkü ustanın onaylamasını beklediği idi. Bu, zaman uyumsuz çoğaltma kullanılarak çözüldü
Craig Efrein

Bu oldukça harika. PostgreSQL'in çoğaltma uygulamasında esneklik eksikliği hakkında birçok eleştirim var, ancak bu, yük devretmeyi ele almanın harika ve basit bir yoludur.
Aaron Brown

1
Bununla birlikte, ustanın kendisi hala çalışırken bile ana rolü üstlenir (böylece iki efendiniz vardır). Bu postgres tarafından otomatikleştirilmez.
Dalibor Filus

0

Bunun için pgpool-II kullanmayı düşünen var mı?

http://pgpool.projects.postgresql.org/contrib_docs/simple_sr_setting/index.html

PostgreSQL için çoğaltma ayarlıyorum. Eski usta geri geldiğinde zor kısım ortaya çıkıyor gibi görünüyor.

Okuduğum kadarıyla, pgpool bunun çoğunu otomatikleştirebilir gibi görünüyor. Ancak PostgreSQL 9.1 zaten mevcut çoğaltma özellikleri kaldıraçlar emin değilim.


1
pgPool tek bir arıza noktasıdır, aşağı indiğinde her şeyi kaybedersiniz.
Frank Heikens

1
Cevabınız için teşekkür ederim. PGPool II'yi hem CentOS hem de Debian'da karışık sonuçlarla denedim ve sonunda vazgeçtim.
Craig Efrein

1
Neden pgpool II'yi HAproxy ile kullanmıyorsunuz? Bir kalp atışı ve yüzen ip dinleme ile?
mikiemorales

Sadece tarihsel referans için, pgpool-ii şu anda Windows'ta da çalışmıyor.
2014'te
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.