WEB Server Performansını Nasıl Arttırırım? -4

Filed in Apache | Gezegen | Lighttpd | Linux | Linux-Komutlar Leave a comment

Performans arttırımı konulu makalemin 4. kısmında sizlere database performans arttırımı ile ilgili ipuçlarından bahsedeceğim. Tabiiki bahsedilecek databaseler MySQL ve PostgreSQL dir. PostgreSQL Performansı arttırımı konusunu daha önce işlemiştim. Fakat bazı düzenlemeler yapmak amacıyla şuan yayında değildir. Düzenlemelerden sonra yayına almayı düşünüyorum ve sizi MySQL başarı arttırımı ile başbaşa bırakıyorum.

5- Database Performans Arttırımı

a) MySQL Performans Arttırımı

b) PostgreSQL Performans Arttırımı

5- Database Performans Arttırımı

ADOdb performance monitor uygulaması ile database yapılacak performans iyileştirmelerini görebilirsiniz.

a) MySQL Performans Arttırımı

  • Burada yapacağınız iyileştirmeler mysql in conf dosyası olan my.cnf üzerinde yapacağınız işlemlerdir. Dosyanın sahip olduğun değişkenler ve son değerlerini görmek için aşağıdaki komutu kullanabilirsiniz;
SHOW STATUS;
SHOW VARIABLES;
 

UYARI: ayar değişikliklerine başlamadan önce veritabanı yedeği almanızı öneririz ve her değişiklikten sonra mysql i restart etmeniz gerekmektedir.

  • İmkanınız varsa MySQLTuner ı çalıştırarak bu scriptin mevcut mysql serverınıza en uygun konfigürasyon değerlerini seçmesini sağlayabilirsiniz.
  • query cache değerini 1 yapın.
query_cache_type = 1. 
  • Diğer cache değerlerini aşağıdaki gibi ayarlayabilirsiniz. Eğer sürekli update işlemi yapıyorsanız bu işlem performans artışı sağlayacaktır.
query_cache_size = 36M
query_cache_min_res_unit = 2K. 
  • Aşağıdaki sorgu ile veritabanınıza açmış olduğunuz tablo sayısını bulup opened_tables > 3 * table_cache formülüne göre table_cache sayınızı ayarlayın. Bu sayı aynı zamanda yüklenilen modül ve plugin lerin miktarına göre değişebilir.
mysql>SELECT COUNT(table_name) FROM information_schema.tables WHERE table_schema='yourdbname';
table_cache = 512 #(table_open_cache in MySQL > 5.1.2)
  • Aşağıdaki formüle göre thread cache miktarını hesaplayın ve değerini %100 doğrulukla atayın.
thread cache utilization (%) = (threads_created / connections) * 100
  • key buffer değeri SELECT sorgularına erişim hızıyla ilgili parametredir. En doğru değeri index dosyasının büyüklüğüne bağlıdır(.myi). Tavsiye edilen değer 32M dır. İdeal olarak database e 100 adet SELECT isteği yollayıp sonucuna göre değeri bulabilirsiniz. Aşağıdaki formüllerden yararlanabilirsiniz.
key_read / key_read_requests < 0.01
key_write / key_write_requests <= 1.0
 
  • maximum number of connections değerini doğru olarak ayarlamanız kullanıcılarınızın “To many connections” hatasını almaması için önemlidir. Bu değişkenin total memory kullanımını etkilediğini bilerek dikkatli olmalısınız. Mysql connectionları milisaniyeler içerisinde sonlandığından yoğun yüke sahip sistemlerde bile bu değeri 200 ün üzerine çıkarmak uygun değildir.
  • Yoğun delete ve update işlemleri olan tablolarınızı optimize ediniz. Bu sayede index leriniz yenilenecektir.
mysql>CHECK TABLE mdl_tablename;
mysql>OPTIMIZE TABLE mdl_tablename;
  • Herhangi bir tabloda problem olmasına karşın REPAIR TABLE komutunu kullanabilirsiniz.
  • Her hafta veya her ay mysql servisini durdurarak myisamchk komutunu çalıştırmak veritabanına bakım işlemlerini yapacaktır.
#myisamchk -a -S /pathtomysql/data/*.MYI

UYARI: komutu başlatmadan önce mysqld prosesinin durdurulmuş olması gerekmektedir. Aksi takdirde data kaybı yaşayabilirsiniz.

  • Geçici tabloların diske kaydedilmesi işleminin sayısını azaltın. Bunu created_tmp_disk_tables tablosundaki değeri okuyarak görebilirsiniz. Eğer bu sayı %5 ten fazla ise tmp_table_size değerini azalma görene kadar azaltın. Bu durumun RAM kullanımına etki ettiğini de dikkate almanızı tavsiye ederim.
  • Tablolarınız MyISAM formatında ise ve herhangi bir performans kazancı yaşamadığınızı düşünüyorsanız my.cnf ta InnoDB yi kapatın. skip-innodb parametresini my.cnf ye ekleyin.

Burada bulunan forumdaki tartışmadan yararlanabilirsiniz.

b) PostgreSQL Performans Arttırımı

Başka bir makalede daha ayrıntılı değinilecektir.

Web Server Performans Tuning konulu toplam 4 makaleden oluşan seride sizlere web serverınızı en verimli nasıl kullanabileceğinizi anlatmaya çalıştım. Umarım buradaki bilgiler işinize yarar. Herhangi bir kısımda takılırsanız yardımcı olmaya çalışırım. Hepinize performansı tam tuning olmuş mutlu günler dilerim…

KAYNAKLAR;

http://blog.digitalstruct.com/2008/01/31/performance-tuning-overview/

http://blog.stuartherbert.com/php/2008/01/31/more-about-performance-tuning/

http://httpd.apache.org/docs/2.0/misc/perf-tuning.html#page-header

http://docs.moodle.org/en/Performance

http://docs.moodle.org/en/lighttpd

http://www.devside.net/articles/apache-performance-tuning

http://linuxbox.co.uk/vbulletin_performance_tuning.php

Share
PDF Download    Send article as PDF   

, , , , ,

6 Adımda Veritabanı Dosyalarını rsync İle Eşleştirme

Filed in FreeBSD | Gezegen | Linux | Linux-Komutlar 5 Comments

Unix  ve Linux tabanlı sistemlerde dosya eşleştirmesini sağlayan müthiş araçlardan bir tanesi şüphesiz ki rsync dir. Fiziksel olarak farklı sunucularda bulunan dosyaları eşleştirmek amacıyla direk olarak bu dosyaları kopyalamanın  yerine, sadece değişikliğin olduğu dosyaların değişik olan kısımlarını kopyalayarak aktarım süresini minimuma indirebilirsiniz. Aynı zamanda bu araçta ssh desteklendiğinden dosya eşleştirmeleri güvenli olarak yapılmaktadır.

Sözü çok fazla uzatmadan rsync ile yaptığım 2 farklı sunucudaki veritabanı dosyalarını eşleştirme operasyonunu sizlere anlatacağım.

UYARI: Yapılan uygulamadaki veritabanı dosyalarının rsync ile eşleştirilmesi işlemi birçok veritabanı uzmanına göre riskli ve yanlış bir yoldur. Bu makalede vurgulanmak istenen nokta rsync programının nasıl kullanıldığını öğrenmek olduğu için production ortamlarda veritabanı dosyalarıyla birlikte deneme yapacağınız zaman çok dikkatli ve bu uyarıyı dikkate alarak davranınız.

Master ve slave 2 veritabanı düşünelim. Her saat başı master üzerindeki veriler slave üzerine kopyalansın. slave üzerinde herhangi bir ekleme, silme veya update işlemi master sunucuyu etkilemesin. Bu işlemin gerçekleştirilebilmesi için slave sunucuda çalıştırılmak üzere rsync yi çalıştıracağımız script yazılması gerekmektedir.

Uygulama FreeBSD sistemleri üzerinde yapılmıştır.

Uygulama Aşamaları;

1- 2 sunucu üzerinde de rsync programının kurulu olması gerekir.

