, ,

Red Hat Enterprise Linux High-Available Cluster


Günümüzün rekabetçi dijital dünyasında, iş uygulamalarının ve servislerinin kesintisiz çalışması, kurumların başarısı için hayati önem taşımaktadır. Donanım arızaları, yazılım hataları veya planlı bakım çalışmaları gibi çeşitli nedenlerle meydana gelebilecek kesintiler, ciddi finansal kayıplara, itibar zedelenmesine ve müşteri memnuniyetsizliğine yol açabilir. Bu riskleri en aza indirmek ve sistem sürekliliğini sağlamak amacıyla Yüksek Erişilebilirlik (High Availability – HA) çözümleri devreye girmektedir.

Red Hat Enterprise Linux (RHEL) gibi kurumsal düzeydeki işletim sistemleri için sunulan HA çözümleri arasında Pacemaker, açık kaynak kodlu ve güçlü bir küme kaynak yöneticisi olarak öne çıkmaktadır. Pacemaker, Corosync küme iletişim katmanıyla birlikte çalışarak, kritik servislerin ve uygulamaların bir sunucuda meydana gelebilecek bir arıza durumunda otomatik olarak başka bir sunucuya devredilmesini sağlar. Bu sayede, son kullanıcılar için kesintisiz bir deneyim sunulurken, sistem yöneticileri için de proaktif bir hata yönetimi ve kurtarma mekanizması oluşturulur.

Bu makalede, Red Hat ortamında Pacemaker tabanlı bir HA cluster mimarisinin temel kavramlarını, bileşenlerini, yapılandırma adımlarını ve yönetim pratiklerini detaylı bir şekilde inceleyeceğiz. Amacımız, okuyuculara Pacemaker’ın sunduğu avantajları ve bu teknolojiyi kendi sistemlerinde nasıl etkin bir şekilde kullanabileceklerini aktarmaktır.

Cluster Nedir ?

En basit tanımıyla cluster (küme), birden fazla bilgisayarın (bunlara genellikle düğüm veya node denir) birbirine bağlanarak tek bir sistem gibi birlikte çalışmasıdır. Bu bilgisayarlar, ortak bir amaca hizmet etmek, performansı artırmak, iş yükünü dağıtmak veya sistemin kesintisiz çalışmasını sağlamak gibi çeşitli nedenlerle bir araya getirilirler.

Cluster’ların Temel Özellikleri ve Amaçları:

  • Birlikte Çalışma: Kümedeki bilgisayarlar, belirli görevleri yerine getirmek için koordineli bir şekilde çalışır.
  • Kaynak Paylaşımı: İşlem gücü, bellek, depolama alanı gibi kaynaklar küme içerisinde paylaşılabilir veya dağıtılabilir.
  • Ağ Bağlantısı: Düğümler genellikle yüksek hızlı bir ağ üzerinden birbirleriyle iletişim kurar.
  • Tek Sistem İmajı (Opsiyonel): Bazı küme türlerinde, kullanıcı veya uygulamalar için tüm küme tek bir güçlü bilgisayar gibi görünebilir.

Cluster Türleri ve Kullanım Alanları:

Cluster’lar farklı amaçlara yönelik olarak çeşitli türlerde yapılandırılabilir. En yaygın türlerden bazıları şunlardır:

  1. Yüksek Erişilebilirlik (High Availability – HA) Cluster’ları:
    • Amaç: Sistemlerin ve uygulamaların kesintisiz çalışmasını sağlamak.
    • Çalışma Prensibi: Bir düğümde (sunucuda) bir arıza meydana geldiğinde, üzerindeki görevler otomatik olarak kümedeki başka bir sağlıklı düğüme devredilir (bu işleme “failover” denir). Bu sayede kullanıcılar kesintiyi fark etmez veya minimum düzeyde etkilenir. Sizin makalenizin konusu olan Pacemaker da bu tür cluster’ların yönetiminde kilit bir rol oynar.
  2. Yük Dengeleme (Load Balancing) Cluster’ları:
    • Amaç: Gelen istekleri (örneğin bir web sitesine gelen trafiği) birden fazla sunucuya dağıtarak performansı artırmak ve tek bir sunucunun aşırı yüklenmesini önlemek.
    • Çalışma Prensibi: Bir yük dengeleyici, istekleri kümedeki sunucular arasında belirli algoritmalara göre paylaştırır.
  3. Yüksek Performanslı Hesaplama (High-Performance Computing – HPC) Cluster’ları:
    • Amaç: Çok büyük hesaplama gücü gerektiren bilimsel araştırmalar, karmaşık simülasyonlar veya veri analizleri gibi görevleri gerçekleştirmek.
    • Çalışma Prensibi: Çok sayıda işlemcinin paralel olarak çalışmasıyla devasa hesaplama problemleri çözülür.
  4. Depolama (Storage) Cluster’ları:
    • Amaç: Büyük miktarda veriyi güvenli, yedekli ve yüksek erişilebilirlikte saklamak.
    • Çalışma Prensibi: Veriler birden fazla depolama ünitesine dağıtılır ve genellikle yedeklenir.

