Migração de grande quantidade de dados em storage bloco-a-bloco de forma rápida com Linux e DD

fevereiro 12, 2012 Deixe um comentário

Salve, após um certo tempo de hiato, estou de volta para postar coisas interessantes e úteis (no meu ponto de vista) para quem se interessar.

Migração de grandes quantidades de dados pode ser algo cansativo e traumático dependendo das condições e prazos que se tenha para fazê-la. Num senário como este, nem sempre se dispõe de soluções apropriadas para tal tipo de tarefa, então torna-se necessário improvisar de maneira coesa e simples. Passei por uma situação parecida tempos atrás e pensando nisso, peguei parte da documentação que criei para tais procedimentos e preparei esse pequeno e simples artigo, do qual espero que lhe seja útil.

O Cenário

A sua estrutura dispõe de dois storages, um que já está em produção, e outro novo, que irá substituir o atual e você tem apenas parte do final de semana para migrar aproximadamente 4TB de dados de um para o outro.

Equipamentos envolvidos:

2 Storages;
1 Servidor com duas HBA FC a 8gbit/s;
2 Pares de fibra ligando cada HBA do servidor a dos storages a 8gbit/s.

Software:

Linux (o cara!);
DD (o salvador!);
iostat (para monitorar a entrada e saída de dados).

Aprovisionamento

Primeiro deve-se provisionar o novo storage, de acordo com o antigo, mesma quantidade de LUNs e tamanhos, quanto mais identicos eles forem entre si, mais fácil será identificá-los no Linux.

Estratégia

A estratégia a ser utilizada, vai ser apresentar LUN a LUN. Por exemplo, no storage atual, existe a LUN VMW_R5_DADOS, então apresentamos a LUN ao Linux, e verificamos com o comando ‘fdisk -l’. O mesmo irá mostrar o novo dispositivo (que é a LUN do storage atual) e suas partições. Nesse exemplo, o dispositivo será o /dev/hdb. Logo após, repita o mesmo passo no storage de destino, e agora o comando ‘fdisk -l’ irá listar os dois storages, vamos assumir para este artigo que o dispositivo de destino será /dev/hdc.

Plano de ação

Após apresentar as LUNs pro host, podemos iniciar o trabalho:

dd if=/dev/hdb of=/dev/hdc

Observe que a migração começou, mas está indo de forma bastante lenta. Por que? O DD migra dados por padrão em blocos de 512 bytes, para alguns dispositivos comuns, essa velocidade é o bastante, mas como estamos falando de dispositivos de Enterprise Level, com HDs SAS 15K RPM e FC a 8Gbit/s podemos “esticar” um pouco, e colocá-lo para migrar em blocos de 8 a 16k.

dd if=/dev/hdb of=/dev/hdc bs=8k

Após isso, devemos observar a taxa de I/O com o comando ‘iostat’, caso seja satisfatória, podemos deixar como estar, ou ir incrementando até 16k, que é um nível que não causa muito enfileiramento nessa velocidade. No caso, eu consegui copiar cerca de 1TB a cada 1h. O DD simplesmente copia, ele não sabe o que é filesystem ou arquivos, sua cópia é totalmente baixo nível, com acesso direto aos dispositivos.

Atenção: quanto maior o block size, mais memória RAM consumirá do host. Se seu host tem acima de 16GB de RAM, pode ficar despreocupado, caso contrário, é recomendável monitorar para ficar entre o ideal e o responsável.

Vale observar que: o ‘dd’ não faz tarefas de compressão de dados, muito menos checagem de erros de I/O, então tome o cuidado de fazer backup antes e verificar a consistência dos dados após cada migração.

Categorias:Uncategorized

Postfix: balanceando carga de e-mails de saída entre vários links.

outubro 13, 2011 16 comentários

Existem várias razões para se balancear a carga de saída de e-mails. Por exemplo, você pode ser um grande  ESP (Email Service Provider) e  cada Postfix seu fica atrelado à um só link e o mesmo já está “topado”. Ou você quer uma situação que garanta que as mensagens irão sair, mesmo se um dos links caírem. Com o método que irei demonstrar neste artigo, você poderá quantos links de saída quiser.

Para tal, iremos precisar do Postfix compilado com suporte a MySQL. Mas por que MySQL? Porque nele está a solução!

Como isso funciona?

