Birden çok hardisk Linux Swap tunning

8 March, 2010 (16:56) | ipucu | By: alper

Özellikle kullandığımız sistem sıksık swap alan kullanmaya ihtiyaç duyuyorsa swap performansı oldukça önemli hale gelir. iki farklı  hardiskimiz olduğunu düşünelim ve ikisinde de birer swap alani oluşturduğumuzu,

[root@linux ~]# fdisk -l | grep swap

/dev/sda1   *           1        1275    10241406   82  Linux swap / Solaris

/dev/sdb5            3851        5125    10241406   82  Linux swap / Solaris

[root@linux ~]#
Yukarıda gördüğümüz gibi sda1 ve sdb5 olmak üzere iki adet diskimiz üzerinde iki farkli swap alanimiz var , /etc/fstab dosyasini açarak içerisinde bulunan swap la ilgili satırlarda “defaults” yazılı kısımları  ”defaults,pri=1″  şeklinde düzeltiyoruz.
[root@linux ~]# cat /etc/fstab | grep swap
LABEL=SWAP-sda1         swap                    swap    defaults,pri=1        0 0
LABEL=SWAP-sdb5         swap                    swap    defaults,pri=1        0 0
[root@linux ~]#
Normal şartlar altında linux 1 nolu swap tamamen dolduktan sonra 2 nolu swap i kullanmaya başlayacaktı. bu ayarlarımızı yaptıktan sonra gelen swap işleri 2 disk arasında dağıtılarak daha fazla performans elde etmenizi sağlayacaktır. elimizde çok fazla hardisk olduğu durumlarda yine aynı işlemi onlara da uygulayarak dağıtabilir. veya daha düşük performans lı hardiskleri “pri=2″ şeklinde belirterek swap grubu tamamen dolduktan sonra kullanılmaya başlaması için işaretleyebilirsiniz.
not : swap kullanılmadığuı durumlarda normal olarak bu işlem hiçbir fayda sağlamaz.

Linux ssh login çok yavaş ?

16 February, 2010 (15:29) | ipucu | By: alper

Uzaktaki linux sunucularınıza bağlandığınızda login işlemi sizi oldukça çok bekletiyor ve durumdan rahatsız oluyorsanız aşağıdaki işlemleri kontrol edebilirsiniz.

1. DNS

bağlandığın istemcinin DNS adresinin çözümlenmesi uzun zaman alıyor olabilir. sshd_config dosyası içerisine “UseDNS no”
parametresi ekleyip sshd yeniden başlatarak sorununuzu çözebilirsiniz. Daha önceden var ve değer yes ise no ile değiştirmeniz yeterlidir.

2.  GSSAPI Authentication

yavaş bağlantısı olan server e ” ssh -o GSSAPIAuthentication=no user@10.0.0.1″ öreneğinde olduğu gibi bağlanmaya çalışın, sorunun çözümlendiğini gözlemlerseniz. bağlandığınız server’de “sshd_config” dosyası içerisinde  “GSSAPIAuthentication no” değerini “yes” olarak değiştirin. Birden fazla server’iniz var ve tek client den bağlanıyorsanız “ssh_config”  dosyasında aynı değeri “no” olarak değiştirin.

3. Bunların dışında hala bir ” networksel olmayan ! ” yavaşlık mevcut ise “ssh -v -o GSSAPIAuthentication=no user@10.0.0.1″ örneğindeki gibi ssh istemciyi debug modda bağlanarak test edin.

Linux konsol otomatik logout

16 February, 2010 (15:12) | ipucu | By: alper

Özellikle kolay ulaşılabilen serverler’de konsol admin tarafından login olarak unutulduğunda güvenlik açığı meydana getirebilir. En kolay alınabiliecek önlem belirli bir süre konsol pasif kaldığında ( Idle ) otomatik logof olmasını sağlamaktır. işlem oldukça basit.

export TMOUT=120 diyerek 120 Saniye iddle olan konsolun otomatik log of olmasını sağlayabilirisiniz. gerektiğinde sadece belirli userler için bunun geçerli olması için kişilerin profile dosyalarına sistem genelinde tüm kullanıcılara geçerli olması için ” /etc/profile” dosyasına yazabilirsiniz.

Linux TEQL

25 January, 2010 (15:30) | Loadbalancing, iproute2 | By: alper