HA Cluster (Küme) Bileşenleri

Küme Düğümleri (Cluster Nodes):

  • Bunlar, kümenin üyesi olan fiziksel veya sanal sunuculardır.
  • Her düğüm, kümelenmiş servisleri veya uygulamaları çalıştırabilecek kapasitede olmalıdır.
  • Genellikle en az iki düğüm bulunur (aktif-pasif veya aktif-aktif konfigürasyonlar için). Daha fazla düğüm, yedeklilik ve ölçeklenebilirlik sağlayabilir.

Küme İletişim Katmanı (Cluster Communication Layer / Interconnect):

  • Düğümlerin birbirleriyle “sağlıklı” (heartbeat) olup olmadıklarını kontrol etmek, küme durumunu senkronize etmek ve mesajlaşmak için kullandıkları özel bir ağ bağlantısıdır.
  • Bu iletişim genellikle yedekli ağ arayüzleri üzerinden sağlanır (bonding) ki tek bir ağ kartı veya kablo arızası iletişimi kesmesin.
  • Corosync, Red Hat ortamlarında bu katmanda sıklıkla kullanılan bir bileşendir. Düğümler arasında güvenilir mesajlaşma ve üyelik yönetimi sağlar.

Paylaşımlı Depolama (Shared Storage) (Opsiyonel ama Yaygın):

  • Birçok HA kümesinde, kümelenmiş uygulamaların ve servislerin verilerinin saklandığı, tüm düğümler tarafından erişilebilen merkezi bir depolama alanıdır.
  • Bir düğüm arızalandığında, diğer düğüm bu paylaşımlı depolamadaki verilere erişerek servisi devralabilir.
  • Yaygın paylaşımlı depolama teknolojileri arasında SAN (Storage Area Network), NAS (Network Attached Storage) veya iSCSI bulunur.
  • Alternatif: Paylaşımlı depolama yerine DRBD (Distributed Replicated Block Device) gibi çözümlerle düğümler arasında veri senkronizasyonu da sağlanabilir. Bu durumda her düğümün kendi yerel diski olur ve veriler ağ üzerinden senkronize edilir.

Kaynaklar (Resources):

  • Küme tarafından yönetilen ve yüksek erişilebilirlik sağlanması hedeflenen her türlü servis veya bileşendir.
  • Örnekler:
    • IP Adresleri (Sanal IP, Yüzen IP)
    • Dosya Sistemleri (Paylaşımlı disk üzerindeki veya DRBD ile senkronize edilen)
    • Uygulamalar (Apache, Nginx, veritabanları – MySQL, PostgreSQL vb.)
    • Servisler (systemd servisleri)

Küme Kaynak Yöneticisi (Cluster Resource Manager – CRM):

  • Kaynakların hangi düğümde çalışacağını, ne zaman başlatılıp durdurulacağını, arıza durumunda nasıl davranılacağını yöneten merkezi zekadır.
  • Kaynakların durumunu sürekli izler ve tanımlanan politikalara göre hareket eder.
  • Pacemaker, bu rolü üstlenen ve Red Hat ortamlarında standart olarak kabul edilen güçlü ve esnek bir CRM yazılımıdır.

