Ana Sayfa > Kompütür > Mysql Cluster Kurulumu

Mysql Cluster Kurulumu

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:

  1. Node: Küme içindeki bilgisayar, ben buna üye diyeceğim.
  2. Management Node:Kümenin yönetiminin yapıldığı üye. Her kümede sadece bir tane olur.
  3. Data Node:Verilerin tutulduğu üye. Birden fazla olabilir.
  4. API Node:Sorguların yapıldığı üye. Birden fazla olabilir.
  5. 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]
[NDB_MGMD]
HostName=10.0.0.1
[NDBD]
HostName=10.0.0.2
DataDir= /var/lib/mysql-cluster
[NDBD]
HostName=10.0.0.3
DataDir=/var/lib/mysql-cluster
[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.cnfdosyası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:


komutunu veriyoruz. Sonra her veri üyesinde


ve her sorgu üyesinde


komutlarını veriyoruz. Bundan sonra sorgu üyelerinden herhangi birinden bağlanarak kümeyi kullanmak mümkün olacak.

Dikkat Edilmesi Gerekenler:

  1. 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.
  2. “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.
  3. Ş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.
  4. 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ı.
Categories: Kompütür
  1. bahtiyar
    03 Haziran 2008, 17:32 | #1

    süper olmuş eline sağlık

  2. Ulaş CANTEPE
    17 Temmuz 2009, 15:49 | #2

    Sonderece yararlı bir bilgi. Bu makalenizi redhat için denemeye çalıştım ama nafile olmadı :(

  3. 17 Temmuz 2009, 15:56 | #3

    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?

  4. Ulaş CANTEPE
    17 Temmuz 2009, 16:31 | #4

    Ö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

  5. 16 Aralık 2009, 19:12 | #5

    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.

  6. 17 Aralık 2009, 04:08 | #6

    @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.

  7. hasan
    09 Nisan 2012, 17:57 | #7

    Ulaş CANTEPE :
    Ö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

    aynı sorunu bende yaşıyorum, çözümü hakkında bilgi verebilirmisiniz ?

  8. hasan
    17 Mayıs 2012, 11:37 | #9

    hocam ellerine sağlık, sormak istediğim bir kaç sorum var.
    ben cluster yapıyı kurdum süperde çalışıyor. yanlız benim sürekli veri üreten bir uygulamam var ve bu uygulama sadece tek bir ip kabul ediyor. bu sistemi kurmamın asıl sebebide bu sürdürülebilirliği mysql cluster ile sağlamak istiyorum.
    Sorunum şu, diyelim ki bu uygulamaya ip nodun ip ‘sini verdim ve uygulamam ip node vasıtasıyla inser yapıyor, diyelim ki bu makina bir şekilde down oldu, bu durumda ne olcak ?

    bunu şu şekilde denedim data node lardan birini verdim uygulamaya, verdiğim nodu mysql i stop ettiğimde uygulama hata verdi yani o makinaya bağımlı kalıyorum.

    benim asıl amacım bu makina down olunca gitsin diğer makinaya yazmaya devam etsin di, bu olayı nasıl sağlayacağım ?

    Teşekkürler.

    • 17 Mayıs 2012, 15:26 | #10

      Buradaki çözüm, daha çok yedeklilik üzerine, süreklilik üzerine değil. Yönetim node’unu failover için düzenlemek lazım ayrıca. Önceden drbd ve heartbeat ile bunu gerçekleştirmiştim ama yazmak için hiç zamanım olmadı.

  1. Henüz geridönüş yok.

Yorum yapın

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Değiştir )

Twitter picture

You are commenting using your Twitter account. Log Out / Değiştir )

Facebook photo

You are commenting using your Facebook account. Log Out / Değiştir )

Connecting to %s

Takip Et

Get every new post delivered to your Inbox.