>_Mysql-cluster + haproxy no Centos 5 – 1.9

MYSQL-CLUSTER – HOW-TO

Instalando e configurando o HAProxy – Load Balance

O procedimento abaixo tem que ser executado nos nodes:

mgm-1 – 192.168.50.10
mgm-2 – 192.168.50.11

Passo 1 – Neste primeiro passo você terá que instalar os pacotes necessários para compilação do Haproxy

# yum install gcc pcre* -y

Passo 2 – Agora faça o download do pacote Haproxy-1.4.19, e em seguida instale-o em cada um dos nodes de Mgm’s

# wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.19.tar.gz
# tar -xvf haproxy-1.4.19.tar.gz
# cd cd haproxy-1.4.19
# make TARGET=linux26 ARCH=x86_386 USE_PCRE=1
# make install

Passo 3 – Agora será necessário que crie o diretório /etc/haproxy, e logo em seguida o seu arquivo de configuração

# mkdir -p /etc/haproxy
# cd /etc/haproxy

# vim ha proxy.cfg

defaults
        log global
        mode http
        retries 3
        option redispatch
        maxconn 4096
        contimeout 50000
        clitimeout 50000
        srvtimeout 50000

listen mysql_proxy 192.168.50.20:3306
        mode tcp
        balance roundrobin
        option tcpka
        option httpchk
        option mysql-check user haproxy
        server sql-1 192.168.50.14:3306 weight 1
        server sql-2 192.168.50.15:3306 weight 1

Passo 4 – No arquivo /etc/sysctl.conf insira a seguinte linha abaixo:

# vim /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind = 1

Passo 5 – Agora crie o script de inicialização do haproxy dentro do diretório /etc/init.d

# cd /etc/init.d/

# vim haproxy
#!/bin/bash

RETVAL=0
########## START ##########
start() {
       /usr/local/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg
        if [ $? -eq 0 ]; then
                echo OK
        else
                echo ERRO
        fi
}
stop() {
        killall haproxy
        if [ $? -eq 0 ]; then
                echo OK
        else
                echo ERRO
        fi
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  *)
        echo $"ESCOLHA UM ITEM AO LADO: $0 {start|stop}"
        exit 2
esac
exit $?

Passo 6 – De a permissão de execução para ele, e em seguida copie para o diretório /etc/ha.d/rc.d/

# chmod +x haproxy
# cp /etc/init.d/haproxy /etc/ha.d/rc.d/

Passo 7 – Dentro do arquivo /etc/ha.d/haresources adicione o haproxy para ser “administrado” pelo Heartbeat, exemplo:

# vim /etc/ha.d/haresources
mgm-1 IPaddr::192.168.50.20 haproxy

Passo 8 – Reinicie os nodes do Cluster para validar todas as alterações

Passo 9 – Neste passo, inicie novamente os serviços do Cluster seguindo a ordem de inicialização

1 → mgm-1
2 → mgm-2
3 → ndb-1
4 → ndb-2
5 → sql-1
6 → sql-2

Passo 10 – Configure o Sql’s nodes para permitir que os IP’s dos Mgm’s acessem os bancos de dados, exemplo:

sql-1