Çitleme Mekanizmaları (Fencing / STONITH – Shoot The Other Node In The Head):

  • HA kümesinin en kritik bileşenlerinden biridir.
  • Bir düğümün “sorunlu” veya “yanıt vermez” duruma geldiği ve küme iletişimini kaybettiği durumlarda, veri bozulmasını (split-brain senaryosu) önlemek için o düğümün kümeden güvenli bir şekilde izole edilmesini (kapatılmasını veya yeniden başlatılmasını) sağlar.
  • Fencing cihazları, güç anahtarları (PDU), entegre yönetim kartları (ILO, iDRAC, IPMI) veya sanal makineler için hipervizör komutları olabilir.

Çoğunluk (Quorum):

  • Kümenin sağlıklı bir şekilde karar alabilmesi ve “split-brain” (beyin bölünmesi) durumunu önleyebilmesi için gereken minimum aktif ve iletişim kurabilen düğüm sayısıdır.
  • Split-brain, ağda bir kesinti olduğunda kümenin iki veya daha fazla bağımsız parçaya ayrılması ve her parçanın kendisini ana küme sanarak kaynakları yönetmeye çalışması durumudur. Bu, veri tutarsızlığına ve bozulmasına yol açabilir.
  • Çoğunluk mekanizmaları, kümenin sadece çoğunluğa sahip olan parçasının aktif kalmasını sağlar.

İzleme Araçları (Monitoring Tools):

  • Kümenin genel sağlığını, düğümlerin durumunu, kaynakların çalışmasını ve olası sorunları izlemek için kullanılan araçlardır.
  • Bu araçlar, sorunları erken tespit etmeye ve müdahale etmeye yardımcı olur. (Örn: pcs status, crm_mon)

Pacemaker Nedir ?

Bilişim teknolojilerinde yüksek erişilebilir (high availability – HA) sistemler oluşturmak için kullanılan bir açık kaynaklı küme yöneticisidir. Bu, sunucuların (düğümlerin) bir araya gelerek tek bir sistem gibi çalışmasını sağlayan ve bir sunucunun arızalanması durumunda hizmet kesintisini en aza indiren bir yazılım çözümüdür.

Basit bir HA Cluster Kurulumu

Bu yazımızda, örnek bir (dummy) küme kurulumu adımlarını ele alacağız.

Öncelikle cluster’ı kurmadan önce aşağıdaki hususları sağlamamız gerekiyor:

  • DNS adı çözümlemesi: Tüm küme düğümleri birbirinin hostname’ini DNS üzerinden çözebilmeli.
  • Parolasız SSH: Düğümler arasında ssh-keygen ile oluşturulmuş anahtarlar kullanılarak şifresiz SSH bağlantısı kurulmuş olmalı.
  • Saat Senkronizasyonu: Tüm düğümler aynı NTP sunucusuna bağlanarak saatlerini senkronize etmeli.

1. Düğümleri Hazırlama

Ben genellikle bulut tabanlı VPS’leri tercih ediyorum; çünkü:

  • Statik genel IP ve diğer ağ yapılandırmaları bulut sağlayıcı tarafından yönetiliyor,
  • Yeni kullanıcılar için ücretsiz kredi imkânları sunuluyor (örneğin DigitalOcean’da 200 USD, GCP’de 300 USD, AWS’de bir yıllık ücretsiz kullanım).

Ancak kendi lokal ortamınızda (Linux kullanıyorsanız) veya sanal makineler (Oracle VM VirtualBox, VMware) üzerinden de düğümlerinizi oluşturabilirsiniz. Sanal makinelerin kaynak tüketimine dikkat ediniz 🙂

Bu yazıda Google Cloud Platform (GCP) üzerinde üç adet Red Hat tabanlı düğüm oluşturdum.

2. Control-Host Üzerinden İşlemler

Tüm işlemleri control-host adlı ana düğüm üzerinden gerçekleştireceğiz. Birden fazla düğüm olduğunda, manuel kurulum yerine otomosyon (otomasyon) için Ansible kullanmayı tercih ederim. Böylece tek bir node üzerinden tüm işlemleri komut bazlı çalıştırabiliriz.

