Yüksek trafiğe ve yüksek miktarda verişi giriş-çıkışına sahip bir web siteniz var. Kullanıcı sayısınız ve trafiğiniz öylesine artmış durumdaki artık MySQL veritabanı sunucunuzu çalıştıran bilgisayarınız neredeyse çatlamak üzere. Gerek tablo yapınızdan kaynaklanan gerekse iş mantığınızdan kaynaklanan sebeplerle veritabanınız artık teklemeye başladı. Çare olarak parayı gözden çıkarıp sunucuya yeni RAM ve CPU eklemeyi dahi düşünüyorsunuz. Peki buda çare olmazsa ne olacak? Tükanı kapatacak mıyız?
Web sitemizin pratikte işleyememesi, istekleri cevap verememesi aslınd a”Tükanımızı” kapatmakla eşdeğer. Yeni fiziksel donanım eklenmesi (Scaling UP) de çözüm olmuyorsa artık farklı senaryoları düşünmenin zamanı gelmiş demektir. Akla gelen ilk çözümlerden birisi Master-Slave yapısına geçmeyi düşünmek. MySQL, master-slave yapısına gayet güzel destek vermektedir. Bu yapıda bir adet ana sunucunuz vardır, tüm insert-update-delete-create-drop-alter işlemleri master veritabanı üzerinde gerçekleştirilir. Slave veritabanları ise neredeyse anlık olarak master veritabanında olan tüm anılan işlemleri kendine çeker ve işletir. Ciddi bir network sorunu yaşamadığınız sürece master ve tüm slaveler neredeyse anlık olarak aynı verilere sahip olmuş olurlar. Eğer elimzde master veritabanı ile birbirine aynı olan slave sunucularımız varsa boşu boşuna master veritabanına “select” atmasının anlamı yoktur. Müşterilerinize göstereceğiniz bilgileri çekmek, arka planda log oluşturmak, cron ların işleyeyeceği verileri çekmek vs.. gibi bir çok maksatla slave veritabanlarınızı güvenle kullanabilirsiniz. Eğer slave veritabanınız masterdan bilgi olarak geri kalmışsa endişeye gerek yok belki birkaç dakika belki duruma göre birkaç saat içerisinde slave veritabanınız master veritabanı ile kendini eşitleyecektir. Master’a özgürlük!!
Master ınızı rahat bırakın! rahat bırakın ki nefes alsın ve “yazma” işlemlerini yapacak imkanı olsun. Birçok durumda “okuma” işlemleri elinizdeki N adet slave sunucundan birini seçerek yaparsınız. Elimizde N adet Slave sunucu varsa hangi sunucudan okuma yapacağıumıza elbette biz karar vereceğiz, kodumuzu ona göre yazacağız. Yinede, eğer çok kritik bir okuma işlemi yapacaksanız bunu master üzerinden yapın! Ama gerçekten çok kritik bir okuma işlemi olsun! Es kaza slave de o bilgi henüz yok ise sorun yaşarsınız! ![]()
Master-Slave yapısı her derde devamıdır? Aslında kısaca cevap vermek gerekirse: hayır! Onunda sınırlılıkları vardır. Master veritabanınız yazma işlemlerine yetişemediği aşırı yoğun ve çok büyük boyutlu tablolarınız varsa tek master sunucunuz sizi yarı yolda bırakabilir. E bende birden fazla master sunucu yaparım biri çökerse öbürü yola devam eder! derseniz bende tabiki olabilir neden olmasın derdim! Bu tür yapıya master-master veritabanı sunucu yapılandırması diyoruz. Kısacası bir tane horozumuz yok! Aynı işi yapan birden fazla horozumuz var! Bir sunucu çökerse diğeri işe devam eder, çöken sunucuyu ayağa kaldırıp çalışan master sunucuyla durumunu eşitleyip yoluna devam ettirebiliriz. Böylece kullanıcılarımıza hizmet kesintisi yaşatmamış oluruz.
Fiziksel olarak master sunucusunun dahi işleyebileceğinden daha fazla boyutlu tablolarımız ve kullanıcı isteklerinin olduğu durumda ne yapacağız? Master sunucunuza istediğiniz kadar RAM, CPU, depolama alanı ekleyin, elbet birgün doyum noktasına ulaşacak ve hizmet veremez noktaya gelecektir. Yani küçük kıyametiniz gelmiş demektir! Böylesi bir durumda “MySQL Clustering” imdadımıza yetişiyor. MySQL Clustering, verileri tablo bazında küme içerisindeeki farklı fiziksel makinelerde tutuyor verilerin kopyaları da yine farklı sunuculara gönderiliyor. Kümeye makine eklemek [trabiki içinde mysql sunucusu var:) ] suretiyle yapımızın işlem kapasitesini artırabilmemiz mümkün oluyor. Bu tür yatay genişlemeye Scaling Out deniyor. Aslında mantık basit tabloları satır bazında farklı sunucularda tut, datanın birden fazla kopyasını oluştur, yapıya yeni fiziksel makine eklenirse onada data gönder halkaya onuda dahil et, eğer bir makine çökerse onun tuttuğu bilginin örneği hangi makinedeyse o makineden o bilgiyi getir… şeklinde özetleyebiliriz. Bu yapının unutulmamalıdırki program yazım mantığı bazında birtakım kısıtlamaları vardır, mesela JOIN lerden hiç hoşlanmaz, onlar analiz edilerek iş mantığı koda dökülmelidir.
Sandbox
Aynı bilgisayar içerisinde birden fazla MySQL sunucusu çalıştırmak istermiydiniz? Ben istedim!
master-slave replikasyonu, master-master yapısı, MySQL Clustering testleri yapmak için veya farklı MySQL sunucularını aynı bilgisayarda çalıştırıp test yapmak için MySQL Sandbox‘ı kullanabilirsiniz. MySQL Sanbox’ı buradan indirebilirsiniz. Evde testler kullanmak amaçlı Intel 4 çekirdeki 2.4GHZ intel işlemcli, 4GB RAMli 360GB diskli üzerinde ubuntu 8.0.4 server dağıtımı kurulu olan bir bilgisayar kullanıyorum. MySQL Sandbox’ı kurdum ve bir adet Master-Slave yapısında 1 adet master ve 2 adet slave i olan yapıda bir mysql kurulumu 5 dakikadan daha kısa bir zamanımı aldı.
Sizde MySQL testleri yapmak için Sandbox’ı indirebilirsiniz. İstediğiniz herhangi bir dizine kaydedin. MySQL.com sitesinden ihtiyacınız olan MySQL sürümümünün Binary dağıtımını indirin. Sandbox ile aşağıdaki komutları çalışltırabiliriz:
Farklı ihtiyaçlarınız için bilgisayarınızın kapasitesine göre istediğiniz kadar MySQL sunucu kuyrablirsiniz. Her bir sunucunun farklı bir Portu ve soket dosyası olacağını unutmayın.
Bir Yanıt
MySql Sandbox yükledikten sonra bilmeniz gerekenler , Orhan DOĞAN
Kasım 29th, 2008 at 10:36 pm
1[…] sandbox bu yazımda da değindiğim gibi aynı bilgisayar üzerinde farklı portlar kullanılarak birden fazla MySQL […]
Bu gönderiye ait yorumlar için RSS beslemesi · TrackBack URI
Yorum yazın
Yorum göndermek için giriş yapmış olmanız gerekir.