VyOS VRRP ile Yedekli Router Kurulumu
İki VyOS router'ı yedekli çalıştırmak gerektiğinde üç yol var: DNS tabanlı, harici yük dengeleyici veya VRRP. DNS ve yük dengeleyici ek altyapı gerektiriyor. VRRP doğrudan VyOS içinde çalışıyor, çoğu senaryo için yeterli.
Bu yazıda iki VyOS makinesiyle HA kurulumunu anlatıyorum. Kaynak VyOS'un resmi HA walkthrough dokümantasyonu. O dokümantasyonda olmayan bilgi eklemedim.
Birincisi VMware üzerinde VM, ikincisi fiziksel makine. Aynı mantık iki VM ile de çalışır.
Ağ tasarımı
İki VyOS aynı ağ segmentinde olmalı. VRRP multicast kullanıyor, tek datalink layer segment ile sınırlı.
Örnek: upstream 203.0.113.0/24 veriyor. İki router'ın fiziksel IP'leri 192.0.2.21 ve 192.0.2.22. Floating IP 203.0.113.1. İç ağ 10.200.201.0/24.
VMware tarafında üç ayar birlikte açık olmalı: Promiscuous Mode, MAC Address Changes ve Forged Transmits. Özellikle Forged Transmits önemli — VRRP'nin virtual MAC adresi (RFC 3768) ile çalışması için bu açık olmalı. VRRP paketleri gerçek NIC MAC'i değil virtual router MAC'i ile gidiyor. Sadece Promiscuous Mode açmak yeterli değil, üçü de enable edilmeli yoksa failover sırasında sorun çıkar.
VyOS versiyonu farkı var: 1.3'te virtual-address olan parametre 1.4 ve sonrasında address olarak geçiyor. Aynı makalede iki versiyon kullanılıyorsa bu dikkat edilmeli.
VRRP konfigürasyonu
VRRP, active/backup yedeklilik sağlıyor. Her router'ın fiziksel IP'si ve virtual address'i var. En yüksek priority'li router master oluyor, virtual address'i kendi interface'ine atıyor. Master düşerse bir sonraki en yüksek priority'li backup devralıyor. Master keepalive paketleri gönderiyor. Düşerse backup geçiyor.
VRRP grupları set high-availability vrrp group GROUP_NAME ile oluşturuluyor. Şart olan parametreler: interface, vrid ve address.
set high-availability vrrp group Foo vrid 10
set high-availability vrrp group Foo interface eth0
set high-availability vrrp group Foo address 192.0.2.1/24 Priority 1 ile 255 arasında. Yüksek değer öncelik anlamına geliyor.
set high-availability vrrp group Foo priority 200 Birden fazla VRRP grubunun birlikte failover yapması gerekiyorsa sync-group kullanılıyor:
set high-availability vrrp sync-group MAIN member VLAN9
set high-availability vrrp sync-group MAIN member VLAN20 VLAN9 failover olduğunda VLAN20 de aynı anda geçiş yapıyor. Burada dikkat edilecek nokta: sync group'taki tüm gruplar benzer şekilde konfigüre edilmeli. Farklı preempt-delay veya priority kullanılırsa sonsuz failover döngüsü oluşabilir, bu can sıkıcı bir durum.
Preemption varsayılan olarak açık. Kapatmak için no-preempt var. Belirli bir gecikme vermek için preempt-delay:
set high-availability vrrp group Foo preempt-delay 180 Track mekanizması: bir interface düştüğünde group FAULT durumuna geçiyor. Priority düşmüyor, direkt FAULT oluyor. Bu fark önemli — bazı VRRP implementasyonlarında priority decrement olur, VyOS'ta yok.
set high-availability vrrp group Foo track interface eth0
set high-availability vrrp group Foo track interface eth1 VRRP durumunu kontrol etmek için run show vrrp komutu kullanılıyor.
vyos@vyos# run show vrrp
Name Interface VRID State Last Transition
---------- ----------- ------ ------- -----------------
Foo eth1 10 MASTER 2s Bir VRRP grubunu devre dışı bırakmak için:
set high-availability vrrp group Foo disable Devre dışı grup VRRP process'inden tamamen çıkıyor, backup state'e girmiyor.
Multicast sorunu
VRRP varsayılan olarak multicast kullanıyor. Her switch bunu desteklemiyor. Multicast desteklemeyen ağlarda unicast çözüm oluyor:
set high-availability vrrp group Foo peer-address 192.0.2.10
set high-availability vrrp group Foo hello-source-address 192.0.2.15 peer-address karşı tarafın IP'si, hello-source-address kendi interface IP'si.
Script desteği
VRRP iki tür script destekliyor: health check ve transition. Health check script'leri düzenli aralıklarla çalışıyor. Script 0 döndürürse başarılı, başka değer döndürürse group FAULT durumuna geçiyor.
set high-availability vrrp group Foo health-check script /config/scripts/vrrp-check.sh
set high-availability vrrp group Foo health-check interval 60
set high-availability vrrp group Foo health-check failure-count 3 Script'ler /config/scripts/ dizininde olmalı ve execute izni olmalı:
chmod +x /config/scripts/script-name.sh Transition script'leri master/backup/fault geçişlerinde çalışıyor:
set high-availability vrrp group Foo transition-script backup "/config/scripts/vrrp-fail.sh Foo"
set high-availability vrrp group Foo transition-script fault "/config/scripts/vrrp-fail.sh Foo"
set high-availability vrrp group Foo transition-script master "/config/scripts/vrrp-master.sh Foo" Bu script'lerle servis başlatma/durdurma otomatize edilebiliyor. VRRP konfigürasyonunu script içinde değiştirmemek iyi bir fikir — dokümantasyon da aynı şeyi söylüyor.
Sync group'taki health check script'i ayrı konfigure edilebiliyor:
set high-availability vrrp sync-group Bar health-check script /config/scripts/vrrp-check.sh
set high-availability vrrp sync-group Bar health-check interval 60
set high-availability vrrp sync-group Bar health-check failure-count 3 Conntrack-sync kurulumu
Active-backup geçişlerde mevcut TCP bağlantılarının kopmaması için conntrack-sync kullanılıyor. Failover sonrası backup router tüm aktif session'ları devralıyor.
Temel konfigürasyon:
set service conntrack-sync failover-mechanism vrrp sync-group syncgrp
set service conntrack-sync interface eth1
set service conntrack-sync accept-protocol tcp
set service conntrack-sync accept-protocol udp
set service conntrack-sync accept-protocol icmp failover-mechanism zorunlu bir parametre. Sync-group ile hangi VRRP gruplarının conntrack-sync'e dahil olduğu belirtiliyor.
Sync taşıma iki şekilde çalışıyor: multicast (varsayılan, 225.0.0.50) veya unicast.
set service conntrack-sync mcast-group 225.0.0.60 Unicast için:
set service conntrack-sync interface eth1 peer 192.0.2.2 peer parametresi o interface'i unicast mode'a geçiriyor.
ignore-address, sync edilmemesi gereken yerel conntrack entry'lerini hariç tutmak için kullanılıyor. Örneğin yönetim IP'si veya sync interface'in kendisi için:
set service conntrack-sync ignore-address 192.0.2.0/24
set service conntrack-sync ignore-address 2001:db8::/32 UDP port varsayılan 3780:
set service conntrack-sync interface eth1 port 3781 listen-address, unicast mode'da router'ın hangi local IP'den dinleme yapacağını belirliyor. Sync interface'e atanmış IP kullanılmalı.
Purge-timeout handover sonrası senkronize edilmiş entry'lerin temizlenme süresi. Varsayılan 60 saniye. Recovered router active rolünü geri alabiliyorsa preempt-delay en az purge-timeout kadar olmalı.
Startup-resync conntrack-sync servisi başladığında HA peer'dan tüm conntrack entry'lerinin kopyasını istiyor.
İstatistikler:
run show conntrack-sync statistics Active router'da internal cache, backup router'da external cache görünüyor — bu normal bir durum.
Virtual server ve load balancing
VyOS ayrıca VRRP ile entegre load balancing yapabiliyor. HA ortamında kullanışlı olabiliyor.
set high-availability virtual-server 203.0.113.1 real-server 192.0.2.11 port 80
set high-availability virtual-server 203.0.113.1 real-server 192.0.2.12 port 80
set high-availability virtual-server 203.0.113.1 algorithm source-hashing
set high-availability virtual-server 203.0.113.1 persistence-timeout 180
set high-availability virtual-server 203.0.113.1 protocol tcp VRRP virtual address'i virtual-server olarak kullanılıyor. Health check script ile real server erişilebilirliği de kontrol edilebiliyor.