O Postfix permite que você crie vários transports de saída e entrada, mas pode originalmente sair apenas por um transport padrão, e o resto terá que ser mapeado na rasão ‘dominio -> transport’ através da diretiva transport_maps. O que iremos fazer, é criar um banco de dados simples, com uma Stored Function que irá dizer ao Postfix via transport_maps por qual transport a mensagem irá sair, e tal transport estará usando um link especifico.

Coletando as informações necessárias:

Quantos links você tem, por quais você irá querer que as mensagens sejam disparadas? Para este artigo, imaginei a seguinte situação:

Link 1 – IP: 1.1.1.1
Link2 – IP: 1.1.1.2
Link3 – IP: 1.1.1.3

Mãos à obra!

Considerando que você já tem Postfix e MySQL devidamente instalados, iremos configurar o Postfix, primeiramente o arquivo máster.cf para definir os transports de saída. No caso, eu quero usar meus três links disponíveis para enviar mensagens, então, devo criar três transports independentes para tal:

L1      unix    –       –       n       –       –       smtp

  -o smtp_bind_address=1.1.1.1

L2      unix    –       –       n       –       –       smtp

  -o smtp_bind_address=1.1.1.2

L3      unix    –       –       n       –       –       smtp

  -o smtp_bind_address=1.1.1.3

Pronto, criei três transports, são eles L1, L2 e L3.

Agora iremos criar um banco de dados chamado Postfix com duas tabelas:  current e transports.

CREATE DATABASE `postfix`;

CREATE TABLE `current` (
`transportId` int(10) DEFAULT NULL
) ENGINE=MyISAM;

CREATE TABLE `transports` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`transport` varchar(50) NOT NULL DEFAULT ‘0’,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;

Criadas as tabelas, iremos agora criar uma stored function, é ela quem irá dizer ao Postfix por onde a mensagem deve ser disparada, efetuando então, o balanceamento de carga.

CREATE FUNCTION `f_transport`() RETURNS varchar(50) CHARSET latin1
BEGIN
DECLARE current_transport INT(11);
DECLARE count_transport INT(11);
DECLARE result varchar(50);

SELECT * INTO @current_transport FROM current;
SELECT count(*) INTO @count_transport FROM transports;

IF @current_transport < @count_transport THEN
SELECT @current_transport + 1 INTO @current_transport;
ELSE
SET @current_transport = 1;
END IF;

UPDATE current SET transportId = @current_transport;

SELECT transports.transport INTO @result
FROM transports,current
WHERE transports.id=current.transportId
AND transports.id = @current_transport;

RETURN @result;

Feito isso, iremos agora cadastrar no MySQL, os transports criados la no master.cf. O nome do transport deverá ser sempre finalizado com ‘:’.

INSERT INTO transports (transport) VALUES (‘L1:’);
INSERT INTO transports (transport) VALUES (‘L2:’);
INSERT INTO transports (transport) VALUES (‘L3:’);

Uma vêz terminada a configuração do MySQL, voltamos ao Postfix, mais especificamente no arquivo main.cf, onde iremos adicionar a diretiva:

transport_maps=mysql:/etc/postfix/mysql-transports.cf

Logo após, criamos o arquivo mysql-transports.cf em /etc/postfix com o seguinte conteúdo:

hosts=ip_do_mysql
user=usuario_do_mysql
dbname=postfix
query=SELECT f_transport() as transport

Uma vez feito, reinicie o Postfix para que as alterações surtam efeito:

# postfix stop
# postfix start

Pronto, se você tiver seguido este artigo de forma criteriosa, seu Postfix já deverá estar balanceando a carga entre os links. Basta monitorar as suas interfaces de rede. Não se esqueça de conferir os logs pra ver se tudo está indo como o esperado.

Categorias:Uncategorized

Convertendo videos facilmente com o Mencoder.

Feriadão aqui em Fortaleza, pouco dinheiro pra gastar, ou seja, passar mais tempo em casa, resultado ? Filmes e mais filmes.

Baixei alguns filmes e seriados para assistir na minha TV, mas alguns formatos, como RMVB por exemplo, não são suportados pelo firmware da TV. Logo, tive que procurar uma solução para converter esses videos para um formato suportado por ela, por exemplo, MPEG4.

Pesquisando, encontrei o mencoder, após umas lidas nos manuais e pesquisas na internet, encontrei o conjunto de parâmetros necessários para iniciar a conversão.

# mencoder arquivo.rmvb -oac mp3lame -lameopts preset=128 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1200 -ofps 25 -of avi -o arquivo.avi

Depois disso, é só esperar… 😛

No meu caso, agilizei ainda mais, pois eram muitos vídeos para serem convertidos, então, usei um pouco de shell scripting a meu favor:

# ls -1 *.rmvb | while read arquivo ; do mencoder $arquivo -oac mp3lame -lameopts preset=128 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1200 -ofps 25 -of avi -o $arquivo.avi ; done

Então, eu ia abastecendo o pendriver com os videos já convertidos, assistia, voltava no pc e copiava outros videos ja convertidos pro pendriver, enquanto o restante ainda era convertido, simples não?

Fica aí a dica! 😉

Categorias:Uncategorized

Quanto vale um profissional de T.I. certificado?

Certificações nada mais são do que uma prova, ou um conjunto delas que são requisitos para se obter um título. Muita gente pensa que as certificações são a salvação da lavoura e que assim, seus salários vão alavancar. O que não deixa de ser verdade, mas, não é bem assim. O valor de uma certificação, está baseado em varios fatores, entre eles, os que eu julgo como principais:

  • A relevância que o título tem para o mercado;
  • A relevância que o título tem para seu cargo atual;
  • A relevância que o título tem para a empresa em que trabalha.

Enfim, não vá esperando ganhar aquele desejado aumento de 10% de salário por conta de uma certificação LPIC-1, sendo que você trabalha em um ambiente Microsoft. Existem também outros fatores como sua escolaridade, sim, muita gente pensa que as certificações pesam mais do que a escolaridade, o que é irreal: o canudo sempre ira valer mais.

Então, que certificação eu devo obter?

Depende. Mas sempre dê preferência aos títulos que você e a empresa em que trabalha tenham interesse em conjunto, principalmente, se a empresa estiver bancando parte ou 100% de cursos, provas, etc. Não espere aumento imediato de salário, salvo sob raríssimas excessões, isso não irá acontecer, aguarde alguns meses para que a empresa recupere o investimento feito em você, entre 3 e 6 meses, ou mais, caso os custos com cursos e provas tenham sido bancados pela empresa; passado essa época, converse com seu gestor e tente conseguir algum aumento, mas com argumentos claros, nada de “chorar” muito, ok? Lembre-se, certificações são interessantes tanto para você, quanto para a empresa, mas se um dia você sair da empresa, você leva junto o título com você, por isso, cautela.

E se não houver aumento…

Não se sinta desestimulado. Pense positivo: se a empresa lhe bancou cursos e provas de certificação, já significa que você é um profissional que vale a pena investir. Continue fazendo seu trabalho, sugerindo novas soluções, se aprimorando, que um dia, você conquistará o que deseja.

Categorias:Posts Genéricos

Como configurar replicação no MySQL.

junho 24, 2011 6 comentários

Este artigo foi baseado no seguinte ambiente:

Tipo de Host: físico
Quantidade de hosts: 2
Distribuição Linux: Red Hat Enterprise Linux 6.1
Versão do MySQL: 5.1.52 (community)
IP do Host1: 10.1.1.1
IP do Host2: 10.1.1.2

O artigo a seguir, descreve a replicação baseada em ativo / passivo, ou seja, master -> slave. O host principal, que será o master, irá receber todas as atualizações no banco especificado para a replicação, e irá replicar para outro MySQL localizado em outro host, que será o slave. A principal utilidade nisso na rápida recuperação em caso de desastres físicos e também para balanceamento de carga de consulta, entre outras utilidades. Vale lembrar, que este tipo de replicação não é considerado seguro para recuperação de falhas lógicas como por exemplo, inserções ou deleções por engano, porque os dados serão replicados exatamente como são na base master para a slave.

1 – Configurando o Master.

Tenha em mente que o master é o banco que irá receber toda a carga de inserts, updates e deletes, só ele poderá sofrer alterações, enquanto o slave estará em modo read-only (somente leitura). Para este artigo, considere que o banco a ser replicado será o fictício ‘testdb‘.

Primeiramente, teremos de adicionar algumas linhas no arquivo /etc/my.cnf :

log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=testdb
server-id=1

Uma vez feito, iremos reiniciar o SGDB para aplicar as novas configurações:

# /etc/init.d/mysqld restart

Considerando que você já criou um usuário para a replicação, iremos chamá-lo de slave_user, e iremos também aplicar o privilégio necessário para usá-lo durante a replicação. Para tal, executamos o SQL:

GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'alguma_senha';
FLUSH PRIVILEGES;

Feito, o master encontra-se configurado.

2 – Preparando o ambiente para a replicação e configurando o Slave.

Agora que temos um master, necessitamos de mais alguns passos para que possamos replicá-lo em outro host.

Primeiro, precisamos fazer um dump do banco que iremos replicar, mas com a devida precaução para que o mesmo não seja alterado antes de o master e o slave  estejam devidamente conectados e sincronizados. Esse trabalho é manual e pode tomar algum tempo dependendo do tamanho da base de dados bem como de sua infraestrutura. Para tal, precisamos executar o comando SQL para “travar” todas as tabelas do master:

USE testdb;
FLUSH TABLES WITH READ LOCK;

Uma vez  feito isso, devemos, em linha de comando, executar o binário mysqldump para jogar toda a base de dados em um arquivo de texto plano, para que assim possamos transportá-lo para o outro host que será o slave. Note que durante todo este processo, as tabelas do banco ‘testdb‘ estarão travadas. O exemplo abaixo considera que o usuário do master é  root e a senha é 123456. Execute no shell do Linux o seguinte comando:

# mysqldump -u root -p123456 –database testdb > testdb.sql

Uma vez que temos o banco inteiramente “dumpado” em um arquivo, agora você deve enviar da forma que mais lhe for conveniente para o outro host,  que será o slave.

Agora, devidamente conectado ao slave. Editaremos o arquivo /etc/my.cnf do mesmo, é incluiremos algumas linhas:

server-id=2
replicate-do-db=testdb

Então, devemos criar o banco para receber nosso dump que foi transferido do servidor master, para isso executaremos o comando SQL e criaremos o banco testdb no slave:

CREATE DATABASE testdb;

Deveremos então importar todos os dados do master, neste que será o slave, e logo após iremos reiniciar o SGDB slave. Para tal, execute na shell do Linux no host do slave o comando:

# mysql -uroot -p123456 testdb < testdb.sql
# /etc/init.d/mysqld restart

Após reiniciá-lo, iremos ativar a replicação, para tal devemos coletar algumas informações ainda o master como arquivo de log e posição do log. Para tal, execute o comando SQL no master:

SHOW MASTER STATUS;

Este comando deverá mostrar uma saída parecida com essa:

+---------------+----------+--------------+------------------+
| File          | Position | Binlog_do_db | Binlog_ignore_db |
+---------------+----------+--------------+------------------+
| mysql-bin.006 | 134      | testdb       |                  |
+---------------+----------+--------------+------------------+
1 row in set (0.00 sec)

Isso significa que o nome do arquivo de log para esta replicação é mysql-bin.006 e encontra-se na posição 134. Agora iremos executar no slave o seguinte comando SQL:

USE testdb;
CHANGE MASTER TO MASTER_HOST=10.1.1.1', MASTER_USER='slave_user', MASTER_PASSWORD='alguma_senha', MASTER_LOG_FILE='mysql-bin.006', MASTER_LOG_POS=134;
SLAVE START;

Caso encontre algum erro, confira se o suporte a networking está habilitado no master já que a replicação é feita através de TCP/IP e não de UNIX Sockets. Caso esteja habilitado e você continuar recebendo mensagens de erro ao executar tal comando, favor repetir os passos e / ou consultar este artigo novamente para saber se houve algum erro durante a implementação.

Para conferir que está tudo OK, você deve executar o comando:

SHOW SLAVE STATUS\G

Esse comando irá lhe reportar o status do cluster de replicação. Caso esteja tudo OK, é hora de “destravar” as tabelas no master, executando no master o comando SQL:

UNLOCK TABLES;

Pronto, a replicação do banco testdb está feita. Para certificar-se se está funcionando de maneira correta, faça alterações no master e veja se as mesmas são replicadas no slave.

3 – Finalizando o artigo.

Espero que este artigo tenha lhe sido útil. Caso encontre erros aqui e/ou deseja sugerir mudanças ou adicionar mais informações ao artigo, escreva nos comentários e as devidas alterações serão feitas dando os devidos créditos aos autores.

