Pacemaker, Corosync ve Ayrılmış IP’ler ile CentOS 7 Üzerinde Yüksek Erişilebilirlik Kurulumu
Yüksek Erişilebilirlik (HA) sistemleri, kritik iş uygulamalarının ve servislerinin kesintisiz çalışmasını sağlamak için tasarlanmıştır. Beklenmedik donanım arızaları, yazılım hataları veya planlı bakımlar sırasında dahi servislerin ayakta kalmasını garanti ederler. Bu teknik makale, CentOS 7 işletim sistemi üzerinde Pacemaker ve Corosync kullanarak nasıl sağlam bir Yüksek Erişilebilirlik kümesi oluşturulacağını ve servisler için ayrılmış (sanal/kayan) IP adreslerinin nasıl yönetileceğini adım adım açıklayacaktır.
Yüksek Erişilebilirlik Neden Önemlidir?
Günümüzün dijital dünyasında, iş sürekliliği her zamankinden daha kritik hale gelmiştir. Bir uygulamanın veya servisin erişilemez olması, ciddi finansal kayıplara, müşteri memnuniyetsizliğine ve marka itibarı kaybına yol açabilir. Yüksek Erişilebilirlik çözümleri, bu riskleri minimize ederek sistemlerin arıza toleransını artırır ve servis kesintisi sürelerini (downtime) önemli ölçüde azaltır. Bu sayede, planlı veya plansız kesintilerde dahi kullanıcılar servislerden faydalanmaya devam edebilir.
Temel Bileşenler: Pacemaker, Corosync ve Ayrılmış IP’ler
Yüksek Erişilebilirlik kümesini oluşturan ana bileşenleri ve rollerini anlamak, kurulum sürecini kolaylaştıracaktır:
Corosync: Küme İletişim Katmanı
Corosync, kümedeki düğümler (sunucular) arasında güvenilir bir iletişim kanalı sağlayan açık kaynaklı bir küme motorudur. Düğümlerin birbirlerinin durumunu izlemesini, küme genelindeki yapılandırma değişikliklerini senkronize etmesini ve oybirliği (quorum) kararları almasını sağlar. Corosync olmadan, düğümler birbirlerinden habersiz kalır ve tutarlı bir küme durumu sürdürülemez. Temel görevleri şunlardır:
* Mesajlaşma: Küme düğümleri arasında hızlı ve güvenilir mesaj alışverişi.
* Üyelik Yönetimi: Kümedeki aktif düğümleri izleme, yeni düğümlerin katılımını ve ayrılan düğümlerin tespitini sağlama.
* Oybirliği (Quorum): Kümenin karar alabilmesi için yeterli sayıda düğümün aktif olmasını sağlama mekanizması. Çoğunluk ilkesine dayanır.
* Yapılandırma Senkronizasyonu: Küme yapılandırmasının tüm düğümlerde tutarlı olmasını sağlama.
Pacemaker: Küme Kaynak Yöneticisi
Pacemaker, Corosync’in sağladığı iletişim katmanı üzerinde çalışan güçlü bir küme kaynak yöneticisidir. Uygulamaları, servisleri, dosya sistemlerini ve IP adreslerini küme kaynakları olarak tanımlar ve bu kaynakların küme içindeki düğümler arasında nasıl dağıtılacağını ve yönetileceğini belirler. Pacemaker’ın ana sorumlulukları şunlardır:
* Kaynak Yönetimi: Uygulamaları ve servisleri (örneğin, Apache, Nginx, PostgreSQL, sanal IP adresleri) küme kaynakları olarak tanımlama ve yönetme.
* Kaynak Aracıları (Resource Agents): Her kaynak türü için özel olarak yazılmış komut dosyalarıdır (örneğin, IPaddr2 bir sanal IP’yi yönetir, apache Apache servisini yönetir). Bu aracılar, kaynakları başlatma, durdurma, izleme ve temizleme işlemlerini gerçekleştirir.
* Arıza Tespiti ve Kurtarma: Bir düğüm veya kaynak arızalandığında, Pacemaker otomatik olarak etkilenen kaynakları tespit eder ve onları sağlıklı bir düğüme taşır (failover).
* Kısıtlamalar (Constraints): Kaynakların belirli düğümlerde çalışmasını (location), belirli bir sırada başlatılmasını (order) veya birlikte çalışmasını (colocation) sağlayan kurallar tanımlama.
* STONITH (Shoot The Other Node In The Head) / Fencing: Arızalı veya şüpheli düğümlerin kümeden güvenli bir şekilde izole edilmesini sağlayan kritik bir mekanizmadır. Bu, “split-brain” senaryolarını önler; yani iki düğümün aynı anda aynı kaynağı yönetmeye çalışmasını ve veri bozulmasına yol açmasını engeller. STONITH cihazları (örneğin, güç anahtarları, IPMI, sanal makine API’leri) arızalı düğümün fiziksel olarak kapatılmasını sağlar.
Ayrılmış IP Adresleri (Virtual/Floating IPs)
Yüksek Erişilebilirlik kümesinde, servislerin kesintisiz erişilebilirliğini sağlamak için genellikle ayrılmış (sanal veya kayan) IP adresleri kullanılır. Bu IP adresleri, küme kaynakları olarak yapılandırılır ve herhangi bir anda yalnızca bir küme düğümü tarafından aktif olarak kullanılır. Bir düğüm arızalandığında, Pacemaker bu ayrılmış IP adresini otomatik olarak sağlıklı bir düğüme taşır. Bu sayede, istemciler her zaman aynı IP adresi üzerinden servise erişmeye devam eder ve altta yatan düğüm değişikliğini fark etmezler. IPaddr2 kaynak aracısı, Linux çekirdeğinin IP aliasing özelliklerini kullanarak bu tür IP adreslerini yönetir.
Ön Gereksinimler
Bu kurulum için aşağıdaki ön gereksinimlere sahip olmanız gerekmektedir:
* İki Adet CentOS 7 Sunucusu: Minimum iki düğümlü bir küme kurulacaktır. Üretim ortamları için genellikle en az üç düğüm önerilir (oybirliği için tek sayı).
* Sabit IP Adresleri: Her düğüm için benzersiz, sabit bir IP adresi.
* Ayrılmış IP Adresi: Küme tarafından yönetilecek ve servisler için kullanılacak, ağınızda boşta olan bir IP adresi.
* Ağ Erişimi: Düğümler arasında ve ayrılmış IP adresine erişim için uygun ağ yapılandırması.
* Root Yetkisi: Tüm kurulum ve yapılandırma adımları için root kullanıcısı veya sudo yetkisi.
* Temel Linux Bilgisi: Komut satırı kullanımı, dosya düzenleme vb.
Kurulum ve Yapılandırma Adımları
Bu bölümde, Pacemaker ve Corosync kümesinin adım adım nasıl kurulacağını ve bir ayrılmış IP adresinin nasıl yapılandırılacağını göreceğiz.
1. Düğüm Hazırlığı
Her iki CentOS 7 düğümünde de aşağıdaki adımları uygulayın.
Host Adlarını Ayarlama ve /etc/hosts Dosyasını Düzenleme
Her düğüme benzersiz bir host adı verin ve /etc/hosts dosyasını düzenleyerek düğümlerin birbirlerini host adlarıyla tanıyabilmesini sağlayın.
Düğüm 1 (node1):
hostnamectl set-hostname node1.example.com
Düğüm 2 (node2):
hostnamectl set-hostname node2.example.com
Her iki düğümde de /etc/hosts dosyasını aşağıdaki gibi düzenleyin (IP adreslerini kendi ağ yapılandırmanıza göre değiştirin):
# /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.10 node1.example.com node1
192.168.1.11 node2.example.com node2
SELinux ve Firewall’u Devre Dışı Bırakma (Geçici veya Yapılandırma)
Kurulumu basitleştirmek için SELinux’u ve Firewall’u devre dışı bırakabilir veya uygun kuralları ekleyebilirsiniz. Üretim ortamlarında, güvenlik nedeniyle uygun firewall kurallarını yapılandırmak ve SELinux’u permissive moda almak veya özel politikalar tanımlamak daha iyidir.
SELinux’u Devre Dışı Bırakma:
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
Firewall’u Devre Dışı Bırakma:
systemctl stop firewalld
systemctl disable firewalld
Firewall’u devre dışı bırakmak yerine, Corosync ve Pacemaker’ın ihtiyaç duyduğu portları açmak daha güvenlidir:
* Corosync: UDP portları 5404 ve 5405
* Pacemaker: TCP port 2224 (PCS daemon)
# Firewall kuralları (eğer firewalld'ı kapatmak istemiyorsanız)
firewall-cmd --permanent --add-service=high-availability
firewall-cmd --reload
Gerekli Paketleri Yükleme
Her iki düğümde de Pacemaker, Corosync ve yönetim araçlarını içeren pcs paketini yükleyin:
yum install -y pacemaker corosync pcs resource-agents policycoreutils-python
resource-agents paketi, IPaddr2 gibi çeşitli kaynak aracılarının komut dosyalarını içerir. policycoreutils-python ise SELinux yönetimi için gereklidir.
2. Hacluster Kullanıcısı Parolasını Ayarlama
pcs komutu, küme yönetimini hacluster adlı bir sistem kullanıcısı aracılığıyla yapar. Bu kullanıcının parolasını her iki düğümde de ayarlamanız gerekir:
passwd hacluster
Yeni parolayı girin ve onaylayın.
3. Küme Oluşturma ve Başlatma
Küme oluşturma ve yönetimi için pcs komutunu kullanacağız. Bu adımlar genellikle sadece bir düğümden (örneğin node1) yapılır.
PCS Daemon’ı Başlatma ve Etkinleştirme
Her iki düğümde de pcsd servisini başlatın ve sistem başlangıcında otomatik olarak başlaması için etkinleştirin:
systemctl start pcsd
systemctl enable pcsd
Küme Kimlik Doğrulaması
pcs komutunun küme düğümlerine erişebilmesi için kimlik doğrulamasını yapın. Bu işlemi yalnızca bir düğümden (örneğin node1) gerçekleştirin:
pcs cluster auth node1.example.com node2.example.com
hacluster kullanıcısının parolasını girin.
Küme Yapılandırmasını Oluşturma
Şimdi Corosync ve Pacemaker kümesini oluşturun. Bu komut, Corosync yapılandırmasını oluşturacak ve küme düğümlerini tanımlayacaktır. Yine sadece bir düğümden (örneğin node1) çalıştırın:
pcs cluster setup --name my_ha_cluster node1.example.com node2.example.com
my_ha_cluster yerine kümenize istediğiniz ismi verebilirsiniz.
Küme Başlatma
Oluşturulan kümeyi başlatın. Bu komut, küme servislerini (Corosync ve Pacemaker) tüm düğümlerde başlatacaktır:
pcs cluster start --all
Küme Durumunu Kontrol Etme
Kümenin başarıyla başladığından ve düğümlerin küme üyesi olarak görüldüğünden emin olun:
pcs status
Çıktıda her iki düğümün de “Online” olduğunu ve herhangi bir kaynağın henüz yapılandırılmadığını görmelisiniz.
4. Küme Özelliklerini Yapılandırma
Kümenin davranışını kontrol eden bazı temel özellikleri ayarlayalım.
STONITH’i Devre Dışı Bırakma (Geçici)
STONITH (fencing), split-brain senaryolarını önlemek için kritik öneme sahiptir. Ancak, kurulumun ilk aşamalarında test amaçlı olarak geçici olarak devre dışı bırakılabilir. Üretim ortamında STONITH mutlaka etkinleştirilmelidir.
pcs property set stonith-enabled=false
Oybirliği Politikası (Quorum Policy)
İki düğümlü bir kümede, bir düğümün çökmesi durumunda kümenin oybirliğini (quorum) kaybetme riski vardır (çünkü 2 düğümden 1’i %50’dir, çoğunluk değildir). Bu durumda, no-quorum-policy özelliğini ignore olarak ayarlayarak, kalan tek düğümün kaynakları yönetmeye devam etmesini sağlayabiliriz. Ancak bu, STONITH olmadan split-brain riski taşır. Üç veya daha fazla düğümlü kümelerde bu genellikle gerekli değildir.
pcs property set no-quorum-policy=ignore
Not: Üretim ortamında 2 düğümlü bir küme için, no-quorum-policy=ignore kullanmak yerine, bir üçüncü düğüm (witness node) eklemek veya bir dış oybirliği aracı kullanmak daha güvenlidir. En iyi uygulama, tek sayıda düğümle başlamaktır.
5. STONITH (Fencing) Yapılandırması (Kritik!)
Daha önce de belirtildiği gibi, STONITH (Shoot The Other Node In The Head) veya fencing, Yüksek Erişilebilirlik kümelerinin en kritik bileşenlerinden biridir. Bir düğümün arızalı olduğu düşünüldüğünde, diğer düğümlerin bu düğümün kaynaklara erişimini tamamen kesmesini sağlar. Bu, “split-brain” durumunu, yani iki düğümün aynı anda aynı kaynağı (örneğin, aynı disk bölümünü veya sanal IP’yi) yönetmeye çalışmasını engeller.
STONITH kaynakları, genellikle IPMI, iLO, DRAC gibi donanım yönetim arayüzleri, sanallaştırma platformu API’leri (VMware vCenter, KVM libvirt) veya ağ anahtarları (Power Over Ethernet) aracılığıyla diğer düğümlerin gücünü keserek çalışır.
Örnek STONITH Yapılandırması (Sanal Ortam için fence_virt)
Eğer sanal makineler üzerinde çalışıyorsanız, fence_virt sanal makineyi kapatmak için libvirt API’sini kullanabilir. Fiziksel sunucular için fence_ipmilan veya fence_drac gibi ajanlar kullanılır.
İlk olarak, fence-agents-all paketini yüklemeniz gerekebilir:
yum install -y fence-agents-all
Ardından, STONITH kaynağını tanımlayın. Bu örnekte, fence_virt kullanacağız ve her düğümün diğer düğümü nasıl “fence” edeceğini belirteceğiz.
# STONITH kaynağını tanımlayın
pcs stonith create fence_node1_virt fence_virt pcmk_host_list=node1.example.com ip=KVM_HOST_IP_ADRESI port=5900 login=root passwd=KVM_ROOT_PAROLASI
pcs stonith create fence_node2_virt fence_virt pcmk_host_list=node2.example.com ip=KVM_HOST_IP_ADRESI port=5900 login=root passwd=KVM_ROOT_PAROLASI
Not: Bu örnekte, KVM_HOST_IP_ADRESI, sanal makinelerin üzerinde çalıştığı fiziksel KVM ana makinesinin IP adresidir. port ve login/passwd libvirt bağlantısı için gerekebilir. Gerçek bir senaryoda, bu parametreler kullandığınız fencing aracına ve altyapınıza göre değişecektir.
STONITH’i etkinleştirin:
pcs property set stonith-enabled=true
Doğru STONITH yapılandırması, HA kümesinin güvenilirliği için vazgeçilmezdir. Yapılandırmadan sonra, STONITH’in çalıştığını test etmek kritik bir adımdır.
6. Sanal IP Kaynağını Oluşturma
Şimdi küme tarafından yönetilecek ayrılmış IP adresini tanımlayalım. Bu, IPaddr2 kaynak aracısını kullanır.
# Sanal IP adresini tanımlayın
vip: Küme tarafından yönetilecek sanal IP adresi (örneğin, 192.168.1.100)
cidr_netmask: Ağ maskesi (örneğin, 24)
nic: Sanal IP'nin bağlanacağı ağ arayüzü (örneğin, eth0 veya eno16777736)
pcs resource create Virtual_IP ocf:heartbeat:IPaddr2 \
ip=192.168.1.100 \
cidr_netmask=24 \
nic=eth0 \
op monitor interval=10s
* Virtual_IP: Kaynağa verdiğimiz isim.
* ocf:heartbeat:IPaddr2: Kaynak aracısının türü. ocf (Open Cluster Framework), heartbeat (sağlayıcı), IPaddr2 (aracı adı).
* ip: Sanal IP adresi.
* cidr_netmask: Ağ maskesi.
* nic: Sanal IP’nin atanacağı ağ arayüzü. Kendi sisteminizdeki arayüz adını kontrol edin (ip a).
* op monitor interval=10s: Kaynağın her 10 saniyede bir izlenmesini sağlar.
Bu komutu çalıştırdıktan sonra, pcs status komutu ile sanal IP adresinin hangi düğümde aktif olduğunu görebilirsiniz.
7. Servis Kaynağı Oluşturma (Apache Örneği)
Sanal IP adresini kullanacak bir servis örneği olarak basit bir Apache web sunucusu kuralım.
Her iki düğümde de Apache’yi yükleyin:
yum install -y httpd
Apache servisini başlangıçta otomatik başlamasını engelleyin, çünkü Pacemaker onu yönetecek:
systemctl disable httpd
systemctl stop httpd
Şimdi Apache servisini bir küme kaynağı olarak tanımlayın:
pcs resource create Webserver ocf:heartbeat:apache \
configfile=/etc/httpd/conf/httpd.conf \
statusurl="http://127.0.0.1/server-status" \
op monitor interval=30s
* Webserver: Apache kaynağına verdiğimiz isim.
* ocf:heartbeat:apache: Apache kaynak aracısı.
* configfile: Apache yapılandırma dosyasının yolu.
* statusurl: Apache’nin durumunu kontrol etmek için URL (mod_status etkin olmalı).
* op monitor interval=30s: Kaynağın her 30 saniyede bir izlenmesini sağlar.
8. Kaynak Grupları ve Kısıtlamalar
Genellikle, bir sanal IP adresi ve bir servis (örneğin Apache) birlikte çalışmalıdır. Bu tür ilişkili kaynakları bir “kaynak grubu” içinde bir araya getirmek, onların aynı düğümde çalışmasını ve birlikte hareket etmesini sağlar.
Kaynak Grubu Oluşturma
Sanal IP ve Apache servisini bir kaynak grubunda birleştirin:
pcs resource group add WebServiceGroup Virtual_IP Webserver
Bu komut, Virtual_IP ve Webserver kaynaklarını WebServiceGroup adlı bir grupta toplar. Pacemaker, gruptaki kaynakları her zaman aynı düğümde başlatır ve sırayla yönetir. Gruptaki kaynaklar tanımlandıkları sıraya göre başlatılır ve ters sıraya göre durdurulur.
Kısıtlamalar (İsteğe Bağlı, Karmaşık Senaryolar İçin)
Kaynak grupları birçok senaryo için yeterli olsa da, bazen daha spesifik kısıtlamalar gerekebilir:
* Colocation (Birlikte Yerleşim): İki kaynağın aynı düğümde çalışmasını sağlar.
pcs constraint colocation add Webserver with Virtual_IP INFINITY
* Order (Sıra): Bir kaynağın diğerinden önce başlatılmasını sağlar.
pcs constraint order Virtual_IP then Webserver
* Location (Konum): Bir kaynağın belirli bir düğümde çalışmasını veya çalışmamasını sağlar.
pcs constraint location Webserver prefers node1.example.com
Kaynak grubu kullandığınızda, colocation ve order kısıtlamaları otomatik olarak yönetilir, bu yüzden yukarıdaki örnekler sadece bilgi amaçlıdır ve bir grup içindeki kaynaklar için genellikle ek olarak tanımlanmazlar.
pcs status komutunu tekrar çalıştırarak tüm kaynakların durumunu ve hangi düğümde çalıştığını kontrol edin. Sanal IP’nin ve Apache’nin tek bir düğümde aktif olduğunu görmelisiniz.
9. Failover Testi
Kümenizin doğru çalıştığını doğrulamak için failover testleri yapmanız önemlidir.
1. Sanal IP’ye Ping Atma: Sanal IP adresine (192.168.1.100) ping atarak erişilebilir olduğunu doğrulayın.
2. Web Sunucusunu Kontrol Etme: Web tarayıcınızdan sanal IP adresine giderek Apache’nin çalıştığını kontrol edin.
3. Aktif Düğümü Tespit Etme: pcs status komutuyla sanal IP ve Apache’nin hangi düğümde çalıştığını görün (örneğin node1).
4. Düğümü Kapatma/Durdurma: Aktif olan düğümü kapatın veya Pacemaker servisini durdurun:
# Aktif düğümde (örneğin node1)
systemctl stop pacemaker
# Veya
reboot
5. Failover’ı Gözlemleme: Diğer düğümde (node2) pcs status komutunu tekrar çalıştırın. Sanal IP ve Apache servisinin otomatik olarak node2‘ye taşındığını ve orada çalıştığını görmelisiniz.
6. Erişilebilirliği Tekrar Kontrol Etme: Sanal IP’ye tekrar ping atın ve web tarayıcınızdan erişimi kontrol edin. Her şey yolundaysa, servis kesintiye uğramadan diğer düğüme taşınmış demektir.
Bu testleri STONITH açıkken de yapmanız ve STONITH’in beklenen şekilde çalıştığından emin olmanız kritik öneme sahiptir.
10. İzleme ve Yönetim
* pcs status: Küme durumunu, düğümleri ve kaynakları gösterir.
* crm_mon -1: Küme durumunun anlık görüntüsünü sağlar.
* pcs resource show : Belirli bir kaynağın detaylarını gösterir.
* pcs resource move : Kaynağı manuel olarak başka bir düğüme taşır.
* pcs resource disable : Kaynağı devre dışı bırakır.
* pcs resource enable : Kaynağı etkinleştirir.
* journalctl -f -u pacemaker -u corosync: Pacemaker ve Corosync loglarını canlı olarak izler.
En İyi Uygulamalar
* STONITH’i Asla Devre Dışı Bırakmayın: Üretim ortamlarında STONITH olmadan bir HA kümesi kurmak, veri bozulması ve servis kesintisi riskini artırır.
* Tek Sayıda Düğüm: Oybirliği mekanizması nedeniyle, genellikle 3 veya daha fazla tek sayıda düğümle başlamak daha kararlıdır. İki düğümlü kümeler, no-quorum-policy=ignore ayarı veya gelişmiş oybirliği çözümleri olmadan riskli olabilir.
* Ayrı Ağlar: Küme iletişimini ve servis trafiğini ayırmak için ayrı ağ arayüzleri kullanmak performansı ve güvenilirliği artırabilir.
* Düzenli Testler: Kümenin failover yeteneklerini düzenli olarak test edin.
* Yama ve Güncelleme: Küme düğümlerini ve yazılımlarını güncel tutun.
* Kapsamlı İzleme: Kümenin durumunu, kaynaklarını ve düğümlerini izlemek için merkezi bir izleme sistemi kullanın.
* Belgeleme: Küme yapılandırmasını, kaynaklarını ve bakım prosedürlerini belgeleyin.
Sonuç
Bu makale, CentOS 7 üzerinde Pacemaker ve Corosync kullanarak Yüksek Erişilebilirlik kümesi oluşturma ve ayrılmış IP adreslerini yönetme sürecini detaylı bir şekilde açıklamıştır. Adım adım kurulum, yapılandırma ve test süreçleri ile birlikte, STONITH gibi kritik bileşenlerin önemi vurgulanmıştır. Doğru bir şekilde yapılandırılmış bir HA kümesi, iş kritik servislerinizin kesintisiz erişilebilirliğini sağlayarak iş sürekliliğinize önemli katkılar sunacaktır. Unutulmamalıdır ki, her ortamın kendine özgü gereksinimleri olabilir ve bu rehber genel bir başlangıç noktasıdır. Üretim ortamlarında kapsamlı testler ve özelleştirmeler yapılması şiddetle tavsiye edilir.