Her ne kadar mysql Sun’a satıldıktan sonra geleceği hakkında biraz şüpheye düşsem de, karmaşık sorunlara basit çözümler önermesi açısından hala favori veritabanı sunucum. Bu yazıda birden fazla bilgisayardan oluşan bir mysql kümesinin nasıl oluştuğunun tarifini vereceğim. Tabii ki Ubuntu sunucular üzerinde.
Mysql küme kurulumunda önceden tanımlamamız gereken bir kaç kavram var:
- Node: Küme içindeki bilgisayar, ben buna üye diyeceğim.
- Management Node:Kümenin yönetiminin yapıldığı üye. Her kümede sadece bir tane olur.
- Data Node:Verilerin tutulduğu üye. Birden fazla olabilir.
- API Node:Sorguların yapıldığı üye. Birden fazla olabilir.
- Bir de adı pek konulmamış bir giriş noktası var. Kullanıcılar sorgu üyelerine direkt bağlanmak yerine giriş noktası olarak belirlenen bir adrese bağlanıyorlar, böylece sorgu üyelerinden biri ulaşılmaz hale gelirse düzgün bir şekilde yönlendirme yapılması durumunda sorun çıkmıyor.
Aşağıdaki reçetede iki tane üye hem veri hem sorgu için, bir üye de yönetim ve sorgu üyesi olarak kullanılıyor. Yönetim üyesi 10.0.0.1, diğerleri de 10.0.0.2 ve 10.0.0.3 olarak örneklendi.
Kurulum:
Üye bilgisayarların herbirine güncellemelerini yaptıktan sonra en güncel sunucuyu kuruyoruz:
# aptitude install mysql-server
Ayrıca deneme yapmak ya da üyeyi istemci olarak kullanmak niyetimiz varsa, mysql istemcisini de kuruyoruz:
# aptitude install mysql-client
İşin kurulum kısmı bu kadar. Ama tüm yapılandırma bitmeden mysql sunucularını çalıştırmamakta fayda var.
Yapılandırma – Yönetim Üyesi:
Yönetim üyesinin yapılandırma dosyası /etc/mysql/ndb_mgmd.cnf. Bu dosyanın içi aşağıdaki gibi oluyor:
[NDBD DEFAULT] NoOfReplicas=2 [MYSQLD DEFAULT] [NDB_MGMD DEFAULT] [TCP DEFAULT] # Management Server [NDB_MGMD] HostName=10.0.0.1 # Storage Engines [NDBD] HostName=10.0.0.2 DataDir= /var/lib/mysql-cluster [NDBD] HostName=10.0.0.3 DataDir=/var/lib/mysql-cluster # SQL Engines [MYSQLD] [MYSQLD] [MYSQLD]
Burada [NDBD_DEFAULT] kısmındaki NoOfReplicas girişine kaç tane veri üyemiz olduğunu yazıyoruz. Sonra [NDB_MGMD] kısmına da yönetim üyesinin adresi giriyor. Dosyanın sonun doğru da her veri üyesi için bir [NDBD] bölümü, her sorgu üyesi için de [MYSQLD] bölümü var. [MYSQLD] bölümüne de HostName yazabiliriz, ama şart değil. Üstteki dosyayla iki veri üyesi ve üç sorgu üyesi kaydetmiş oluyoruz. (Veri üyeleri aynı zamanda sorgu üyesi de olabilir.)
Yapılandırma – Veri Üyeleri:
Her veri üyesi üzerinde, /etc/mysql/my.cnf dosyasında değişiklik yapmamız gerekli. Editörle açıp [mysqld] kısmını buluyoruz ve altına şunları yazıyoruz:
ndbcluster
ndb-connectstring=10.0.0.1
default-table-type=NDBCLUSTER
Sonra yine aynı dosyanın sonuna şunları ekliyoruz:
[MYSQL_CLUSTER]
ndb-connectstring=10.0.0.1
Bu dosyayı kaydettikten sonra, aşağıdaki komutu vererek veritabanını hazırlıyoruz:
# ndbd --initial
Yapılandırma – Sorgu Üyeleri:
Her sorgu üyesi üzerinde, /etc/mysql/my.cnf dosyasını değiştiriyoruz, veri üyeleriyle aynı şekilde. Sadece bu üyelerde sonuncu komutu vermiyoruz, yani veritabanını hazırlamamıza gerek yok.
Sistemi başlatmak:
Önce yönetim üyesinde:
# invoke-rc.d mysql-ndb-mgm start
komutunu veriyoruz. Sonra her veri üyesinde
# invoke-rc.d mysql-ndb start
ve her sorgu üyesinde
# invoke-rc.d mysql start
komutlarını veriyoruz. Bundan sonra sorgu üyelerinden herhangi birinden bağlanarak kümeyi kullanmak mümkün olacak.
Dikkat Edilmesi Gerekenler:
- Kümeye üye ekleyip çıkartınca, tüm üyelerin yeniden başlatılması gerekli. Yönetim üyesi dahil tüm üyeleri kapattıktan sonra, önce yönetim üyesini baştan başlatıp sonra da diğer üyeleri başlatmak en güvenli sıralama.
- “HostName” vererek kümeye ekleme yaptığınızda, yapılandırma dosyasında en sona ekleyin. Batıl inanç olabilir ama başa ekleyince sanki sorunla karşılaştım.
- Şema değişiklikleri (veritabanı ekleme-çıkarma, indeks ekleme-çıkarma, tablonun sütunlarıyla oynama vb.) üyeler arasında otomatik olarak güncellenmiyor. Maalesef tüm veri üyelerinde elle tekrarlanması gerekli.
- Yönetim üyesinin herhangi bir güvenlik ayarı yok, erişimi olan herkes istediği gibi oynayabilir. O yüzden yönetim üyesi (hatta tüm küme) mutlaka güvenlik duvarıyla korunmalı.
İlgili Yazılar:
- WordPress İçin Mysql Ayarları Aşağıda, zamanında bir yerlerden bulup da derlediğim, WordPress’le çalışırken tavsiye...
- Ubuntu (Edgy) Üzerinde ZoneMinder Kurulumu Zoneminder, sitesinden indirilebilen, açık kaynaklı bir Video ve hareket detektörlü...
- Ağ Üzerinden Ubuntu Kurulumu Burada önceden ağ üzerinden redhat kurulumunu listelemiştim. Benzer bir şekilde...
- Ağ Üzerinden RedHat Kurulumu ## Sunucu Ayarları ### dhcp 1. dhcp paketi kurulur: rpm...
- Ubuntu (Edgy) Üzerinde lighttpd ve php kurulumu 1. İlk önce ilgili paketleri kuruyoruz: sudo aptitude install lighttpd...


03 Haz 08
17:32
süper olmuş eline sağlık
17 Tem 09
15:49
Sonderece yararlı bir bilgi. Bu makalenizi redhat için denemeye çalıştım ama nafile olmadı
17 Tem 09
15:56
Ulaş Bey,
Mantık redhat için de aynıdır, fakat komutlar değişir. Paket kurulumu için Redhat 5 için yum kullanabilirsiniz. invoke-rc.d komutu yerine de service komutunu deneyebilirsiniz. Bir de belki konfigürasyon dosyalarının yerleri farklı olabilir, ama mutlaka oralardadır
Bu kadarı belki yardımcı olur, belki olmaz. Takıldığınız yerleri tam olarak deseniz?
17 Tem 09
16:31
ÖNCELİKLE REDHAT ENTERPRİSE 5 KURULUM AŞAMASINDA MYSQL PAKETİNİ SEÇİP TÜM BİLEŞENLERİ İLE KURUYORUM.
MYSQLD ÇALIŞIYOR. VAR/LİB İÇERİSİNE MYSQL-CLUSTER DİZİNİ OLUŞTURUP CONF DOSYASINIDA OLUŞTURUYORUM BURAYA KADAR SIKINTI YOK. AMA NBDB_MGM KOMUTUNU KULLANARAK YÖNETİM KONSOLUNA GİREMİYORUM. -BASH KOMUTU TANINAMADI DENİLİYOR. YONETİM KONSOLUNA GİRİP SHOW YAPAMADIGIM İÇİNDE NE YİN NEREDE BAGLI OLDUGUU TEST EDEMİYORUM
16 Ara 09
19:12
Merhaba.
Yazınız için teşekkür ederim. Sormak istediğim birkaç konu var,
Veri cihazlarındaki makinelerde dosyalar tam olarak mı duruyor, yoksa dosyalar sunucular üzerinde mi paylaştırılıyor?
Management (Yönetim) cihazı sistemde bir tane. Sistemde problem olursa sıkıntı çıkmayacak mı?
Terminallerden sorgu geldiğinde istek % olarak mı paylaştırılıyor. Yoksa bir istek bir makineye diğer istek farklı makineye mi gönderiliyor?
İyi çalışmalar. Bu konuda yazılarınızın devamını dilerim.
17 Ara 09
4:08
@Bahattin,
Veri cihazlarında veriler kopya halinde durmakta, yani birinde sorun çıkarsa işler devam ediyor. Management cihazının bir tane olması şart değil, ama çoklu kullanınca bazı kısıtlamalar var. Daha fazla bilgi için http://dev.mysql.com/doc/refman/5.0/en/mysql-cluster-limitations-multiple-nodes.html adresine bakabilirsiniz.
Yük paylaşımında, zaten update sunucularına tüm istekler gidiyor. Sorgulama için failover ya da load balancing için başka çözümlere bakmak gerekli. Genelde sql proxy vs öneriliyor.