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:
- 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] [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:
- 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ı.
süper olmuş eline sağlık
Sonderece yararlı bir bilgi. Bu makalenizi redhat için denemeye çalıştım ama nafile olmadı
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?
Ö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
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.
@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.