Senin, 04 Juni 2007

FreeBSD Ethernet Bonding

Nih posting lagi, hasil karya tjap copas dari Kaskus lagi. Tapi gak papa soalnya yang nulis juga saya. Hehehehehe.. link aslinya disini.

Tutorial ini biasanya dipake di jaringan yg memerlukan bandwidth besar. Biasanya dipake di server lokal jaringan yang isinya file2 berukuran besar dan diakses bersamaan oleh user yang banyak.


Sumonggo.. silakan dibaca dan dipelajari. Semoga berguna bagi kita semuanya....


[TUTORIAL] FreeBSD Ethernet Bonding

Kali ini saya mencoba share tutorial mengenai multiplexing pada OS fav saya.. FreeBSD.
Multiplexing adalah suatu kondisi dimana suatu paket data suatu link dapat dilewatkan melalui beberapa link.

Nah, pada OS freebie ini, terdapat sebuah modul untuk menjalankan multiplexing link yakni ng_one2many. Fungsi ng_one2many menyediakan mekanisme routing packet melalui beberapa link. Baik dari satu link ke beberapa link (one to many) ato sebaliknya, dari beberapa link ke sebuah link (many to one).

Fungsi yg akan saya bahas pada tutorial ini, adalah fungsi untuk membagi beban bandwidth network secara round-robin. Sebagai contoh, ini saya memakai server freebsd saya yang menjalankan service Samba, PureFTPD dan Apache. Sebagai gambaran, server saya ini melayani +- 40 klien yang mengakses koleksi MP3, Video clip, film/movie, master2 software dan data2 lainnya. Jika ada movie baru di server saya, maka hampir dapat dipastikan semua klien digunakan untuk menonton bareng2, dan hal inilah yang menyebabkan traffic local network saya menjadi tinggi. Satu LAN card saja tidak cukup bandwidth nya untuk melayani sekian banyak klien. Ujung2nya, jika semua klien menonton movie, maka operator yang muter MP3, suaranya jadi tersendat2, ini sangat menjengkelkan telinga . Akhirnya saya mencoba untuk menggunakan ng_one2many sebagai pemecahannya. Memperbesar troughput bandwidth server dan membagi beban network sama rata ke semua interface LAN card yg ada di server.

Mesin saya menggunakan FreeBSD 6.1RELEASE-i386, menggunakan 3 buah LAN Card Intel 82559 Pro/100 Ethernet. Yang akan terdeteksi sebagai fxp0. fxp1, dan fxp 2 pada mesin freebie saya.


Secara default (kernel GENERIC), modul netgraph tidak akan terload secara otomatis pada saat mesin freebsd booting. Oh, ya, lakukan semua perintah berikut dengan previlidge user root atau jika menggunakan user biasa maka lakukan dengan sudo.
Bisa kita cek dengan perintah :
server@kaskus#kldstat -v | grep ng_ether

Kalo tidak keluar pesan apapun, berarti kernel belum meload modul ini. Kita akan meload modul ini secara manual. Perintahnya adalah :

server@kaskus#kldload ng_ether.ko



Setelah di-load, maka perlu kita periksa lagi untuk melihat apakah modul sudah benar2 diload.

server@kaskus# kldstat -v | grep ng_ether
2 1 0xc0a3f000 3f1c ng_ether.ko
2 ng_ether


nah modul ng_ether ternyata sudah di load dengan baik. Agar setiap boot modul ini selalu diload, maka masukkan baris sebagai berikut pada file /boot/loader.conf:

ng_ether_load="YES"


Langkah selanjutnya setelah meload modul adalah mengaktifkan semua interface LAN card/ethernet. Perhatian, jika salah satu interface yg akan digunakan belum diaktifkan maka modul ini tidak akan dapat bekerja dengan baik.
server@kaskus#/sbin/ifconfig fxp0 up
server@kaskus#/sbin/ifconfig fxp1 up
server@kaskus#/sbin/ifconfig fxp2 up


Selanjutnya kita build hook "one"/main hook pada interface fxp0
server@kaskus#/usr/sbin/ngctl mkpeer fxp0: one2many upper one

Setelah itu kita sambungkan hook many tsb pada hook "one". Atau kalo dalam linux kita sambungkan ke interface slave CMIIW.
server@kaskus#/usr/sbin/ngctl connect fxp0: fxp0:upper lower many0
server@kaskus#/usr/sbin/ngctl connect fxp1: fxp0:upper lower many1
server@kaskus#/usr/sbin/ngctl connect fxp2: fxp0:upper lower many2

Kita akan membuat interface fxp 1 dadn fxp 2 dapat melewatkan menerima (receive) atau mengirim (transmit) frames dari fxp0.
server@kaskus#/usr/sbin/ngctl msg fxp1: setpromisc 1
server@kaskus#/usr/sbin/ngctl msg fxp2: setpromisc 1
server@kaskus/usr/sbin/ngctl msg fxp1: setautosrc 0
server@kaskus#/usr/sbin/ngctl msg fxp2: setautosrc 0

Nah, selanjutnya kita akan menghubungkan ketiga link tersebut dengan algoritma receive dan transmit sebagai berikut
server@kaskus#/usr/sbin/ngctl msg fxp0:upper setconfig "{ xmitAlg=1 failAlg=1 enabledLinks=[ 1 1 1 ] }"

Akhirnya One_2Many sudah siap digunakan, tinggal kita berikan IP Address dan routingnya.
server@kaskus#/sbin/ifconfig fxp0 inet 10.1.1.60 netmask 255.255.255.192
server@kaskus#/sbin/route add default 10.1.1.61

Instalasi hook One_2Many sudah selesai. Restart ulang layanan networking server, karena biasanya awalnya semua service akan gagal akibat belum adanya IP Address, selanjutnya semua service siap digunakan. Contoh network service pada server saya :
server@kaskus#/etc/rc.d/sshd restart
server@kaskus#/usr/local/etc/rc.d/samba.sh restart
server@kaskus#/usr/local/etc/rc.d/snmpd restart
server@kaskus#/usr/local/etc/rc.d/pure-ftpd restart
server@kaskus#/usr/local/etc/rc.d/apache.sh restart

Ini contoh hasil output pada server saya :
Code:
server@kaskus# ifstat -b
fxp0 fxp1 fxp2
Kbps in Kbps out Kbps in Kbps out Kbps in Kbps out
5089.88 6205.57 5253.25 6228.73 5066.84 6227.68
4667.99 5303.48 4632.63 5380.31 4635.94 5306.32
3146.39 6001.62 3485.75 6026.83 3390.30 5947.94
5177.70 8745.01 4526.80 8901.46 4953.95 9021.05
6781.29 12593.34 7518.81 12713.22 6949.91 12637.50
9791.35 6851.76 9884.88 6725.35 9507.93 6894.45
7051.32 11865.53 7112.07 11613.75 7576.03 11564.51
4227.08 5964.73 4521.77 5937.84 3920.22 5944.83
6134.03 10308.99 6617.55 10261.51 6603.43 10229.56
5592.51 11042.57 6174.90 11035.46 5218.77 11122.03
2126.35 7430.69 2072.87 7438.28 1986.35 7388.26
3571.95 9339.60 3312.22 9435.32 3590.29 9488.02
6704.47 12650.73 7388.74 12689.07 7473.26 12217.96
6962.87 24708.73 7533.04 24554.58 7824.00 24885.34
8109.07 17398.05 8543.98 17205.69 7554.10 17346.81
7978.18 15577.70 8066.12 15588.80 8232.05 15639.43
4021.44 14304.26 4584.93 14247.76 4353.03 14357.24
2050.79 8924.34 2232.91 8938.30 2486.30 8887.41
3177.78 5911.09 3220.73 6052.28 3056.51 5981.08
4591.30 11023.84 4499.87 10982.50 4625.27 11049.82
^C


Terlihat hasilnya kan ??? Beban traffic network secara otomatis akan terbagi ke semua interface yg ada.

Nah, sekarang tinggal bagaimana caranya agar setiap kali Booting, settingan di atas selalu dieksekusi.
Tuliskan baris beikut ini pada file /etc/rc.local.
Code:
#Skrip sederhana dibuat oleh gajah_gendut

#Hidupkan semua interface
/sbin/ifconfig fxp0 up
/sbin/ifconfig fxp1 up
/sbin/ifconfig fxp2 up

#Membuat interface many
/usr/sbin/ngctl mkpeer fxp0: one2many upper one
/usr/sbin/ngctl connect fxp0: fxp0:upper lower many0
/usr/sbin/ngctl connect fxp1: fxp0:upper lower many1
/usr/sbin/ngctl connect fxp2: fxp0:upper lower many2


#Agar bisa receive-transmit frame pada semua interface
/usr/sbin/ngctl msg fxp1: setpromisc 1
/usr/sbin/ngctl msg fxp2: setpromisc 1
/usr/sbin/ngctl msg fxp1: setautosrc 0
/usr/sbin/ngctl msg fxp2: setautosrc 0

#Algoritme transmit dan fail
/usr/sbin/ngctl msg fxp0:upper setconfig "{ xmitAlg=1 failAlg=1 enabledLinks=[ 1 1 1 ] }"


#Tambahkan IP Address dan routing
/sbin/ifconfig fxp0 inet 10.1.1.60 netmask 255.255.255.192
/sbin/route add default 10.1.1.61

### RESTART ALL SERVICE NETWORK
/etc/rc.d/sshd restart
/usr/local/etc/rc.d/samba.sh restart
/usr/local/etc/rc.d/snmpd restart
/usr/local/etc/rc.d/pure-ftpd restart
/usr/local/etc/rc.d/apache.sh restart
Ini hanya salah satu contoh tutorial yg
saya buat dengan segala keterbatasan kemampuan saya. Jika ada kesalahan mohon dikoreksi oleh para senior2 yang ada. Semoga membawa manfaat bagi kita semua.


Thanks to all crew MalangBSD.org terutama Sapto yg telah memberikan banyak pengetahuan baru kepada saya.....

Tidak ada komentar: