Skip to content

pfSense ile multi-wan failover – yük dengeleme kurulumu

Geçtiğimiz hafta boyunca iki adsl hattını kullanarak failover yapısı oluşturabileceğimiz bir sistem kurmak için uğraştım. Bu işi yapabilen bir takım donanımsal çözümler bulunmasına rağmen öncelikli hedefimiz bu yapıyı özgür çözümlerle oluşturmak olduğu için internette sistem avına çıktım.

Yaygın kullanılan sistemlerde bu işin nasıl yapılacağından, bu gibi işler için özelleşmiş dağıtımlara kadar birçok seçeneği araştırdım. Genel intiba özelleşmiş sistemlerle, arayüzlerle uğraşmadan sistem tarafında gerekli kuralları yazarak bu işi yapmanın daha kolay olduğu yönündeydi. Lakin sistemi teslim edeceğimiz sistem yöneticisine bir arayüz de sunmak istediğimiz için arayüz üzerinden ayar yapabileceğimiz çözümlere yöneldik. (İşbu noktada insanların söylediği gibi arayüzün daha zahmetli olduğunu tecrübe ettim.)

Kurulum yapacağımız sistemde halihazırda proxy için kullanılmakta olan pfSense ile başladım çalışmaya. Dağıtım belgelerinde, bloglarda, forumlarda yazan tüm farklı kombinasyonlarla ayarlar yapmama rağmen failover bir türlü çalışmadı. Neden sonra öğrendik ki pfSense makinesi üzerindeki servisler pfSense’in multiwan özelliklerinden faydalanamıyormuş. Yani proxy servisi failover kurallarına takılmadan sürekli default gw kullanarak internete çıkıyormuş.

Bu noktada proxy makinesi önüne bir failover makinesi koymak en pratik görünen (ve internette tavsiye edilen) yöntemdi. Lakin bu değişiklik başkaca ayarlara da müdahale etmeyi gerektireceğinden ilk başta bir kenara not alınıp pas geçildi.

Sonraki birkaç gün alternatif hazır sistemlerden ipcop, clearos ve smoothwall’u denedim. Bazısı multiwan tarafında bazısı proxy tarafında beklenilen kolaylığı sağlayamadı. İinternette okuduğum yorumlar, özelliklerin sisteme 3. parti eklentilerle eklenmesi gibi detaylar bu alternatifleri elememe neden oldu.

Velhasıl gerekecek ekstra müdahaleleri göze alıp 2. bir pfsense makinesi ile failover/loadbalance kurulumu yapmaya başladım. Yine pfsense belgeleri açıldı, okundu uygulandı, sorun çıkınca forumlar eşelendi. Birçok kaynakta farklı yapılandırmalarla kurulumlar anlatıyor, çalıştığı söyleniyor ama kimse sorun çıktığından bahsetmiyordu. Benim kurduğum sistemler  ise aynı ayarlarla çalışmıyordu.

En sonunda kısa bir mola sonrası sakin kafayla yaptığımız kurulumda, anlatımlarda gösterilmeyen bir ekranda yaptığım bir seçimin sorunu oluşturduğunu farkettik. Sistem failover’ın yanı sıra yük dengeleme de yaptığı için dışarıya giden istekler bazen birinci hattan bazen diğer hattan gidiyor bu da bazı internet hizmetlerinde sorun oluşturuyor. Biz de bunun önüne geçmek için “Sticky Connections” seçeneği ile bağlantının sürekli aynı hattan çıkmasını sağlıyoruz. Gelgelelim pfSense hatlardan biri gittiğinde state tablosunu sıfırlamadığı için bizim yapışkan bağlantılar giden hatta yapışıp kalıyor, sürekli ondan çıkmayı denediğinden de doğal olarak çıkamıyormuş.

Sorunun ne olduğu netleştirince çözüme hızla ulaştık. Öncelikle bu sorundan bahseden kaynaklara gözattım. Arayüzden uygulanabilecek şık bir çözüm çıkmadı. Biz de elimizi koda bulayıp, aşağıdaki değişikliği yaparak pfSense’in hat gittiğinde state tablosunu sıfırlamasını sağladık.

— vslb.inc~   2010-07-07 10:35:23.953461623 +0300
+++ vslb.inc    2010-07-07 10:35:23.995462449 +0300
@@ -113,8 +113,8 @@
interval 10s
}
alarm default {
-       command on “/usr/bin/touch /tmp/filter_dirty”
-       command off “/usr/bin/touch /tmp/filter_dirty”
+       command on “/usr/bin/touch /tmp/filter_dirty; /sbin/pfctl -F state; touch /tmp/alarm.ON”
+       command off “/usr/bin/touch /tmp/filter_dirty; rm -f /tmp/alarm.ON”
combine 10s
}
alarm down “down” {

Bu kadar basit bir çözüm sistem geliştiricileri tarafından -grafik arayüzden ayarları eklemek, farklı yapılarla test etmek gibi dertleri olduğundan onlara göre büyük bir değişiklik olsa gerek- sisteme eklenmediğinden birkaç günümüzü harcadı.

Sorunu bulmuş ve çözmüş olmalının rahatlığı ile bir komut yüzünden günlerimi vermiş olmanın üzüntüsü arasında yeni kurulumlara doğru yola çıktık.

Post a Comment

You must be logged in to post a comment.