# cd /usr/ports/net/rsync/
# make install
# make clean

2- güvenli aktarım için public, private keyler oluşturulmalı.

Slave sunucu üzerinden master sunucuya rsync programını kullanabilmek amacıyla şifresiz olarak bağlanabilmek amacıyla slave sunucu üzerinde public ve private key ler oluşturulup public key, master sunucuda .ssh/authorized_keys altına kopyalanması gerekmektedir.

Slave sunucu üzerinde yapılacaklar;

# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
52:49:04:2d:48:b0:39:24:6c:3e:35:fc:a7:8c:8e:c5 root@bayram.bayramkaragoz.org

oluşturulan public keyi master sunucuya aktarmak için;

# cd
# scp .ssh/id_rsa.pub root@master_sunucu.com:.ssh/authorized_keys
The authenticity of host 'master_sunucu.com (82.22.22.22)' can't be established.
DSA key fingerprint is 37:bd:7d:6b:2e:e7:d2:69:8f:36:a5:55:30:44:a0:fc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '82.22.22.22' (DSA) to the list of known hosts.
Password:
id_rsa.pub                                      100%  411     0.4KB/s   00:00

3- Slave sunucudan Master sunucuya root erişimi açık olmalıdır.

iki sunucu arasında ssh üzerinden direk root olarak bağlanabilmek amacıyla ssh ayarlarında root erişimini açmalıyız.

NOT: Sistemlere direk olarak root erişiminin açılması çok riskli bir durum olduğundan ssh güvenlik yazımı dikkatlice okuyarak (7. maddeye dikkat) direk root erişim yapacağınız slave sunucunun ipsini master sunucuda firewall da veya tcpwrappers gibi uygulamalarda girerek sınırlandırabilirsiniz.

master sunucuda;

# vi /etc/ssh/sshd_config

aşağıdaki ifadeyi girelim;

PermitRootLogin yes

ssh servisini restart edelim;

# /etc/rc.d/sshd restart
Stopping sshd.
Starting sshd.

test edelim. sonuç olumlu ise bir sonraki aşamaya geçelim.

4- Slave sunucuda eşleştirmeyi yapacak scriptimizi yazalım.

scripte göre /var/db/pgsql/ altında bulunan ve postgresql in tüm datalarının saklandığı dizin olan data dizinini master sunucudaki postgresql in aynı dizini ile eşleştiriyoruz.

UYARI: rsync nin veritabanı eşleştirmesi yaparken pgsql dizini altında bulunan ve postgresql in çalışma pid numarasını tutan .pid uzantılı dosyasını da değiştirdiği için rsync çalıştırılmadan önce postgresql in kapatılması gerekir. rsync nin işi bittikten sonra tekrar başlatabilirsiniz. Bu işlemin veritabanına ekleme düzenleme ve silmelerin çok az olduğu sistemlerde yapılması önerilir.

# vi /home/bayram/replication.sh
#!/usr/local/bin/bash
echo Backup Started `date`
/usr/local/etc/rc.d/postgresql stop
/usr/local/bin/rsync -ave ssh --numeric-ids  root@master_sunucu.com:/var/db/pgsql/data /var/db/pgsql/.
/usr/local/etc/rc.d/postgresql start
echo Backup Completed `date`

çalıştırma hakkı verelim;

# chmod a+x /home/bayram/replication.sh

5- scriptin her saat başı çalışması için crontaba girelim

crontab -e komutu ile veya /etc/crontab dosyasına her saat başı scriptimizin çalışması için aşağıdaki ifadeyi ekleyelim;

*              */1    *       *       *       /home/bayram/replication.sh >> /var/log/sync.log 2>&1

6- işlem loglarını takip edelim

yedekleme operasyonunu takip edebilmek için log dosyası oluşturalım;

# touch /var/log/sync.log

işlem tamamdır. Artık alternatif olarak yedeklenen 2 ayrı veritabanımız var. Hem yedekleme hemde replikasyon işlemi yapmış olduk. Süpeer :)

Share
Free PDF    Send article as PDF   

, , ,

TOP