2.1. SSH ve DNS Yapılandırması

  1. SSH Sunucusunu Etkinleştirme
    Tüm düğümlerde /etc/ssh/sshd_config dosyasını açın ve aşağıdaki ayarları yapın: vim /etc/ssh/sshd_config # Aşağıdaki satırları ekleyin veya düzenleyin: PermitRootLogin yes PasswordAuthentication yes systemctl restart sshd
  2. DNS Adı Çözümlemesi
    control-host üzerinde /etc/hosts dosyasına diğer düğümlerin IP ve host bilgilerini ekleyin: vim /etc/hosts 10.0.0.10 node1.example.com node1 10.0.0.11 node2.example.com node2
  3. Test
    DNS çözümlemesini kontrol etmek için: ping -c3 node1 ping -c3 node2

2.2. Parolasız SSH Kurulumu

control-host üzerinde SSH anahtar çifti oluşturun ve diğer node’lara dağıtın:

ssh-keygen -t rsa -b 4096
for host in node1 node2                                                               do
  ssh-copy-id "$host"
done

2.3. Ansible Kurulumu ve Konfigürasyonu

  1. Ansible Yükleme
    En güncel versiyon için pip kullanabilirsiniz veya dağıtımın paket yöneticisinden yükleyin: dnf install -y python3-pip pip3 install ansible
  2. Ansible Proje Dizini mkdir -p ~/ansible && cd ~/ansible
  3. Inventory Dosyası
    inventory adlı dosya oluşturun: [linux] node1 node2 Not: localhost kaydını eklemeyin; ihtiyaç duyarsanız playbook seviyesinde ekleyebilirsiniz.
  4. ansible.cfg
    Aşağıdaki içeriği kullanarak yapılandırma dosyasını oluşturun: [defaults] inventory = ./inventory remote_user = root host_key_checking = False log_path = /var/log/ansible.log interpreter_python = /usr/bin/python3

2.4. Ansible Bağlantı Testi

ansible linux -m ping -o

Beklenen çıktı:

node1 | SUCCESS => {"changed": false, "ping": "pong"}
node2 | SUCCESS => {"changed": false, "ping": "pong"}

2.5 Ansible Playbook Dosyaları Oluşturmak

İş yükümüzün yaklaşık %70’ini otomatikleştirecek bir playbook hazırlıyoruz. Bu playbook’u çalıştırmadan önce bir Red Hat abonelik hesabınızın olması gerekiyor; hesabınızı ücretsiz olarak kolayca oluşturmak için şu adımı izleyebilirsiniz:

vim ansible/setupnode.yml
---
- hosts: linux,localhost            # Bu playbook hem uzak düğümlere, hem de localhost'a uygulanacak
  become: true                      # Tüm görevler root (sudo) yetkisiyle çalışacak

  tasks:
    - name: Add all hosts to files to make it resolve on hosts
      blockinfile:
        path: /etc/hosts
        block: |
          10.0.0.0   control.example.com control
          10.0.0.1   node1.example.com    node1
          10.0.0.2   node2.example.com    node2
        marker: "# {mark} ANSIBLE MANAGED BLOCK - Custom hosts"
        state: present
      # /etc/hosts dosyasını, iç blok (block) içinde tanımlı satırlarla günceller.
      # Eğer zaten ekli değilse, ANSIBLE MANAGED BLOCK işaretlerinden yararlanarak ekler.

    - name: Install subscription-manager package
      yum:
        name: subscription-manager
        state: present
      # Red Hat abonelik yönetimi için gerekli paketi yükler.

    - name: Configure Red Hat subscription
      redhat_subscription:
        username: redhat kullanıcı adınız
        password: red hat parolanız
        auto_attach: true
      # RHSM'e kullanıcı bilgilerinizle login olur ve uygun paket aboneliklerini otomatik ekler.

    - name: Enable HighAvailability repository
      rhsm_repository:
        name: rhel-9-for-x86_64-highavailability-rpms
        state: enabled
      # HA (High Availability) paketlerini içeren Red Hat deposunu etkinleştirir.

    - name: Install HA-related packages
      yum:
        name:
          - pacemaker
          - pcs
          - psmisc
          - policycoreutils-python3
          - fence-agents-gce
        enablerepo: rhel-9-for-x86_64-highavailability-rpms
        state: present
      # Pacemaker, pcs vb. HA araçlarını tek seferde yükler. repo tanımını burada tekrar vermek güvenlidir.

    - name: Configure the firewall for cluster communication
      firewalld:
        zone: trusted
        port: "{{ item }}"
        permanent: yes
        state: enabled
        immediate: true
      loop:
        - 2224/tcp    # pcsd yönetim portu
        - 2223/tcp    # corosync portu
        - 3121/tcp    # pacemaker portu
      # İhtiyaç duyulan TCP portlarını firewalld üzerinde açar.

    - name: Enable and start pcsd service
      service:
        name: pcsd
        state: started
        enabled: yes
      # pcs komutları için arka planda çalışan daemon'u aktif eder ve her reboot'ta başlatır.

    - name: Ensure hacluster user exists with a secure password
      user:
        name: hacluster
        password: "{{ 'password' | password_hash('sha512') }}"
        state: present
      # “hacluster” kullanıcısını oluşturur veya günceller; parola SHA512 ile hash’lenir.

    - name: Allow cluster daemons network connections (SELinux)
      seboolean:
        name: cluster_can_network_connect
        state: yes
        persistent: yes
      # SELinux policy’sine, cluster servislerinin ağ bağlantısı kurmasına izin verir.

    - name: Allow cluster daemons full file-system access (SELinux)
      seboolean:
        name: cluster_manage_all_files
        state: yes
        persistent: yes
      # SELinux policy’sine, cluster servislerine dosya sistemi üzerinde tam yetki tanır.

