Ortamımda, sanal makineler veya konteynerler sık sık hostlar arasında geçtiğinde Linux köprülerinde ARP kararsızlığıyla karşılaşırım. Köprü MAC tablosu eski girdilerle doldurulur ve yaşlandırma süresi, bu girdilerin ne kadar süreyle kalıp daha sonra temizleneceğini belirler. Bu süre çok düşükse, sürekli yeniden öğrenme ve ARP fırtınaları olur; çok yüksekse, VM geçişinden sonra trafiğin siyah delik kalma riski olur. Ben bu değeri doğrudan ayarlamak için brctl setageing kullanırım ve bridged ağlarda çalan ARP sorunlarını hata ayıklarken ilk olarak başvurduğum ayarlardan biridir.
Mevcut Köprü Yaşlandırma Süresini Kontrol Etme
Herhangi bir değişiklik yapmadan önce, mevcut ayarı her zaman kontrol ederim. Bir köprü için yaşlandırma süresini brctl show komutuyla görebilirsiniz:
brctl show
Bu komut şuna benzer bir çıktı verir:
bridge name bridge id STP enabled interfaces
br0 8000.001122334455 yes eth0
vnet0
vnet1
Ancak brctl show doğrudan yaşlandırma süresini göstermez. Bunun için /sys/class/net/br0/bridge/ageing_time altındaki sysfs girişini kontrol ederim:
cat /sys/class/net/br0/bridge/ageing_time
Bu komut değeri saniyenin yüzdesi (centiseconds) olarak döndürür. Varsayılan genellikle 300'tür, yani 30 saniye. Günlüklerde sık sık MAC çarpıtmaları görürsem, girdilerin daha hızlı yaşlanıp çıkarılmasını sağlamak için bu değeri 10-15 saniye aralığına indirebilirim.
brctl setageing ile Yeni Yaşlandırma Süresi Ayarlama
Yaşlandırma süresini değiştirmek için brctl setageing <köprü> <zaman_in_centiseconds> komutunu kullanırım. Örneğin, 10 saniye (1000 centiseconds) olarak ayarlamak için:
brctl setageing br0 1000
Bu komutu çalıştırdıktan sonra değişikliği doğrularım:
cat /sys/class/net/br0/bridge/ageing_time
Şimdi 1000 döndürmesi gerekir. Bu değişiklik hemen etkili olur — yeniden başlatma gerekmez. Yoğun Proxmox veya KVM hostlarında canlı geçiş yaparken, yaşlandırma süresini 10-15 saniye arasında tutarak failover sırasında ARP karışıklığını azaltabileceğimi buldum.
Yaşlandırma Süresinin ARP Önbellek Kararlılığına Etkisi Neden Önemli?
Bir köprü MAC tablosu ayarının ARP üzerindeki etkisini merak edebilirsiniz. Bu etkisi dolaylıdır ama gerçektir. Köprü bir MAC girdisini çok hızlı yaşlandırırsa, bu MAC için sonraki çerçeve tüm portlara taşınır. Cihaz hareket ettiyse, ARP yanıtı beklenmedik bir yerden gelebilir ve bu da konağın ARP önbelleğini yanlış güncellemesine neden olur. Tersine, girdi çok uzun süre kalırsa, VM geçişinden sonra çerçeveler eski porta yönlendirilmeye devam eder ve bu paket kaybına yol açar; girdi sonunda süresi dolana kadar.
Kendi ayarlama sürecimde, brctl setageing'i net.ipv4.conf.<arabirim>.arp_announce ayarlarıyla birlikte kullanırım. arp_announce değerini 2 (sadece en iyi yerel arabirimden duyur) olarak ayarlayarak, bir köprüde birden fazla IP yapılandırması olduğunda ARP sallanmasını önlerim. Daha önce VoIP için DSCP işaretleme konulu yazımda da belirttiğim gibi, bu tür küçük çekirdek ayarları kararlılık üzerinde büyük etkiler yaratabilir.
Üretim Ortamında Kullandığım Pratik Değerler
Deneyim ve hata yoluyla şu değerlere vardım:
- Varsayılan (300 centiseconds / 30s): Dinamik VM ortamları için çok yavaş
- 100-150 (1-1.5s): Test için uygundur ama üretimde çok gürültülü
- 300-600 (3-6s): Stabil köprülü ağlar için genellikle başlangıç noktasımdır
- 1000 (10s): Sık canlı geçiş iş yükleri için iyi bir seçenek
Belirli bir çalan MAC sorununu hata ayıklarken değilse, 100'in altında asla gitmem. Aksi takdirde köprü çok fazla çerçeve taşır ve performansını etkiler.
Etkiyi Doğrulama
Yaşlandırma süresini değiştirdikten sonra iki şeyi izlerim:
- MAC tablosu dinamikleri:
watch -n 1 'brctl showmacs br0' - ARP önbellek davranışı:
watch -n 1 'arp -n | grep <target_ip>'
MAC adreslerinin çok hızlı girip çıkıyorsa, süreyi artırırım. VM geçtikten sonra ARP girdileri sürekli güncelliyorsa, süreyi hafifçe düşürebilir veya arp_announce ve arp_ignore ayarlarını kontrol edebilirim.
Uyarı: ARP Çöp Toplama ile Karıştırma
Köprü yaşlandırma süresi ile ARP önbellek zamanlayıcıları karıştırılmaya açıktır. Ancak bu iki şey ayrıdır. ARP önbelleği /proc/sys/net/ipv4/neigh/<cihaz>/gc_stale_time ve ilgili ayarlarla yönetilir. Yöneticiler köprüyle ilgili ARP sorunlarını düzeltmek umuduyla bu ayarları oynatırlar, ama bu işlem köprü FDB'sini etkilemez. Her zaman hangi katmanla çalıştığınızı kontrol edin.
Son Düşünceler
Linux köprülerinde brctl setageing ile FDB yaşlandırma süresini kontrol etmek cazip olmayabilir ama sanalleştirilmiş ortamlarda ARP'yi stabilize etmek için hassas bir araçtır. Ben bunu bir amortisör ayarlamak gibi görürüm — küçük düzenlemeler daha büyük titreşimleri önler. Uygun arp_announce değerleri ve izlemeyle birleştirildiğinde, failover sonrası garip paket düşüşlerini azaltmada bana yardımcı olmuştur.
Linux köprülerinde ARP kararsızlığı yaşıyorsanız, ilk olarak yaşlandırma süresini kontrol edin. Bu seviyede düşük seviyeli bir ayar olup da çok fazla dikkat çekmese de, doğru senaryoda gerçek bir fark yaratır.
Kapak görseli: USDAgov · PDM (Openverse / kamu malı) · https://www.flickr.com/photos/41284017@N08/52287992217
