quinta-feira, 30 de abril de 2009

Confugurando heartbeat no RHEL 5

Iremos configurar um servidor Ativo/Passivo.

baixar os pacotes em http://download.opensuse.org/repositories/server:/ha-clustering/

OBS: É importante salientar que os ip´s fixos servem apenas de comunicação entre o heartbeat.

Cenário:



Exemplo:
Imagine que seu Servidor Activo com o ip fixo 172.16.1.60 esteja respondendo no dns para http://aplicacao.com.br

Agora iremos configurar o heartbeat para que sua aplicacao responda para o ip virtual 172.16.1.63 do Servidor Standby quando o servidor Activo cair.

Os pacotes são:
heartbeat-2.99.2-8.1.x86_64.rpm
heartbeat-common-2.99.2-8.1.x86_64.rpm
heartbeat-resources-2.99.2-8.1.x86_64.rpm
libheartbeat2-2.99.2-8.1.x86_64.rpm

Devemos levar em consideração algumas dependências que serão necessárias:
para instalar use yum install nome do pacote..

Depois de baixar os pacotes no endereço acima vamos instalar com o seguinte comando:
rpm -ivh heartbeat-*, um por um.

OK agora com os pacotes instalados iremos iniciar as configurações.

De acordo com as instruções fornecidas na documentação do heartbeat em http://www.linux-ha.org/, é necessário criar os arquivo abaixo em /etc/ha.d/.

authkeys
ha.cf
haresources

Mas usaremos os arquivos que vem junto da instalação utilizando o seguinte comando:

cp /usr/share/doc/packages/heartbeat/ha.cf /etc/ha.d/
cp /usr/share/doc/packages/heartbeat/authkeys /etc/ha.d/
cp /usr/share/doc/packages/heartbeat/haresources /etc/ha.d/

Agora iremos configurar o HeartBeat:

Abra o arquivo ha.cf, observe que as seguintes linhas devem estar descomentadas:

debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 5
udpport 694

Se a máquina tiver uma placa de rede somente utilize
bcast eth0 # Linux
Se a máquina tiver duas placas de rede utilize
bcast eth0 eth1 # Linux
Continuando.......

auto_failback on
node nome_do_servidor_na_rede_activo
node nome_do_servidor_na_rede-standby

Abra o arquivo haresources, adicione no final do arquivo:
nome_do_servidor_na_rede_activo IPaddr::172.16.1.63/24/eth0 nome_do_serviço exemplo: httpd ou tomcat5.

É importante saber que se você colocar o nome_do_serviço o heartbeat que vai gerenciar de inicializa-lo. No meu caso eu já deixei os serviços para ativar na inicialização, assim não utilizando o heartbeat para iniciá-los.

Abra o arquivo authkeys e descomente as seguintes linhas:

auth 1
1 crc

Iremos alterar a permissão do arquivo:
chmod 600 authkeys

Agora iremos adicionar no /etc/hosts a identificação do servidor com o ip fixo:

vim /etc/hosts
172.16.1.60 nome_do_servidor_ativo

Agora iremos instalar o heartbeat da mesma forma que instalamos no primeiro servidor e copiar para o Servidor Standby os mesmos arquivos:

authkeys
ha.cf
haresources

Iremos deixar como está as configurações do arquivo.

Apenas de a permissão para o arquivo chmod 600 authkeys.


Agora iremos adicionar o heartbeat na inicialização do cron dos dois servidores.

adicione com o comando

chkconfig --add heartbeat
chkconfig heartbeat on

Verifique se o serviço está ativo e ligado
chkconfig --list heartbeat
heartbeat 0:não 1:não 2:sim 3:sim 4:sim 5:sim 6:não

Pronto agora é hora de startar os serviços nos dois servidores.

service heartbeat start

a seguinte mensagem será exibida:
[root@projudi-backup ha.d]# service heartbeat start
logd is already running
Starting High-Availability services:
2009/05/04_06:00:16 INFO: Resource is stopped
[ OK ]

Pronto serviço ativo.

Veja no Servidor Standby se o hearbeat levantou o ip virtual da maquina.

[root@servidor_standby ~]# ifconfig
eth0 Link encap:Ethernet Endereço de HW 00:50:56:A2:75:00
inet end.: 172.16.1.60 Bcast:172.16.1.255 Masc:255.255.255.0
endereço inet6: fe80::250:56ff:fea2:7500/64 Escopo:Link
UP BROADCASTRUNNING MULTICAST MTU:1500 Métrica:1
RX packets:4117 errors:0 dropped:0 overruns:0 frame:0
TX packets:2751 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:705766 (689.2 KiB) TX bytes:1030616 (1006.4 KiB)
Endereço de E/S:0x1400 Memória:f4820000-f4840000

eth0:0 Link encap:Ethernet Endereço de HW 00:50:56:A2:75:00
inet end.: 172.16.1.63 Bcast:172.16.1.255 Masc:255.255.255.0
UP BROADCASTRUNNING MULTICAST MTU:1500 Métrica:1
Endereço de E/S:0x1400 Memória:f4820000-f4840000

lo Link encap:Loopback Local
inet end.: 127.0.0.1 Masc:255.0.0.0
endereço inet6: ::1/128 Escopo:Máquina
UP LOOPBACKRUNNING MTU:16436 Métrica:1
RX packets:2198 errors:0 dropped:0 overruns:0 frame:0
TX packets:2198 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:4078240 (3.8 MiB) TX bytes:4078240 (3.8 MiB)

Parabéns servidores configurado e funcionando.

Agora é só desligar o servidor activo e ver se o standby assumiu o serviço do mesmo.

e bola pra frente....

Para maiores informações, veja o log de saida habilitado no arquivo ha.cf
tail -f /var/log/ha-log



Bibliografia
http://www.linux-ha.org/
http://under-linux.org/f69822-como-utilizar-o-heartbeat

Qualquer dúvida estou a disposição.

segunda-feira, 27 de abril de 2009

Replicação mysql

Replicação mysql

REPLICAÇÃO ENTRE SERVIDORES MYSQL LINUX REDHAT ENTERPRISE 5
VERSÃO: Server version: 5.0.45-log Source distribution:


Cenário:

















Configurando o Master:
1º passo: logue no servidor que será o master:
2º passo: após logar execute: mysql -u usuario para ir ao prompt:
3º passo: crie o usuario com o seguinte comando.

mysql> GRANT REPLICATION SLAVE ON *.* TO 'usuario'@'%.mydomain.com' IDENTIFIED BY 'senha';

4º passo: agora iremos configurar o my.cnf atribuindo as seguintes configurações:

[mysqld]
log-bin=mysql-bin
server-id=1
binlog-do-db=especifique a tabela que você quer fazer a sincronização

OBS: Se a configuração do seu banco for
InnoDB, para garantir a durabilidade e consistência dos dados use:
adicione as linhas no my.cnf , ficando assim:
[mysqld]
log-bin=mysql-bin
server-id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1
binlog-do-db=test

Configurando o Slave:
1º passo: agora iremos configurar o my.cnf atribuindo as seguintes configurações:

[mysqld]
server-id=2

Travando as tabelas no servidor Master:
1º passo: agora iremos travar as tabelas no servidor Master coma o seguinte comando
2º passo: mysql -u usuário para ir ao prompt:
3ºpasso: OBS lembrando que o banco é InnoDB deve-se executar o comando COMMIT após
executar o comando abaixo:

mysql> FLUSH TABLES WITH READ LOCK;
mysql> COMMIT;

4º passo: restart o servidor mysql do Master

Testanto a ativação no servidor Master
:
1º passo: mysql -u usuário para ir ao prompt:

2ºpasso: Use o comando SHOW MASTER STATUS para ver o binary log corrente que foi ativado no master:

mysql > SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin.003 | 73 | test | manual,mysql |
+---------------+----------+--------------+------------------+

Agora iremos gerar um backup do banco que está no Master e importá-lo no Slave:
1º passo: execute no console o seguinte comando abaixo:

mysqldump --all-databases --lock-all-tables > dump.sql
OU
mysqldump -u usuario nome_do_bando > dump.sql


2º passo: execute no console do servidor Slave seguinte comando abaixo:

mysqldump -u usuario nome_do_banco < dump.sql
3º passo: execute no console do servidor Master o seguinte comando abaixo:

mysql> UNLOCK TABLES;

Efetuando a comunicação do Slave com o Master:

1º passo: mysql -u usuário para ir ao prompt:
CHANGE MASTER TO
MASTER_HOST='ip do servidor master',
MASTER_USER='o usuário criado na configuração do master',
MASTER_PASSWORD='a senha informada para o usuário na configuração do master',
MASTER_LOG_FILE='mysql-bin.003',coloque aqui o nome do file do bin log
OBS: na sessão do manual acima: Testanto a ativação no servidor Master:
mysql >
SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin.003 | 73 | test | manual,mysql |
+---------------+----------+--------------+------------------+
MASTER_LOG_POS=73; coloque aqui a posição do log conforme mostrado acima.

Agora iremos iniciar o mysql slave no servidor Slave:
1º passo: execute no console do servidor Slave o seguinte comando abaixo:
mysql>
START SLAVE;

Pronto, a sua replicação já está funcionando: basta executar o comando abaixo no servidor Slave.
[root@localhost ~]# mysql -u root
mysql> show slave status\G
O retorno será este.
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.16.1.60
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 860
Relay_Log_File: mysqld-relay-bin.000003
Relay_Log_Pos: 997
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 860
Relay_Log_Space: 997
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
1 row in set (0.00 sec)

Observe as linhas em vermelho.

Testando a replicação dos dados:
Insira qualquer registro ou até mesmo crie uma tables na banco de dados sincronizado, no servidor MASTER.
Vá agora no servidor SLAVE e veja se atualizou a tabela criada no servidor master.
Se tiver atualizado BINGO.
Parabéns você acabou de criar a sua replicação do Mysql;