Arquivo mensais:outubro 2008

OpenMoko: Android


Lembra que falei sobre OpenMoko aqui, bom mais uma reviravolta, esta correndo boatos que ele usara Android em vez das interfaces que estavão desenvolvendo, algo bastante interessante já que Android ate a Palm esta pensando em usar.O aparelho sera o da foto acima, o GTA02:

  • 2.8-inch, 640×480 screen
  • Wi-Fi
  • 3 axis accelerometer
  • 400-500 MHz processor
  • 128 MB RAM
  • 256 MB NAND Flash
  • A-GPS

Fonte: gizmodo

Shell Script: acessando MYSQL

Estava dando uma estudada sobre Shell Script e descobri que tem como utilizar ele com MYSQL ou qualquer outro banco de dados. Realmente é uma linguagem poderosa, muitos administradores de servidores Linux utiliza Shell Script para automatizar algumas rotinas dos seu servidores porem a linguagem pode fazer muito mais que isso. Vou mostrar um exemplo mais básico somente para passar o conceito de como é. Primeiro vamos criar a nossa tabela de exemplo:

create database teste_pessoal;
create table animal (id int(10) unsigned not null auto_increment, Nome varchar(80) not null, Tipo varchar(80) not null, primary key (id)) ENGINE=InnoDB;

Colocar alguns dados para listar na tela:

insert into animal (Nome,Tipo) values("Mel","Cao");
insert into animal (Nome,Tipo) values("Pitucha","Cao");

Agora o código em shell script

#!/bin/sh

OQ=$1; # pegando valor de parâmetro

#Controle do for
set `mysql -u root -D teste_pessoal -s -e "select count(*) from animal where Nome='$OQ'" | tail -1`;CONT=$1; # Faz a consulta no mysql e coloca o valor na variavel CONT
for i in $(seq $CONT); do
c=$(expr $i - 1);
set `mysql -u root -D teste_pessoal -s -e "select * from animal where Nome='$OQ' LIMIT $c,$i"`;ID=$1;NOME=$2;TIPO=$3; # Pega o valor do resultado e vai colocando nas variaveis ID, NOME, TIPO
echo "Id: $ID"
echo "Nome: $NOME"
echo "Tipo: $TIPO"
echo "------------"
done

Um otimo tutorial sobre isso pode se encontrar aqui: http://thobias.org/doc/shell_bd.html

Logico que é para programas pequenos sem muita complexidade, se começar a ter um nível de complexidade e controle de erros melhor olhar para python ou perl

Linux: Alta Disponibilidade

Vamos supor que você tem um servidor de arquivo com Linux, ou um servidor Web muito importante para sua empresa que jamais pode ficar fica indisponível, como resolver este problema ?

A resposta disso esta neste tutorial bastante básico de alta disponibilidade entre 2 servidores, vamos usar a distro Ubuntu Server 8.04 e os softwares:

  • heartbeat – responsável pela alta disponibilidade
  • drbd – responsável pela a “sincronização” de dados entre os servidores

Primeiro coisa é a escolha dos hardware para seus servidores, eu aconselho que as 2 maquinas sejam idênticas ate mesmo para não ter perda de desempenho caso a maquina principal pare de funcionar, caso não de para ter as 2 maquinas idênticas uma coisa é importante é obrigatório, que o espaço para os dados sejam de tamanhos idênticos (exemplo: partição, hd, LVM) senão o DRBD não irar funcionar corretamente, falando nisso o que seria o DRBD,como ele funciona ?

Bom o DRBD seria como um raid-1, porem pela a rede do computador, tudo que escreve num computador é automaticamente escrito no outro, porem somente um computador tem acesso aos dados.

 

Vamos supor que para a maquina 1 você tenha dado o nome de “node1″ e para a maquina 2 “node2″. Para instalação é simples, execute nas 2 maquinas:

  • aptitude update
  • aptitude install drbd8-utils

Editar o arquivo /etc/drbd.conf nas 2 maquina:

global {
usage-count yes;
}
common {
protocol C;
}
resource dados {
on node1 {
device /dev/drbd1;
disk /dev/sda3;
address 192.168.0.250:7789; #IP DA MAQUINA
meta-disk internal;
}
on node2 {
device /dev/drbd1;
disk /dev/sda3;
address 192.168.0.251:7789; #IP DA MAQUINA
meta-disk internal;
}
}

 

 

Podem reparar que o sda3 tem o mesmo tamanho e não pode ter nenhum sistema de arquivo neles

Lembrando de mudar os campos “address” para o IP de cada maquina, depois disso vamos executar os seguintes comandos:

  • drbdadm create-md dados
  • /etc/init.d/drbd restart

Execute no node1:

  • drbdadm — –overwrite-data-of-peer primary dados

agora e esperar os nodes syncronizares, para ver como anda: cat /proc/drbd

version: 8.0.11 (api:86/proto:86)
GIT-hash: b3fe2bdfd3b9f7c2f923186883eb9e2a0d3a5b1b build by phil@mescal, 2008-02-12 11:56:43

1: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
ns:2670316 nr:0 dw:0 dr:2678496 al:0 bm:162 lo:1 pe:5 ua:256 ap:0
[========>...........] sync'ed: 46.6% (2998/5606)M
finish: 0:08:31 speed: 5,960 (6,448) K/sec
resync: used:2/31 hits:166982 misses:164 starving:0 dirty:0 changed:164
act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0

Apos terminar e hora de formatar a partição, eu escolhi ext3 mas a escolha fica por conta sua

  • mkfs.ext3 /dev/drbd1

Duvidas sobre os paramentos: www.drbd.org/docs/about/

Agora vamos instalar o heartbeat, mas antes o que seria o heartbeat ?  heartbeat é responsável por verificar se os nodes estao funcionando caso o node principal saia do ar ele levanta os serviços no node secundário sem nenhuma interversão do usuário. Para instalar nos 2 nodes é simples:

  • aptitude install heartbeat-2

Apos disso vamos criar o arquivo de configuração /etc/ha.d/ha.cf com o seguinte conteúdo

debugfile /var/log/ha-debug
bcast eth0 #INTERFACE QUE AS MAQUINAS ESTÃO LIGADAS
keepalive 2
warntime 10
deadtime 10
initdead 15
auto_failback off
respawn hacluster /usr/lib/heartbeat/ipfail
ping 192.168.1.250 192.168.1.251 #IP DAS MAQUINAS
node node1
node node2

Criar também o arquivo /etc/ha.d/authkeys

auth1
1 md5 suafrasesecreta

Criar tambem o arquivo /etc/ha.d/haresources, o mais importante, com o seguinte conteúdo

node1  Ipaddr::192.168.0.10/24/eth0 drbddisk::dados Filesystem::/dev/drbd1::/dados apache2

com este arquivo e bastante interessante e formado da seguinte forma:

<Nome do node Master> <serviços>

serviço são buscado no /etc/ha.d/resource.d/ ou no /etc/init.d/ o arquivo deve ser basicamente neste estilo

#/bin/bash

case "$1" in
start)
# Programa a ser iniciado
;;
stop)
# Comando para ser parado
;;
status)
# Comando para mostrar Status
;;
esac

Estes arquivos tem quer ser IDÊNTICOS nos 2 servidores. Vamos iniciar o heartbeat

  • /etc/init.d/heartbeat start

Duvidas no parâmetros: www.linux-ha.org

Como irar funcionar isso tudo, bastante simples, node1 esta no poder respondendo o serviço no IP 192.168.0.10, mas de repente sua fonte queima é desligava a maquina, em menos de 1 minuto o node2 irar responder pelo o serviço e os usuários nem vão perceber a queda do serviços.

Tenho que comentar umas coisas importante que não falei ao longo do tutorial, a maquina que usei somente tinha uma interface de rede por isso usei eth0 em todas as configurações, mas o mais ideal é você utilizar 2 interfaces de rede para interligar os servidores. Como você pode imagina a carga de sync entre o DRBD é muito grande e assim você evitar gargalos na rede, então você teria que somente mudar o arquivo /etc/ha.d/ha.cf de eth0 para ethX e os IPS para a sua solução.

No arquivo /etc/ha.d/haresources no parâmetro “Ipaddr::192.168.0.10/24/eth0″ você vai colocar o IP e interface que o serviço irar responder e mudar de Ipaddr para Ipaddr2 pois o Ipaddr cria uma alias da interface(eth1:0) é o Ipaddr2 levanta o IP realmente na placa. Qualquer duvidas somente deixar um comentário.