Hizmetlerin kesintisiz çalışması, özellikle kritik altyapılarda büyük önem taşır. HAProxy, yük dengeleme (load balancing) ve trafik yönetimiyle öne çıkan bir araçtır. Ancak, HAProxy tek başına sunucu arızalarına karşı bir çözüm sunmaz. Bu noktada, Keepalived devreye girerek sanal bir IP üzerinden yüksek erişilebilirlik sağlar.

Bu yazıda, HAProxy ve Keepalived kullanarak bir yüksek erişilebilirlik çözümünü adım adım oluşturacağız. Ayrıca yapılandırmamızda, bir sunucu devre dışı kaldığında diğer sunucunun devreye girmesini sağlayan preempt özelliğini detaylı bir şekilde ele alacağız.


HAProxy ve Keepalived ile High Availability Adımları

1. Keepalived Kurulumu

Keepalived her iki sunucuda (Master ve Backup) kurulur:

sudo apt install keepalived

2. Sanal IP için Sistem Ayarı

Keepalived’ın kullanacağı sanal IP’yi dinlemek için sistem ayarı yapılır:

echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf
sysctl -p

3. Keepalived Konfigürasyonu

Keepalived konfigürasyonu hem Master hem de Backup sunucularda farklı olacak şekilde yapılır.

3.1 Master Sunucu Konfigürasyonu

Master sunucuda /etc/keepalived/keepalived.conf dosyasını oluşturun ve aşağıdaki içeriği ekleyin.

Not: priority değeri Master için daha yüksek olmalıdır.

global_defs {
    router_id haproxy_master
}

vrrp_script chk_haproxy {
     script "killall -0 haproxy"  # HAProxy çalışıyor mu kontrol eder
     interval 2  # Kontrol aralığı 2 saniye
     weight 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 101
    advert_int 1
    unicast_src_ip 192.168.1.10
    unicast_peer {
        192.168.1.11
    }
    authentication {
        auth_type PASS
        auth_pass mySecurePassword
    }
    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        chk_haproxy
    }
    preempt yes  # Master tekrar aktif hale geldiğinde sanal IP'yi geri alır
}

3.2 Backup Sunucu Konfigürasyonu

Backup sunucuda /etc/keepalived/keepalived.conf dosyasını oluşturun ve aşağıdaki içeriği ekleyin.

Not: priority değeri Backup için daha düşük olmalıdır.

global_defs {
    router_id haproxy_backup
}

vrrp_script chk_haproxy {
     script "killall -0 haproxy"  # HAProxy çalışıyor mu kontrol eder
     interval 2
     weight 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    unicast_src_ip 192.168.1.11
    unicast_peer {
        192.168.1.10
    }
    authentication {
        auth_type PASS
        auth_pass mySecurePassword
    }
    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        chk_haproxy
    }
    preempt yes  # Master tekrar aktif hale geldiğinde IP Backup’tan Master’a geçer
}

Preempt Yes Nedir?

preempt yes, bir sunucu arızası sonrası aktif IP’nin yönetimini belirler. Eğer Master sunucu arızadan sonra tekrar aktif hale gelirse, sanal IP’nin Backup’tan Master’a geri geçmesini sağlar. Bu özellik, sistemin asıl Master rolüne dönmesini ve yönetimin stabil bir sunucuda kalmasını sağlar.


4. Keepalived Servisinin Çalıştırılması

Her iki sunucuda Keepalived servisini yeniden başlatın:

sudo systemctl restart keepalived.service

5. HAProxy Yapılandırması

HAProxy, Keepalived tarafından oluşturulan sanal IP’yi dinler. Sanal IP üzerinden gelen trafiği yük dengelemek için aşağıdaki yapılandırmayı /etc/haproxy/haproxy.cfg dosyasına ekleyin.

Frontend Tanımı

Frontend, gelen talepleri dinler:

frontend https_frontend
  bind 192.168.1.100:443  # Sanal IP ve port
  default_backend web_servers  # Backend'e yönlendirir

Backend Tanımı

Backend, talepleri hedef sunuculara yönlendirir:

backend web_servers
  server web01 192.168.1.201:80 check
  server web02 192.168.1.202:80 check

6. Failover Testi

Failover işlemini test etmek için şu adımları izleyin:

  1. Master Sunucuda HAProxy’yi durdurun: sudo systemctl stop haproxy
  2. Backup Sunucuda Sanal IP’nin aktif olduğunu kontrol edin: ip addr show Backup sunucu, sanal IP’yi devralmış olmalıdır.
  3. Master tekrar çalışmaya başladığında IP’nin geri geçtiğini doğrulayın: sudo systemctl start haproxy ip addr show

Bu yapılandırma ile HAProxy ve Keepalived kullanarak yüksek erişilebilirlik elde edebilirsiniz. Keepalived, Master sunucunun çalışmaması durumunda sanal IP’yi Backup sunucuya aktarır ve kesintisiz hizmet sağlar. Ayrıca preempt seçeneği, Master sunucu yeniden devreye girdiğinde sanal IP’nin asıl rolüne dönmesini garanti eder.

HAProxy’nin yük dengeleme yetenekleriyle birleşen bu yapılandırma, kritik altyapılarda kesintisiz hizmet sağlayan güçlü bir çözüm sunar.