Cara instal dan
optimasi squid proxy di warnet Mungkin sebagaian dari anda sudah tahu bagaimana
menginstall squid proxy, tetapi belum melakukan optimasi agar squid berjalan
lebih kencang. Berikut adalah tutorial saya, yang mana sudah pernah saya uji
coba di warnet dan sukses.
Hardware
Untuk hardware proxy server saya kali ini menggunakan
Prosesor Intel Celeron 430 (Coppermine) 1.80Ghz dengan 2 buah hardisk 80 GB
SATA Seagate 7200 RPM & memori Vgen 1.5 GB DDR2. Mengapa 2 hardisk?
Performa read/write Squid akan lebih optimal jika direktori cache diletakkan di
hardisk terpisah. Peletakkan direktori cache di partisi yang berada dalam satu
hardisk dengan system, tidak akan meningkatkan performa Squid, begitu juga
dengan teknik RAID. Jika anda memiliki dana lebih, ada baiknya jika anda menggunakan
beberapa hardisk untuk penyimpanan cache squid. Tidak perlu berkapasitas besar,
yang penting memiliki kemampuan read/write yang baik, misalnya hardisk jenis
SCSI, SAS dan sebagainya.
Untuk memori, sebenarnya squid tidak memerlukan kapasitas
yang besar, dengan 512 MB sudah cukup untuk menjalankannya. Tetapi dalam kasus
proxy warnet saya, saya ingin agar kemampuan penyimpanan cache di memori bisa
lebih besar, sehingga diharapkan squid bisa menghadirkan TCP_MEM_HIT lebih
banyak.
Software
Squid terlahir atau tercipta hanya untuk Linux seorang :P.
Jadi, jangan sekali-kali pernah berpikir dan berusaha menjalankan Squid di
mesin Mikocok (baca: microsoft), baik itu seri Desktop maupun Server. Gak
nyambung bro!
Squid dapat berjalan sangat baik di hampir semua distro
Linux. Saya sendiri pada waktu uji coba menggunakan Ubuntu Server 8.10 32-bit.
Walaupun anda memiliki komputer yang bisa menjalankan aplikasi 64-bit,
disarankan untuk Squid tetap menggunakan OS 32-bit, karena Squid belum
sepenuhnya teruji di mesin 64-bit.
Untuk meningkatkan performa baca/tulis, disarankan hardisk
yang akan anda gunakan untuk menyimpan cache menggunakan format ReiserFS.
Karena, RaiserFS memiliki kemampuan baca/tulis yang lebih baik untuk file-file
ukuran kecil ketimbang format ext3.
Pada saat ujicoba, saya menggunakan Squid versi 2.7STABLE5.
Untuk list versi lain yang tersedia, silahkan kunjungi halaman ini.
INSTALASI
Disini saya tidak akan menerangkan bagaimana cara menginstal
Ubuntu Server 8.10 atau distro Linux lainnya ke komputer yang akan anda gunakan
untuk proxy server.
Membuat Partisi Format ReiserFS
Setelah Server Ubuntu anda siap, ikuti langkah-langkah
instalasi berikut. Yang pertama kita akan membuat hardisk kedua (tempat
direktori cache) memiliki format ReiserFS. Distro Debian sudah mendukung format
ReiserFS, jika anda menggunakan CentOS anda harus mengaktifkan centosplus repo
dengan men-setting enable=1 pada /etc/yum.repos.d/CentOS-Base.repo kemudian
jalankan perintah yum install reiserfs-utils
Jika anda menggunakan Ubuntu seperti saya, anda tidak perlu
melakukan setting apapun, karena Ubuntu sudah mendukung format ReiserFS. Yang
perlu anda lakukan adalah menjalankan perintah
mkfs.reiserfs /dev/sdXX
Dimana XX adalah partisi dimana yang akan anda gunakan untuk
menyimpan cache. (Untuk melihat list hardisk, gunakan perintah sudo fdisk -l.
Pada kasus saya,
mkfs.reiserfs /dev/sdb1
Kemudian tambahkan partisi anda ini ke /etc/fstab
/dev/sdb1 /var/spool/squid reiserfs defaults,notail,noatime
1 2
/var/spool/squid adalah direktori penyimpanan cache.
Compile Squid
Langkah kedua adalah melakukan compile source squid. Download
source-nya dengan perintah
sudo wget http://www.squid-cache.org/Versions/v2/2.7/squid-2.7.STABLE5.tar.gz
setelah itu ekstrak dengan perintah
sudo tar -zxvf squid-2.7.STABLE5.tar.gz
kemudian kita masuk ke direktori source squid
cd squid-2.7.STABLE5
Sebelum kita mulai meng-compile, pastikan gcc atau g++ sudah
terinstal.
Untuk memulai proses compile, ketikkan perintah
CHOST="i686-pc-linux-gnu" \
CFLAGS="-march=pentium4 -O2 -pipe -fomit-frame-pointer"
\
./configure \
-prefix=/usr \
-enable-async-io \
-enable-useragent-log \
-enable-snmp \
-enable-cache-digests \
-enable-follow-x-forwarded-for \
-enable-storeio="aufs" \
-enable-removal-policies="heap,lru" \
-with-maxfd=16384 \
-enable-delay-pools \
-enable-poll \
-disable-ident-lookups \
-enable-truncate \
-exec-prefix=/usr \
-bindir=/usr/sbin \
-libexecdir=/usr/lib/squid
Catatan:
Nilai CHOST dan CFLAGS berbeda tergantung dari jenis
prosesor mesin anda. Ganti opsi ini sesuai dengan prosesor yang anda gunakan.
Untuk mengetahui nilai CHOST dan CFLAGS ketikkan perintah cat /proc/cpuinfo dan
cocokkan dengan refensi nilai CHOST CFLAGS di halaman Gentoo Safe Cflags.
-enable-async-io: opsi ini untuk mengaktifkan asynchronous
I/O - sangat penting untuk menghentikan squik melakukan blocking pada
baca/tulis ke harddisk.
-enable-useragent-log berguna agar squid mencatat useragent
di entri log - berguna jika anda menggunakan lynx untuk melakukan debug
kecepatan squid.
-enable-snmp aktifkan ini jika anda ingin menampilkan statistik
squid dalam bentuk grafik.
-enable-cache-digests harus diaktifkan jika anda menggunakan
cache peer.
-enable-storeio="aufs" adalah alernatif penyimanan
metode I/O. AUFS adalah Asynchronous, memiliki performa yang signifikan
ketimbang UFS atau diskd.
-enable-removal-policies="heap,lru" adalah pilihan
opsi untuk removal policies, dan saya memilih menggunakan "heap
LFUDA", atau anda juga bisa menggunakan "LRU".
-with-maxfd=16384 digunakan agar squid tidak terblokir apabila
dalam keadaan load tinggi.
-enable-poll untuk meningkatkan performa squid.
-disable-ident-lookups menghentikan squid dari melihat ident
di setiap koneksi, bisa juga untuk mencegah serangan DOS yang dapat mematikan
squid server, yang biasanya dengan cara membuka ribuan koneksi.
-enable-truncate memerintahkan squid untuk selalu
menggunakan truncate() ketimbang unlink() ketika menghapus file cache.
enable-delay-pools jika anda ingin mengatur bandwidth
koneksi, gunakan opsi ini.
Setelah anda menjalankan perintah ./configure diatas dengan
sukses, saatnya kita menuju langkah beriktunya (jika ada error muncul, anda
harus mencari solusinya sebelum masuk ke perintah selanjutnya).
Selanjutnya ketikkan perintah
make
kemudian dilanjutkan dengan
make install
seteleah selesai ketikkan perintah
strip /usr/sbin/squid /usr/lib/squid/*
perintah ini untuk menghapus simbol pada binari squid, agar
ukurannya menjadi lebih kecil. Perintah ini bersifat opsional.
Squid.conf
squid.conf adalah file yang digunakan untuk melakukan
konfigurasi squid. Disini saya tidak akan menampilkan semua konfigurasi
squid.conf, tetapi hanya yang bisa untuk mengoptimalkan kinerja squid. Misal
opsi http_port tidak saya cantumkan, jika anda ingin mengetahui list lengkap
dan deskripsi dari opsi-opsi konfigurasi squid yang ada, silahkan kunjungi
manualnya.
hosts_file /etc/hosts
dns_nameservers 208.67.222.222 208.67.220.220
cache_replacement_policy heap LFUDA
cache_swap_low 90
cache_swap_high 95
maximum_object_size_in_memory 50 KB
cache_dir aufs /var/spool/squid 10000 16 256
cache_mem 64 MB
logfile_rotate 10
memory_pools off
maximum_object_size 50 MB
quick_abort_min 0 KB
quick_abort_max 0 KB
log_icp_queries off
client_db off
buffered_logs on
half_closed_clients off
Apa maksud dari opsi-opsi diatas?
hosts_file /etc/hosts opsi ini untuk memerintahkan squid
untuk melihat entri yang ada di /etc/hosts, hal ini berguna jika anda ingin
memblokir iklan atau situs jahat dengan memanfaatkan file /etc/hosts (Insya
Allah mendatang saya akan membuat tutorial ini.
dns_nameservers 208.67.222.222 208.67.220.220 Ini Penting!
Squid akan mem-pause (menghentikan sementara) koneksi ketika melakukan DNS
lookup. Dengan memasukkan DNS, maka akan mencegah hal ini. Disini saya
menggunakan DNS dari OpenDNS.
cache_replacement_policy heap LFUDA ini adalah pilihan
replacement policy, dimana saya menggunakan heal LFUDA. Anda bisa menggunakan
pilihan lain, info lengkap perihal cache_replacement_policy, silahkan baca
disini.
cache_swap_low 90 adalah prosentase dimana squid akan
melakukan pembersihan cache, jadi jika anda memiliki 10 GB , maka squid akan
melakukan pembersihan cache lama pada penggunaan 9 GB.
cache_swap_high 95 secara agresif squid akan menghapus file
cache lama dengan menggunakan opsi replacement policy yang disebutkan diatas.
maximum_object_size_in_memory 50 KB Ini untuk menentukan
besaran file yang akan disimpan di memori. Pada konfigurasi ini saya
mengaturnya maksimum hanya 50 KB, ini agar tidak mengganggu memori. Penyimpanan
file yang besar di memori akan memberikan beban tinggi sehingga mmeori tidak
bisa dikontrol dengan baik.
cache_dir aufs /var/spool/squid 10000 16 256 Dianjurkan
untuk tidak mengubah opsi AUFS, karena opis ini memiliki performa yang lebih
bagus dari opsi lain. Angka 10000 adalah jumlah besarnya file cache yang
digunakan squid dalam MB.
cache_mem 64 MB Jangan mengatur cache_mem terlalu besar.
Cache_mem menunjukkan jumlah maksimal RAM yang digunakan oleh squid untuk
menyimpan obyek di memori. Ingat, squid membutuhkan RAM sekitar 100 MB per 1 GB
file cache. Jadi, jika anda memiliki 10 GB file cache, maka squid membutuhkan
RAM minimal 1 GB.
memory_pools off Menghentikan squid menempel di memori
ketika tidak ada aktifitas.
maximum_object_size 50 MB ini adalah jumlah maksimum obyek
yang akan disimpan oleh squid. Dianjurkan untuk tidak mengaturnya terlalu
besar.
quick_abort_min 0 KB opsi ini sangat berguna, tetapi dalam
kasus tertentu akan membuat squid tidak optimal. Quick_abort_time akan
mengevaluasi berapa banyak sisa data yang akan ditransfer jika klien
membatalkannya. Jika nilainya berada dalam range quick_abort, maka quid akan
melanjutkan download sampai selesai dan kemudian menyimpannya di cache. Memang
terdengar bagus, namun masalah akan muncul jika klien melakukan beberapa
koneksi, maka squid akan menyelesaikan proses download untuk semua koneksi, dan
akibatnya squid menjadi lambat. Dengan mengaturnya ke angka 0, maka squid akan
menonaktifkan opsi ini.
quick_abort_max 0 KB fungsi sama dengan quick_abort_min
log_icp_queries off jika anda menggunakan cache_peer, maka
opsi ini akan menghentikan squid untuk selalu melakukan query ke masing-masing
cache_peer.
client_db off jika diaktifkan maka squid akan menyimpan
statistik semua klien, hal ini bisa membebani mmeori, maka sebaiknya
dinonaktifkan.
buffered_logs on melakukan buffering pada penulisan file
log, dapat meingkatkan performa squid.
half_closed_clients off mengirimkan connection-close ke
klien sehingga membuka setengah koneksi untuk squid.
Setelah konfigurasi squid.conf dilakukan, kini saatnya
menjalankan squid. Ketikkan perintah agar squid membuat swap
/usr/sbin/squid -z
kemudian aktifkan squid
/usr/sbin/squid start
Cek apakah squid sudah berjalan apa belum dengan perintah
sudo netstat -pln | grep squid
bila muncul tampilan seperti dibawah ini, berarti squid
sudah berjalan
tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 4281/(squid)
udp 0 0 0.0.0.0:3130 0.0.0.0:* 4281/(squid)
udp 0 0 0.0.0.0:50113 0.0.0.0:* 4281/(squid)
udp 0 0 0.0.0.0:3401 0.0.0.0:* 4281/(squid)
Note: Jika anda ingin melakukan pengaturan bandwidth dengan
fitur delay_pools, silahkan baca petunjuknya di blog Ghozali.
Pimp Your Squid!
Ok, squid sudah kita optimalkan, bagaimana dengan TCP?
Pertama, kita akan melakukan 'modprobe ip_conntrack' dengan menambahkan modul
ini di /etc/modules (debian) atau /etc/modprobe.conf (RHEL/CentOS).
Hal diatas akan menghentikan squid memunculkan pesan
parseHttpRequest: NF getsockopt(SO_ORIGINAL_DST) failed:
(92) Protocol not available
Kemudian kita akan melakukan modifikasi pada sysctl.
Tambahkan baris berikut pada akhir file /etc/sysctl.conf
fs.file-max = 65535
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 65536 8388608
net.ipv4.tcp_mem = 4096 4096 4096
net.ipv4.tcp_low_latency = 1
net.core.netdev_max_backlog = 4000
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 16384
Kemudian tambahkan entri berikut pada file
/etc/security/limits.conf
* - nofile 65535
Lakukan reboot, kemudian jalankan squid.
demikian sedikit tips dari kami tentang cara instal dan optimasi squid proxy di warnet semoga dapat bermanfaat.
ads
adsgoogle