Linux outgoing loadbalancing , yazımda anlattığım gibi bir yapı hemen hemen heryerde, ihtyaçlarınızı karşılayabilsede, kullanabileceğiniz tek yöntem bu değildir. Linux TEQL ( True link Equalizer ) kullanabileceğimiz diğer seçeneklerden birisidir. Özellikle LACP ( 802.3ad ) desteklemeyen bir  switch’iniz varsa hatta local network de iki linux server in birbirleri arası haberleşmelerinde ethernet performansını paylaştırabilemek için oldukça uygun bir yöntem olabilir. örnek network yapısı verecek olursak :

şimdi TEQL nasıl çalışır bir göz atalım.

Yandaki resimde görüldüğü üzere 2 adet ethernet interface’imizi TEQL kullanarak birleştirmek mümkündür. Eth1 ve Eth2 interface’lerini kapsayan teql0 adlı yeni bir interface oluşturulur ve yeni bir ip adresi tanımlanır. tanımlanan ip adresi local network den ulaşılabildiği gibi dışarıya erişim içinde kullanılabilir. Her bir bağlantı isteğini eth1 ve eth2 arasında sırasıyla dağıtarak toplam bant genişliğini kullanma imkanı sağlar. TEQL sadece linux kerneline özel bir uygulamadır. Diğer işletim sistemlerinde bulunmaz.TEQL iproute2 paketi ile birlikte gelir.

1. Teql module’ünü yükleyelim. Interface’imizin oluştuğunu doğrulayalım.

root@linux:~# modprobe sch_teql

root@linux:~# ifconfig teql0

teql0     Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00

NOARP  MTU:1500  Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:100

RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

root@linux:~#

2. Eth1 ve Eth2 Interface’lerini teql’e dahil edelim.

root@linux:~#  tc qdisc add dev eth1 root teql0

root@linux:~#  tc qdisc add dev eth2 root teql0

root@linux:~#

3. Eth1 ve Eth2 Interface’lerinin teql interface’ine dahil olduğundan emin olalım.

root@linux:~# tc qdisc show
qdisc teql0 8001: dev eth1 root
qdisc teql0 8002: dev eth2 root
qdisc pfifo_fast 0: dev eth3 root bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
root@linux:~#
4. Teql0'e ip adresimizi atayalım.
root@linux:~# ifconfig teql0 192.168.1.1 netmask 255.255.255.0
root@linux:~#

5. IP Adreslerinin doğru olduğunu kontrol edelim.

root@linux:~# ifconfig -a
eth1      Link encap:Ethernet  HWaddr 08:00:27:1f:0a:b7
inet addr:192.169.1.2  Bcast:192.169.1.255  Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe1f:ab7/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B)  TX bytes:468 (468.0 B)
eth2      Link encap:Ethernet  HWaddr 08:00:27:ad:66:d0
inet addr:192.169.1.3  Bcast:192.169.1.255  Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fead:66d0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B)  TX bytes:238 (238.0 B)
eth3      Link encap:Ethernet  HWaddr 08:00:27:d8:6a:d3
inet addr:10.1.30.86  Bcast:10.1.30.255  Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fed8:6ad3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:710 errors:0 dropped:0 overruns:0 frame:0
TX packets:267 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:84210 (84.2 KB)  TX bytes:34303 (34.3 KB)
lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:16436  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
teql0     Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
root@linux:~#

6. Ağ geçidimiz Local network’de bir makina ise teql0 interface’i için ağ geçidini girelim . ( daha önceden girilmiş ağ geçidi varsa siliniz.

root@linux:~# ip route add default via  192.168.1.254 dev teql0
root@linux:~#

7. “ tc -s qdisc ” komutu ile yapmış olduğumuz işlemi kontrol edebilirsiniz.

Notlar :

  1. İki interface bir birine eşit olmadığı durumlarda gerçekten büyük performans sorunu yaşayabilirsiniz.
  2. Teql’e dahil ettiğiniz interface’lerden birisi fail olursa çok büyük performans sıkıntısı yaşandığı konusunda şikayetler var. Mümkün olduğunca local network içerisinde kullanın.
  3. Başıma gelmedi ama bağlı olduğunuz switchde STP’ile ilgili sorun yaşayabilirsiniz.
  4. eth1 ve eth2 gibi teql’e eklediğiniz interface’ler cevap vermezse aşağıdaki işlemi uygulayınız.
  5. Tek bir socket bağlantısı için TEQL ektra bir performans avantajı sağlayamaz.
root@linux:~# echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
root@linux:~# echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter
root@linux:~#
Veya Sysctl ile
sysctl net.ipv4.conf.eth1.rp_filter=0
Açılışta aktif olması için “/etc/sysctl.conf”‘a ekleyiniz.

Ubuntu server konsol ayarlarını değiştirmek.

12 January, 2010 (21:52) | ipucu | By: alper

Kurmuş olduğunuz ubuntu server in konsol ayarlarını ( klavye, font vb ) değiştirmek için ;

root@linux:~# apt-get install console-data

Diyerek console-data yi kuruyoruz. ( root değilseniz sudo kullanmayı unutmayınız )
dpkg size kurulum esnasında soracaktır. daha sonra ayarlara yeniden ulaşmak için.

root@linux:~# dpkg-reconfigure console-data

Index

7 January, 2010 (10:15) | - Index | By: alper

Linux ile outgoing loadbalancing

31 December, 2009 (15:29) | Loadbalancing | By: alper

Linux ile Birden fazla internet çıkışını aynı anda kullanmak için outgoing loadbalancing temel olarak iproute2 ve iptables yardımı ile yapılır. Burada anlattığım yöntem ECMP ( Equel Cost multipath Routing )’ olarakta bilinir.

Şekildeki örnek 5 adet çeşitli modemlerle yapılandırılmış olsada bu bağlantı türleri herhangi bir bağlantı olabilir ( PPPOE , Kablonet , MetroEth , GHDSL vs vs ). Ağ geçitleri istenildiği kadar artırılıp azaltılabilir. Ben burada farklı interface ler üzerinden nasıl yapılacağını anlatıyorum fakat daha önce uyguladığım 2 farklı noktada hem giriş hem çıkış için tek interface’i olan ( sadece eth0 ) linux sorunsuz olarak  çalışıyor.

  • 1. ipforwarding düzgün olarak yapılandırılmalıdır.

sysctl net.ipv4.ip_forward=1

veya

echo “1″ > /proc/sys/net/ipv4/ip_forward

Kalıcı olması için kullanmış olduğunuz linux sürümünde  gerekli ayarları yapmayı unutmayınız örneğin /etc/sysctl.conf içerisinde.

  • 2. rt_tables

Multiple Routing table için gerekli tabloları oluşturalım :

root@linux:~# echo “10 gw1″ >> /etc/iproute2/rt_tables

root@linux:~# echo “20 gw2″ >> /etc/iproute2/rt_tables

root@linux:~# echo “30 gw3″ >> /etc/iproute2/rt_tables

root@linux:~# echo “40 gw4″ >> /etc/iproute2/rt_tables

root@linux:~# echo “50 gw5″ >> /etc/iproute2/rt_tables

Yapmış olduğumuz işlemi kontrol ediyoruz.  ”cat /etc/iproute2/rt_tables”  girmiş olduğumuz bilgiler kalıcıdır her açılışta yeniden eklemenize gerek yoktur. Kaç ağ geçidimiz varsa okadar adet oluşturuyoruz.
  • 3. Konfigurasyon alias’larını oluşturalım
# local interface’imiz
lint=”eth0″
#  Linux’un internete ulaşmak için kullandığı 1. nolu ağ geçidinin ip adresi
gw1ip=”192.168.0.1″
# Linux’un bu ağ geçidine ulaşmak için kullandığı interface
gw1int=”eth1″
# Policie routing için şu an kullanmasakta lazım olabileceği için kullanacağımız
# fwmark değeri istediğiniz rakamı kullanmakta özgürsünüz.
gw1mark=”1″
#  Linux’un 1 nolu ağ geçidine ulaşmak için kullandığı kendine ait eth1 interface’ine ait ip adresi
gw1src=”192.168.0.2″

# Diğer ağ geçitleri için gerekli ayarları tek tek açıklamadan yazıyorum gw1 için

#yaptığımız örneğin hepsi için yeterli açıklamayı yapacağına inanıyorum.

gw2ip=”192.168.1.1″
gw2int=”eth2″
gw2mark=”2″
gw2src=”192.168.1.2″
# 3 Nolu ağ geçidi
gw3ip=”192.168.2.1″
gw3int=”eth3″
gw3mark=”3″
gw3src=”192.168.2.2″
# 4 Nolu ağ geçidi
gw4ip=”192.168.3.1″
gw4int=”eth4″
gw4mark=”4″
gw4src=”192.168.3.2″
# 5 Nolu ağ geçidi
gw5ip=”192.168.4.1″
gw5int=”eth5″
gw5mark=”5″
gw5src=”192.168.4.2″
  • 4. Routing tablolarına ağ geçitlerimizi girelim.
# iproute2 ağ geçidi x.x.x.x dir. ulaşmak için kullandığı interface YY dir. bu kural table ZZ içine yazılacaktır.
ip route add default via $gw1ip dev $gw1int table gw1
ip route add default via $gw2ip dev $gw2int table gw2
ip route add default via $gw3ip dev $gw3int table gw3
ip route add default via $gw4ip dev $gw4int table gw4
ip route add default via $gw5ip dev $gw5int table gw5

Note : 5 Adet ağ geçidini multiple routing table içerisine girdik ama hala sistemin kendine ait defaultgateway yani ağ geçidi yok, buradaki örnekte iproute2 ile roundrobbin yapacağımızdan gerekte olmayacak, roundrobbin devre dışı bıraktığınızda internete çıkamayacağınızı ve internetten de bu makinaya ulaşamayacağınızı unutmayın, olası ihtimal için devamlı ulaşabileceğiniz bir ağ geçidinizi default olarak tanımlamanızı öneririm. DHCP veya Elle yapılandırma yaptığınız interface lere ağ geçidi girmeyin. Virden fazla ağ geçidi ne yaptığınızı bilmiyorsanız size sorun yaratabilir.
örnek olarak 1 nolu internet çıkışımızı default tanımlıyoruz.
ip route add default via $gw1ip dev $gw1int

  • 5. FWMARK ile işaretlenmiş paketleri ilgili tablolara gönderelim.
# gw1 için marklanmış paketler tablo gw1 e gönder.
ip rule add from all fwmark $gw1mark table gw1
# diğer ağ geçitleri için kurallar.
ip rule add from all fwmark $gw2mark table gw2
ip rule add from all fwmark $gw3mark table gw3
ip rule add from all fwmark $gw4mark table gw4
ip rule add from all fwmark $gw5mark table gw5

Basit bir internet paylaşımı için bu basamaklara gerek yoktur. Policie routing için gerekli olacak.
  • 6.  Paketleri ait oldukları routing tablolarına gönderebilmek için gerekli rule’ları girelim.
Bu işlemi doğru olarak yaptğınızda internetten bu ip  adreslerine  ( aynı subnetmask deki ipler için değil )  ulaşabilmeniz gerekiyor.
# gw1 in ip adresine giden paketleri tablo gw1 e gönder.
ip rule add from $gw1src table gw1
# gw1′in ip adresinden gelen pkaetleri tablo gw1′e ata ( buna pek gerek yok ekleme sebebim tamamen piskolojik
# teknik bir sebep içermiyor )

ip rule add to $gw1src table gw1

# diğer ağ geçitleri için kurallar :
ip rule add from $gw2src table gw2
ip rule add to $gw2src table gw2
ip rule add from $gw3src table gw3
ip rule add to $gw3src table gw3
ip rule add from $gw4src table gw4
ip rule add to $gw4src table gw4
ip rule add from $gw5src table gw5
ip rule add to $gw5src table gw5

Kotrolü :

Tüm interface lerden sırasıyla ping atarak kontrol edebilirsiniz.
ping -I gw1int www.google.com.tr # veya aynı subnetmask de olmayan bir ip adresi

  • 7. Routing cache de daha önce kalan girdileri temizleyelim.
ip route flush cache

  • 8. RoundRobbin ile gelen paketleri ağ geçitlerine dağıtalım.


ip route add equalize default scope global \
nexthop via $gw1ip dev $gw1int weight 1 \
nexthop via $gw2ip dev $gw2int weight 1 \
nexthop via $gw3ip dev $gw3int weight 1 \
nexthop via $gw4ip dev $gw4int weight 1 \
nexthop via $gw5ip dev $gw5int weight 1

  • 9 .  NAT ( Masquerade )
İnternet bağlantılarımız için çıkışlarımız NATD istiyorsa isteyen interface ler için iptables a aşağıdaki kuralları girmeliyiz. istemediğniz interface’e girmeyiniz.
iptables -t nat -A POSTROUTING -o $gw1int -j MASQUERADE
iptables -t nat -A POSTROUTING -o $gw2int -j MASQUERADE
iptables -t nat -A POSTROUTING -o $gw3int -j MASQUERADE
iptables -t nat -A POSTROUTING -o $gw4int -j MASQUERADE
iptables -t nat -A POSTROUTING -o $gw5int -j MASQUERADE

  • 10. Policy Routing
a) iptables ile

