İçeriğe Atla
Rehberler · 10 dk okuma · görüntülenme
100%

systemd Socket Activation ile Zero-Downtime Restart

Servisi yeniden başlatırken portu düşürmeden, bağlantı kabulünü socket unit ile ayırıp deploy etkisini azaltma runbook’u.

systemd socket activation ile kesintisiz restart akışını gösteren kapak görseli

Üretimde “servisi restart ettim, 10 saniye 502 yedik” cümlesi çoğu zaman normalleştirilir. Oysa servis çok kritikse (auth, gateway, queue consumer control-plane gibi) restart etkisini sıfıra yakın bir yere çekmek mümkündür.

systemd’nin socket activation özelliği, “portu dinleme” işini servis prosesinden ayırır. Böylece servis prosesini yeniden başlatırken, dinleme soketi ayakta kalır ve bağlantı kabulü kesilmez.

systemd socket activation ile kesintisiz restart akışını gösteren kapak görseli
Portu düşürmeden restart etmek, incident riskini belirgin azaltır.

Socket activation ne çözer?

Socket activation şu problemleri küçültür:

  • Restart sırasında portun kısa süreli kapanması
  • Orkestrasyon (deploy) dalgasında LB health-check flap’i
  • “Servis çok hızlı açılmadı” kaynaklı cold-start etkileri

Ön koşullar

  • Linux + systemd (çoğu modern distro)
  • Servisinizin LISTEN_FDS / LISTEN_PID üzerinden systemd socket’ini kullanabilmesi
    • Birçok dil/runtime bunu destekler (Go, Rust, Node ekosisteminde wrapper’lar var)
    • Kendi servisiniz desteklemiyorsa, basit bir “socket-accept” wrapper ile de çözülebilir

Bu yazıda odak “mekanizma” olduğu için, örnekleri minimal tutacağım.

Mimari: .socket + .service

Model:

  • myapp.socket portu dinler
  • Bağlantı geldiğinde myapp.service başlar (veya zaten çalışıyorsa FD’yi kullanır)

1) Socket unit örneği

/etc/systemd/system/myapp.socket:

[Unit]
Description=myapp socket

[Socket]
ListenStream=127.0.0.1:8080
NoDelay=true
ReusePort=false

[Install]
WantedBy=sockets.target

Notlar:

  • ListenStream adresi güvenlik modelinize göre değişir (0.0.0.0 açacaksanız firewall şart).
  • ReusePort çoğu senaryoda istemeden karmaşa üretir; önce kapalı tutun.

2) Service unit örneği

/etc/systemd/system/myapp.service:

[Unit]
Description=myapp service
After=network.target
Requires=myapp.socket

[Service]
Type=simple
ExecStart=/usr/local/bin/myapp
Restart=on-failure
RestartSec=2

# Hardening (minimum)
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true

[Install]
WantedBy=multi-user.target

Çalıştırma

sudo systemctl daemon-reload
sudo systemctl enable --now myapp.socket
sudo systemctl status myapp.socket

Servisi manuel başlatmak zorunda değilsiniz; ilk bağlantıyla tetiklenebilir. Ama “her zaman sıcak” tutmak istiyorsanız myapp.service’i de enable edebilirsiniz.

Zero-downtime restart runbook

Hedef: restart sırasında port düşmesin, LB health-check bozulmasın, kullanıcı hatası üretmeyelim.

  1. Hazırlık
  • myapp.socket enabled ve active mı?
  • LB health-check hedefi doğru mu? (ör. localhost + sidecar varsa dikkat)
  1. Restart
sudo systemctl restart myapp.service
  1. Doğrulama
  • ss -lntp | grep 8080 ile port dinlemesi devam ediyor mu?
  • Uygulama loglarında “listening failed” var mı?
  • Hata oranı / p95 deploy sırasında yükseldi mi?

Operasyonel guardrail’ler

Ben prod’da şunları standartlaştırmayı seviyorum:

  • StartLimitIntervalSec / StartLimitBurst: crash-loop’un gürültüsünü kontrol et
  • Health-check endpoint’i: “hazır” olmadan 200 dönme
  • Restart dalgası: canary → pilot → genelleme

Sonuç

systemd socket activation, “restart = kısa kesinti” refleksini kıran güçlü bir mekanizmadır. Doğru kurulduğunda, deploy dalgalarında LB flap’ini azaltır ve incident ihtimalini belirgin düşürür. Bunu graceful shutdown, ölçüm ve kademeli rollout ile birleştirdiğinizde; servisin restart’ı operasyonel olarak “rutin” hale gelir.

Paylaş:

Bu yazı faydalı oldu mu?

Yükleniyor...

Bu yazı nasıldı?

ME

Mustafa Erbay

Sistem Mimarisi · Network Uzmanı · Altyapı, Güvenlik ve Yazılım

2006'dan bu yana sistem mimarisi, network, sunucu altyapıları, büyük yapıların kurulumu, yazılım ve sistem güvenliği ekseninde çalışıyorum. Bu blogda sahada karşılığı olan teknik deneyimlerimi paylaşıyorum.

Kişisel Notlar

Bu notlar sadece sizde saklanır. Tarayıcınızda yerel olarak tutulur.

Hazır 0 karakter

Yorumlar

Sunucu Taraflı AI Moderasyon

Yorumlar sunucuda yapay zeka ile denetlenir ve kalıcı olarak saklanır.

?
0/2000

Sunucu taraflı AI denetim

Yeni yazılardan haberdar olun

Haftada bir yeni içerikler ve kaynaklar doğrudan e-postanıza gelsin.

Spam yok. Yalnızca yeni ve önemli içerikler için e-posta gönderilir.

Okuma İstatistikleriniz

0

Yazı Okundu

0dk

Okuma Süresi

0

Gün Serisi

-

Favori Kategori

İlgili Yazılar