Furkan Bilgin


Cloud&System Devops Engineer @Digiturk / Formerly System Manager @Tekhnelogos
Founder @SentezOfis
furkanbilgin@windowslive.com
Share: 

Ubuntu 20.04 Sunucu Üzerine HAProxy Kurulumu

Bu öğreticide sizlerle Ubuntu 20.04 işletim sistemine sahip bir sunucuda terminal üzerinden HAProxy yükleyerek configurasyonları hakkında bilgi vereceğim.

İşlemlere başlamadan önce sunucunuzun yedeğini almanızı tavsiye ederim. (snapshot, full backup vs.)

HAProxy Nedir?

HAProxy, yüksek trafik alan veya yedeklilik sağlamak istediğiniz TCP ve HTTP protokolünü kullanan uygulamalarınız için yük dengeler ve proxy hizmeti sunar.

HAProxy open source bir üründür. Ürünün enterprise versionu ise ücretlidir. Bu lisans kapsamında kurumsal destek almakla birlikte farklı özelliklerindende yararlanabilirsiniz. Biz bugün bu ürünün ücretsiz versionunu üzerinden ilerleyeceğiz.

Her zaman olduğu gibi ürünün kendi resmi sitesine gidelim ve kurulum için gerekli komutları alalım https://haproxy.debian.net/

Sunucuda ubuntunun hangi sürümünün kurulu olduğunu anlamak için aşağıdaki komutu çalıştırabilirsiniz. Picture description

Ben ubuntu 20.04.5 üzerine bu kurulumu yaptığım tarihteki son HAProxy sürümünün kurulumunu yapacağım için seçimlerimi bu yönde yaptım.

Picture description

1- Adım: HAProxy yüklemek için sırasıyla aşağıdaki komutlarımızı çalıştıralım.

apt-get install --no-install-recommends software-properties-common

Picture description

add-apt-repository ppa:vbernat/haproxy-2.7

Picture description

Aşağıdaki komutun sonuna -y parametresini eklerseniz benim gibi kurulum sırasında Y tuşuna basarak onay vermek zorunda kalmazsınız.

apt-get install haproxy=2.7.\*

veya

apt-get install haproxy=2.7.\* -y

Picture description

2- Adım: Kurulumun tamamlandığına emin olmak için haproxy versionunu sorguluyoruz. Komutumuz aşağıdaki şekildedir.

    haproxy -v

Picture description

3- Adım: Kurulum bittiğine göre şimdi sunucu restart olduktan sonra HAProxy servisinin otomatik olarak yeniden başlaması için aşağıdaki komutu çalıştırıyoruz.

systemctl enable haproxy

Picture description

4- Adım: Haproxy ayarlamalarına geçmeden önce son olarak HAProxy durumunu sorgulamamız gerekiyor. Status çekerek servisin aktif olup olmadığını göreceğiz.

systemctl status haproxy

Picture description

Şimdi haproxy ile proxy işleminin nasıl yapılacağını göreceğiz. Buna başlamadan önce bazı kavramları açıklamak istiyorum.

Global:

Yapılandırma(haproxy.conf) dosyanızın en üstünde görünür. Kabul edilecek maksimum bağlantı sayısı, günlüklerin(logların) nereye iletileceği ve HAProxy Enterprise modüllerinin yükleneceği yol gibi yönergeleri tanımladığımız alandır.

Default:

Fronted, backend veya listen bölümünde ayarlayabileceğiniz parametlerin çoğunu buradan varsayılan olarak belirleyebilirsiniz. Daha sonra frontend veya backend kısmında bu ayarları tekrar belirtirseniz frontend veya backend altındaki belirttiğiniz parametreler aktif olmuş olur.

Listen:

Bu bölümde HAProxy istatisklerini görmek için tanımlama yapabiliriz. Örnek görsel aşağıdaki şekildedir.

Frontend:

Bu alanda bir frontend oluştururuz ve gideceği backend serverını belirtiriz. Yine bu alanda hangi protokol ve port üzerinden iletişim kurulacağı belirtilir.

Backend:

Front end alanında oluşturulan frontendler için isteklerin yönlendirileceği serverlerı belirtiriz. Yine bu alanda hangi protokol ve port üzerinden iletişim kurulacağı belirtilir.

Önemli olduğunu düşündüğüm bu başlıkları açıkladıktan sonra şimdi örnek bir conf file düzenleyebiliriz. Bunun için haproxy.cfg dosyasının olduğu yere gidelim.