iptables Matches kullanarak istediğimiz paketi istediğimiz ağ geçidinden gitmesi için işaretleyebiliriz.
örneğin local interfaceimiz ( eth0 ) a gelen https isteklerinin sadece 1 nolu ağ geçidinden gitmesini istiyoruz.

iptables -A PREROUTING -t mangle -i $lint  -p tcp –dport 443 -j MARK –set-mark $gw1mark

b) ip rule ile

Örneğin 1.1.1.1 ip adresinden gelen isteklerin 1 nolu ağ geçidi üzerinden sabit çıkmasını istiyoruz.
ip rule add from 1.1.1.1 to any table gw1

Bu kadar Roundrobbin ile çalışan Outgoing Linux loadbalancer router’imiz oldu :)

FreeBSD ve PF ile outgoing loadbalancing.

21 December, 2009 (19:43) | FreeBSD, Loadbalancing | By: alper

FreeBSD ve PF ile birden çok ağ geçidinin olduğu yerlerde yük dengeleme yaparak tüm ağ geçitlerini kullanmak mümkündür. buna örnek verecek olursak 2 adet veya daha fazla ADSL bağlantısı, 2 veya daha fazla wi-fi bağlantı , 2 veya daha fazla network, ADSL, Wifi arasında yük dağılımı gibi ihtiyaçlar olabilir.

