Setting Wordpress MU di Nginx

March 27th, 2008

Habis coba test kecil-kecilan benchmark Apache dengan Nginx, ketahuan kalo diakses dengan jumlah konkurensi yang gede (lupa berapa spesifiknya), Nginx masih kuat merespon daripada Apache. Apache cenderung mereset koneksi jika udah kebanyakan request. Ini juga gak tau, emang bener gak settingan apache-nya… hehehe….

OK… Sekarang coba install Nginx. Sebenarnya udah dicoba sama temanku bagian sysnet, tapi waktu itu belum berani dimasukkan ke live, karena ada beberapa feature yang takutnya tidak didukung penuh oleh Nginx. Setelah dipikir2, sepertinya sih gak ada. Soalnya webserver dalam hal ini gak begitu banyak berperan di aplikasi WordpressMU, yang berperan banyak dari sisi PHP-nya. Cuman yang perlu diperhatikan itu fasilitas rewrite. Apache dengan Nginx punya cara penanganan yang berbeda dalam setting konfigurasi, maka dari itu penulis coba-coba belajar cara setting di Nginx.

Setelah tiga hari utak-atik rewrite di Nginx, akhirnya ketemu juga logika cara mainnya :D . Bingung sih baca manualnya di website Nginx, gak begitu jelas. Akhirnya coba-coba sendiri deh. Ada sih konfigurasi dapat dari googling, tapi masih ada masalah.

Nih hasil utak-atik konfigurasinya….

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
worker_processes 32;
daemon  off;
pid /var/run/nginx.pid;
events  {
                use epoll;
                worker_connections 1024;
                multi_accept on;
                epoll_events 512;
                accept_mutex_delay 10ms;
        }
http {
        include /opt/nginx/conf/mime.types;
        default_type  application/octet-stream;
        log_format main '$remote_addr - $remote_user [$time_local] '
                  '"$request" $status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';
        sendfile on;
        tcp_nopush        on;
        tcp_nodelay       on;
        gzip            on;
        gzip_http_version 1.0;
        gzip_comp_level 2;
        gzip_proxied any;
        gzip_types      text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        server {
                listen       80;
                server_name  blog.com *.blog.com;
                access_log /var/log/nginx/access.fifo main;
                error_log /var/log/nginx/error.fifo info;
                client_max_body_size 20M;

                #-------- uploaded file -------------
                location ~ /files/ {
                        root /data/wpmu;
                        rewrite ^.*/files/(.*) /wp-content/blogs.php?file=$1 break; # get upload file
                        fastcgi_pass   127.0.0.1:8888;
                        fastcgi_index  index.php;
                        fastcgi_param  SCRIPT_FILENAME /data/wpmu/$fastcgi_script_name;
                        include        /opt/nginx/conf/fastcgi_params;
                }

                location ~* (/wp-content/avatars|/wp-content/cache/supercache/.+.html) {
                        root /data/wpmu;
                        expires 1h;
                        break;
                }

                location ~* ^.+.(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf)$ {
                        root /data/wpmu;
                        expires 30d;
                        break;
                }

                location / {
                        root   /data/wpmu;
                        index  index.php index.html index.htm;

                        #------- cache it, but do not supercache --------------
                        set $exist 0;
                        set $match 2;

                        if (-e $request_filename) {
                                set $exist 1;
                        }
                        # custom scripts, apart from wordpressmu
                        if ($uri ~ "^.*/(blogdir.php|blogstardir.php|blogcat.php|result.php|blognew.php).*$") {
                                set $match 1;
                        }

                        if ($match = $exist) {
                                break;
                        }

                        #------- supercache --------------
                        set $olduri $uri;
                        set $nosc 0;

                        rewrite ^ /wp-content/cache/supercache/$http_host/$uri/index.html;

                        if ($query_string ~ ".*s=.*") {
                                set $nosc 1;
                        }

                        if ($http_cookie ~ "^.*(comment_author_|wordpressuser|wp-postpass_).*$" ) {
                                set $nosc 1;
                        }

                        if (!-e $request_filename) {
                                set $nosc 1;
                        }

                        if ($nosc = 0) {
                                rewrite ^(.*) $1 last;
                        }

                        #------------------------------------
                        rewrite ^ $olduri;

                        if (-d $request_filename) {
                                rewrite ^(.*[^/])$ $1/ permanent;
                        }

                        if (!-e $request_filename) {
                                #permalink
                                rewrite ^ /index.php break;
                        }
                        break;

                        fastcgi_pass   127.0.0.1:8888;
                        fastcgi_index  index.php;
                        fastcgi_param  SCRIPT_FILENAME /data/wpmu/$fastcgi_script_name;
                        include        /opt/nginx/conf/fastcgi_params;
                }
        }
}

Di rewrite module ada rule “if”. Rule ini gak bisa di nested :( . Jadi masukin alurnya jadi bingung, sedikit akal-akalan. Intinya dalam rewrite itu, selama gak ada rule “break” atau “last ” diakhir line dalam satu directive location, maka pencarian akan dilanjutkan ke rule rewrite yang lain (masih dalam satu directive location). Jika sudah gak ketemu yang match, baru dilanjutkan di directive location lain. Variabel $uri akan berubah-ubah sesuai dengan hasil rule rewrite yang match. Sedangkan $request_uri merupakan original $uri ditambah dengan argumen.

Jika ada rule “last”, maka rewrite akan berhenti mencari rule rewrite selanjutnya di directive location-nya dia, dan mencari di directive location lain sampai ketemu match. Jika ingin benar-benar berhenti dan tidak akan melanjutkan mencari di directive location lain, maka pakai rule “break”.

Buat Wordpress MU sendiri, yang bikin pusing ini rule buat supercache. Tapi akhirnya berhasil, walaupun banyak akal-akalannya (liat sendiri aja). Ehmmm… belum cek keseluruhan… jadi 90% lah keberhasilannya ….hehehehe……..

Jika ada yang tahu cara efisiennya, kasih tau ya….

Updated: Ternyata yang lama masih kacau konfigurasinya… ketauan baru diproduction… hihihi.. sial

admin Server

Benchmark Session store antara NFS dan Memcached

March 24th, 2008

Coba ngetes benchmark session store pake file dan memcached.
Konfigurasi:
- 2 webserver buat ngetes centralized session store
- 1 server server nfs/memcached buat simpan session

Test:
Dibuat tes skrip pake jmeter. Intinya skrip put text di salah satu server webserver, simpan sessionid, terus di-get diserver webserver lainnya pake sessionid yang tersimpan. Jika centralized session bekerja, maka hasil yang di-get harus sama dengan yang di-put. Ukuran text yang dikirim dibagi 3, untuk 100 bytes, 1Kb, 10Kb, 100Kb.
Untuk nfs, masing2 webserver mounting ke server nfs ke direktori yang sama. Untuk memcached, pake bawaan patch rep-memcached (untuk coba replication memcached), sekalian test performance jika replication bekerja. Skrip melakukan operasi put dan get sejumlah 1000 kali dengan konkurensi 20 client.

Result Benchmark Session Store

Result:
Hasilnya dapat dilihat di gambar. Untuk NFS, nfsd berjalan dengan 8 proses dengan masing-masing menghabiskan 20-25% CPU. Sedangkan memcached dengan 2 proses (satu sebagai replication slave) menghabiskan 20-70% CPU. CPU load tertinggi berada di sisi master, sedangkan slave hanya memakan 20%.
Untuk 100 – 10Kb, memcached lebih unggul hampir 2 kali lipat dibanding NFS disegi performance (requests/second). Kemungkinannya karena memang NFS harus menghabiskan banyak waktu disisi I/O untuk read/write, sedangkan memcached tidak melibatkan disk I/O karena data disimpan di memori. Diatas 10 Kb, memcached mengalami penurunan performance, menjadi sama dengan NFS. Setting chunk_size di php.ini untuk memcached sudah ditinggikan 128Kb, supaya pas dengan ukuran size text, hasilnya tetap, hanya sedikit meningkatkan performance. Tapi kalau dilihat-lihat jarang yang menyimpan data di session store lebih dari 100Kb.

Nih, file-file buat ngetestnya : Session Test.zip

admin Benchmark, Server

Hmmm… Sebenarnya ada apa dengan jalur routing di F***

June 19th, 2007

Dini hari ini pas enak-enaknya donlot, tiba-tiba jaringan internetnya putus. Waduh… kenapa ini ???
Coba pake berbagai cara, juga gak mau konek. Apa memang servernya lagi down ? Tapi kok kalo cuman ping keluar kok bisa….
Waduh… jangan-jangan udah ketahuan ada yang pake “underground channel”. Whaaaa…… nangis aku, gak bisa internetan gratis lagee….
Coba traceroute keluar….

traceroute to *.*.*.*, 30 hops max, 38 byte packets
1 10.21.9.5 (10.21.9.5) 316.410 ms 439.832 ms 359.900 ms
2 10.21.8.2 (10.21.8.2) 379.875 ms 319.957 ms 499.840 ms
3 * * *
4 10.10.131.193 (10.10.131.193) 320.961 ms 339.881 ms 398.924 ms
5 * *

Lho, kok beda jalur routingnya. Biasanya pada hop ke 4 pake jalur 10.21.5.1. Waduh, ganti server kali. Yah, kok jadi gini….. :( (
Oke dah… nunggu agak siangan, mungkin bisa lagi. Tapi kan udah ganti routingnya. Coba deh ganti ke nomor yang masih idup buat jalanin internetnya. Setelah ganti dites…. Jalann…. Yahhh…. abislah free internetku … hiks..hiks….
Eits… tunggu dulu…. kok pas ngecek pulsa gak mau konek ke call centre. Wah, ini memang jalurnya lagi bermasalah. Okelah, tunggu beberapa saat kalo udah bisa konek ke call centre, berarti kemungkinan jalur udah normal lagi.
Setelah bisa menghubungi call centre, coba lagi pantang menyerah…. Pake nomor yang udah kadaluarsa, konek lagi ke internet…. Hup…hup…. Horeeee…. nyambung lagi ternyata… :) )
Cek traceroute…. akhirnya normal lagi jalurnya….
Memangnya ada apa yang sebenarnya ????

Gak tau dah…. yang penting internetnya lancar lageee :D
…. tapi juga was-was… :(

admin General

Perbandingan (kasar) performance VMWare Workstation 6.0 vs Virtual Box 1.4.0

June 18th, 2007

Oke, ini hasil iseng benchmark 2 Aplikasi Software Virtualisasi setelah membaca artikel yang serupa tentang perbandingan antara VirtualBox vs. Qemu vs. VMPlayer. Pada artikel tersebut sayangnya tidak disertakan instalasi add-on (Guest Addition) untuk VMWare. Jadinya penulis penasaran, bagaimana kalau disertakan add-on-nya. Disini penulis tidak mengikutkan qemu, karena setelah lihat diforum lain, kebanyakan masih sering ditemukan error.

INSTALASI

Masing-masing software di install di laptop dengan spesifikasi :

  • Prosesor Centrino Duo T2050 1.6 GHz
  • Memori 1 GB (2 keping 512 MB)
  • HD Seagate SATA 80 GB
  • VGA Intel 945GM

Berjalan di OS Mandriva 2007 PowerPack, pakai XWindows dengan Windows Manager Beryl. Software Virtualisasi yang dipakai adalah VMWare Workstation 6.0 build-45731 dan Virtual Box 1.4.0. Ini waktu testing perbandingan merupakan software versi terbaru.

KONFIGURASI

Untuk Guest OS, dipakai Windows XP Professional SP2. Aplikasi benchmark yang digunakan adalah FreshDevice Diagnose (seperti yang digunakan pada artikel yang dirujuk) dan PC Wizard 2007.

Untuk setting hardware virtual di VMWare mengikuti typical installation XP Pro dengan sedikit penambahan yang dirinci sebagai berikut:

  • Memori 256 MB.
  • Processors 1.
  • Hard Disk IDE 2 GB (auto-grow). Sebenarnya ingin menggunakan SCSI, karena menurut petunjuk dapat meningkatkan performance. Tetapi karena kendala dalam proses instalasinya, maka diset default ke IDE.
  • Ethernet Bridged.
  • Virtual Memory memakai Reserved Memory (tidak ada yang diswap).
  • Device lainnya diset present dan auto-detect.
  • 3D accelerator tidak dihidupkan. Karena memang tidak berjalan lancar di laptop penulis.

Sedangkan untuk Virtual Box:

  • Memori 256 MB.
  • Enable ACPI
  • Video Memory 8 MB
  • Hard Disk IDE 2 GB (auto-grow).
  • Host Networking.
  • Device lainnya diset present dan default.

Setelah Guest OS selesai diinstall pada masing-masing software virtual, langkah selanjutnya adalah menginstall add-on dari masing-masing paket software tersebut untuk meningkatkan performansinya. Selanjutnya diinstall software benchmark.

BENCHMARK

Pada saat proses benchmark, segala aplikasi yang berjalan di Host yang banyak berjalan di background, seperti beagle, dimatikan. Tidak lupa juga kondisi laptop harus sama saat dilakukan masing-masing benchmark. Prosesor pada laptop diset pada full performance. Kecepatannya akan stabil dikisaran 1.6 GHz. Sempat pada saat melakukan percobaan test kedua di Virtual Box, penulis lupa telah mematikan cooling pad pada laptop. Dan pada saat dilakukan benchmark prosesor, point yang diraih menurun sampai kurang lebih 600 point (Processor Benchmark di Freshdevice Diagnose).

Benchmark awal penulis memakai Freshdevice Diagnose yang berjalan di Windows Guest. Benchmark dilakukan 5 kali untuk masing-masing test, kemudian diambil nilai rata-ratanya.

Selama melakukan benchmark tersebut, pada saat dilakukan test pada network di Virtual Box 1.4.0, penulis menemui beberapa kali BSOD. Kemungkinannya driver untuk virtual network card bermasalah. Penulis hanya mengambil point yang berhasil tanpa BSOD. Namun selang dua kali test, kembali lagi terjadi BSOD. :(

Begitu juga saat HD Benchmark, baik VMWare dan Virtual Box mengalami kegagalan untuk yang pertama kali. Setelah dilakukan test ke-2 dan seterusnya berjalan normal. Ini kemungkinan karena masing-masing HD diset auto-grow. Sehingga pada saat pertama kali, software benchmark ini mendeteksi bahwa free space-nya tinggal sedikit. Saat selesai test awal, penulis melihat bahwa ukuran Virtual HD mengembang setelah waktu awal instalasi hanya memakan 1 GB, sekarang menjadi 1.7 GB.

Test benchmark kedua menggunakan PC Wizard 2007. Selama proses test, tidak terjadi masalah apapun. Lancar-lancar aja.

VMWare vs VirtualBox

KESIMPULAN

Dari hasil perbandingan antara VMWare dan Virtual Box ini tidak terlalu signifikan selisih pointnya. Hanya untuk Display Adapter dan Network Benchmark di Virtual Box agak terpaut jauh. Mungkin karena masalah di driver network milik Virtual Box. Dan juga untuk Display Adapter milik VMWare memang lebih unggul, karena memang pada saat ini di desain untuk mendukung aplikasi 3D (walaupun masih dalam tahap Beta).

Kalau menurut penulis, Virtual Box ini merupakan alternatif yang baik sebagai pengganti VMWare Workstation. Karena memang free untuk personal (ada juga versi open source-nya) dan performance-nya tidak terpaut jauh. Pada point tertentu pada benchmark malahan dapat mengungguli beberapa point lebih tinggi daripada VMWare. Ukuran installernya juga beda jauh. Virtual Box hanya memakan 14 MB, sedangkan VMWare Workstation bisa mencapai 190 MB.

Namun juga karena pengembangannya yang masih baru, kestabilannya masih dipertanyakan. Kalau VMWare memang sudah terjun lama di kancah per-virtual-an. Driver-driver yang jalan di Guest OS dipastikan berjalan stabil.

Seiring dengan waktu, karena didukung lisensi yang tidak tertutup (closed source), dan forum komunitas yang berjalan, penulis yakin Virtual Box dapat berjalan lebih stabil.

admin Benchmark

Memilih filesystem yang cocok untuk Flash disk

June 16th, 2007

Karena ingin tahu lebih dalam tentang Linux Live USB, penulis cari-cari informasi tentang filesystem yang cocok dijalankan diatas flash disk. Di artikel wikipedia, di jelaskan bahwa flash memory mempunyai kelemahan dalam hal keterbatasan dalam menuliskan/menghapus data. Untuk tipe NOR memori terbatas sampai 100.000 kali penulisan, sedangkan tipe NAND memori bisa sampai 1.000.000 kali. Namun untuk saat ini desain NOR sudah mengikuti tipe NAND, sehingga ketahanannya hampir sama.

Oleh karena batasan tersebut, beberapa manufacture hardware menambahkan controller untuk menekan/mencegah pemakaian tulis/hapus pada block data yang sama. Teknik ini dinamakan wear levelling, dimana controller tersebut akan menghitung jumlah penulisan dan akan melakukan mapping pada block lain sehingga proses penulisan diupayakan akan mendapatkan jumlah yang sama/merata. Ini mencegah area “hot spot” untuk static file system, dimana pada blok-blok tertentu sering terjadi penulisan data. Selain wear levelling, controller juga menyediakan Bad Block Management(BBM). Jika saat penulisan ditemui error, maka controller ini akan remap blok data penulisan ke blok lain (spare) yang kondisinya masih bagus.

Wear leveling sebenarnya juga diterapkan pada file system driver yang khusus dirancang untuk flash memory ini. Di linux ada 2 filesystem yang dirancang untuk flash memory, yakni JFFS2 dan YAFFS. Untuk saat ini ada filesystem yang sedang dirancang khususnya nanti untuk OLPC, karena tidak memakai HD, yakni LogFs. Namun belum pada tahap stable dan juga belum masuk ke kernel utama Linux. LogFS ini dibuat, karena pada filesystem yang sudah ada saat ini (JFFS dan YAFFS), skalabilitasnya masih linier. Sehingga untuk kapasitas Flash disk yang sekarang ini sudah bergiga-giga, maka untuk waktu mounting akan menjadi lama dan pemakaian memori yang dipakai untuk driver akan semakin besar.

Nah, karena model flash disk saat ini sudah built-in Wear Levelling dan Bad Block Management, penggunaan filesystem untuk menghandle kasus tersebut rupanya tidak terlalu diperlukan lagi. Tapi tidak menutup kenyataan bahwa ada beberapa chip firmware yang masih mengijinkan software untuk menggunakan direct access ke chip flash tersebut dan mengimplementasi Wear Levelling dan Bad Block Management di software driver.

Jadi sekarang scope untuk memilih file system buat flash disk ini mungkin pada feature kemudahan yang bisa dicapai. FAT16/32 mungkin saat ini yang paling banyak dipakai di flash disk. Selain memang native di Windows, Linux juga sudah mempunyai driver stable untuk FAT16/32 ini.

So, kesimpulannya…. pake FAT32 aja….

admin General