>_Mysql-cluster + haproxy no Centos 5 – 1.6

MYSQL-CLUSTER – HOW-TO

Armazenamento

Além de manter a alta-disponibilidade dos dados, o Mysql Cluster mantém os dados armazenados em tabelas do tipo NDB em sincronia através da replicação da informação de modo síncrono (está em sincronismo);

Tabelas outrora criadas com o Storage Engine InnoDB ou MyISAM, agora podem ser criadas com o NDB.
OBSERVAÇOES: Este procedimento será sempre executado nos SQL’s Nodes.

Passo 1 – Crie a database cadastro e dentro dela a tabela cad1 no SQL Node ( sql-1)

mysql> create database cadastro;
Query OK, 1 row affected (0.03 sec)
mysql> CREATE TABLE  cadastro.cad1 ( id int not null primary key, name char(80) not null, address char(120) not null ) ENGINE =NDB;
Query OK, 0 rows affected (0.20 sec)

mysql> insert cadastro.cad1(id,name,address) values(1,'Evandro Couto','rua gnulinuxbr 120');
Query OK, 1 row affected (0.06 sec)

mysql> select * from cadastro.cad1;
+----+---------------+--------------------+
| id | name          | address            |
+----+---------------+--------------------+
|  1 | Evandro Couto | rua gnulinuxbr 120 |
+----+---------------+--------------------+
1 row in set (0.00 sec)

mysql>

Passo 2 – Agora verifique se os dados foram criado com sucesso no segundo node do SQL Node (sql-2)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| cadastro           |
| mysql              |
| ndbinfo            |
| test               |
| teste10            |
| teste_1            |
| teste_3            |
| teste_40           |
+--------------------+
9 rows in set (0.00 sec)

mysql> use cadastro;
Database changed
mysql> select * from cad1;
+----+---------------+--------------------+
| id | name          | address            |
+----+---------------+--------------------+
|  1 | Evandro Couto | rua gnulinuxbr 120 |
+----+---------------+--------------------+
1 row in set (0.03 sec)

mysql>

A criação de uma chave primária ou índice único em uma tabela NDB sempre resultará na criação automática e implícita de um índice do tipo HASH;

Uma tabela NDB ainda poderá ser armazenada “in-memory” ou ser persistida totalmente em disco, sobre estruturas lógicas denominadas tabelspaces, que são amarradas a um arquivo de log;

Disk-based tables

Como o próprio nome diz, são tabelas baseadas e persistidas em disco – para isso, tais tabelas são criadas apontando um tablespace e este, aponta um arquivo de log;

O suporte à tabelas em disco foi iniciado com o MySQL Cluster baseado no MySQL Server 5.1 e ainda não suportam tipos variáveis, embora você consiga criar com o tipo VARCHAR;

Tablespaces podem ser criados por um ou mais datafiles e para facilitar operações de rollback em transações, tabelas em disco utilizam arquivos de logs chamados log file groups para armazenamento de área de undo;

Passo 3 – Reinicie um dos nodes e veja se as tabelas ainda permanecem. Faça os teste, porém sempre mantendo um dos nodes de grupo ativo, exemplo:

NDB-1 & NDB-2 – DESLIGUE UM DOS NODES
SQL-1 & SQL-2 – DESLIGUE UM DOS NODES

Em seguida acesse o banco e veja se tudo permanece criado desde o início.

Para criação de uma disk-based Table, tenha em mente que primeiro devemos criar as estruturas sobre as quais tais tabelas vão residir:

Criação do LOGFILE GROUP, com pelo menos um arquivo de UNDO;
Criação de um TABLESPACE, com pelo menos um DATAFILE;

Passo 4 – Neste passo crie o LOGFILE GROUP:
OBSERVAÇÕES: Execute em um dos SQL-NODES

mysql> drop database cadastro;
mysql> create database cadastro;
Query OK, 1 row affected (0.04 sec)

LOGFILE GROUP:

mysql> CREATE LOGFILE GROUP loggroup01  ADD UNDOFILE '/var/lib/mysql-cluster/logfile01.dat'  INITIAL_SIZE = 500M UNDO_BUFFER_SIZE = 10M  ENGINE = NDBCLUSTER;
Query OK, 0 rows affected (24.15 sec)

1. O grupo de arquivos de log foi criado com o nome de loggroup01;
2. Foi adicionado um arquivo de UNDO inicial, outros pode ser adicionados;
3. O arquivo de UNDO tem a extensão .dat e será criado na path indicada;
4. INITIAL_SIZE armazena o tamanho inicial do arquivo de UNDO;
5. Uma área de buffer foi adicionada – UNDO_BUFFER_SIZE -, o que melhora consideravelmente a perfomance na gravação de checkpoints e rollback de transações;
6. A cláusula mandatória ENGINE foi utilizada ao final da criação do LOGFILE GROUP;

Criamos primeiramente o grupo de arquivos de log pois este será mandatória na criação do tablespace, estrutura lógica sobre a qual residirão as tabelas NDB que criaremos em disco;

TABLESPACE:

mysql>  CREATE TABLESPACE tablesp_01 ADD DATAFILE 'tablesp_01.dat' USE LOGFILE GROUP loggroup01 INITIAL_SIZE=500M  EXTENT_SIZE= 5242880 ENGINE=NDBCLUSTER;
Query OK, 0 rows affected (20.12 sec)

Para verificar os arquivos que acabamos de criar, utilizamos as tabelas de metadados do dicionário de dados do MYSQL, o INFORMATION_SCHEMA;

A tabela INFORMATION_SCHEMA.FILES armazena tanto os arquivo de logs quanto os arquivos de dados do tablespace;

mysql> SELECT LOGFILE_GROUP_NAME, FILE_NAME, FILE_TYPE, EXTRA  FROM INFORMATION_SCHEMA.FILES WHERE FILE_NAME = 'tablesp_01.dat';
+--------------------+----------------+-----------+----------------+
| LOGFILE_GROUP_NAME | FILE_NAME      | FILE_TYPE | EXTRA          |
+--------------------+----------------+-----------+----------------+
| loggroup01         | tablesp_01.dat | DATAFILE  | CLUSTER_NODE=2 |
| loggroup01         | tablesp_01.dat | DATAFILE  | CLUSTER_NODE=3 |
+--------------------+----------------+-----------+----------------+
2 rows in set (0.02 sec)

mysql>

Para criarmos novas tabelas sobre um ou mais tablespaces criados, basta adicionar as cláusulas:
1. TABLESPACE ao final do CREATE TABLE – Uma tabela poderá utilizar somente um TABLESPACE;
2. STORAGE DISK, para apontar que esta tabela será persistida em disco;

mysql> CREATE TABLE  cadastro.cad1 ( id int not null primary key, name char(80) not null, address char(120) not null ) TABLESPACE tablesp_01 STORAGE DISK ENGINE = NDBCLUSTER;
Query OK, 0 rows affected (0.27 sec)

Inserindo dados na Tablea cad1.

mysql> insert cadastro.cad1(id,name,address) values(1,'Evandro Couto','rua gnulinuxbr 120');
Query OK, 1 row affected (0.07 sec)

mysql> use cadastro;
Database changed
mysql> select * from cad1;
+----+---------------+--------------------+
| id | name          | address            |
+----+---------------+--------------------+
|  1 | Evandro Couto | rua gnulinuxbr 120 |
+----+---------------+--------------------+
1 row in set (0.02 sec)

mysql>

Passo 5 – Novamente, verifique no outro node de Sql se as informações estão constando como antes

Passo 6 – Essa parte é bem bacana..rs! Neste passo, você terá que “Derrubar forma brusca” um dos nodes de Sql e também um dos nodes de Ndb, e logo em seguida verifique se as informações permanecem contidas nos nodes Vivos

Passo 7 – Reinicie os nodes desligado novamente

Passo 8 – No Ndb node que foi “derrubado”, inicie os serviços do Cluster da seguinte forma abaixo:

[root@centos-3 ~]# ndbd --ndb-nodeid=3
2012-03-07 11:57:53 [ndbd] INFO     -- Angel connected to '192.168.1.100:1186'
2012-03-07 11:57:56 [ndbd] INFO     -- Angel allocated nodeid: 3

Perceba que não estou usando a Flag initial, quando já tenho tabelas criadas dentro do meu Cluster.
OBS: Ao REiniciar o Data Nodes com –initial, a partição sempre será formatada.

Caso seja necessário fazer a conversão de tabelas InnoDB, MyISAM em tabelas Ndb para que estas passem a residir em um tablespace, basta enviar um comando ALTER TABLE:

mysql> ALTER TABLE cadastro.cad1 TABLESPACE tablesp_01 STORAGE DISK ENGINE = NDB;
Query OK, 1 row affected (0.95 sec)
Records: 1  Duplicates: 0  Warnings: 0

Você também pode adicionar novos arquivos de dados a um TABLESPACE existente ou novos arquivos de UNDO a um LOGFILE GROUP existente:

Para verificar quais objetos estão sobre quais tablespaces utilizando o aplicativo ndb_show_tables.

In-Memory Tables

Tableas conhecidas como In-Memory são aquelas que são criadas sem apontar a cláusula STORAGE DISK e nem um TABLESPACE no CREATE TABLE:
Basta apenas criar uma tabela e dizer que ela será controlada pelo Storage Engine NDB;
Lembre-se de equilibrar as configurações para controle de memória em:

1. IndexMemory
2. DataMemory

Alguns parâmetros para configuração dos Storage ou Data Nodes

[ndbd default] para armazenamento de tabelas em memória:
Diskless – checkpoints realizados em memória
MaxNoOfAttributes – número máximo de atrinutos;
MaxNoOfTables – número máximo de tabelas
MaxNoOfConcurrentOperations – número máximo de operações concorrentes
MaxNoOfConcurrentTransactions – número máximo de transações concorrentes
MaxNoOfOrderedIndexes – número máximo de índices ordenados
MaxNoOfUniqueHashIndexes – número máximo de índuices únicos baseados em hash
MaxNoOfIndexes – número máximo de índices

Exemplo:

mysql> create database cursos;
Query OK, 1 row affected (0.08 sec)

mysql> CREATE TABLE  cursos.linux ( id int not null primary key, name_cursos char(80) not null, valor int(10) not null ) ENGINE =NDB;
Query OK, 0 rows affected (0.26 sec)

mysql> insert cursos.linux(id,name_cursos,valor) values(1,'Curso basico de linnux','700');
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> select * from linux;
+----+------------------------+-------+
| id | name_cursos            | valor |
+----+------------------------+-------+
|  1 | Curso basico de linnux |   700 |
+----+------------------------+-------+
2 rows in set (0.01 sec)

Continua na parte 7

>_Mysql-cluster + haproxy no Centos 5 – 1.6
Tagged on:

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

%d blogueiros gostam disto: