Category Archives: Information Technology

Replikasi Database MySQL Dengan SSL Pada Debian Squeeze

Kali ini saya akan menjelaskan bagaimana melakukan replikasi database MySQL dari satu server (master) ke server lainnya (slave) dan menggunakan enkripsi SSL, sehingga sulit bagi hacker untuk sniff data ketika proses replikasi berlangsung.

Dengan melakukan replikasi kita bisa memiliki database slave yang datanya sama persis dengan database master. Semua updates yang dilakukan di sisi master akan “langsung” ter-replikasi ke slave. Perlu diingat bahwa skema seperti ini bukan untuk backup, karena apabila kita melakukan perintah DELETE pada master maka perintah tersebut juga akan tereksekusi di slave. Tapi skema seperti ini dapat berguna apabila misalnya terjadi hardware failure pada salah satu server sehingga bisa langsung switch over. Atau untuk meningkatkan performa aplikasi web, semua proses write / update dilakukan di server master, dan proses read / select dilakukan di server slave.

Tutorial ini akan menunjukkan bagaimana cara mereplikasi database koole dari server server1.blog.ariw.net (master, IP 192.168.1.1) ke server server2.blog.ariw.net (slave, IP 192.168.1.2). Kedua server menggunakan distro Linux Debian Squeeze. Database koole sudah terisi dengan data pada server master, dan pada server slave belum terisi apa-apa.

MySQL Replication
Install MySQL Server pada server1 dan server2 maka install dengan cara berikut;
(server1 & server2)

apt-get install mysql-server mysql-client

kita akan diminta untuk memasukkan password baru root MySQL, bukan password root linux!

New password for the MySQL "root" user:
Repeat password for the MySQL "root" user:

jika sudah terinstall lalu kita login ke MySQL (server1 dan server2) untuk mengecek apakah SSL support sudah diaktifkan atau belum;

mysql -u root -p

lalu execute perintah ini pada prompt SQL;

show variables like '%ssl%';

jika hasilnya seperti di bawah ini;

+---------------+----------+ | Variablename | Value | +---------------+----------+ | haveopenssl | DISABLED | | havessl | DISABLED | | sslca | | | sslcapath | | | sslcert | | | sslcipher | | | sslkey | | +---------------+----------+ 7 rows in set (0.07 sec)

itu berarti MySQL server sudah terinstall dengan dukungan SSL. Selanjutnya kita tinggal mengaktifkannya aja. Keluar dulu dari prompt SQL;

quit;

dan buka file file /etc/mysql/my.cnf;

vi /etc/mysql/my.cnf

pada bagian Security Features uncomment atau tambahkan line baru dengan kata “ssl”

# Security Features
## Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
## For generating SSL certificates I recommend the OpenSSL GUI "tinyca". ssl
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem

lalu restart mysql;

/etc/init.d/mysql restart

cek lagi apakah SSL sudah diaktifkan atau belum;

mysql -u root -p
show variables like '%ssl%';

outputnya harus seperti ini;

+---------------+----------+ | Variablename | Value | +---------------+----------+ | haveopenssl | YES | | havessl | YES | | sslca | | | sslcapath | | | sslcert | | | sslcipher | | | sslkey | | +---------------+----------+ 7 rows in set (0.07 sec)

ketik;

quit;

untuk keluar dari SQL prompt..

Mengkonfigurasi Master
Agar proses replikasi dapat berfungsi, kita harus mengkonfigurasi service MySQL untuk listen pada semua interface (server1). Untuk itu beri tanda # pada baris bind-address = 127.0.0.1 di /etc/mysql/my.cnf: (server1)

vi /etc/mysql/my.cnf
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1

restart MySQL;

/etc/init.d/mysql restart

Sekarang kita akan membuat CA, server, dan client certificates yang akan dibutuhkan untuk proses enkripsi SSL. Sebagai contoh saya akan membuat certificates tersebut di direktori /etc/mysql/newcerts;

mkdir /etc/mysql/newcerts
cd /etc/mysql/newcerts

pastikan openssl sudah terinstall;

apt-get install openssl

buat CA certificate;

openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes 1000 -key ca-key.pem > ca-cert.pem

buat server certificate;

openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem
openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem

buat client certificate;

openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem
openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem

sehingga isi dari folder /etc/mysql/newcerts terlihat seperti ini;

