PostgreSQL, genellikle tek bir instance ile kurulup çalıştırılır; ancak günümüz sunucu mimarilerinde ve uygulama ortamlarında birtakım durumlarda aynı sistem üzerinde birden fazla PostgreSQL instance’ı çalıştırmak gerekliliği ortaya çıkmaktadır. İkinci bir instance oluşturma ihtiyacı şu durumlarda gündeme gelebilir:
- Geliştirme ve Test Ortamları: Üretim veritabanınızdan bağımsız, izole bir test veya geliştirme amaçlı veritabanı ortamı oluşturmak.
- Farklı Uygulama veya Kullanım Senaryoları: Farklı uygulamaların veya modüllerin birbirinden izole, farklı konfigürasyonlarla ve portlarda çalışmasını sağlamak.
- Kaynak ve Performans Yönetimi: Tek bir instance üzerinde yoğun yük altında performans düşüşleri yaşanabiliyorsa, ayrı instance’lar sayesinde kaynakları daha verimli kullanabilmek.
- Güvenlik ve Yedekleme Stratejileri: Her instance için ayrı yedekleme, erişim kontrolü ve yapılandırma ayarları yaparak, olası veri kaybı veya güvenlik ihlallerine karşı önlem almak.
Özellikle Red Hat tabanlı sistemlerde (ör: RHEL, CentOS, Fedora), PostgreSQL kurulumu varsayılan olarak sistem genelinde tek bir instance ile yapılandırılmış olabilmektedir. Ancak yukarıda belirtilen nedenlerden dolayı, bu sistemlerde ikinci bir instance oluşturma işlemi daha farklı bir konfigürasyon ve yönetim yaklaşımı gerektirir. Bu dokümanda, böyle bir işlemin nasıl gerçekleştirileceği, doğru dizin seçimi, initdb komutunun doğru kullanımı ve systemd servis dosyası oluşturma adımları detaylı olarak ele alınacaktır.Verilen komut satırları PostgreSQL 13 için geçerli olup versiyon değişikliklerinde komut değşikliği olabilmektedir.
1. İkinci Instance İçin Veri Dizinini Oluşturma
sudo mkdir /var/lib/pgsql/<version>/second_instance
sudo chown postgres:postgres /var/lib/pgsql/<version>/second_instance
sudo chmod 700 /var/lib/pgsql/<version>/second_instance
2. Yeni Instance’ı Başlatacak Veri Dizininin İnit Edilmesi
sudo -u postgres /usr/pgsql-<version>/bin/initdb -D /var/lib/pgsql/<version>/second_instance
Örneğin PostgreSQL 13 için:
sudo -u postgres /usr/pgsql-13/bin/initdb -D /var/lib/pgsql/13/second_instance
3. PostgreSQL Yapılandırması
sudo vi /var/lib/pgsql/<version>/second_instance/postgresql.conf
Dosyada port
satırını bul ve düzenle::
port = 5433 #Port bilgisini değiştirebilirsiniz.
4. Yeni Instance için Systemd Servis Dosyası Oluşturma
Yeni instance’ı kontrol edebilmek adına /etc/systemd/system
dizininde bir servis dosyası oluştur. Örneğin, dosya ismini postgresql-second.service
olarak belirleyebilirsin.
[Unit]
Description=PostgreSQL Second Instance Service
After=network.target
[Service]
Type=forking
User=postgres
Group=postgres
ExecStart=/usr/pgsql-<version>/bin/pg_ctl start -D /var/lib/pgsql/second_instance -s -o "-p 5433" -w -t 300
ExecStop=/usr/pgsql-<version>/bin/pg_ctl stop -D /var/lib/pgsql/second_instance -s -m fast
ExecReload=/usr/pgsql-<version>/bin/pg_ctl reload -D /var/lib/pgsql/second_instance -s
PIDFile=/var/lib/pgsql/second_instance/postmaster.pid
TimeoutSec=300
[Install]
WantedBy=multi-user.target
Yine, <version>
kısmını PostgreSQL sürümünüze göre değiştirmeyi unutmayın. Örneğin PostgreSQL 13 için:
[Unit]
Description=PostgreSQL Second Instance Service
After=network.target
[Service]
Type=forking
User=postgres
Group=postgres
ExecStart=/usr/pgsql-13/bin/pg_ctl start -D /var/lib/pgsql/second_instance -s -o "-p 5433" -w -t 300
ExecStop=/usr/pgsql-13/bin/pg_ctl stop -D /var/lib/pgsql/second_instance -s -m fast
ExecReload=/usr/pgsql-13/bin/pg_ctl reload -D /var/lib/pgsql/second_instance -s
PIDFile=/var/lib/pgsql/second_instance/postmaster.pid
TimeoutSec=300
[Install]
WantedBy=multi-user.target
5. Servis Dosyasını Yükleme ve Kontrol Etme
Yeni oluşturduğunuz servis dosyasını systemd’ye tanıtmak için daemon’u yeniden yükleyin:
sudo systemctl daemon-reload
PostgreSQL instance’ı başlat:
sudo systemctl start postgresql-second.service
Durumunu kontrol etmek için:
sudo systemctl status postgresql-second.service
Eğer servis başarılı bir şekilde çalışıyorsa, otomatik başlatma için etkinleştirebilirsiniz:
sudo systemctl enable postgresql-second.service
Notlar
- Port Ayarları: İki instance aynı anda çalışırken port çakışması yaşamamak için her instance için farklı bir port numarası belirleyin.
- Sürüm ve Diziner: PostgreSQL kurulumunuzun dizin yapısı ve sürümüne göre
/usr/pgsql-<version>/bin/
yolu gibi kısımları uyarlamanız gerekebilir. - Güvenlik: Veri dizinleri ve servis dosyaları üzerinde doğru izinlerin tanımlandığından emin olun.