cd /etc/haproxy/

Picture description

Şimdi conf dosyasını düzenlemek için nano ile içine giriyoruz. Nano ile dosyayı düzeledikten sonra CTRL + X yapıp çıkarken Y tuşuna ve ardından enter tuşuna basıyoruz.

sudo nano haproxy.cfg

Aşağıdaki örnekte # simgesinden sonra altındaki satırın hangi amaçlı kullanıldığını belirtmeye çalıştım. Conf kopyala yapıştır ile alıp kendinize göre düzenleyebilirsiniz.

global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin

        # gelen isteklere 30s içinde server'dan cevap dönmezse istekler timeout alacaktır.
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
        ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
        ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
        ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull

        # load balance türü roundrobin olarak belirlendi.
        balance roundrobin
        timeout connect 5000
        timeout client  50000
        timeout server  50000

        # http status codelarına göre gösterilebilecek özelleştirebileceğiniz error sayfalarının lokasyonu. 
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

listen stats
        # istatisk ekranını için erişilecek adres tanımı
        bind 192.168.2.81:8080
        mode http

        # istatistik ekranını açıp kapatmak için düzenleme yapabilirsiniz.
        stats enable
        stats realm FURKAN

        # haproxy istatisklerini görebileceğiniz ekran url suffixi
        # ben bu şekilde bu ekrana erişeceğim >>> http://192.168.2.81:8080/stats 
        stats uri /stats
        # istatistik ekranına giriş için kullanıcıadı:parola bilgisi
        stats auth furkan:1234

frontend furkanbilgin_frontend        
        # hangi port üzerinden gelen isteklerin dinleneceğini söylüyoruz
        bind *:80

        # www.furkanbilgin.com için kayıt ekliyoruz.
        acl furkanbilgin_frontend  hdr(host) -i www.furkanbilgin.com

        # furkanbilgin.com için kayıt ekliyoruz.
        acl furkanbilgin_frontend  hdr(host) -i furkanbilgin.com

        # furkanbilgin_frontend için hangi backend configuration kullanacağını belirtiyoruz.
        use_backend furkanbilgin_backend if furkanbilgin_frontend

backend furkanbilgin_backend
        # f1 ibaresi istatistik ekranında ilgili servera isim vermek içindir.
        server f1 192.168.2.141:80

        # f2 ibaresi istatistik ekranında ilgili servera isim vermek içindir.
        server f2 192.168.2.96:80

Picture description

Conf dosyasını düzenledikten sonra aktif olması için haproxy servisini restart ediyoruz. Eğer confda hata varsa restart işlemi sonrası hata alacaksınız.

systemctl restart haproxy

Picture description

Conf dosyası başarılı bir şekilde yapılandırıldı ve servis restart olduysa aşağıdaki komut ile servisin durumuna bakıp running olduğunu görmemiz gerekmektedir.

systemctl status haproxy

Picture description

İstatistik ekran görüntüsü

İlgili görselde backend sunuculara giden istekleri ve istekle ilgili detayları görebilirsiniz.

Picture description

HAProxy gelen isteklerin loglarına aşağıdaki yerden ulaşabilirsiniz.

cd /var/log

Log dosyasındaki son 100 satırı görmek için aşağıdaki komutu çalıştırabilirsiniz.

tail -n 100 /var/log/haproxy.log

Aşağıdaki görselde hangi isteğin hangi servera iletildiğini kırmızı ile daire içine aldım.

f1 ve f2 isimleri haproxy.cfg dosyası içinde backend serverlara verdiğimiz takma isimlerdir.

Picture description

LAB Ortamı hakkında açıklama

Bu anlatımı yapabilmek adına virtual box üzerinde 3 tane ubuntu 20.04 sanal sunucu kurdum.

192.168.2.81 : HAProxy server

192.168.2.141 : furkanbilgin.com web sunucusu - 1

192.168.2.96 : furkanbilgin.com web sunucusu - 2

İnternet tarayıcısı üzerinden yaptığım isteklerin HAProxy gitmesi için bilgisayarımda C:\Windows\System32\drivers\etc\hosts dosyasına aşağıdaki bilgileri ekledim.

192.168.2.81 furkanbilgin.com
192.168.2.81 www.furkanbilgin.com

Bu sayede istekler HAProxy üzerinden web sunucularına yönlendirilmiş oldu.

Not: Bazı kelime ve kavramları yanlış kullanmış olabilirim. Düzeltme için lütfen e-mail atınız.

, , , , ,