October
31
2006

Encontrei esse documento feito por dois funcionários da Zend. É um dos melhores que já li sobre PHP. Trata desde a maneira correta de se escrever código, controle de versões, testes, etc. Realmente vale a leitura.

1
October
27
2006

PHP Conference Brasil

Posted In: home, palestras by elm

Vai acontecer em SP nos dias 1 e 2 de Dezembro o primeiro PHP Conference Brasil. O mais legal é que eu vou participar como palestrante. Vou minitrar duas palestras, uma sobre Cake e outra sobre Symfony. É muito bom ver seu nome na grade de programação ao lado de grandes nomes como Pablo DallOglio, Diego Eis e outros.

3
October
16
2006

Posted In: home by elm

Meu texto sobre PVFS foi publicado no BR-Linux e no Dicas-L

1
October
11
2006

PVFS

Posted In: docs, home by elm

Introdução

O Parallel Virtual File System é um sistema de arquivos distribuído desenvolvido para prover alta performance e escalabilidade paralela para clusters de PCs linux.
Em geral, o PVFS promete 4 características:

* Um espaço de nomes consistente para todo o cluster
* Acesso transparente para programas e aplicações já existentes, sem ter que recompilá-los
* Distribuição física de dados em múltiplos discos e múltiplos nós
* Alta performance de acesso em modo usuário

Download

Pode-se fazer download do arquivo de instalação no site:

http://www.pvfs.org/pvfs2/download.html

O arquivo de instalação foi copiado para o diretório /usr/src e descompactado:

cp pvfs2-1.5.1.tar.gz /usr/src
cd /usr/src
tar xfvz pvfs2-1.5.1.tar.gz
cd pvfs2-1.5.1

Construindo e instalando os pacotes

O ambiente usado para estes testes foi um laboratório com 4 computadores com o CentOS 4.4, kernel 2.6.9-34.ELsmp. Para instalar é necessário os pacotes de compiladores e dos fontes do kernel, disponíveis em RPM no CD da distribuição.

Os passos padrão para compilar e instalar o PVFS2 são os seguintes:

./configure –with-kernel=/usr/src/kernels/2.6.9-34.EL-smp-i686
make
make install
make kmod
make kmod_install

Para executar os comandos make install e make kmod_install é necessário acesso a conta root.
Para carregar o módulo do kernel:

/sbin/insmod /lib/modules/2.6.9-34.ELsmp/kernel/fs/pvfs2/pvfs2.ko

Estes passos devem ser executados em todas as máquinas que vão compartilhar seu espaço de disco para o PVFS2.

Configurando o ambiente de testes

É importante ter em mente os papéis que cada máquina (ou nó) vai exercer no sistema PVFS2. Existem três papéis que uma máquina pode exercer:

* servidor de metadados: nó que mantém metadados (como permissões e data de criação) para o sistema de arquivos.
* servidor de I/O: nó que realmente armazena uma porção dos dados do PVFS2
* cliente: é um nó que lê e grava arquivos PVFS2

Uma máquina pode exercer um, dois ou os três papéis simultaneamente. Além disto, podem haver vários servidores de metadados, de I/O e clientes.

O ambiente onde foram realizados estes testes é formado de quatro máquinas:

* lrac.unochapeco.edu.br (servidor de metadados e de I/O)
* et-015.unochapeco.edu.br (servidor de I/O e cliente)
* et-016.unochapeco.edu.br (servidor de I/O)
* et-017.unochapeco.edu.br(servidor de I/O)

Configuração do servidor

Neste passo é considerado que a instalação do PVFS2 já foi realizada em todas as quatro máquinas, conforme descrito anteriormente.
Agora será gerado um arquivo de configuração principal e 3 arquivos com as configurações de cada uma das máquinas restantes. É importante lembrar de informar corretamente os nomes dos computadores e que eles possam ser acessados pelos seus nomes. Recomenda-se que sejam criadas entradas no arquivo /etc/hosts de cada computador para facilitar.

Para gerar os arquivos de configuração:

root@lrac:~# /usr/local/bin/pvfs2-genconfig /etc/pvfs2-fs.conf /etc/pvfs2-server.conf

As perguntas abaixo são apresentadas. Os comentários abaixo foram adicionados na criação deste documento para facilitar a compreenção.

**********************************************************************
Welcome to the PVFS2 Configuration Generator:

