{"id":39322,"date":"2026-02-18T19:40:47","date_gmt":"2026-02-18T16:40:47","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=39322"},"modified":"2026-02-18T19:40:47","modified_gmt":"2026-02-18T16:40:47","slug":"saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/","title":{"rendered":"SaltStack Altyap\u0131s\u0131: HAProxy Y\u00fck Dengeleyiciler \u0130\u00e7in Salt State&#8217;leri Olu\u015fturma"},"content":{"rendered":"<p><body><\/p>\n<h2>SaltStack Altyap\u0131s\u0131: HAProxy Y\u00fck Dengeleyiciler \u0130\u00e7in Salt State&#8217;leri Olu\u015fturma<\/h2>\n<p>SaltStack, modern IT altyap\u0131lar\u0131nda yap\u0131land\u0131rma y\u00f6netimi, otomasyon ve orkestrasyon i\u00e7in g\u00fc\u00e7l\u00fc, a\u00e7\u0131k kaynakl\u0131 bir ara\u00e7t\u0131r. Sunucular\u0131 ve a\u011f cihazlar\u0131n\u0131 merkezi bir noktadan y\u00f6netme yetene\u011fi sayesinde, altyap\u0131 operasyonlar\u0131n\u0131 basitle\u015ftirir ve hata oran\u0131n\u0131 d\u00fc\u015f\u00fcr\u00fcr. Di\u011fer yandan, HAProxy (High Availability Proxy), y\u00fcksek performansl\u0131 ve g\u00fcvenilir bir y\u00fck dengeleyici ve TCP\/HTTP proxy \u00e7\u00f6z\u00fcm\u00fcd\u00fcr. Web uygulamalar\u0131n\u0131n \u00f6l\u00e7eklenebilirli\u011fini ve y\u00fcksek eri\u015filebilirli\u011fini sa\u011flamak i\u00e7in kritik bir bile\u015fendir. Bu makale, SaltStack&#8217;in g\u00fcc\u00fcn\u00fc kullanarak HAProxy y\u00fck dengeleyicilerin kurulumunu, yap\u0131land\u0131rmas\u0131n\u0131 ve y\u00f6netimini otomatikle\u015ftirmek i\u00e7in Salt State&#8217;leri (durum dosyalar\u0131) nas\u0131l olu\u015fturulaca\u011f\u0131n\u0131 detayl\u0131 bir \u015fekilde inceleyecektir. SaltStack ve HAProxy&#8217;nin birle\u015fimi, tutarl\u0131, tekrarlanabilir ve \u00f6l\u00e7eklenebilir bir y\u00fck dengeleme altyap\u0131s\u0131 kurman\u0131n anahtar\u0131n\u0131 sunar.<\/p>\n<h3>SaltStack Temelleri<\/h3>\n<p>SaltStack, master-minion mimarisi \u00fczerinde \u00e7al\u0131\u015f\u0131r. Bir Salt Master, yap\u0131land\u0131rma komutlar\u0131n\u0131 ve durum dosyalar\u0131n\u0131 (states) y\u00f6netirken, Salt Minion&#8217;lar bu komutlar\u0131 ve durumlar\u0131 hedef sunucularda uygular.<\/p>\n<h4>Salt Master ve Minion<\/h4>\n<p>Salt Master, t\u00fcm SaltStack operasyonlar\u0131n\u0131n merkezi kontrol noktas\u0131d\u0131r. Minion&#8217;lar ise, Master&#8217;dan gelen talimatlar\u0131 dinleyen ve uygulayan istemci makinelerdir. \u0130leti\u015fim, genellikle ZeroMQ \u00fczerinden \u015fifreli bir kanalda ger\u00e7ekle\u015fir. Minion&#8217;lar, Master&#8217;a ba\u011flanmak i\u00e7in kimlik do\u011frulamas\u0131 yapar ve Master taraf\u0131ndan yetkilendirildikten sonra komutlar\u0131 almaya ba\u015flar.<\/p>\n<h4>Salt States (SLS Dosyalar\u0131)<\/h4>\n<p>Salt States veya SLS dosyalar\u0131, SaltStack&#8217;in yap\u0131land\u0131rma y\u00f6netimi i\u00e7in temel bile\u015fenleridir. Bu dosyalar, bir sistemin belirli bir durumda olmas\u0131n\u0131 sa\u011flamak i\u00e7in gerekli ad\u0131mlar\u0131 tan\u0131mlayan YAML tabanl\u0131 bildirimsel yap\u0131lard\u0131r. Her state, bir Salt mod\u00fcl\u00fcn\u00fc (\u00f6rne\u011fin, <code>pkg<\/code> mod\u00fcl\u00fc paket y\u00f6netimi i\u00e7in, <code>service<\/code> mod\u00fcl\u00fc servis y\u00f6netimi i\u00e7in) ve bu mod\u00fcl\u00fcn bir fonksiyonunu (\u00f6rne\u011fin, <code>pkg.installed<\/code>, <code>service.running<\/code>) \u00e7a\u011f\u0131r\u0131r. Salt States, idempotenttir; yani, bir state&#8217;i birden fazla kez \u00e7al\u0131\u015ft\u0131rmak, sistem \u00fczerinde yaln\u0131zca gerekli de\u011fi\u015fiklikleri yapar ve zaten istenen durumda olan bile\u015fenleri etkilemez. Bu, tutarl\u0131 ve \u00f6ng\u00f6r\u00fclebilir sonu\u00e7lar sa\u011flar.<\/p>\n<h4>Pillar<\/h4>\n<p>Pillar, SaltStack&#8217;te hassas verileri (\u015fifreler, API anahtarlar\u0131 vb.) veya minion&#8217;a \u00f6zel yap\u0131land\u0131rma verilerini g\u00fcvenli bir \u015fekilde depolamak ve minion&#8217;lara iletmek i\u00e7in kullan\u0131lan bir sistemdir. Pillar verileri, minion&#8217;lar taraf\u0131ndan do\u011frudan eri\u015filemez; yaln\u0131zca Master, bir minion&#8217;\u0131n yaln\u0131zca kendisine ait olan Pillar verilerine eri\u015febilece\u011fini garanti eder. Bu, yap\u0131land\u0131rma dosyalar\u0131nda do\u011frudan sabit kodlanm\u0131\u015f de\u011ferler yerine dinamik ve g\u00fcvenli yap\u0131land\u0131rma sa\u011flamak i\u00e7in idealdir.<\/p>\n<h4>Grains<\/h4>\n<p>Grains, bir minion hakk\u0131nda statik bilgileri (i\u015fletim sistemi, IP adresi, CPU say\u0131s\u0131, bellek miktar\u0131 gibi) temsil eden verilerdir. Bu veriler, minion ba\u015flad\u0131\u011f\u0131nda veya <code>salt-call grains.ls<\/code> gibi komutlarla toplan\u0131r. Grains, Salt Master&#8217;\u0131n belirli \u00f6zelliklere sahip minion&#8217;lar\u0131 hedeflemesini sa\u011flar. \u00d6rne\u011fin, sadece Ubuntu sunucular\u0131na veya belirli bir rol\u00fc olan sunuculara state uygulamak i\u00e7in Grains kullan\u0131labilir.<\/p>\n<h4>Top File<\/h4>\n<p><code>top.sls<\/code> dosyas\u0131, SaltStack&#8217;in hangi minion&#8217;lara hangi state&#8217;leri uygulayaca\u011f\u0131n\u0131 belirleyen ana haritalama dosyas\u0131d\u0131r. Grains, minion ID&#8217;leri veya di\u011fer hedefleme kriterleri kullan\u0131larak, belirli gruplardaki minion&#8217;lara belirli state&#8217;ler atan\u0131r. Bu, b\u00fcy\u00fck altyap\u0131larda yap\u0131land\u0131rma y\u00f6netimini organize etmenin ve \u00f6l\u00e7eklendirmenin temel yoludur.<\/p>\n<h4>Salt Dosya Sunucusu<\/h4>\n<p>Salt Master, state dosyalar\u0131, Pillar verileri, Jinja \u015fablonlar\u0131 ve di\u011fer statik dosyalar i\u00e7in bir dosya sunucusu g\u00f6revi g\u00f6r\u00fcr. Minion&#8217;lar, bu dosyalar\u0131 Master&#8217;dan \u00e7ekerek yerel sistemlerinde kullan\u0131r. Bu merkezi depolama, yap\u0131land\u0131rma dosyalar\u0131n\u0131n versiyon kontrol\u00fcn\u00fc ve da\u011f\u0131t\u0131m\u0131n\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<h3>HAProxy Temelleri<\/h3>\n<p>HAProxy, TCP ve HTTP tabanl\u0131 uygulamalar i\u00e7in y\u00fcksek performansl\u0131 ve g\u00fcvenilir bir y\u00fck dengeleyici \u00e7\u00f6z\u00fcmd\u00fcr. Genellikle web sunucular\u0131, veritaban\u0131 sunucular\u0131 ve uygulama sunucular\u0131 gibi birden fazla sunucu aras\u0131nda trafi\u011fi da\u011f\u0131tmak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h4>HAProxy Mimarisi<\/h4>\n<p>HAProxy&#8217;nin temel mimarisi \u00fc\u00e7 ana bile\u015fenden olu\u015fur:<br \/>\n*   <strong>Frontend:<\/strong> Gelen ba\u011flant\u0131lar\u0131 dinleyen ve hangi <code>backend<\/code>&#8216;e y\u00f6nlendirilece\u011fini belirleyen k\u0131s\u0131md\u0131r. IP adresi, port ve protokol gibi bilgileri i\u00e7erir.<br \/>\n*   <strong>Backend:<\/strong> Ger\u00e7ek sunucular\u0131n (\u00f6rne\u011fin web sunucular\u0131) gruplar\u0131n\u0131 tan\u0131mlar. Y\u00fck dengeleme algoritmas\u0131, sa\u011fl\u0131k kontrolleri ve sunucu listesi bu b\u00f6l\u00fcmde belirlenir.<br \/>\n*   <strong>Server:<\/strong> Backend grubunun i\u00e7indeki her bir fiziksel sunucuyu temsil eder. IP adresi, port ve di\u011fer sunucuya \u00f6zel se\u00e7enekler burada belirtilir.<\/p>\n<h4>Temel Yap\u0131land\u0131rma Bile\u015fenleri<\/h4>\n<p>HAProxy yap\u0131land\u0131rma dosyas\u0131 (<code>haproxy.cfg<\/code>) \u00e7e\u015fitli b\u00f6l\u00fcmlerden olu\u015fur:<br \/>\n*   <strong><code>global<\/code>:<\/strong> HAProxy s\u00fcrecine genel ayarlar (loglama, kullan\u0131c\u0131\/grup, performans ayarlar\u0131).<br \/>\n*   <strong><code>defaults<\/code>:<\/strong> <code>frontend<\/code>, <code>backend<\/code> ve <code>listen<\/code> b\u00f6l\u00fcmleri i\u00e7in varsay\u0131lan ayarlar.<br \/>\n*   <strong><code>listen<\/code>:<\/strong> Hem frontend hem de backend i\u015flevselli\u011fini tek bir blokta birle\u015ftiren eski bir y\u00f6ntemdir, ancak hala kullan\u0131lmaktad\u0131r.<br \/>\n*   <strong><code>bind<\/code>:<\/strong> <code>frontend<\/code> veya <code>listen<\/code> bloklar\u0131nda gelen ba\u011flant\u0131lar\u0131 dinlenecek IP adresi ve portu belirtir.<br \/>\n*   <strong><code>mode<\/code>:<\/strong> Ba\u011flant\u0131 modunu belirler (<code>tcp<\/code> veya <code>http<\/code>).<br \/>\n*   <strong><code>balance<\/code>:<\/strong> Y\u00fck dengeleme algoritmas\u0131n\u0131 belirler (\u00f6rne\u011fin, <code>roundrobin<\/code>, <code>leastconn<\/code>, <code>source<\/code>).<br \/>\n*   <strong><code>option<\/code>:<\/strong> \u00c7e\u015fitli se\u00e7enekleri etkinle\u015ftirir veya devre d\u0131\u015f\u0131 b\u0131rak\u0131r (\u00f6rne\u011fin, <code>http-check<\/code>, <code>forwardfor<\/code>).<\/p>\n<h4>Y\u00fcksek Eri\u015filebilirlik (HA) ve Y\u00fck Dengeleme Stratejileri<\/h4>\n<p>HAProxy, farkl\u0131 y\u00fck dengeleme algoritmalar\u0131 sunar:<br \/>\n*   <strong>Round-robin:<\/strong> Sunuculara s\u0131rayla ba\u011flant\u0131 da\u011f\u0131t\u0131r.<br \/>\n*   <strong>Least-conn:<\/strong> En az aktif ba\u011flant\u0131ya sahip sunucuya yeni ba\u011flant\u0131y\u0131 y\u00f6nlendirir.<br \/>\n*   <strong>Source:<\/strong> \u0130stemcinin kaynak IP adresine g\u00f6re ba\u011flant\u0131y\u0131 ayn\u0131 sunucuya y\u00f6nlendirir (sticky session i\u00e7in kullan\u0131\u015fl\u0131d\u0131r).<br \/>\n*   <strong>Health Checks:<\/strong> HAProxy, <code>check<\/code> se\u00e7ene\u011fi ile backend sunucular\u0131n\u0131n sa\u011fl\u0131k durumunu d\u00fczenli olarak kontrol eder. Sa\u011fl\u0131ks\u0131z sunucular havuzdan \u00e7\u0131kar\u0131l\u0131r ve tekrar sa\u011fl\u0131kl\u0131 hale geldi\u011finde geri eklenir. Bu, y\u00fcksek eri\u015filebilirli\u011fin temelini olu\u015fturur.<\/p>\n<h3>SaltStack ile HAProxy Entegrasyonu<\/h3>\n<p>\u015eimdi, SaltStack&#8217;i kullanarak bir HAProxy y\u00fck dengeleyicinin nas\u0131l kurulaca\u011f\u0131n\u0131 ve yap\u0131land\u0131r\u0131laca\u011f\u0131n\u0131 ad\u0131m ad\u0131m inceleyelim. Senaryomuzda, iki adet web sunucusuna (\u00f6rne\u011fin Nginx veya Apache) gelen trafi\u011fi dengeleyecek tek bir HAProxy sunucusu kuraca\u011f\u0131z.<\/p>\n<h4>Hedef Belirleme ve Senaryo<\/h4>\n<p>*   Bir HAProxy sunucusu \u00fczerinde HAProxy paketinin kurulumu.<br \/>\n*   HAProxy yap\u0131land\u0131rma dosyas\u0131n\u0131n (<code>haproxy.cfg<\/code>) SaltStack Pillar verileri kullan\u0131larak dinamik olarak olu\u015fturulmas\u0131.<br \/>\n*   HAProxy servisinin ba\u015flat\u0131lmas\u0131 ve sistem a\u00e7\u0131l\u0131\u015f\u0131nda otomatik ba\u015flamas\u0131.<br \/>\n*   HAProxy loglar\u0131n\u0131n y\u00f6netimi (iste\u011fe ba\u011fl\u0131 ama iyi bir uygulama).<br \/>\n*   HAProxy istatistik sayfas\u0131n\u0131n etkinle\u015ftirilmesi.<\/p>\n<h4>Dizin Yap\u0131s\u0131 Olu\u015fturma<\/h4>\n<p>Salt Master \u00fczerinde a\u015fa\u011f\u0131daki gibi bir dizin yap\u0131s\u0131 olu\u015fturaca\u011f\u0131z:<\/p>\n<pre><code class=\"language-\">\/srv\/salt\/\n\u251c\u2500\u2500 top.sls\n\u2514\u2500\u2500 haproxy\/\n    \u251c\u2500\u2500 init.sls\n    \u251c\u2500\u2500 config.sls\n    \u2514\u2500\u2500 files\/\n        \u2514\u2500\u2500 haproxy.cfg.j2\n\/srv\/pillar\/\n\u251c\u2500\u2500 top.sls\n\u2514\u2500\u2500 haproxy.sls<\/code><\/pre>\n<p>*   <code>\/srv\/salt\/top.sls<\/code>: Hangi minion&#8217;a hangi Salt state&#8217;lerinin uygulanaca\u011f\u0131n\u0131 belirler.<br \/>\n*   <code>\/srv\/salt\/haproxy\/init.sls<\/code>: HAProxy paketini kurar ve servisi y\u00f6netir.<br \/>\n*   <code>\/srv\/salt\/haproxy\/config.sls<\/code>: HAProxy yap\u0131land\u0131rma dosyas\u0131n\u0131 olu\u015fturur.<br \/>\n*   <code>\/srv\/salt\/haproxy\/files\/haproxy.cfg.j2<\/code>: HAProxy yap\u0131land\u0131rma dosyas\u0131n\u0131n Jinja2 \u015fablonu.<br \/>\n*   <code>\/srv\/pillar\/top.sls<\/code>: Hangi minion&#8217;a hangi Pillar verilerinin g\u00f6nderilece\u011fini belirler.<br \/>\n*   <code>\/srv\/pillar\/haproxy.sls<\/code>: HAProxy yap\u0131land\u0131rmas\u0131 i\u00e7in Pillar verilerini i\u00e7erir.<\/p>\n<h4>HAProxy Paketi Kurulumu ve Servis Y\u00f6netimi<\/h4>\n<p>\u0130lk olarak, HAProxy paketini kuracak ve servisin \u00e7al\u0131\u015f\u0131r durumda olmas\u0131n\u0131 sa\u011flayacak bir state olu\u015ftural\u0131m:<\/p>\n<p><code>\/srv\/salt\/haproxy\/init.sls<\/code><\/p>\n<pre><code class=\"language-yaml\">{% if grains['os_family'] == 'Debian' %}\nhaproxy_pkg:\n  pkg.installed:\n    - name: haproxy\n\nhaproxy_service:\n  service.running:\n    - name: haproxy\n    - enable: True\n    - watch:\n      - file: \/etc\/haproxy\/haproxy.cfg\n{% elif grains['os_family'] == 'RedHat' %}\nhaproxy_pkg:\n  pkg.installed:\n    - name: haproxy\n\nhaproxy_service:\n  service.running:\n    - name: haproxy\n    - enable: True\n    - watch:\n      - file: \/etc\/haproxy\/haproxy.cfg\n{% endif %}<\/code><\/pre>\n<p>Bu state, i\u015fletim sistemi ailesine g\u00f6re <code>haproxy<\/code> paketini kurar ve <code>haproxy<\/code> servisinin \u00e7al\u0131\u015f\u0131r durumda olmas\u0131n\u0131 ve sistem ba\u015flang\u0131c\u0131nda etkinle\u015ftirilmesini sa\u011flar. <code>watch<\/code> ifadesi, <code>\/etc\/haproxy\/haproxy.cfg<\/code> dosyas\u0131nda bir de\u011fi\u015fiklik oldu\u011funda servisin yeniden ba\u015flat\u0131lmas\u0131n\u0131 tetikler.<\/p>\n<h4>HAProxy Yap\u0131land\u0131rma Dosyas\u0131 Olu\u015fturma<\/h4>\n<p>\u015eimdi, HAProxy&#8217;nin ana yap\u0131land\u0131rma dosyas\u0131n\u0131 Pillar verilerini kullanarak dinamik olarak olu\u015fturacak state&#8217;i ve Jinja2 \u015fablonunu tan\u0131mlayal\u0131m.<\/p>\n<p><code>\/srv\/salt\/haproxy\/config.sls<\/code><\/p>\n<pre><code class=\"language-yaml\">\/etc\/haproxy\/haproxy.cfg:\n  file.managed:\n    - source: salt:\/\/haproxy\/files\/haproxy.cfg.j2\n    - template: jinja\n    - user: root\n    - group: root\n    - mode: 644\n    - require:\n      - pkg: haproxy_pkg # 'haproxy_pkg' from init.sls\n    - watch_in:\n      - service: haproxy_service # 'haproxy_service' from init.sls<\/code><\/pre>\n<p>Bu state, <code>\/etc\/haproxy\/haproxy.cfg<\/code> dosyas\u0131n\u0131n i\u00e7eri\u011fini <code>haproxy.cfg.j2<\/code> \u015fablonundan almas\u0131n\u0131 sa\u011flar. <code>template: jinja<\/code> ile Pillar verilerini kullanabilece\u011fimizi belirtiyoruz. <code>require<\/code> ile HAProxy paketinin kurulu olmas\u0131n\u0131, <code>watch_in<\/code> ile de yap\u0131land\u0131rma de\u011fi\u015fti\u011finde servisin yeniden ba\u015flat\u0131lmas\u0131n\u0131 sa\u011fl\u0131yoruz.<\/p>\n<p><code>\/srv\/salt\/haproxy\/files\/haproxy.cfg.j2<\/code><\/p>\n<pre><code class=\"language-jinja\">global\n    log \/dev\/log    local0\n    log \/dev\/log    local1 notice\n    chroot \/var\/lib\/haproxy\n    stats socket \/run\/haproxy\/admin.sock mode 660 level admin expose-fd listeners\n    stats timeout 30s\n    user haproxy\n    group haproxy\n    daemon\n    # maxconn 20000 # Max connections per process\n    # pidfile \/var\/run\/haproxy.pid\n\ndefaults\n    mode http\n    log global\n    option httplog\n    option dontlognull\n    option http-server-close\n    option forwardfor       except 127.0.0.0\/8\n    option redispatch\n    retries 3\n    timeout http-request 10s\n    timeout queue 1m\n    timeout connect 10s\n    timeout client 1m\n    timeout server 1m\n    timeout http-keep-alive 10s\n    timeout check 10s\n    maxconn 3000\n\n<h2>Frontend for web application<\/h2>\nfrontend {{ pillar['haproxy']['frontend_name'] }}\n    bind *:{{ pillar['haproxy']['frontend_port'] }}\n    mode http\n    default_backend {{ pillar['haproxy']['backend_name'] }}\n\n<h2>Backend for web servers<\/h2>\nbackend {{ pillar['haproxy']['backend_name'] }}\n    balance {{ pillar['haproxy']['balance_algorithm'] }}\n    {% for server in pillar['haproxy']['backend_servers'] %}\n    server {{ server.name }} {{ server.ip }}:{{ server.port }} check inter 2s fall 3 rise 2\n    {% endfor %}\n\n<h2>HAProxy Statistics Page<\/h2>\nlisten stats\n    bind *:{{ pillar['haproxy']['stats_port'] }}\n    mode http\n    stats enable\n    stats uri \/haproxy_stats\n    stats realm Haproxy\\ Statistics\n    stats auth {{ pillar['haproxy']['stats_user'] }}:{{ pillar['haproxy']['stats_password'] }}\n    stats hide-version\n    stats refresh 5s<\/code><\/pre>\n<p>Bu Jinja2 \u015fablonu, HAProxy yap\u0131land\u0131rmas\u0131n\u0131 Pillar&#8217;dan gelen verilerle dinamik olarak olu\u015fturur. \u00d6rne\u011fin, <code>{{ pillar['haproxy']['frontend_port'] }}<\/code> ifadesi, Pillar&#8217;daki <code>haproxy:frontend_port<\/code> de\u011ferini \u00e7eker. <code>{% for server in pillar['haproxy']['backend_servers'] %}<\/code> d\u00f6ng\u00fcs\u00fc ile backend sunucular\u0131 listesi dinamik olarak olu\u015fturulur.<\/p>\n<h4>Pillar Verilerini Tan\u0131mlama<\/h4>\n<p>\u015eimdi HAProxy yap\u0131land\u0131rmam\u0131z i\u00e7in gerekli Pillar verilerini olu\u015ftural\u0131m:<\/p>\n<p><code>\/srv\/pillar\/haproxy.sls<\/code><\/p>\n<pre><code class=\"language-yaml\">haproxy:\n  frontend_name: my_webapp_frontend\n  frontend_port: 80\n  backend_name: web_servers_backend\n  balance_algorithm: roundrobin\n  backend_servers:\n    - name: webserver1\n      ip: 192.168.1.101\n      port: 80\n    - name: webserver2\n      ip: 192.168.1.102\n      port: 80\n  stats_port: 8080\n  stats_user: admin\n  stats_password: securepassword123<\/code><\/pre>\n<p>Bu Pillar dosyas\u0131, HAProxy&#8217;nin dinleyece\u011fi port, backend sunucular\u0131n\u0131n IP adresleri, y\u00fck dengeleme algoritmas\u0131 ve istatistik sayfas\u0131 kimlik bilgileri gibi t\u00fcm dinamik de\u011ferleri i\u00e7erir.<\/p>\n<p>Son olarak, bu Pillar verilerini HAProxy minion&#8217;una atamak i\u00e7in <code>top.sls<\/code> dosyas\u0131n\u0131 d\u00fczenlememiz gerekiyor:<\/p>\n<p><code>\/srv\/pillar\/top.sls<\/code><\/p>\n<pre><code class=\"language-yaml\">base:\n  'haproxy_minion_id': # Hedef minion ID'si veya Grains ile hedefleme\n    - haproxy<\/code><\/pre>\n<p>Burada <code>haproxy_minion_id<\/code> yerine ger\u00e7ek minion ID&#8217;nizi veya <code>G@os:Debian and G@roles:haproxy<\/code> gibi bir Grains hedeflemesi kullanabilirsiniz.<\/p>\n<h4>Top File Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>Salt Master&#8217;\u0131n hangi minion&#8217;lara hangi state&#8217;leri uygulayaca\u011f\u0131n\u0131 bildiren <code>top.sls<\/code> dosyas\u0131n\u0131 yap\u0131land\u0131ral\u0131m:<\/p>\n<p><code>\/srv\/salt\/top.sls<\/code><\/p>\n<pre><code class=\"language-yaml\">base:\n  'haproxy_minion_id': # Hedef minion ID'si veya Grains ile hedefleme\n    - haproxy # Bu, \/srv\/salt\/haproxy\/init.sls ve \/srv\/salt\/haproxy\/config.sls'i i\u00e7erir<\/code><\/pre>\n<p>SaltStack, bir dizin ad\u0131 verildi\u011finde (\u00f6rne\u011fin <code>haproxy<\/code>), o dizindeki <code>init.sls<\/code> dosyas\u0131n\u0131 otomatik olarak arar ve \u00e7al\u0131\u015ft\u0131r\u0131r. <code>init.sls<\/code> i\u00e7inde, <code>include<\/code> veya <code>extend<\/code> kullanarak di\u011fer state&#8217;leri de dahil edebiliriz. Bizim \u00f6rne\u011fimizde, <code>haproxy\/init.sls<\/code> ve <code>haproxy\/config.sls<\/code> dosyalar\u0131n\u0131 ayn\u0131 dizine koyarak ve <code>init.sls<\/code> i\u00e7inde <code>config.sls<\/code>&#8216;i dahil ederek daha mod\u00fcler bir yap\u0131 olu\u015fturabiliriz. Ancak basitlik ad\u0131na, <code>top.sls<\/code>&#8216;in sadece <code>haproxy<\/code> state&#8217;ini \u00e7a\u011f\u0131rmas\u0131 ve <code>haproxy\/init.sls<\/code>&#8216;in <code>config.sls<\/code>&#8216;i \u00e7a\u011f\u0131rmas\u0131 daha iyi bir yakla\u015f\u0131md\u0131r.<\/p>\n<p><code>\/srv\/salt\/haproxy\/init.sls<\/code> (G\u00fcncellenmi\u015f hali)<\/p>\n<pre><code class=\"language-yaml\">include:\n  - haproxy.config # haproxy\/config.sls'i dahil eder\n\n{% if grains['os_family'] == 'Debian' %}\nhaproxy_pkg:\n  pkg.installed:\n    - name: haproxy\n\nhaproxy_service:\n  service.running:\n    - name: haproxy\n    - enable: True\n    - watch:\n      - file: \/etc\/haproxy\/haproxy.cfg\n{% elif grains['os_family'] == 'RedHat' %}\nhaproxy_pkg:\n  pkg.installed:\n    - name: haproxy\n\nhaproxy_service:\n  service.running:\n    - name: haproxy\n    - enable: True\n    - watch:\n      - file: \/etc\/haproxy\/haproxy.cfg\n{% endif %}<\/code><\/pre>\n<p>Bu \u015fekilde, <code>top.sls<\/code> sadece <code>haproxy<\/code> state&#8217;ini \u00e7a\u011f\u0131r\u0131r ve <code>haproxy\/init.sls<\/code> hem paketi kurar hem de yap\u0131land\u0131rma dosyas\u0131n\u0131 olu\u015fturan <code>haproxy\/config.sls<\/code>&#8216;i dahil eder.<\/p>\n<h3>Geli\u015fmi\u015f Yap\u0131land\u0131rmalar ve En \u0130yi Uygulamalar<\/h3>\n<p>SaltStack ile HAProxy y\u00f6netimi, sadece temel kurulumdan ibaret de\u011fildir. Daha karma\u015f\u0131k senaryolar ve en iyi uygulamalarla altyap\u0131n\u0131z\u0131 daha da g\u00fc\u00e7lendirebilirsiniz.<\/p>\n<h4>Y\u00fcksek Eri\u015filebilirlik (HA) i\u00e7in Keepalived Entegrasyonu<\/h4>\n<p>Tek bir HAProxy sunucusu, tek hata noktas\u0131 (Single Point of Failure &#8211; SPoF) olu\u015fturur. Y\u00fcksek eri\u015filebilirlik i\u00e7in iki veya daha fazla HAProxy sunucusunu aktif\/pasif veya aktif\/aktif modda \u00e7al\u0131\u015ft\u0131rmak ve sanal bir IP adresi (VIP) kullanmak gerekir. Keepalived, VRRP (Virtual Router Redundancy Protocol) kullanarak bu sanal IP adresini y\u00f6netir ve birincil HAProxy sunucusu \u00e7\u00f6kt\u00fc\u011f\u00fcnde VIP&#8217;yi yedek sunucuya otomatik olarak ta\u015f\u0131r. SaltStack ile Keepalived state&#8217;leri yazarak bu s\u00fcreci tamamen otomatikle\u015ftirebilirsiniz:<\/p>\n<p>*   <strong>Keepalived paketi kurulumu:<\/strong> <code>pkg.installed<\/code><br \/>\n*   <strong>Keepalived yap\u0131land\u0131rma dosyas\u0131 (<code>keepalived.conf<\/code>) olu\u015fturma:<\/strong> Pillar verileriyle Jinja2 \u015fablonlar\u0131 kullanarak VIP, \u00f6ncelikler ve sa\u011fl\u0131k kontrolleri tan\u0131mlanabilir.<br \/>\n*   <strong>Keepalived servis y\u00f6netimi:<\/strong> <code>service.running<\/code><\/p>\n<p>Bu sayede, t\u00fcm y\u00fck dengeleme katman\u0131n\u0131z\u0131n y\u00fcksek eri\u015filebilirli\u011fini SaltStack \u00fczerinden y\u00f6netebilirsiniz.<\/p>\n<h4>HAProxy Monitoring ve Loglama<\/h4>\n<p>HAProxy&#8217;nin performans\u0131n\u0131 ve sa\u011fl\u0131\u011f\u0131n\u0131 izlemek, \u00fcretim ortamlar\u0131 i\u00e7in kritik \u00f6neme sahiptir.<br \/>\n*   <strong>HAProxy \u0130statistik Sayfas\u0131:<\/strong> Yukar\u0131daki \u00f6rnekte g\u00f6sterildi\u011fi gibi, bir istatistik sayfas\u0131 etkinle\u015ftirerek HAProxy&#8217;nin \u00e7al\u0131\u015fma zaman\u0131 istatistiklerini (ba\u011flant\u0131lar, sunucu durumlar\u0131, trafik vb.) web aray\u00fcz\u00fc \u00fczerinden izleyebilirsiniz.<br \/>\n*   <strong>Syslog Entegrasyonu:<\/strong> HAProxy, loglar\u0131n\u0131 syslog&#8217;a g\u00f6nderecek \u015fekilde yap\u0131land\u0131r\u0131labilir. SaltStack ile rsyslog yap\u0131land\u0131rmas\u0131n\u0131 (<code>\/etc\/rsyslog.d\/haproxy.conf<\/code>) y\u00f6neterek HAProxy loglar\u0131n\u0131 merkezi bir log sunucusuna y\u00f6nlendirebilirsiniz. Bu, log analizini ve hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131r.<br \/>\n*   <strong>Logrotate:<\/strong> HAProxy log dosyalar\u0131n\u0131n boyutunu y\u00f6netmek i\u00e7in <code>logrotate<\/code> yap\u0131land\u0131rmas\u0131n\u0131 Salt ile otomatikle\u015ftirebilirsiniz.<\/p>\n<h4>Mod\u00fcler Yakla\u015f\u0131m<\/h4>\n<p>B\u00fcy\u00fck ve karma\u015f\u0131k altyap\u0131larda, Salt state&#8217;lerini daha k\u00fc\u00e7\u00fck, y\u00f6netilebilir par\u00e7alara ay\u0131rmak en iyi uygulamad\u0131r.<br \/>\n*   <strong>State B\u00f6lme:<\/strong> HAProxy kurulumu i\u00e7in <code>init.sls<\/code>, yap\u0131land\u0131rma i\u00e7in <code>config.sls<\/code>, loglama i\u00e7in <code>logging.sls<\/code> gibi farkl\u0131 dosyalar olu\u015fturabilirsiniz.<br \/>\n*   <strong><code>include<\/code> ve <code>extend<\/code>:<\/strong> Bu SaltStack ifadeleri, farkl\u0131 state dosyalar\u0131n\u0131 bir araya getirmenizi veya mevcut state&#8217;leri geni\u015fletmenizi sa\u011flar. Bu, kod tekrar\u0131n\u0131 azalt\u0131r ve okunabilirli\u011fi art\u0131r\u0131r.<\/p>\n<h4>G\u00fcvenlik<\/h4>\n<p>SaltStack ile HAProxy y\u00f6netirken g\u00fcvenlik her zaman \u00f6ncelikli olmal\u0131d\u0131r.<br \/>\n*   <strong>Pillar&#8217;da Hassas Veri Y\u00f6netimi:<\/strong> HAProxy istatistik sayfas\u0131 i\u00e7in kullan\u0131lan \u015fifreler gibi hassas verileri do\u011frudan <code>haproxy.sls<\/code> dosyas\u0131na koymak yerine, SaltStack&#8217;in \u015fifrelenmi\u015f Pillar (Encrypted Pillar) \u00f6zelli\u011fini kullanabilirsiniz. Bu, verileri GPG ile \u015fifreleyerek yaln\u0131zca yetkili Master ve Minion&#8217;lar\u0131n bu verilere eri\u015fmesini sa\u011flar.<br \/>\n*   <strong>HAProxy Y\u00f6netim Aray\u00fcz\u00fc G\u00fcvenli\u011fi:<\/strong> \u0130statistik sayfas\u0131 gibi y\u00f6netim aray\u00fczlerine eri\u015fimi k\u0131s\u0131tlamak i\u00e7in IP tabanl\u0131 k\u0131s\u0131tlamalar veya daha g\u00fc\u00e7l\u00fc kimlik do\u011frulama y\u00f6ntemleri kullan\u0131n.<\/p>\n<h4>Test Etme ve Do\u011frulama<\/h4>\n<p>Salt state&#8217;lerini \u00fcretim ortam\u0131na uygulamadan \u00f6nce test etmek \u00e7ok \u00f6nemlidir.<br \/>\n*   <strong><code>salt-call state.highstate test=True<\/code>:<\/strong> Bu komut, bir minion \u00fczerinde state&#8217;lerin \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda hangi de\u011fi\u015fikliklerin yap\u0131laca\u011f\u0131n\u0131 g\u00f6sterir ancak ger\u00e7ekte hi\u00e7bir de\u011fi\u015fiklik yapmaz. Bu, potansiyel hatalar\u0131 \u00f6nceden tespit etmek i\u00e7in harika bir yoldur.<br \/>\n*   <strong>HAProxy Yap\u0131land\u0131rma Do\u011frulamas\u0131:<\/strong> HAProxy, yap\u0131land\u0131rma dosyas\u0131n\u0131n s\u00f6zdizimini kontrol etmek i\u00e7in yerle\u015fik bir araca sahiptir: <code>haproxy -c -f \/etc\/haproxy\/haproxy.cfg<\/code>. Salt state&#8217;lerinizde bu kontrol\u00fc tetikleyen bir <code>cmd.run<\/code> veya <code>test.succeed_if<\/code> kullanabilirsiniz.<br \/>\n*   <strong>Servis Durum Kontrol\u00fc:<\/strong> HAProxy servisi ba\u015flat\u0131ld\u0131ktan sonra, <code>service haproxy status<\/code> veya <code>systemctl status haproxy<\/code> gibi komutlarla durumunu kontrol edin.<\/p>\n<h3>Uygulama ve \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>SaltStack ile HAProxy state&#8217;lerinizi olu\u015fturduktan sonra, bunlar\u0131 minion&#8217;lar\u0131n\u0131za uygulamak olduk\u00e7a basittir.<\/p>\n<p>1.  <strong>Pillar Verilerini Senkronize Etme:<\/strong> Master \u00fczerinde Pillar verilerinde bir de\u011fi\u015fiklik yapt\u0131\u011f\u0131n\u0131zda, minion&#8217;lar\u0131n bu de\u011fi\u015fiklikleri almas\u0131n\u0131 sa\u011flamak i\u00e7in Pillar verilerini yenilemeniz gerekebilir:<\/p>\n<pre><code class=\"language-bash\">sudo salt 'haproxy_minion_id' saltutil.refresh_pillar<\/code><\/pre>\n<p>    veya t\u00fcm minion&#8217;lar i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">sudo salt '*' saltutil.refresh_pillar<\/code><\/pre>\n<p>2.  <strong>State&#8217;leri Uygulama:<\/strong> HAProxy minion&#8217;unuz \u00fczerinde state&#8217;leri uygulamak i\u00e7in Salt Master&#8217;dan a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo salt 'haproxy_minion_id' state.highstate<\/code><\/pre>\n<p>    Bu komut, <code>haproxy_minion_id<\/code> adl\u0131 minion&#8217;a <code>top.sls<\/code> dosyas\u0131nda tan\u0131mlanan t\u00fcm state&#8217;leri uygulamas\u0131n\u0131 s\u00f6yler. \u00c7\u0131kt\u0131, her bir state&#8217;in ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 ve hangi de\u011fi\u015fikliklerin yap\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6sterecektir.<\/p>\n<p>3.  <strong>Do\u011frulama:<\/strong> State&#8217;ler uyguland\u0131ktan sonra, HAProxy sunucunuza SSH ile ba\u011flanarak veya web taray\u0131c\u0131n\u0131zdan eri\u015ferek yap\u0131land\u0131rman\u0131n do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulay\u0131n.<br \/>\n    *   <code>sudo systemctl status haproxy<\/code> (servisin \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun)<br \/>\n    *   <code>sudo haproxy -c -f \/etc\/haproxy\/haproxy.cfg<\/code> (yap\u0131land\u0131rma dosyas\u0131n\u0131n ge\u00e7erlili\u011fini kontrol edin)<br \/>\n    *   Web taray\u0131c\u0131n\u0131zdan <code>http:\/\/<HAProxy_IP_Adresi>\/haproxy_stats<\/code> adresine giderek istatistik sayfas\u0131n\u0131 kontrol edin (kullan\u0131c\u0131 ad\u0131 ve \u015fifre ile giri\u015f yap\u0131n).<br \/>\n    *   Web uygulaman\u0131z\u0131n ana URL&#8217;sine (<code>http:\/\/<HAProxy_IP_Adresi><\/code>) eri\u015ferek y\u00fck dengelemenin \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 test edin.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>SaltStack, HAProxy y\u00fck dengeleyicilerin kurulumu, yap\u0131land\u0131rmas\u0131 ve y\u00f6netimi i\u00e7in g\u00fc\u00e7l\u00fc ve esnek bir platform sunar. Bu makalede ele ald\u0131\u011f\u0131m\u0131z Salt State&#8217;leri ve Pillar yap\u0131lar\u0131 sayesinde, HAProxy altyap\u0131n\u0131z\u0131 tamamen otomatikle\u015ftirebilir, manuel hatalar\u0131 en aza indirebilir ve da\u011f\u0131t\u0131mlar\u0131n\u0131z\u0131 h\u0131zland\u0131rabilirsiniz. Jinja2 \u015fablonlar\u0131 ve Pillar&#8217;\u0131n dinamik yap\u0131s\u0131, farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) veya farkl\u0131 uygulama gereksinimleri i\u00e7in kolayca uyarlanabilir yap\u0131land\u0131rmalar olu\u015fturman\u0131za olanak tan\u0131r.<\/p>\n<p>SaltStack ve HAProxy&#8217;nin entegrasyonu, modern DevOps pratiklerinin temelini olu\u015fturan altyap\u0131 kod (Infrastructure as Code &#8211; IaC) prensiplerini benimsemenize yard\u0131mc\u0131 olur. Bu sayede, tutarl\u0131, \u00f6l\u00e7eklenebilir ve y\u00fcksek eri\u015filebilir y\u00fck dengeleme \u00e7\u00f6z\u00fcmlerini etkin bir \u015fekilde da\u011f\u0131tabilir ve y\u00f6netebilirsiniz. Gelecekte, bu yap\u0131land\u0131rmalar\u0131 s\u00fcrekli entegrasyon\/s\u00fcrekli teslimat (CI\/CD) i\u015flem hatlar\u0131n\u0131za entegre ederek altyap\u0131 da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinizi daha da optimize edebilirsiniz. SaltStack&#8217;in sundu\u011fu esneklik ve g\u00fc\u00e7 ile, HAProxy altyap\u0131n\u0131z\u0131n y\u00f6netimini basitle\u015ftirirken, ayn\u0131 zamanda karma\u015f\u0131kl\u0131\u011f\u0131 azaltabilir ve g\u00fcvenilirli\u011fi art\u0131rabilirsiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"SaltStack Altyap\u0131s\u0131: HAProxy Y\u00fck Dengeleyiciler \u0130\u00e7in Salt State&#8217;leri Olu\u015fturma\nSaltStack, modern IT altyap\u0131lar\u0131nda yap\u0131land\u0131rma y\u00f6netimi,","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-39322","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>SaltStack Altyap\u0131s\u0131: HAProxy Y\u00fck Dengeleyiciler \u0130\u00e7in Salt State&#039;leri Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SaltStack Altyap\u0131s\u0131: HAProxy Y\u00fck Dengeleyiciler \u0130\u00e7in Salt State&#039;leri Olu\u015fturma\" \/>\n<meta property=\"og:description\" content=\"SaltStack Altyap\u0131s\u0131: HAProxy Y\u00fck Dengeleyiciler \u0130\u00e7in Salt State&#039;leri Olu\u015fturma SaltStack, modern IT altyap\u0131lar\u0131nda yap\u0131land\u0131rma y\u00f6netimi,\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-18T16:40:47+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"SaltStack Altyap\u0131s\u0131: HAProxy Y\u00fck Dengeleyiciler \u0130\u00e7in Salt State&#8217;leri Olu\u015fturma\",\"datePublished\":\"2026-02-18T16:40:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/\"},\"wordCount\":2553,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/\",\"name\":\"SaltStack Altyap\u0131s\u0131: HAProxy Y\u00fck Dengeleyiciler \u0130\u00e7in Salt State'leri Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-18T16:40:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SaltStack Altyap\u0131s\u0131: HAProxy Y\u00fck Dengeleyiciler \u0130\u00e7in Salt State&#8217;leri Olu\u015fturma\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SaltStack Altyap\u0131s\u0131: HAProxy Y\u00fck Dengeleyiciler \u0130\u00e7in Salt State'leri Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/","og_locale":"tr_TR","og_type":"article","og_title":"SaltStack Altyap\u0131s\u0131: HAProxy Y\u00fck Dengeleyiciler \u0130\u00e7in Salt State'leri Olu\u015fturma","og_description":"SaltStack Altyap\u0131s\u0131: HAProxy Y\u00fck Dengeleyiciler \u0130\u00e7in Salt State'leri Olu\u015fturma SaltStack, modern IT altyap\u0131lar\u0131nda yap\u0131land\u0131rma y\u00f6netimi,","og_url":"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-18T16:40:47+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"16 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"SaltStack Altyap\u0131s\u0131: HAProxy Y\u00fck Dengeleyiciler \u0130\u00e7in Salt State&#8217;leri Olu\u015fturma","datePublished":"2026-02-18T16:40:47+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/"},"wordCount":2553,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/","url":"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/","name":"SaltStack Altyap\u0131s\u0131: HAProxy Y\u00fck Dengeleyiciler \u0130\u00e7in Salt State'leri Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-18T16:40:47+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/saltstack-altyapisi-haproxy-yuk-dengeleyiciler-icin-salt-stateleri-olusturma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"SaltStack Altyap\u0131s\u0131: HAProxy Y\u00fck Dengeleyiciler \u0130\u00e7in Salt State&#8217;leri Olu\u015fturma"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39322","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=39322"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39322\/revisions"}],"predecessor-version":[{"id":39323,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39322\/revisions\/39323"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39322"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39322"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}