Mysql Cluster 7.3 Limitations / PART 1

Mysql Cluster 7.3 Limitations

PART 1

– Temprory Tables: NDB storage engine doesn’t support to creating temporary table. When you create or alter to temporary table you will get this error:
Table storage engine ‘ndbcluster’ does not support the create option ‘TEMPORARY’.

– Indexes and keys in NDB tables: Key and indexes has following limitations.

-Column with : When you create an index on the NDB tables columns , which is greater than 3072 bytes , succeeds but only first 3071 bytes are actually will used for index. In such cases you will get below warning. Specified key was too long; max key length is 3072 bytes

– Text and Blob Columns: NDB storage engine doesn’t support to BLOB and TEXT data types.

– FullText indexes: NDB storage engine doesn’t support to Fulltext index. Using Hash keys and Null: İf you are using nullable column in unique keys or primary keys the query will use full table scans. For fixing this issue you should use NOT NULL column or recreate index without USING HASH option.

– BIT Column : Bit column cannot be primary key, unique key or index . But it can be part of composite primary key , unique key or index.

– Restrictions of Foreign Keys: NDB cluster 7.3 supports to foreign key but ON UPDATE CASCADE is not supported when the reference is to the parent table’s primary key. SET DEFAULT is not supported. NO ACTION keywords are accepted but thread as RESTRICTED.

– Geometry data types: Are supported. WKT and WKB. But you cannot create index on that columns.

– User Defined Partitioning: Except Linear Key partitioning , NDB storage engine supports to User Defined Partitioning. Using any other partitioning type with ENGINE=NDB or ENGINE=NDBCLUSTER in a CREATE TABLE statement results in an error. The maximum number of partitions that can defined for a NDBCLUSTER table when employing user-defined partitioning is 8 per node Known Limitations of MySQL Cluster group.

– Drop Partition: Is not supported. But you can add partition , reorganize partition and coalesce partition.

www.mysqlsupport.net
Database Administrator
Tayfur BÖLER

Mysql Cluster

Mysql Cluster,

Yüksek trafiğe ve yüksek miktarda veri alış verişine sahip bir
database’iniz varsa, ve bu database’iniz ölüp ölüp diriliyorsa
artık cluster’a geçme vakti gelmiş demektir. Cluster kelime anlamı
olarak kümeleme demektir. Mysql Clustering dataları tablo boyutunda,
cluster’e dahil ndb node’larda kümeler halinde tutar. Ve yine bu
node’lar kendi aralarında data kopya tutma işlerini bu şekilde yaparlar.
Yani tabloları farklı fiziksel makinalarda tutup , datanın kopyalarını
oluştururlar. İstenirse kümeye yeni makinalar(ndb node) eklenebilir.
Bu şekilde bir büyüme de sağlanmış olur.

Clusterin performans’a olan katkısı haricinde database’inizin
sürekliliğini sağlar. Yani ndb node’lardan biri çökerse diğeri
kaldığı yerden devam edecektir.

şimdi yukarıdaki diagramda ,

1 adet (192.168.1.21) ip’li yönetim nodu
2 adet (192.168.1.22-192.168.1.23) ip’li ndb node (depolama nodu)
1 adet (192.168.1.24) ip’li Api node mevcuttur.(sorguların gönderileceği mysql server)

Adım adım cluster yapımızı kurmaya başlayalım.

1-Adım: Tüm makinalarda Mysql server kurulu olduğunu varsayıyorum.
192.168.1.21 ip’li makinada sırayla,

mkdir /var/lib/mysql-cluster –> /var/lib/ in altında mysql-cluster
isimli bir dizin oluşturuyoruz.
cd /var/lib/mysql-cluster –> oluşturduğumuz klasörün içine giriyoruz.
nano config.ini –> diyerek config.ini adında bir conf dosyası
oluşturup içini aşağıdaki gibi dolduruyoruz.,

Dosyayı kaydedip kapatıyoruz. Ve ndb_mgmd komutunu,
daha sonra da, ps -ef | grep [n]db komutunu Çalıştırıyoruz.
ps -ef | grep [n]db komutu ile yonetim nodunun Çalışıp , Çalışmadığını
kontrol ediyoruz.

2-Adım: şimdi ise her iki depolama nodunu bulunduğu makinalarda
(192.168.1.22-192.168.1.23) :

Not:Bu arada her iki makinada da mysql stop durumda olacak.
nano /etc/mysql/my.cnf dosyalarını aÇıp aşağıdaki gibi dolduruyoruz.

[mysqld]
ndbcluster
ndb-connectstring=’host=192.168.1.21’Â Â Â # Yonetim nodunun ip adresi

[mysql_cluster]
ndb-connectstring=’host=192.168.1.21’Â Â Â # Yonetim nodunun ip adresi

Dosyaları kaydedip kapattıkdan sonra ,

mkdir /var/lib/mysql-cluster –> /var/lib/ in altında mysql-cluster
isimli bir dizin oluşturuyoruz.
/usr/bin/ndbd – – initial –> komutunu veriyoruz.Ve mysql server’ı
/etc/init.d/mysql start –>komutu ile start ediyoruz.
ps -ef | grep [n]dbd –> komutu ile ndb nodların Çalışıp Çalışmadığını
kontrol ediyoruz.

3-Adım: Yonetim noduna geçiyoruz.(192.168.1.21)

ndb_mgm komutunu Çalıştırıp yonetim konsolunu
aÇmış oluyoruz.
Sonra show komutu ile yonetim ve depolama nodlarının Çalıştığını
görebiliriz.

şimdi test aÇısından depolama nodlarına gidip, her iki node da da
aynı isme sahip bir database oluşturun. Ve devamında da
serverlardan birinde bir tablo oluşturup, tabloya birkaÇ satır
veri girişi yapın. Gidip diğer server’a baktığınızda aynı tablonun
diğer server da da oluştuğunu göreceksiniz. Tam tersi iÇinde
geÇerlidir.

DİKKAT: Tabloyu create ederken engine=ndbcluster; ifadesini
eklemeyi unutmayın.
create table test (id int) engine=ndbcluster;
Ama ben her tablo create ettiğimde engine olarak bu tablonun
ndbcluster olduğunu belitmek istemiyorum diyorsanız
my.cnf conf dosyasının içine ,
[mysqld]
default-table-type=NDBCLUSTER

ifadesini eklemeniz gerekecektir.

4-Adım: Evet şimdi ise Apı nodumuzu clusterımıza ekleyelim.
(192.168.1.24). Bu makinada da mysql serverın kurulu olduğunu
ve şu an stop durumda olduğunu varsayıyorum.

nano /etc/mysql/my.cnf dosylarını aÇıp aşağıdaki gibi dolduruyoruz.

[mysqld]
ndbcluster
ndb-connectstring=’host=192.168.1.21’Â Â Â # Yonetim nodunun ip adresi

[mysql_cluster]
ndb-connectstring=’host=192.168.1.21’Â Â Â # Yonetim nodunun ip adresi

Kaydedip kapatıyoruz.
/etc/init.d/mysql start –> komutunu vererek mysql start ediyoruz.
Evet böylece Apı nodumuzda cluster yapısına eklenmiş oldu.
Api nodun bulunduğu mysql server’a bağlanıp ndb nodlarda
test iÇin oluşturduğumuz db yi, bu serverda da create edin.
Ve göreceksiniz ki yeni oluşturduğumuz db içinde, test için
diğer tarafta oluşturduğumuz ve kayıt girdiğimiz tablolar
olmuş olacak.
Apı nodunu sadece select işlemleri için kullanmanız tavsiye
edilir.Tabi ki burada yapılan herhangi bir update ,insert
anında diğer dblere yansır.

Yonetim noduna gidip show komutunu tekrardan verirseniz
api nodununda cluster yapısına eklenmiş olduğunu görürsünüz.

Clustring le ilgili püf noktaları anlatan bir makele de kısa süre
sonra yayına girecektir.

Bir sonraki makalelerde görüşmek dileğiyle,

Tayfur BÖLER
Database Administrator