This interactive script will generate configuration files suitable
for use with a new PVFS2 file system. Please see the PVFS2 quickstart
guide for details.

**********************************************************************
You must first select the network protocol that your file system will use.
The only currently supported options are “tcp” and “gm”.
* Enter protocol type [Default is tcp]:

deixar tcp

Choose a TCP/IP port for the servers to listen on. Note that this
script assumes that all servers will use the same port number.

* Enter port number [Default is 3334]:

usar a porta padrão

Next you must list the hostnames of the machines that will act as
I/O servers. Acceptable syntax is “node1, node2, …” or “node{#-#,#,#}”.

* Enter hostnames [Default is localhost]: lrac, et-015, et-016, et-017

neste passo é necessário indicar as máquinas que irão atuar como servidores de I/O.

Now list the hostnames of the machines that will act as Metadata
servers. This list may or may not overlap with the I/O server list.

* Enter hostnames [Default is localhost]: lrac

indicar a máquina que irá atuar como o servidor de metadados: lrac

Configured a total of 4 servers:
4 of them are I/O servers.
1 of them are Metadata servers.

* Would you like to verify server list (y/n) [Default is n]? y

se digitar a opção y os servidores serão testados. Pode-se colocar n e deixar este passo para mais tarde

****** I/O servers:
tcp://lrac:3334
tcp://et-015:3334
tcp://et-016:3334
tcp://et-017:3334

****** Metadata servers:

tcp://lrac:3334

* Does this look ok (y/n) [Default is y]? y

Confirmar se tudo está ok

Choose a file for each server to write log messages to.

* Enter log file location [Default is /tmp/pvfs2-server.log]:

Escolher um arquivo de log.

Choose a directory for each server to store data in.

* Enter directory name: [Default is /pvfs2-storage-space]:

Diretório onde será armazenado os arquivos pertencentes ao PVFS2. Este diretório será criado automaticamente mais tarde em todas as máquinas

Writing fs config file… Done.
Writing 4 server config file(s)… Done.

Configuration complete!

Agora temos todos os arquivos de configuração criados:

root@cluster1:~# ls /etc/pvfs2*
-rw-r–r– 1 root root 793 Out 10 18:55 /etc/pvfs2-fs.conf
-rw-r–r– 1 root root 91 Out 10 11:21 /etc/pvfs2-server.conf-et-015
-rw-r–r– 1 root root 91 Out 10 11:21 /etc/pvfs2-server.conf-et-016
-rw-r–r– 1 root root 91 Out 10 11:36 /etc/pvfs2-server.conf-et-017
-rw-r–r– 1 root root 94 Out 10 11:21 /etc/pvfs2-server.conf-lrac

Agora os arquivos devem ser copiados para as máquinas. Podemos fazer isso usando o ssh ou outra forma de cópia remota (ou copiando em disquete mesmo e gravando em cada uma das máquinas)

root@lrac:~# scp /etc/pvfs2-server.conf-et-015 root@et-015:/etc/
root@lrac:~# scp /etc/pvfs2-fs.conf root@et-015:/etc/
root@lrac:~# scp /usr/src/pvfs2-1.5.1/examples/pvfs2-server.rc root@et-015:/etc/rc.d/init.d/pvfs2-server

O mesmo deve ser feito para as outras máquinas (et-016 e et-017).
Também pode ser copiado para o servidor original o arquivo de inicialização:

root@lrac:~# cp /usr/src/pvfs2-1.5.1/examples/pvfs2-server.rc /etc/rc.d/init.d/pvfs2-server

Este arquivo será usado para iniciar e parar o servidor do PVFS2.

Iniciando os servidores

Em cada uma das máquinas deve ser executado o comando:

/usr/local/sbin/pvfs2-server /etc/pvfs2-fs.conf /etc/pvfs2-server.conf-(nome_da_maquina) -f

Exemplo:

/usr/local/sbin/pvfs2-server /etc/pvfs2-fs.conf /etc/pvfs2-server.conf-et-015 -f

Desta forma será criado o espaço onde será armazenado os arquivos (/pvfs2-storage- space) e o servidor será inicializado. Este comando é necessário ser executado somente na primeira inicialização. Das próximas vezes pode ser usado o serviço:

/etc/init.d/pvfs2-server start

e para interromper:

/etc/init.d/pvfs2-server stop

Configuração do cliente

Na máquina, ou máquinas, que irá atuar como cliente é preciso adicionar a seguinte linha no arquivo /etc/fstab

tcp://localhost:3334/pvfs2-fs /mnt/pvfs2 pvfs2 default,noauto 0 0

Esta entrada será usada pelo Linux para poder montar e desmontar o sistema de arquivos PVFS2. Além disto é necessário criar um arquivo chamado /etc/pvfs2tab que irá conter a mesma entrada e será usado pelos aplicativos próprios do PVFS2. Os passos abaixo mostram como criar o diretório onde será montado a partição e a criação do arquivo:

[root@et-015 /root]# mkdir /mnt/pvfs2
[root@et-015 /root]# touch /etc/pvfs2tab
[root@et-015 /root]# chmod a+r /etc/pvfs2tab

Agora é preciso adicionar no arquivo criado a mesma entrada que foi adicionada no /etc/fstab.

Testando a instalação

Existe duas maneiras de testar a instalação. A primeira é usar as ferramentas que são fornecidas com o PVFS2: pvfs2-ping, pvfs2-cp, e pvfs2-ls. Estas ferramentas testam, a saúde do sistema de arquivos, permitem copiar arquivos e listam o conteúdo dos diretórios.

bash-2.05b# /usr/local/bin/pvfs2-ping -m /mnt/pvfs2

(1) Parsing tab file…

(2) Initializing system interface…

(3) Initializing each file system found in tab file: /etc/fstab…

PVFS2 servers: tcp://localhost:3334

Storage name: pvfs2-fs

Local mount point: /mnt/pvfs2

/mnt/pvfs2: Ok

(4) Searching for /mnt/pvfs2/ in pvfstab…

PVFS2 servers: tcp://localhost:3334

Storage name: pvfs2-fs

Local mount point: /mnt/pvfs2

meta servers:

tcp://lrac:3334

data servers:

tcp://lrac:3334
tcp://et-015:3334

(5) Verifying that all servers are responding…

meta servers:

tcp://lrac:3334 Ok

data servers:

tcp://lrac:3334 Ok

tcp://et-015:3334 Ok

(6) Verifying that fsid 1224940272 is acceptable to all servers…

Ok; all servers understand fs_id 1224940272

(7) Verifying that root handle is owned by one server…

Root handle: 1048576

Ok; root handle is owned by exactly one server.

=============================================================

The PVFS2 filesystem at /mnt/pvfs2/ appears to be correctly configured.

Para listar:

bash-2.05b# /usr/local/bin/pvfs2-ls /mnt/pvfs2/

bash-2.05b# /usr/local/bin/pvfs2-cp -t /usr/lib/libc.a /mnt/pvfs2/testfile

Wrote 2310808 bytes in 0.264689 seconds. 8.325842 MB/seconds

bash-2.05b# /usr/local/bin/pvfs2-ls /mnt/pvfs2/

testfile

bash-2.05b# /usr/local/bin/pvfs2-ls -alh /mnt/pvfs2/

drwxrwxrwx 1 pcarns users 0 2003-08-14 22:45 .

drwxrwxrwx 1 pcarns users 0 2003-08-14 22:45 .. (faked)

-rw——- 1 root root 2M 2003-08-14 22:47 testfile

Copiando arquivos:

bash-2.05b# /usr/local/bin/pvfs2-cp -t /mnt/pvfs2/testfile /tmp/testfile-out
Wrote 2310808 bytes in 0.180621 seconds. 12.201016 MB/seconds

bash-2.05b# diff /tmp/testfile-out /usr/lib/libc.a

Outra forma de utilizar o PVFS2 é montando o diretório da mesma maneira que faríamos com o NFS ou outro sistema de arquivos.

No cliente, após ter carregado na memória o módulo do kernel como foi explicado anteriormente, pode-se executar os seguintes comandos:

[root@et-015 linux]# /usr/local/sbin/pvfs2-client
[root@et-015 linux]# mount -t pvfs2 tcp://localhost:3334/pvfs2-fs /mnt/pvfs2

Após isso é possível acessar o diretório normalmente, como se fosse um diretório local.

Referências

http://www.ime.usp.br/~carvalho/monografia-sad/

http://www.pvfs.org/pvfs2/pvfs2-quickstart.html

0