Unity 2D: Instalando no novo Ubuntu 11.04!

Hoje eu atualizei meu desktop para o Ubuntu 11.04, e como minha placa de vídeo não possui aceleração 3D, o Ubuntu iniciou no modo “classic”, ou seja, abriu com o Gnome ao invés do Unity. Para contornar isso, eu fiz a instalação do Unity 2D, irmão do Unity “original” sendo que sem os requerimentos de placa de vídeo aceleradora.

Para instalar é bem simples, execute os comandos abaixo:

sudo add-apt-repository ppa:unity-2d-team/unity-2d-daily sudo apt-get update sudo apt-get install unity-2d-default-settings  

Agora basta efetuar log on novamente em sua conta selecionando a sessão Unity 2D.

Após 8 anos – Brasil em transição.

É impossível não observar que muita coisa mudou no Brasil de 8 anos para cá, embora para um grupo restrito te pessoas, torna-se mais conveniente negar tais mudanças, ou apenas criticá-las. O país por si só, era uma potência adormecida, mal cuidada, entregue às ordens e pitáques internacionais, principalmente do FMI: se o Brasil não baixasse tal pacote econômico, o empréstimo não seria autorizado, que bom né? Cadê a soberania nisso? Tem gente que sente saudades, sabia?

As classes D e E nunca foram tão importantes para o mercado brasileiro, hoje em dia, são classes que tem poder de consumo, fazem parte do leque de clientes das grandes varejistas nacionais, tem carro e casa própria. É aí onde mora a insatisfação de uma elite (outros nem tão elite assim) minoritária mas persistente e com um grande poder de comunicação. Quando as classes mais baixas tem acesso ao consumo, elas tem acesso a educação e a informação, isso incomoda bastante a tal elite, porque as pessoas estão cada vez mais informadas, e foi esse, um dos grandes marcos do governo passado, e que provavelmente se estenderá com o governo presente. Esta pequena elite, formada por grandes concentradores de renda, principalmente pelas grandes empresas de comunicação, acabam perdendo o poder persuasivo sobre essa massa. O que antes era dito e a grande massa aceitava, hoje em dia, é contestado. Essa elite, não gosta da idéia de ter de viver e compartilhar o mesmo espaço com pessoas que já foram miseráveis, eles estão vendo seus “impérios” serem ameaçados, porque a massa de manobra, acaba cada vez mais. Com mais pessoas com acesso a informação e a mídias sociais, o poder de convencimento dessa mídia, torna-se facilmente contestado e coisas “cabulosas” que ficavam “por isso mesmo”, são esculachadas para quem quiser ver nas grandes redes nacionais. Se você acorda com a Miria Leitão e dorme com o Willian Waack, você se sentirá no Haiti, e não no Brasil, sim, eles fazem parte desta “elite”. Quando eu falo “elite”, entre aspas, é porque, nem todos são ricos, alguns são de classe D e E e não admitem o que está acontecendo, é o famoso “pobre metido a besta”. Com um país cheio de intelectualoides vivendo em suas mansões, e vendo seus bairros nobres, cada vez mais infestados de pessoas que um dia foram POBRES, eles vão ficando doentes.  Quem chama Bolsa Familia de Bolsa Vagabundagem ou afins, deveria passar uns meses dependendo dela, ou melhor ainda, nas mesmas condições de quem as dependem, mas sem o beneficio. Que os grandes fazendeiros, cheios de terras improdutivas, passassem alguns dias vagando por aí, e procurando uma terra para produzir seu próprio sustento e ser recebido a bala por capangas.

Nunca antes este país fora tão reconhecido e respeitado mundialmente, nunca antes tivemos um presidente tão respeitado e requisitado, tem gente que critica o Lula por cobrar 100.000 por palestra e eu digo: se puder, Lula, cobre mais. Conhecimento, NÃO TEM PREÇO. “Críticos” estes, que ainda ganham dinheiro as custas dos outros, enquanto nosso ex-presidente, está ganhando encima de um produto que ele absorveu e cultivou, a SABEDORIA.

Recordar não tem preço.

FHC ouvindo críticas severas de um ex-presidente norte americano:

Exemplo da “elite” que contesta o Brasil como está:

Creio não precisar comentar mais nada. Os vídeos falam por si só. É isso.

Categorias:Posts Genéricos