root@server1:/etc/mysql/newcerts# ls -l
total 32 -rw-r--r-- 1 root root 1346 Dec 17 16:17
ca-cert.pem -rw-r--r-- 1 root root 1675 Dec 17 16:17
ca-key.pem -rw-r--r-- 1 root root 1099 Dec 17 16:17
client-cert.pem -rw-r--r-- 1 root root 1679 Dec 17 16:17
client-key.pem -rw-r--r-- 1 root root  956 Dec 17 16:17
client-req.pem -rw-r--r-- 1 root root 1099 Dec 17 16:17
server-cert.pem -rw-r--r-- 1 root root 1675 Dec 17 16:17
server-key.pem -rw-r--r-- 1 root root  956 Dec 17 16:17
server-req.pem root@server1:/etc/mysql/newcerts#

Penting! Pastikan COMMON NAME ketika membuat CA certificate dan Server certificate harus berbeda. Misal common name CA certificate adalah ca.blog.ariw.net dan common name untuk server certificate adalah blog.ariw.net. sekarang kita harus mentransfer ca-cert.pem, client-cert.pem, dan client-key.pem ke slave (server2), tapi sebelumnya kita buat dulu direktori /etc/mysql/newcerts di server2; (server2):

mkdir /etc/mysql/newcerts

kembali ke server1, kita bisa transfer file-file tersebut di atas tadi dengan cara; (server1):

scp /etc/mysql/newcerts/ca-cert.pem [email protected]:/etc/mysql/newcerts
scp /etc/mysql/newcerts/client-cert.pem [email protected]:/etc/mysql/newcerts
scp /etc/mysql/newcerts/client-key.pem [email protected]:/etc/mysql/newcerts

lalu, buka /etc/msql/my.cnf;

vi /etc/mysql/my.cnf

edit pada bagian * Security Features; hilangkan tanda pagar pada ssl-ca, ssl-cert, dan ssl-key dan isi dengan nilai yang sesuai;

# Security Features #
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/ #
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca". ssl
ssl-ca=/etc/mysql/newcerts/ca-cert.pem
ssl-cert=/etc/mysql/newcerts/server-cert.pem
ssl-key=/etc/mysql/newcerts/server-key.pem

restart MySQL;

/etc/init.d/mysql restart

Sekarang kita buat user MySQL yang akan digunakan oleh server2 untuk mengakses database pada server1, misal slave_user;

mysql -u root -p

pada MySQL prompt, execute perintah ini;

GRANT REPLICATION SLAVE ON . TO 'slaveuser'@'%' IDENTIFIED BY 'slavepassword'; FLUSH PRIVILEGES;
quit;

Kita harus memberitau MySQL agar membuat log untuk database koole (yang akan direplikasi). Nantinya log inilah yang akan digunakan oleh slave untuk melihat apa yang sudah berubah dari database master. Edit file /etc/mysql/my.cnf seperti ini;

vi /etc/mysql/my.cnf
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about other settings you may need to change.
server-id             = 1
logbin                = /var/log/mysql/mysql-bin.log
expirelogsdays        = 10
maxbinlogsize         = 100M
binlogdo_db           = koole

restart MySQL;

/etc/init.d/mysql restart

Langkah berikutnya kita akan mengunci (lock) database koole di server1, mengetahui master status server1, dan membuat SQL dump database koole (yang akan kita import ke server2), lalu unlock database koole agar bisa digunakan lagi;

mysql -u root -p

pada prompt MySQL execute command ini;

USE koole;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

perintah terakhir akan menampilkan output seperti ini. Catat hasilnya!

+---------------+----------+--------------+------------------+ | File          | Position | Binlogdodb | Binlogignoredb | +---------------+----------+--------------+------------------+ | mysql-bin.006 | 183      | koole     |                  | +---------------+----------+--------------+------------------+ 1 row in set (0.00 sec)

Sekarang jangan keluar dulu dari prompt MySQL, karena kalau keluar database akan otomatis unlock. Buka satu lagi prompt bash / Linux di server1;

cd /tmp
mysqldump - u root -ppasswordrootmysql --opt koole > snapshot.sql
scp snapshot.sql [email protected]:/tmp

Kalau proses transfer sudah selesai kita boleh close prompt Linux, kemudian unlock dan keluar dari database koole; (server1):

UNLOCK TABLES;
quit;

Konfigurasi Slave
Di server slave kita buat database koole;

mysql -u root -p Enter password:
CREATE DATABASE koole;
quit;

lalu import mysql dump dari server master yang tadi sudah dibuat (snapshot.sql)

mysql -u root -p koole < /tmp/snapshot.sql

Penting: ngga ada spasi antara -p dan koole

Sekarang kita kasitau server slave bahwa dia adalah slave, masternya adalah 192.168.1.1, dan database yang harus dimonitor di master adalah koole. Untuk itu tambahkan / edit baris berikut di /etc/mysql/my.cnf;

server-id=2
master-host=192.168.1.1
master-user=slaveuser
master-password=slavepassword
master-connect-retry=60
replicate-do-db=koole

restart MySQL;

/etc/init.d/mysql restart

Langkah berikutnya;

mysql -u root -p Enter password:
SLAVE STOP;

masih di sql prompt yang sama;

CHANGE MASTER TO MASTERHOST='192.168.1.100', MASTERUSER='slaveuser', MASTERPASSWORD='slavepassword', MASTERLOGFILE='mysql-bin.006', MASTERLOG_POS=183;

MASTERHOST adalah ip address atau hostname server master (dalam contoh ini 192.168.1.1). MASTERUSER adalah user yang diberikan akses untuk melakukan replikasi di database master. MASTERPASSWORD adalah password user replikasi di server master. MASTERLOGFILE adalah file log yang terlihat ketika kita mengetikkan perintah SHOW MASTER STATUS; di server master tadi. MASTERLOG_POS adalah posisi terakhir MySQL ketika kita mengetikkan perintah SHOW MASTER STATUS; di server master. Langkah terakhir adalah start slave, masih di prompt sql server slave;

START SLAVE;
quit;

Selesai! Sekarang coba tes lakukan update di server master dan lihat apakah ada perubahan di server slave 😉

Setting System Time dan Time Zone (Debian)

Hanya sebagai quick reminder 😉

Install ntpdate supaya waktu selalu tersinkronisasi dengan “jam internet”;

apt-get install ntpdate

Konfigurasi timezone dengan lokasi geografis yang sesuai;

dpkg-reconfigure tzdata

selanjutnya perintah tzdata akan menampilkan konfigurasi timezone saat ini, jika kita ingin merubahnya maka akan muncul dialog untuk memilih lokasi geografis berdasarkan benua – pulau – dan kota.

Jailbreak iPod Touch 2G iOS 4.2.1 (Mac)

Disarankan untuk RESTORE dulu iPod ke default firmware dan factory settings (jangan sync apps, settings dan lagu), karena berdasarkan beberapa kali percobaan kalau iPod nggak dalam kondisi “fresh” factory settings akan bermasalah ketika hendak menginstall Cydia, error yang muncul biasanya semacam “running out of memory” atau terinstall tapi ngga bisa di-start.

  1. Download dan ekstrak Greenpois0n 1.0 RC6.1 (jailbreak firmware) di sini, taruh dalam suatu folder di Desktop, misalnya.
  2. Buka folder hasil ekstrak dan double click greenpois0n untuk menjalankannya.
  3. Koneksikan iPod ke komputer, matikan, setelah iPod benar-benar mati lalu klik tombol Jailbreak di aplikasi greenpois0n.
  4. Greenpois0n akan menampilkan instruksi untuk membuat iPod berada dalam mode DFU Greenpois0n Di langkah ke-4, pastikan untuk terus menekan tombol home sampai tertulis “Complete” pada aplikasi greenpois0n.
  5. Setelah iPod restart, akan terlihat aplikasi “Loader” di springboard / home screen. Tap untuk menjalankannya.
  6. Berikutnya tap tombol Cydia untuk menginstall Cydia
  7. Setelah Cydia terinstall, restart iPod sekali lagi.

Your iPod Touch 2G is now successfully jailbroken with greenpois0n on Mac
Jika semua langkah di atas sudah selesai, baru kita bisa sync apps, settings, lagu, dsb kedalam iPod.

Greenpois0n yang digunakan dalam tutorial di atas juga mendukung beberapa iDevice berikut;

  • iPod Touch 2G (all bootroms)
  • iPod Touch 3G
  • iPod Touch 4G
  • iPhone 3Gs (all bootroms)
  • iPhone 4

Optimizing Web Server (Lighttpd)

Berawal dari rasa penasaran kok situs penyedia film 300mbunited.com cepet banget loading tiap page-nya, saya pun akhirnya.. jadi iri hehe.

Saya lihat di source page ternyata situs itu berbasiskan WordPress dan menggunakan plugin W3 Total Cache. Pengalaman saya menggunakan plugin itu sih justru bikin blog saya makin lambat kurang lebih 1-3 detik.

Lalu saya mencari cara lain kira-kira apa yang bisa dilakukan untuk mempercepat loading page, dan ini dia yang saya lakukan;

HTTP Keep-Alive
Dengan mengaktifkan keep-alive akan membuat web server terasa lebih responsif dan menurunkan beban CPU, karena client dan server tidak perlu terus-terusan melakukan SYN / ACK dan menunggu respon. Tapi sebaiknya gunakan nilai time out / idle yang rendah agar tidak menghabiskan resource memory. Pada Lighttpd (/etc/lighttpd/lighttpd.conf) konfigurasinya seperti ini;

server.max-keep-alive-requests = 16
server.max-keep-alive-idle = 30
server.max-read-idle = 60
server.max-write-idle = 360

Install eAccelerator
eAccelerator adalah PHP accelerator – optimizer opensource dan gratis. Dengan menggunakan eAccelerator maka PHP scripts akan di-cache dalam keadaan sudah terkompilasi (HTML), sehingga proses kompilasi script PHP yang memakan waktu tidak perlu lagi dialami oleh client (browser). eAccelerator juga mengoptimasi scripts untuk mempercepat proses eksekusinya. Pada umumnya dengan menggunakan metode ini server load akan berkurang dan mempercepat PHP scripts 1 sampai 10 kali lipat. Release terakhir adalah versi 0.9.6.1 yang mendukung PHP 5.3, 5.2, dan 5.1. Cara instalasinya sebagai berikut;

apt-get update && apt-get upgrade && apt-get install php5-dev

Sekarang download eAccelerator di situsnya http://eaccelerator.net/ (atau dari blog saya ini, karena situs resminya sering down) dan install dengan cara;

cd /usr/src wget https://blog.ariw.net/files/eaccelerator-0.9.6.1.zip
unzip eaccelerator-0.9.6.1.zip
cd eaccelerator-0.9.6.1 phpize
./configure make make install

Berikutnya kita integrasikan eAccelerator dengan PHP5. Pada Debian Squeeze (seharusnya pada versi Debian lainnya pun sama) konfigurasi untuk modul PHP terletak di direktori /etc/php5/conf.d/

Buat eaccelerator.ini file;

cd /etc/php5/conf.d/ touch eaccelerator.ini

dan isikan parameter-parameter berikut di dalamnya;

extension="eaccelerator.so"
eaccelerator.shmsize="16"
eaccelerator.cachedir="/var/cache/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.checkmtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shmmax="0"
eaccelerator.shmttl="0"
eaccelerator.shmpruneperiod="0"
eaccelerator.shmonly="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

sekarang buat direktori /var/cache/eaccelerator dan setting supaya writeable;

mkdir /var/cache/eaccelerator chmod 777 /var/cache/eaccelerator

langkah terakhir adalah restart webserver;

/etc/init.d/lighttpd restart

Kita bisa mengecek apakah eAccelerator sudah terintegrasi atau belum dengan execute perintah;

php -v

dan jika eAccelerator sudah berjalan dengan sempurna, hasilnya kurang lebih akan seperti ini;

PHP 5.3.3-7+squeeze1 with Suhosin-Patch (cli) (built: Mar 18 2011 17:22:52) Copyright (c) 1997-2009 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator

VPS Gratis

Yang mau coba-coba pake VPS, ada yang ngasih trial gratis nih;

http://www.ovh.ie/dedicatedservers/usaorder_beta.xml
http://www.kimsufi.co.uk/vks/geovks.xml
http://www.cloudee.eu/preorder
http://www.host1free.com
http://www.elastichosts.com/cloud-hosting/free-trial
Home
http://e-planet.ru http://cloudsigma.com http://openhosting.com
Home
http://openhosting.com http://hosting-service.com.ua http://www.vps.net http://www.torqhost.com (Cuma Rp 12.000 untuk 3 bulan)

Terserah mau dipake apaan, VPN, web hosting, web service development, dll. Template OS ada banyak. Kalo salah-salah konfigurasi, gampang tinggal wipe dan install ulang dalam semenit server udah ready lagi. Lumayan buat main atau belajar 😉 Untuk VPS KVM murah, saya sarankan coba layanan dari Pyramidserver. Murah karena dengan spek:

No. of Core 1
Mem. 128 MB
Swap 256 MB
Disk 5 GB
Bandwidth Transfer 300 GB

harganya cuma Rp. 300.000 / TAHUN!! Untuk kualitas ngga perlu ragu, udah saya coba sendiri saat ini dijadikan home server untuk blog blog.ariw.net sangat mumpuni. [update] Baru-baru ini Pyramidserver juga nyediain VPS OpenVZ dengan harga mulai dari Rp. 30.000 / bulan RAM 256MB. PS: Untuk website yang berbahasa asing seperti Rusia, saya sarankan daftar pakai browser Google Chrome, karena nanti akan ditranslate otomatis oleh browser Chrome.