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;

terça-feira, 10 de março de 2009

Rsync entre servidores Linux + Crontab

Imagine o ambiente entre dois servidores linux:

Servidor 1 onde roda sua aplicação ou arquivos preciosos:)

Servidor 2 onde você deseja efetuar o back-up.

1º Passo:
Temos que habilitar a relação de confiança ssh entre os dois servidores (Secure SHell).

Fazendo a relação de confiança :













2º Passo:
Devemos criar uma chave criptografada entre os dois servidores, para efetuar a autenticação do ssh sem solicitar a senha.
- execute os seguintes passos:
  • No console do Servidor 1 digite:
root@svn-projudi:~# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
40:2b:17:59:17:26:ae:ee:aa:b7:66:cb:2c:ed:17:a8 root@svn-projudi
The key's randomart image is:
+--[ DSA 1024]----+
| ooo +. |
| ..+ + |
| . + . |
| o o |
| .. S |
| ... |
| o .. |
| Eo=.. |
| .BB=. |
+-----------------+
  • Observe que gerou duas chaves:
root@svn-projudi:~# cd /root/.ssh/
root@svn-projudi:~/.ssh# ls
id_dsa id_dsa.pub
root@svn-projudi:~/.ssh#
  • Agora você vai copiar a chave publica para o Servidor 2 com a seguinte linha:
root@svn-projudi:~/.ssh# scp id_dsa.pub username@servidor2:.ssh/authorized_keys
OBS: se não existir a pasta authorized_keys crie ela, mkdir authorized_keys.
  • Em seguida teremos que logar no Servidor 2 e atribuir algumas permissões para os seguintes arquivos:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
  • Para ver o conteudo do arquivo criptografado digite.
root@svn-projudi:~/.ssh# cat ~/.ssh/id_dsa.pub

Pronto, agora iremos criar o scrip shell para usar o Rsync
Crie o um arquivo com a seguinte sintaxe vim script_rsync.
Adicione o seguinte conteúdo ao arquivo.
#!/bin/sh

######################################################################
#Descreva o que o script vai fazer para documentar...
######################################################################

TREINAMENTO="ip do seu servir origem"
echo "Iniciando copia dos arquivos" > /var/log/copiaTemporal.log
echo "##########Inicio##################"
rsync -Cravzp --progress --partial origem_dos_arquivos_ root@$servidor2:/ >> /var/log/copiaTemporal.log

echo "Finalizando copia dos arquivos" >> /var/log/copiaTemporal.log
echo "############Fim##################"

Pronto agora o seu script esta pronto. Agora vamos agendar a execução do script no servidor 1

Para maiores informações sobre o CRONTAB, digite crontab -man.

Após configurar o crontab, restart o serviço:
[root@projudi-homologacao /]# service crond restart
Pronto agora seu rsync está ativado e funcionando.
Para ter certeza verifique se o log em /var/log/copiaTemporal.log esta sendo gerado.