Yukarıdaki örnekde 4 adet router üzerinden internet erişimine sahip bir FreeBSD ile 10.1.1.0/24 local networkü için loadbalance yapacağız. Örnekteki router bağlantıları kablo, wifi ppp  veya herhangi bir bağlantı olabilir. 4  router için vermiş olduğum örneği istediğiniz adet için editleyerek değştirebilirsiniz.

Not : 2 Farklı interface üzerinden aynı gateway’e  PPPOE yapamazsınız. yani iki PPPOE bağlantınızın 2 sininde ağ geçidi 192.168.0.1 gibi tek bir ip olamaz. FreeBSD multiple routing tables  eksikleri tamamlandıktan sonra mümkün olacak.

 Sisteminizde pf firewall ve ipforwarding düzgün olarak yapılandırılmış olmalıdır.

/etc/rc.conf içerisine

gateway_enable=”YES” 

pf_enable=”YES”                 # Enable PF (load module if required)
pf_rules=”/etc/pf.conf”         # rules definition file for pf
pf_flags=”"                     # additional flags for pfctl startup
pflog_enable=”YES”              # start pflogd(8)
pflog_logfile=”/var/log/pflog”  # where pflogd should store the logfile
pflog_flags=”"                  # additional flags for pflogd startup

Satırlarını ekleyin.

# öncelikle dahili network’ümüzü, dışarıya çıktığımız interface leri ve ağ geçitlerimizi belirleyelim

# local network 10.1.1.0/24 network’ü

lan_net = “10.1.1.0/24″

# Local network’ümüzün bağlı olduğu ağ arayüzü
int_if  = “fxp0″

# 1 Nolu internet çıkışımızın bağlı olduğu ağ arayüzü
ext_if1 = “vr0″
# 2 Nolu internet çıkışımızın bağlı olduğu ağ arayüzü

ext_if2 = “vr1″
# 3 Nolu internet çıkışımızın bağlı olduğu ağ arayüzü

ext_if3 = “vr2″
# 4 Nolu internet çıkışımızın bağlı olduğu ağ arayüzü

ext_if4 = “vr3″

# 1 numaralı ağ geçidimizin adresi.

ext_gw1 = “192.168.0.1″
# 2 numaralı ağ geçidimizin adresi.

ext_gw2 = “192.168.1.1″
# 3 numaralı ağ geçidimizin adresi.

ext_gw3 = “192.168.2.1″
# 4 numaralı ağ geçidimizin adresi.

ext_gw4 = “192.168.3.1″
# PPPOE gibi bağlantılarda nat ihtiyacımız varsa yapılandırıyoruz ( internet bağlantı ihtiyacınız yoksa bu kısmı atlayın
# Local den gelen 1 nolu ağ geçidine giden paketler için NAT kuralı
nat on $ext_if1 from $lan_net to any -> ($ext_if1)

# Local den gelen 2 nolu ağ geçidine giden paketler için NAT kuralı

nat on $ext_if2 from $lan_net to any -> ($ext_if2)
# Local den gelen 3 nolu ağ geçidine giden paketler için NAT kuralı

nat on $ext_if3 from $lan_net to any -> ($ext_if3)
# Local den gelen 4 nolu ağ geçidine giden paketler için NAT kuralı

nat on $ext_if4 from $lan_net to any -> ($ext_if4)
#  default deny
pass in  from any to any
pass out from any to any

#local ağ arayüzünden local network e giden paketlere izin veriyoruz.
pass out quick on $int_if from any to $lan_net
#  Local interface e gelen paketlere izin veriyoruz.
pass in quick on $int_if from $lan_net to $int_if
#  Devamlı değişen ip adresinin bankacılık işlemlerinde sorun çıkarmaması için tek ağ ara yüzünden çıkmasını sağlıyoruz

# alternatif olarak sticky connections kullanılabilir, dağılımlarda çok daha fazla düzensizlik yarattığını tesbit ettik.

pass in quick on $int_if route-to ($ext_if1 $ext_gw1) \
proto tcp from $lan_net to port https

# dışarı giden TCP paketlerimizi 4 ağ geçidimiz arasında Round Robbin ile dağıtıyoruz.

pass in on $int_if route-to \
{ ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2), ($ext_if3 $ext_gw3), ($ext_if4 $ext_gw4) } round-robin \
proto tcp from $lan_net to any flags S/SA modulate state

# Dışarı giden UDP ve ICMP  paketlerimizi 4 ağ geçidimiz arasında Round Robbin ile dağıtıyoruz.
# TCP den ayrı belirtmemizin sebebi statefull protokol olmamaları

pass in on $int_if route-to \
{ ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2), ($ext_if3 $ext_gw3), ($ext_if4 $ext_gw4) } round-robin \
proto { udp, icmp } from $lan_net to any keep state

# Tek tek dış ağ arayüzlerinden  çıkan paketlere izin veriyoruz.
pass out on $ext_if1 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if1 proto { udp, icmp } from any to any keep state
pass out on $ext_if2 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if2 proto { udp, icmp } from any to any keep state
pass out on $ext_if3 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if3 proto { udp, icmp } from any to any keep state
pass out on $ext_if4 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if4 proto { udp, icmp } from any to any keep state

# Dış ağ arayüzlerinin birbirleri arasındaki routingleri düzenliyoruz.

pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any
pass out on $ext_if2 route-to ($ext_if3 $ext_gw3) from $ext_if3 to any
pass out on $ext_if2 route-to ($ext_if4 $ext_gw4) from $ext_if4 to any

pass out on $ext_if3 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any
pass out on $ext_if3 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any
pass out on $ext_if3 route-to ($ext_if4 $ext_gw4) from $ext_if4 to any

pass out on $ext_if4 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any
pass out on $ext_if4 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any
pass out on $ext_if4 route-to ($ext_if3 $ext_gw3) from $ext_if3 to any

Bu kadar , FreeBSD ve PF kullanarak 4 adet farklı internet bağlantısını birleştirmiş olduk, Bu yapılandırma ile şu an p4 3Ghz bir bilgisayar 3 Adet ADSL (  PPPOE ) 8 Mbit , 1 Adet Kablo net ( 4 Mbit ) olmak üzere 7000 ortalama state ile %10 un altında cpu kullanımı sorunsuz olarak çalıştırmaktadır.

Loadbalancing - Yük dengeleme

21 December, 2009 (11:46) | Loadbalancing | By: alper

Günümüzde Sistem ve network ihtiyaçları gerek maliyet gerekse elde olan imkanların yetmemesi sebebiyle, yapılan işlerin birden çok kaynağa dağıtılmasını zaruri kılar hale gelmiştir. Birçok donanım ve yazılım bu ihtiyaçları karşılasada en esnek yapıyı opensource işletim sistemleri sağlamaktadır. En çok ihtiyaç duyulan loadbalancing ( yük dengeleme ) ihtiyaçları :

  1. Ethernet loadbalancing
  2. Outgoing Internet loadbalancing
  3. Incoming Internet loadbalancing
  4. Harddisk & Storage loadbalancing

1. Ethernet loadbalancing

Ethernet loadbalancing 1 den fazla ethernetin ( veya herhangi bir Ağ arayüzünün ) iş yükünü paylaşması için gereklidir. Günümüzde en çok kullanılan sistem LACP 802.3ad Link Agregation Control Protocol dür.

2. Outgoing loadbalancing

Kısaca ihtiyaç duyulan internet bant genişliğinin download olarak sağlanması için birden fazla internet veya network bağlantısının birleştirilmesi için kullanılmasıdır.

3. Incoming Internet loadbalancing

Internet veya network üzerinden gelen isteklerin , Server sistemleri üzerinde yük dağıtımı veya yetersiz bant genişliğinin telafi edilmesi amacıyla kullanılır.

4. Hardisk & Storage loadbalancing

Yukarıdaki örneklerden farklı olarak harddisk veya storage performanslarının yeterli olmadığı durumlarda bu engeli aşmak için gereklidir.

Tüm bu ihtiyaçları gidermek için farklı yollar kullanılsada genel olarak hepsinin çalışmaları iki temel prensip sayesinde olur.

a) Round Robin

Basit anlatımıyla gelen işlerin kaynaklara sırasıyla dağıtılması için kullanılan bir algoritmadır.CPU scheduling, DNS balancing, Internet loadbalancing gibi bilgisayar kullanımında hemen hemen heryerde önümüze çıkar, Round Robin işlemlerin yükü, önemi gibi parametreleri dikkate almaz her bir iş parçacığını ayrı ayrı sıraya alarak sırasıyla kaynaklara dağıtır. örneğin 1 mbit internet bağlantımız ile 100 mbit bağlantımızı aynı anda round robin ile paylaşıma almak 1 mbit hat için insafsızlık olacaktır :) örnek verecek olursak iki adet internet hattımıza 10 adet bağlantı isteğinin dağılımında ideal paylaşım 5/5 iki hatta dağılımı şeklinde olur. bu durum altında 1. numaralı hatta giden isteklerin her biri download 2 numara için giden isteklerin her biri ise IRC gibi tamamen bant genişliği kullanmayan basit bağlantı olabilir.

b) Policy ( kurala dayalı )

Policy ( Kurala bağlı ) yük dengelemesi ise round robin in aksine belirli kriterlere göre elimizdeki işlerin kaynaklara dağılımına dayanır. Yine çok basit bir örnek verecek olursak . 2 adet internet bağlantımızdan 1. numaralı hattımızın voice 2 numaralı hattımızın ise http için kullanılması 1 nolu hat üzerinden kesintisiz ses görüşmesi yapmamızı sağlar.  elbetteki ses trafiği oluşmadığı durumda 1 nolu hattımız atıl durumda kalacak bu sistemle yeterli bir dengeleme sağlanamayacaktır.

Bu sorunları halletmek için her sistem kendi içerisinde çözümler barındırmaktadır. Uygulama seviyesinde örnekler konunun daha iyi anlaşılması için yeterli olacaktır.

FreeBSD ‘de free benzeri ram görüntülemek.

19 December, 2009 (21:05) | ipucu | By: alper

Özellikle linux’an daha sonra freebsd kullanımına geçenlerin en çok istedikleri kolaylıklardan bir tanesi çok kullanılan boşta olan veya kullanımdaki ram i gösteren “free” komutudur. freebsd bu şekilde bir komut içermesede free benzeri bir çıktı almak oldukça kolaydır.

 cd /usr/ports/sysutils/freecolor/
 make install clean
echo “/usr/local/bin/freecolor -mto” > /usr/local/bin/free
chmod a+x  /usr/local/bin/free
[root@ev ~]# free
                        total       used       free     shared    buffers     cached
Mem:            975         274          700          0          0          0
Swap:           3998          0          3998
Total:           877 =                (     274 (used)          +      603 (free))
[root@ev ~]#