[root@sql-1 ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 15
Server version: 5.1.56-ndb-7.1.15-cluster-gpl-log MySQL Cluster Server (GPL)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql> grant all privileges on *.* to root@'192.168.50.10' identified by 'pass';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on *.* to root@'192.168.50.11' identified by 'pass';
Query OK, 0 rows affected (0.00 sec)

mysql>

sql-2

[root@sql-2 ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 15
Server version: 5.1.56-ndb-7.1.15-cluster-gpl-log MySQL Cluster Server (GPL)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql> grant all privileges on *.* to root@'192.168.50.10' identified by 'pass';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on *.* to root@'192.168.50.11' identified by 'pass';
Query OK, 0 rows affected (0.00 sec)

mysql>

Passo 11 – Com o término de todos os passos realizados com sucesso, vá para parte mais bacana da how-to “TESTA-LO”.

Até aqui tudo foi configurado para obtermos Alta Disponibilidade e Balanceamento da Carga, a partir desse momento qualquer tipo de acesso que seja feito no banco de dados terá que ser feito através do IP → 192.168.50.20:3306.

Acessando o Banco de Dados.

Show de Bola!!! 🙂

Passo 12 – Neste passo crie o script “inicia_mgm” que terá como função iniciar os serviços de gerenciamento, durante a inicialização do sistema operacional

OBSERVAÇOES: Este script deve ser criado dentro do diretório /etc/init.d/ com uma chamada para o runlevel em execução

MGM-1

#!/bin/bash
RETVAL=0
########## START ##########
start() {
       ndb_mgmd -f /usr/local/mysq-cluster/config-complite.ini
        if [ $? -eq 0 ]; then
                echo OK
        else
                echo ERRO
        fi
}
stop() {
        ndb_mgm -e "1 stop"
        if [ $? -eq 0 ]; then
                echo OK
        else
                echo ERRO
        fi
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  *)
        echo $"ESCOLHA UM ITEM AO LADO: $0 {start|stop}"
        exit 2
esac
exit $?

MGM-2

#!/bin/bash
RETVAL=0
########## START ##########
start() {
       ndb_mgmd -f /usr/local/mysq-cluster/config-complite.ini
        if [ $? -eq 0 ]; then
                echo OK
        else
                echo ERRO
        fi
}
stop() {
        ndb_mgm -e "2 stop"
        if [ $? -eq 0 ]; then
                echo OK
        else
                echo ERRO
        fi
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  *)
        echo $"ESCOLHA UM ITEM AO LADO: $0 {start|stop}"
        exit 2
esac
exit $?

Passo 13 – Neste último passo, crie também a database ‘test_cluster’, e dentro dessa base crie a tabela ‘srv’ contendo o valor ‘sql-nodes’.

mysql> create database test_cluster;
Query OK, 1 row affected (0.03 sec)

mysql> create table test_cluster.srv (name char(20) not null) ENGINE=NDB;
Query OK, 0 rows affected (0.23 sec)

mysql> insert test_cluster.srv (name)values('sql-nodes');
Query OK, 1 row affected (0.05 sec)

mysql>

SQL-2

mysql> use test_cluster;
Database changed
mysql> select * from srv;
+-----------+
| name      |
+-----------+
| sql-nodes |
+-----------+
1 row in set (0.01 sec)

mysql>

[root@sql-2 ~]# mysql   -e "select * from test_cluster.srv"
+-----------+
| name      |
+-----------+
| sql-nodes |
+-----------+
[root@sql-2 ~]# echo $?
0
[root@sql-2 ~]#

Agora, crie mais um outro script que fará a consulta nessa base de dados. Lembrando que este script terá quer existir em ambos Sql’s nodes dentro do diretório /etc/init.d/, e com uma chamada para o runlevel em exeução

# vim /etc/init.d/test_cluster
#!/bin/bash
MYSQL="/usr/bin/mysql"
control_c () {
        echo -e "nPARANDO O TEST_CLUSTER"
        exit 0
}
trap control_c INT HUP TERM
while true
do
        sleep 5
        $MYSQL -e "select * from test_cluster.srv" > /dev/null 2>&1
        if [ $? -eq 0 ]; then
                echo "NODE `hostname` - OK ESTA CONECTADO NO CLUSTER" > /dev/tty1
        else
                /etc/init.d/mysql stop > /dev/null 2>&1
                echo "NODE `hostname`- ERRO NAO ESTA CONECTADO NO CLUSTER" > /dev/tty1
        fi
done

Feito todos os procedimentos, basta agora você testa-lo em seu ambiente, caso precise de alguma ajuda fico a disposição para ajuda-lo. Espero que tenha sido útil esse how-to e que eu tenha passado de forma clara e simples todas essas configurações.

Fonte da pesquisa para esse how-to:

http://wagnerbianchi.com/blog/
http://haproxy.1wt.eu/
http://linux-ha.org/wiki/Heartbeat
http://code.google.com/p/haproxy-docs/

>_Mysql-cluster + haproxy no Centos 5 – 1.9
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: