Hariadi Yutanto

Tunning & Replikasi

Replikasi Database Mysql

by anto chuakev on Mar.18, 2011, under Replikasi Database Mysql, Tunning & Replikasi

Kebutuhan akan adanya High Availability (HA) tidak hanya pada webserver.Bisa juga HA dibuat untuk sistem database. HA pada database dibuat dengan sistem replikasi.Artinya akan ada sebuah sistem dengan minimal 2 database server yang akan berfungsi masing-masing sebagai master dan slave.Semua transaksi data diproses dan disimpan di database master.Secara bersamaan sistem akan otomatis mereplikasi semua data dari master ke slave (sinkronisasi secara otomatis).Jika sebelumnya HA pada webserver kita sudah berjalan (lihat artikel sebelumnya) , kita sudah memiliki infrastuktur HA yang komplit untuk menjalan aplikasi database kita yang dapat mencegah Single Point Of Failure (SPOF)  pada layer aplikasi.

Untuk memulai database replication :

1.Pastikan kedua database server mysql sudah berjalan dengan baik
2.Pastikan kedua database server dapat berkomunikasi ip dari master adalah 192.168.0.156/24 sedangkan ip dari slave adalah 192.168.0.158
3.Sistem pada artikel ini berjalan dengan OS Ubuntu 8 dengan apache2, php 5 dan mysql server 5.
4.Install packet rsync pada kedua database (master dan slave) dengan perintah dibawah ini:
apt-get install rsync

5.Pada database master
5.1 Buat database sederhana dengan user root, dan buat juga tabelnya.(database apasaja).kemudian isikan beberapa data pada tabel tersebut.Pada rtikel ini database nya adalah sample dan
tabelnya adalah siswa
5.2 edit file –> /etc/mysql/my.cnf dengan isi seperti ini
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=sample
server-id=1
5.3 Login ke mysql dengan perintah:
mysql -u root -p #isikan password root nya

5.4 Buat user dengan nama slave_user dengan password admin123 dan berikan grant all_priviledges pada user slave_user
5.5 Berikan perintah dibawah ini pada shell mysql (ekseskusi satu persatu baris ya)
FLUSH PRIVILEGES;
USE sample;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

#Outputnya adalah (output ini harus ada):
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000004 | 98 | sample | |
+——————+———-+————–+——————+
1 row in set (0.00 sec)

UNLOCK TABLES;

Dengan menggunakan tools phpmyadmin, export database sample (nantinya hasil eksport ini akan digunakan di database slave)

6.Pada database slave
Dengan menggunakan tools phpmyadmin, import database sample yang tadi sudah dieksport
7.Edit /etc/mysql/my.cnf :
server-id=2
master-host=192.168.0.156
master-user=slave_user
master-password=admin123
master-connect-retry=60
replicate-do-db=sample
8.Masuk ke mysql slave dengan perintah:
mysql -u root -p # isikan password root nya
9.Ketik perintah ini di shell mysql:
SLAVE STOP;
CHANGE MASTER TO MASTER_HOST=’192.168.0.156′, MASTER_USER=’slave_user’, MASTER_PASSWORD=’admin123′, MASTER_LOG_FILE=’mysql-bin.000004′, MASTER_LOG_POS=183;
11.Selesai.Test dengan cara masukkan data baru atau edit data lama pada master.Dan lihat hasilnya pada slave.Secara otomatis slave tersinkronisasi datanya dari master (kedua data sama)

Sumber : http://restama.com

Leave a Comment more...

replication/mirroring Webserver

by anto chuakev on Mar.18, 2011, under Replika Webserver, Tunning & Replikasi

Sebagai system administrator kita diharapkan dapat menjaga availabilitas dari server-server yang ada. Untuk beberapa server yang berfungsi sebagai cluster, aplikasi-aplikasi harus direplikasi ke beberapa server.Terkadang kita harus updating aplikasi untuk penambahan fitur. Dan untuk itu kita kadang harus copikan update tersebut kesetiap webserver yang ada secara manual. Untuk beberapa server mungkin tak jadi masalah, untuk jumlah server yang mencapai puluhan dan berada tidak satu lokasi tentu hal ini menjadi masalah. Diperlukan satu teknik untuk replikasi/mirroring secara otomatis untuk aplikasi yang terupdate.Salah satu caranya adalah dengan menggunakan rsync di ubuntu linux.
Istilah yang dipakai:

  1. Server yang akan dibuat rsync server adalah dengan ip =192.168.0.158 dengan FQDN=pclama-desktop  (kalau tidak tahu FQDN nya bisa mengetikkan hostname pad terminal)
  2. Mirror dengan ip=192.168.0.153 dengan FQDN =ubuntulaptop
  3. Tulisan ini dibuat untuk mirroring webserver

Tahapan:
Instalasi pada server dan mirror package rsync
caranya:
sudo apt-get install rsync

Pada Server:
buat user dengan nama someuser (isikan juga password yang dikendaki):
sudo useradd -d /home/someuser -m -s /bin/bash someuser
sudo passwd someuser

Untuk mengetest apakah sudah terjadi mirroring :
Pada mirror ketikkan
sudo rsync -avz -e ssh someuser@192.168.0.158:/var/www/ /var/www/

akan muncul tulisan semacam ini:
The authenticity of host ‘pclama-desktop (192.168.0.158)’ can’t be established.
RSA key fingerprint is 32:e5:79:8e:5f:5a:25:a9:f1:0d:ef:be:5b:a6:a6:23.
Are you sure you want to continue connecting (yes/no)?

Ketikkan yes

Kemudian ketikkan pada mirror dibawah ini untuk mengecek apakah content nya sudah terupdate oleh server:
ls -la /var/www

Rsync bisa berfungsi melalaui ssh, untuk itu kita perlu buat psangan kunci private/public.

Pada Mirror ketikkan perintah dibawah ini:
sudo mkdir /root/rsync
sudo ssh-keygen -t dsa -b 1024 -f /root/rsync/mirror-rsync-key

Akan muncul seperti ini:
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase): [press enter here]
Enter same passphrase again: [press enter here]
Your identification has been saved in /root/rsync/mirror-rsync-key.
Your public key has been saved in /root/rsync/mirror-rsync-key.pub.
The key fingerprint is:
8f:09:77:f0:fb:dc:22:25:fc:17:75:1d:41:80:da:58 root@ubuntulaptop

PERHATIAN !!! :JANGAN mengisikan passphrase dengan apapun karena kalau diisi sistem akan menjadi tidak otomatis, jadi tinggalkan saja dengan
cara tekan Enter

Kemudian copy public key ke pclama-desktop:
sudo scp /root/rsync/mirror-rsync-key.pub someuser@192.168.0.158:/home/someuser/

Pada Server
Loginlah sebagai someuser
Ketikkan perintah dibawah ini secara bertahap:
mkdir ~/.ssh
chmod 700 ~/.ssh
mv ~/mirror-rsync-key.pub ~/.ssh/
cd ~/.ssh
touch authorized_keys
chmod 600 authorized_keys
cat mirror-rsync-key.pub >> authorized_keys

Masih pada server dengan login sebagai someuser, lihat isi authorized_keys dengan cara:
vi /home/someuser/.ssh/authorized_keys

Akan terlihat seperti ini:
ssh-dss AAAAB3NzaC1kc3MAAA[...}

Tambahkan script dibawah ini sebelum ssh-dss ...
command="/home/someuser/rsync/checkrsync",from="ubuntulaptop",no-port-forwarding,no-X11-forwarding,no-pty

Sehingga akan seperti ini kita lihat file authorized_keys :
command="/home/someuser/rsync/checkrsync",from="ubuntulaptop",no-port-forwarding,no-X11-forwarding,no-pty ssh-dss AAAAB3NzaC1kc3MAAA[...]

PERHATIAN: agar menggunakan FQDN pada from diatas

Masih pada server dengan login someuser:
Ketikkan perintah dibawah ini secara bertahap:
mkdir ~/rsync
vi ~/rsync/checkrsync

Isikan file dibawah ini :
#!/bin/sh

case “$SSH_ORIGINAL_COMMAND” in
*&*)
echo “Rejected”
;;
*(*)
echo “Rejected”
;;
*{*)
echo “Rejected”
;;
*;*)
echo “Rejected”
;;
*<*)
echo “Rejected”
;;
*`*)
echo “Rejected”
;;
rsync –server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo “Rejected”
;;
esac

Rubah mod nya menjadi:
chmod 700 ~/rsync/checkrsync

Lakukan pada mirror untuk mengetes
sudo rsync -avz –delete –exclude=**/stats –exclude=**/error –exclude=**/files/pictures -e “ssh -i /root/rsync/mirror-rsync-key” someuser@192.168.0.158:/var/www/ /var/www/

Jika berhasil akan tampak hasil seperti dibwah ini:
receiving file list … done

sent 71 bytes  received 643 bytes  476.00 bytes/sec
total size is 64657  speedup is 90.56

INGAT : dengan melakukan sertting publik key, rsync tidak menanyakan password (enak kan :) )

Untuk membuat mirroring secara otomatiskita gunakan fungsi crontab.Misal kita ingin agar terjadi replikasi dari server ke mirror
setiap 1 menit sekali, caranya adalah:

Pada mirror:
sudo crontab -e
Setikkan perintah ini:
*/1 * * * * /usr/bin/rsync -azq –delete –exclude=**/stats –exclude=**/error –exclude=**/files/pictures -e “ssh -i /root/rsync/mirror-rsync-key” someuser@192.168.0.158:/var/www/ /var/www/

Lakukan perubahan pada server di /var/www/ dan lihat update nya di mirror 1 menit kemudian di /var/www/

Selesai

Refferensi :http://www.howtoforge.com/mirroring_with_rsync

Sumber : http://restama.com

Leave a Comment more...

by anto chuakev on Aug.16, 2010, under Kernel Linux

Berikut adalan tuning kerneldi  Ubuntu agar tambah jozz
# cp /etc/sysctl.conf /etc/sysctl.conf.bak
# Vi /etc/sysctl.conf

ganti semua isinnya dengan ini

code :

kernel.core_uses_pid=1
kernel.sysrq=1
net.core.optmem_max=28672
net.core.rmem_max=1280000
net.ipv4.tcp_rmem=4096 87380 1280000
net.core.wmem_max=1280000
net.ipv4.tcp_wmem=4096 87380 1280000
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.all.log_martians=0
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.all.accept_redirects=0
net.ipv4.tcp_max_tw_buckets=720000
net.ipv4.tcp_window_scaling=0
net.ipv4.tcp_keepalive_time=1200
net.ipv4.tcp_timestamps=0
net.ipv4.tcp_fin_timeout=15
net.ipv4.tcp_sack=0
net.ipv4.tcp_syncookies=1
net.ipv4.icmp_echo_ignore_all=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_responses=1
net.ipv4.ip_local_port_range=1024 65535
net.ipv4.ip_forward=1
net.ipv4.ip_dynaddr=0

setelah itu save dan keluar
:wq
#sysctl -p
#reboot

Sumber : Forummikrotik

Leave a Comment more...

Tunning MySQL menggunakan mysqltuner.pl

by anto chuakev on Aug.16, 2010, under database Mysql

Mencari konfigurasi terbaik untuk mysql memang sangat susah. Perlu pengalaman dan jam terbang yang cukup banyak untuk tahu bagian mana saja yang harus di tunning dan mana yang harus dibiarkan.
Pagi ini saya browsing kanan kiri dan akhirnya nemu satu aplikasi yang bernama mysqltunner .
Aplikasi kecil ini mampu membaca database mysql dan menyarankan beberapa tunning yang bisa kita lakukan untuk meng optimalkan setting konfigurasi mysql.

mysqltunner.pl bisa anda dapatkan dari mysqltunner.com

wget http://mysqltuner.com/mysqltuner.pl

Kemudian anda tinggal jalankan saja dengan command

perl mysqltuner.pl

Apabila ditanyakan username dan password silahkan masukan username root dan password nya.
dan berikut ini hasilnya

 >>  MySQLTuner 1.0.0 - Major Hayden
 >>  Bug reports, feature requests, and downloads at http://mysqltuner.com/
 >>  Run with '--help' for additional options and output filtering

-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.0.51a
[OK] Operating on 32-bit architecture with less than 2GB RAM

-------- Storage Engine Statistics -------------------------------------------
[--] Status: -Archive +BDB -Federated +InnoDB -ISAM -NDBCluster
[--] Data in MyISAM tables: 346M (Tables: 13693)
[--] Data in InnoDB tables: 7M (Tables: 151)
[--] Data in MEMORY tables: 126K (Tables: 3)
[!!] BDB is enabled but isn't being used
[!!] Total fragmented tables: 1523

-------- Performance Metrics -------------------------------------------------
[--] Up for: 1d 21h 1m 47s (2M q [14.857 qps], 87K conn, TX: 4B, RX: 450M)
[--] Reads / Writes: 93% / 7%
[--] Total buffers: 34.0M global + 2.7M per thread (500 max threads)
[OK] Maximum possible memory usage: 1.3G (67% of installed RAM)
[OK] Slow queries: 0% (0/2M)
[OK] Highest usage of available connections: 18% (90/500)
[OK] Key buffer size / total MyISAM indexes: 8.0M/46.3M
[OK] Key buffer hit rate: 97.8% (21M cached / 470K reads)
[!!] Query cache is disabled
[OK] Sorts requiring temporary tables: 0% (1 temp sorts / 344K sorts)
[!!] Joins performed without indexes: 34995
[!!] Temporary tables created on disk: 28% (46K on disk / 162K total)
[!!] Thread cache is disabled
[!!] Table cache hit rate: 0% (64 open / 303K opened)
[OK] Open file limit used: 0% (126/225K)
[OK] Table locks acquired immediately: 99% (2M immediate / 2M locks)
[OK] InnoDB data size / buffer pool: 7.5M/8.0M

-------- Recommendations -----------------------------------------------------
General recommendations:
    Add skip-bdb to MySQL configuration to disable BDB
    Run OPTIMIZE TABLE to defragment tables for better performance
    Enable the slow query log to troubleshoot bad queries
    Adjust your join queries to always utilize indexes
    When making adjustments, make tmp_table_size/max_heap_table_size equal
    Reduce your SELECT DISTINCT queries without LIMIT clauses
    Set thread_cache_size to 4 as a starting value
    Increase table_cache gradually to avoid file descriptor limits
Variables to adjust:
    query_cache_size (>= 8M)
    join_buffer_size (> 128.0K, or always use indexes with joins)
    tmp_table_size (> 32M)
    max_heap_table_size (> 16M)
    thread_cache_size (start at 4)
    table_cache (> 64)

Seperti anda lihat pada bagian recomendation, saya disarankan untuk melakukan beberapa perubahan pada my.cnf saya.
Silahkan lakukan perubahan dan ulangi lagi mysqltuner.pl nya supaya di cek kembali apakah setting yang kita lakukan sudah benar atau tidak.
Berikut ini my.cnf yang saya tambahkan

[mysqld]
set-variable = max_connections=500
safe-show-database
query_cache_size = 8M
key_buffer_size = 50M

Berikut ini hasil mysqltuner setelah edit my.cnf

 >>  MySQLTuner 1.0.0 - Major Hayden
 >>  Bug reports, feature requests, and downloads at http://mysqltuner.com/
 >>  Run with '--help' for additional options and output filtering

-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.0.51a
[OK] Operating on 32-bit architecture with less than 2GB RAM

-------- Storage Engine Statistics -------------------------------------------
[--] Status: -Archive +BDB -Federated +InnoDB -ISAM -NDBCluster
[--] Data in MyISAM tables: 346M (Tables: 13693)
[--] Data in InnoDB tables: 7M (Tables: 151)
[--] Data in MEMORY tables: 0B (Tables: 3)
[!!] BDB is enabled but isn't being used
[!!] Total fragmented tables: 1523

-------- Performance Metrics -------------------------------------------------
[--] Up for: 24s (1K q [47.333 qps], 210 conn, TX: 2M, RX: 80K)
[--] Reads / Writes: 28% / 72%
[--] Total buffers: 84.0M global + 2.7M per thread (500 max threads)
[OK] Maximum possible memory usage: 1.4G (69% of installed RAM)
[OK] Slow queries: 0% (0/1K)
[OK] Highest usage of available connections: 0% (4/500)
[OK] Key buffer size / total MyISAM indexes: 50.0M/46.2M
[!!] Key buffer hit rate: 37.5% (8 cached / 5 reads)
[!!] Query cache efficiency: 0.8% (1 cached / 119 selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 2 sorts)
[OK] Temporary tables created on disk: 0% (0 on disk / 2 total)
[!!] Thread cache is disabled
[OK] Table cache hit rate: 73% (17 open / 23 opened)
[OK] Open file limit used: 0% (34/225K)
[OK] Table locks acquired immediately: 100% (222 immediate / 222 locks)
[OK] InnoDB data size / buffer pool: 7.5M/8.0M

-------- Recommendations -----------------------------------------------------
General recommendations:
    Add skip-bdb to MySQL configuration to disable BDB
    Run OPTIMIZE TABLE to defragment tables for better performance
    MySQL started within last 24 hours - recommendations may be inaccurate
    Enable the slow query log to troubleshoot bad queries
    Set thread_cache_size to 4 as a starting value
Variables to adjust:
    query_cache_limit (> 2M, or use smaller result sets)
    thread_cache_size (start at 4)

Silahkan coba bandingkan

Sumber : http://www.giest.org

Leave a Comment more...

Looking for something?

Use the form below to search the site:


Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Design by bonkqloph Production

Visit our friends yu!

A few highly recommended friends...