Playbook’umuzu çalıştırıyoruz

ansible-playbook ansible/setupnode.yml

Playbook çalıştıktan sonra her bir node üzerinde aşağıdaki değişiklikler ve konfigürasyonlar otomatik olarak uygulanmış olacak:

  1. /etc/hosts Güncellemesi
    • Her node’un /etc/hosts dosyası içine, kontrol sunucusu ve diğer cluster düğümlerinin IP-hostname eşlemeleri eklenir.
    • Böylece DNS’e ihtiyaç kalmadan control.example.com, node1, node2 gibi isimler doğrudan çözümlenir.
  2. Red Hat Abonelik Yönetimi
    • subscription-manager paketi yüklenir.
    • Verdiğiniz RHSM (Red Hat Subscription Manager) kullanıcı adı/şifresiyle oturum açılır ve uygun abonelikler otomatik olarak atanır.
    • Ardından, “High Availability” (Yüksek Erişilebilirlik) deposu (rhel-9-for-x86_64-highavailability-rpms) etkinleştirilir.
  3. Pacemaker/PCS ve İlgili Paketlerin Kurulumu
    • pacemaker, pcs, psmisc, policycoreutils-python3 gibi HA küme yazılımlarını içeren paketler yüklenir.
    • Böylece Corosync/Pacemaker yapı taşları ve küme yönetim komutları her nodeda hazır olur.
  4. Firewall Ayarları (firewalld)
    • Cluster iletişimi için gerekli TCP portları (2223, 2224, 3121) “trusted” zoneda açılır ve kalıcı olarak etkinleştirilir.
    • Anında (immediate) uygulanır, yani firewall yeniden başlatılmadan portlar açılmış olur.
  5. PCSD Servis Yönetimi
    • pcsd (Pacemaker/Corosync yönetim daemon’u) servisi devreye alınır: hem başlatılır (started), hem de sistem açılışında otomatik başlaması sağlanır (enabled).
  6. hacluster Kullanıcısı
    • Kümeyi yönetmek için gereken hacluster kullanıcısı oluşturulur veya güncellenir.
    • Parolası SHA-512 ile hash’lenerek güvenli şekilde atanır.
  7. SELinux Politikası Düzenlemeleri
    • cluster_can_network_connect boolean’ı “yes” olarak işaretlenir: Klasör hizasında çalışan cluster servislerinin ağ üzerinden diğer düğümle konuşmasına izin verir.
    • cluster_manage_all_files boolean’ı “yes” olarak işaretlenir: Cluster servislerinin dosya sistemi üzerinde tam yetkiyle işlemler yapabilmesini sağlar.

Cluster Bileşenleri

şimdi cluster bileşenlerini yapılandırma aşamasına geçiyoruz. Bu bölümde:

  1. Corosync ring konfigürasyonu
  2. Fencing (STONITH) mekanizması kurulumu
  3. GCP servis hesabı oluşturma ve yapılandırma
  4. Pacemaker üzerinden fencing kaynağının eklenmesi

1. Corosync Nedir?

Corosync, cluster düğümleri arasında iletişimi sağlayan mesajlaşma katmanıdır. Pacemaker’ın düzgün çalışması için düğümler arasında senkronizasyon ve node health takibi sağlar. Yani “kim ayakta, kim düştü, lider kim olacak” gibi bilgileri Corosync ile çözümleriz.

Corosync, ring0 adlı ana iletişim kanalıyla çalışır ve multicast veya unicast (GCP için genelde unicast) kullanılabilir.

pcs cluster auth control-host node1 node2 -u hacluster -p 'password'
pcs cluster setup --name mycluster node1 node2
pcs cluster start --all
pcs cluster enable --all

2. Fencing (STONITH) Nedir?

Fencing, cluster’daki bir düğüm düzgün çalışmadığında onu güvenli şekilde sistem dışı bırakmak için kullanılır. STONITH (Shoot The Other Node In The Head) bu işlemin teknik adıdır.

Örnek senaryo: node1 bozuldu ama hala çalışıyor gibi davranıyor → Bu durumda node2, node1‘i GCP API aracılığıyla yeniden başlatabilir (fence işlemi).

Google Cloud Platform (GCP) üzerinde çalışan Pacemaker cluster’ında STONITH için fence_gce kullanmalıyız. Bu ajan, GCP API’si üzerinden bir node’u yeniden başlatabilir (reboot) ya da güç kapatabilir (off). Bu şekilde cluster, bozuk node’u izole edebilir.

3. GCP’de Servis Hesabı Oluşturma

  1. GCP Console → IAM & AdminService Accounts
  2. “Create Service Account” → Ad ver
  3. Role: Compute Admin (minimum)
  4. “Create key” → JSON biçiminde indir

Bu JSON anahtar dosyasını her node’a /root/gcp-key.json olarak kopyalayın.

4. STONITH Kaynağını Eklemek (playbook + pcs komutu)

Her node’da çalışacak bir playbook veya ad-hoc komutla bu işlemi otomatikleştirebilirsiniz. ya da her node’de ayrı ayrı çalıştıralım.

---
- hosts: control-host
  become: true
  vars:
    project_id: "cluster-project"
    zone: "us-central1-a"
    nodes:
      - name: control-host
        keyfile: /root/gcp-key.json
      - name: node1
        keyfile: /root/gcp-key.json
      - name: node2
        keyfile: /root/gcp-key.json

  tasks:
    - name: Create STONITH (fence_gce) resource for each node
      shell: |
        pcs stonith create fence-{{ item.name }} fence_gce \
          method=reboot \
          zone="{{ zone }}" \
          project="{{ project_id }}" \
          plug="{{ item.name }}" \
          serviceaccount="$(< {{ item.keyfile }})" \
          pcmk_host_list="{{ item.name }}"
      args:
        executable: /bin/bash
      loop: "{{ nodes }}"
      when: item.name is defined

Playbook’umuzu çalıştırıyoruz

ansible-playbook stonith.yml

4. Cluster Resource (Kaynak) Oluşturma

Bu adımda, web servisi (Apache HTTPD) gibi bir kaynağı cluster üzerinde çalışacak şekilde tanımlamak için basit bir playbook kullanacağız. Aşağıdaki playbook, linux grubundaki tüm düğümlerde HTTPD kurulumu, firewall ayarları, servis yönetimi ve temel bir index.html dosyası oluşturulmasını sağlar.

---
- hosts: linux,localhost  # Uzak düğümler ve gerekirse lokal üzerinde uygulanır
  become: true           # Root yetkisiyle çalışır

  tasks:
    - name: Install Httpd  # Apache web sunucusunu yükler
      yum:
        name: httpd
        state: latest

    - name: Configure firewall  # HTTP servis portunu açar
      firewalld:
        service: http
        permanent: yes
        immediate: true
        state: enabled

    - name: Enable http service  # Apache'yi sistem açılışında aktif eder
      service:
        name: httpd
        enabled: yes

    - name: Create an index file  # Ana sayfa dosyasını oluşturur
      blockinfile:
        path: /var/www/html/index.html
        create: true
        block: |
          <html>
          <body> My Test Site - $(hostname)</body>
          </html>

    - name: Enable Apache Status URL  # Server-status erişimini düzenler
      blockinfile:
        create: yes
        path: /etc/httpd/conf.d/status.conf
        block: |
          ExtendedStatus On
          <Location /server-status>
             SetHandler server-status
             Require ip 127.0.0.1 ::1
             Require all granted
          </Location>

    - name: Restart Httpd  # Yapılandırma sonrası servisi yeniden başlatır
      service:
        name: httpd
        state: restarted

Playbook’umuzu bu komut ile ansible-playbook resource.yml bu sonuçları elde edebiliriz.

  • Install Httpd: Apache HTTPD en son sürümü ile kurulur ve güncel tutulur.
  • Firewall: http servisi firewalld üzerinde açılarak dış erişime izin verir.
  • Service: Sistem açılışında httpd servisi otomatik başlar.
  • Index File: Basit bir HTML şablonu oluşturularak her düğümün hostname bilgisi sayfada gösterilir.
  • Server Status: /server-status endpoint’i için izin verilen IP aralıkları tanımlanır.
  • Restart Httpd: Yapılandırma değişiklikleri aktif olması için servis yeniden başlatılır.

Bu playbook, cluster içinde web servisi örneği olarak kullanılabilir. Oluşturulan HTTPD servisini Pacemaker kaynak nesnesi olarak tanımlamak için aşağıdaki adımları izleyebilirsiniz:

# Apache servisini cluster kaynağı olarak ekleyin
pcs resource create WebSite ocf:heartbeat:apache \
  configfile=/etc/httpd/conf/httpd.conf \
  statusurl="http://$(hostname -f)/server-status" \
  op monitor interval=30s

Bu komut ile WebSite adlı bir kaynak oluşturulur, Apache konfigürasyon dosyası kullanılır ve server-status endpoint’i üzerinden sağlık kontrolü yapılır.

Cluster’i Test Etme

Tüm adımları tamamladıktan sonra, her bir düğümün IP adresini tarayıcınıza yazarak cluster’ınızın çalışır durumda olduğunu doğrulayabilirsiniz:

  • http://<control-host-ip>/server-status
  • http://<node1-ip>/server-status
  • http://<node2-ip>/server-status

Tarayıcıda Apache Server Status sayfasını görebiliyor olmalısınız; örneğin şu şekilde bir çıktı beklersiniz:

Bu makalede, temel bir HA (High Availability) cluster kurulumundan başlayarak:

  1. Düğümlerin hazırlığı ve DNS/SSH yapılandırması,
  2. Ansible ile otomasyon adımları,
  3. Corosync ve fencing (STONITH) mekanizmaları,
  4. Web hizmeti (HTTPD) kaynağının Pacemaker ile cluster’a tanıtılmasını

adım adım ele aldık. Artık:

  • Cluster düğümleriniz birbirini sorunsuz tanıyor,
  • GCP üzerinde fencing ile güvenli yeniden başlatma,
  • Pacemaker ile kaynak yönetimi,
  • Web servisi için sağlık kontrolleri (monitoring) hazır durumda.

Sonraki adımlar: İhtiyacınıza göre farklı kaynak türlerini (IP, NFS, sanal IP gibi) ekleyebilir; daha karmaşık uygulamalar için custom OCF ajanları geliştirebilirsiniz. Üretim ortamı için STONITH ve quorum politikalarını mutlaka etkinleştirmeyi unutmayın.

Cluster’ınızın yüksek erişilebilirlik ve kararlılık seviyesini artırmak için devamlı olarak izleme (monitoring) ve yedekleme (backup) stratejilerini de planlamanızı öneririm. Başarılar dilerim!

Kaynaklar


Leave a Reply

Your email address will not be published. Required fields are marked *

Related Posts