Sumário
1. Como Instalar e Testar o ChironFS
a) Obtendo e Instalando o ChironFS
a) Servidores de Arquivo e Web
iii) Armazenamento Local e em Rede
6. Considerações acerca de Hash, descritores de arquivo e ulimit
7. Suporte
Este software é licenciado sob os termos da GPLv3.
O CÓDIGO COBERTO É PROVIDO SOB ESTA LICENÇA NA BASE "COMO ESTÁ", SEM QUALQUER GARANTIA DE QUALQUER TIPO, SEJA EXPRESSA OU IMPLÍCITA, INCLUINDO, SEM LIMITAÇÃO, GARANTIAS DE QUE O CÓDIGO COBERTO ESTEJA LIVRE DE DEFEITOS, COMERCIÁVEL, ADEQUADO PARA ALGUM PROPÓSITO PARTICULAR OU NÃO-INFRINGENTE. O RISCO INTEIRO, BEM COMO A QUALIDADE E A PERFORMANCE DO CÓDIGO COBERTO É SUA RESPONSABILIDADE. NO CASO DE QUALQUER CÓDIGO COBERTO SE VERIFIQUE DEFEITUOSO EM QUALQUER FORMA, VOCÊ (E NÃO O DESENVOLVEDOR INICIAL OU QUALQUER CONTRIBUINTE) ASSUME O CUSTO DE QUALQUER SERVIÇO NECESSÁRIO, REPARAÇÃO OU CORREÇÃO. ESTA NOTA DE AVISO CONSTITUI UMA PARTE ESSENCIAL DESTA LICENÇA. NENHUM USO DE QUALQUER CÓDIGO POR ELA COBERTO SERÁ AUTORIZADO, EXCETO SOB OS TERMOS DESTA NOTA. NA EVENTUALIDADE DE SUA LEGISLAÇÃO LOCAL DETERMINAR QUE ESTE AVISO OU A LICENÇA SEJA(M) PARCIAL OU TOTALMENT INAPLICÁVEIS, ENTÃO VOCÊ NÃO ESTÁ AUTORIZADO A USAR ESTE SOFTWARE E INSISTIR EM FAZÊ-LO É ILEGAL!
Use por sua conta e risco!
Você pode fazer o download do ChironFS do Google Code. Há algumas opções aqui:
Descompacte onde você quiser e você terá um diretório chamado chironfs-<versão_atual>.
Basta entrar no diretório e compilá-lo com os comandos:
cd /path/to/source/chironfs-<versão_atual>
./configure [qualquer opção do configure que você quiser]
make
make install
Para o format fonte RPM, apenas digite:
rpmbuild -ba chironfs-<versão_atual>.src.rpm
rpm -i chironfs-<versão_atual>-<sua_arquitetura>.rpm
Para os binários no formato RPM, apenas digite:
rpm -i chironfs-<versão_atual>-<arquitetura>.rpm
Para os binários no formato DEB format, apenas digite:
dpkg -i chironfs_<versão_atual>_<arquitetura>.deb
Crie 3 diretórios, um para cada sistema de arquivos das réplicas e um para o sistema de arquivos virtual e faça o mount com os comandos;
mkdir /virtual /real1 /real2
chironfs /real1=/real2 /virtual
Confira que eles estão corretamente montados com o comando:
df
Você deverá ver uma linha parecida com esta:
/real1=/real2 138456396 130613500 809640 100% /virtual
Tente criar/modificar/deletar alguns arquivos sob /virtual
e confira os reflexos em /real1 e /real2.
Neste ponto você deve estar convencido de que já tem tudo
para iniciar a replicação de seus arquivos. Então, desmonte-o
com o comando:
fusermount -u /virtual
No teste acima, nós apenas fizemos o uso mais simples possível
do ChironFS. Mas, nós não usamos 2 opções que, apesar de OPCIONAIS,
eu creio que, num ambiente de produção, eles são, na verdade, essenciais.
Primeiramente, num abiente corporativo, nós queremos compartilhar
o acesso para muitos usuários. Mas, o FUSE foi implementado com os
defaults para usuário individual e, assim, apenas o usuário que
montou o sistema virtual tem a visibilidade, os outros apenas vêem um
ponto de montagem vazio. Então, para permitir o acesso a outros, nós
TEMOS que usar a opção allow_other do FUSE.
Segundo, nós queremos ser avisados se alguma réplica falhar. O
sistema irá continuar rodando. Mas, nós não queremos descobrir as
falhas quando a última réplica falhar e o sistema parar. Nós queremos
colocar em operação a réplica falha tão rápido quanto possível! Então
é necessário ativar os logs!
Assim, o exemplo acima ficará melhor se mudarmos o comando de montagem se nós digitarmos:
chironfs --fuseoptions allow_other --log /var/log/chironfs.log /real1=/real2 /virtual
Se você quiser mais réplicas, 3 por exemplo, digite:
chironfs --fuseoptions allow_other --log /var/log/chironfs.log /real1=/real2=/real3 /virtual
Agora suponha, neste exemplo, que /real2 seja um sistema de arquivos que você sabe que é bem mais lento que /real1 e /real3. Quando o ChironFS tem que escrever dados, ele é obrigado a escrever em todas as réplicas. Mas, quando ele tem que fazer uma leitura, ele escolhe apenas uma para ler. Então, nós não queremos que o ChironFS dê chances iguais de leitura para /real2. Como o ChironFS usa um algoritmo round robin, se nós não dissermos a ele que /real2 é lento, ele vai ler de /real2 uma vez a cada três leituras. Então, para evitar isto, dê uma prioridade baixa para /real2 e o ChironFS vai ler dele apenas se /real1 E /real3 falharem. Para fazer isto, digite um sinal de dois pontos antes do path de /real2:
chironfs --fuseoptions allow_other --log /var/log/chironfs.log /real1=:/real2=/real3 /virtual
Então, para montar automaticamente na hora do boot, simplesmente acrescente as linhas abaixo ao seu arquivo /etc/fstab. A primeira coluna tem que iniciar com "chironfs#" seguido, sem espaços, da lista de réplicas separado por sinais de igual. A segunda coluna é o ponto de montagem. A terceira coluna tem que ser "fuse". A quarta coluna são as opções do fuse e do ChironFS separadas por vírgulas. As duas últimas colunas são as opções fstab and operam conforme você encontra na documentação da fstab.
chironfs#/real1=/real2 /virtual fuse allow_other,log=/var/log/chironfs.log 0 0
Então vamos ver alguns exemplos reais:
Neste exemplo nós vamos ver 3 soluções diferentes para replicação de dados numa LAN com 2 servidores, tipicamente um servidor de arquivos e um servidor web.
Nesta solução, nós vamos precisar de mais 2 servidores, eles serão os "servidores de servidores", compartilhando seus sistemas de arquivo usando qualquer protocolo como NFS, SSHFS, etc. Para fins deste exemplo, nós vamos usar NFS. Os "servidores de servidores" se chamarão nfs1 e nfs2 e vão exportar o diretório /data. Os servidores de arquivo e web se chamarão fileserver e webserver, respectivamente e serão os "servidores de usuário".
Faça o ponto de montagem local para todos os sistemas de arquivo real e virtual em cada um dos "servidores de usuário":
mkdir /real1 /real2 /virtual
Atualiza suas fstabs acrescentando as seguintes 3 lines:
nfs1:/data /real1 nfs auto 0 0
nfs2:/data /real2 nfs auto 0 0
chironfs#/real1=/real2 /virtual fuse allow_other,log=/var/log/chironfs.log 0 0
Agora você pode configurar os seus "servidores de usuário". Siga as instruções específicas dos serviços que você quer configurar., procurando fazer que o fileserver exporte o diretório /virtual para seus usuários para seus usuários e colocando as árvores dos documentos do webserver sobre o diretório /virtual.
Para evitar ter um ponto de falha, você deve providenciar backup de hardware de rede, tais como 2 placas de rede para cada servidor, conectado e bridges redundantes.
Finalmente, configure o heartbeat no servidor de usuários para que qualquer falha em um deles seja automaticamente substituído pelo outro servidor.
Nesta solução, nós vamos fazer os servidores de usuário serem, também, servidores de servidores, compartilhando seus sistemas de arquivo usando qualquer protocolo como NFS, SSHFS, etc. Para fins de exemplo, nós vamos usar NFS de novo. Os servidores de arquivo e web terão seus nomes configurados para fileserver e webserver, recpectivamente.
Faça o ponto de montagem local para os sistemas de arquivo virtual e real em cada um dos servidores:
mkdir /real1 /real2 /virtual
Atualize a fstab no fileserver acrescentando estas 2 linhas:
webserver:/real1 /real1 nfs auto 0 0
chironfs#/real2=:/real1 /virtual fuse allow_other,log=/var/log/chironfs.log 0 0
Atualize a fstab no webserver acrescentando estas 2 linhas:
fileserver:/real2 /real2 nfs auto 0 0
chironfs#/real1=:/real2 /virtual fuse allow_other,log=/var/log/chironfs.log 0 0
Agora você pode configurar os serviços de seus servidores de usuário. Siga as instruções específicas dos serviços que você quer configurar, buscando exportar o diretório /virtual para seus usuários e colocando as árvores de documentos de seu webserver abaixo do diretório /virtual .
Para evitar ter um ponto de falha, você deve providenciar backup de hardware de rede, tais como 2 placas de rede para cada servidor, conectado e bridges redundantes.
Finalmente, configure o heartbeat no servidor de usuários para que qualquer falha em um deles seja automaticamente substituído pelo outro servidor.
Você pode combinar as duas soluções abaixo numa terceira, tendo armazenamento local e em rede.
Faça o ponto de montagem local para
os sistemas de arquivo virtual e real em cada um dos servidores:
mkdir /real1 /real2 /real3 /virtual Atualize as fstab's acrescentando
estas 3 linhas: nfs1:/data /real1 nfs auto 0 0 nfs2:/data /real2 nfs auto 0 0 chironfs#/real3=:/real2=:/real1 /virtual fuse
allow_other,log=/var/log/chironfs.log 0 0 Agora você pode configurar os serviços de seus servidores de usuário.
Siga as instruções específicas dos serviços que você quer configurar,
buscando exportar o diretório /virtual para seus usuários e colocando
as árvores de documentos de seu webserver abaixo do diretório /virtual .
Para evitar ter um ponto de falha, você
deve providenciar backup de hardware de rede, tais como 2 placas de
rede para cada servidor, conectado e bridges redundantes. Finalmente, configure o heartbeat no servidor
de usuários para que qualquer falha em um deles seja automaticamente
substituído pelo outro servidor.
Se você tem um desktop Linux, FreeBSD ou NetBSD, você pode querer ter
um backup de seus arquivos locais em algum servidor de rede. Esta
solução se aplica para fazer backups instantâneos para a rede.
MAS CUIDADO! ISTO NÃO SUBSTITUI UMA SOLUÇÃO REAL DE BACKUP PORQUE
QUALQUER MUDANÇA FEITA EM SEUS ARQUIVOS (ESCRITAS E DELEÇÕES) VAI SE
REFLETIR NA RÉPLICA EM REDE. ASSIM, VOCÊ AINDA TEM QUE FAZER SEUS BACKUPS
NORMAIS! ESTA SOLUÇÃO SERVE APENAS PARA PROVER UMA MANEIRA DE NÃO PERDER
SEUS DADOS RECENTES QUE NÃO ESTEJAM NO SEU BACKUP POR ESTE AINDA NÃO TER
SIDO FEITO NO MOMENTO DA FALHA! Faça o ponto de montagem local para
os sistemas de arquivo virtual e real em cada um dos servidores:
mkdir /real1 /real2 /virtual Atualize a fstab no fileserver acrescentando
estas 2 linhas: nfs1:/data /real1 nfs auto 0 0 chironfs#:/real1=/real2 /virtual fuse
allow_other,log=/var/log/chironfs.log 0 0 Se o software que você quer usar com o ChironFS tem
instruções específicas sobre aumento dos limites de arquivos abertos,
ou se você já sabe que vai ter uma grande quantidade de arquivos abertos
simultaneamente, você TEM que ler Capítulo 6. Considerações
acerca de Hash, descritores de arquivo e ulimit Toda vez que uma réplica falha, o ChironFS
tenta manter seus sistemas rodando. Se a falha ocorrer durante uma
operação de leitura, o ChironFS tenta ler de alguma outra réplica e,
se conseguir, retorna os dados para o chamador sem gerar erro.
Neste caso, o ChironFS loga o evento (se você montou com a opção
recomendada --log). Se a falha ocorrer durante uma operação de escrita,
o ChironFS continua tentando escrever nas outras réplicas. Se ao menos
uma das réplicas escrever com sucesso, o ChironFS retorna ao chamador
sem gerar erro. Mas, desta vez, além de logar o evento, ele desabilita
as réplicas que tiverem falhado. Isto significa que não haverá mais
leituras ou escritas de/para as réplicas que falharam.
Neste ponto, você deve estabelecer sua política
de monitoramento para ser reportado do evento. Voce pode usar qualquer
software, como o logwatch, para este fim. A partir da versão 1.1, o ChironFS
oferece outro meio de controlar a saúde do seu sistema de arquivos. Agora
você tem a opção de montar um sistema de arquivos semelhante ao /proc para
controlar o ChironFS, usando a opção de linha de comando --ctl <PATH>
(ou -c <PATH>). O sistema de arquivos de controle é composto de um
diretório para cada réplica. Seus nomes são o pathname completo da réplica
com as barras ("/") mudadas para caracteres de sublinha. Cada um deles
contém dois arquivos: o primeiro é chamado "status" e contém um número
"0" nas réplicas que estiverem em bom estado ou um número "2" se a réplica
estiver desabilitada e os dados inconsistentes. Basta gravar "0" ou "2"
neste arquivo para habilitar ou desabilitar a réplica. O segundo arquivo,
chamado "check_chironfs.sh", é um script shell para ser rodado como um
plugin do nagios. Se você decidir usá-lo, não o copie para outro path,
pois seu conteúdo muda dinamicamente e não vai funcionar em outro path
Assim, suponha que sua fstab seja algo parecido com: nfs1:/data /real1 nfs auto 0 0 chironfs#:/real1=/real2 /virtual fuse
allow_other,log=/var/log/chironfs.log,ctl=/var/run/chironctl 0 0 Se você desejar monitorar suas réplicas
com o nagios, basta informar o nagios para rodar os scripts localizados em
"/var/run/chironctl/_real1/check_chironfs.sh" e
"/var/run/chironctl/_real2/check_chironfs.sh". Você não pode mudar a propriedade nem os bits
de permissão dos arquivos/diretórios neste sistema de arquivos.
Para configurar quem pode acessá-lo, mude a propriedade do ponto de
montagem ANTES de montá-lo. O ChironFS vai utilizar esta propriedade
para todos os arquivos e diretórios abaixo dele.
Enfim, depois de detectar a falha, corrija a
sua causa no servidor de réplica falhado. VOCÊ DEVE PROVER POR SUA CONTA
O RESTABELECIMENTO DA CONSISTÊNCIA DOS DADOS NO SERVIDOR DE RÉPLICA QUE
FALHOU. EU SUGIRO O USO DO RSYNC PARA ATUALIZAR OS DADOS. ESTE PASSO
DEVE SER EFETUADO ANTES DE COLOCAR A RÉPLICA EM ESTADO HABILITADO DE NOVO,
CASO CONTRÁRIO, VOCÊ IRÁ CORROMPER SEUS DADOS NAS DEMAIS RÉPLICAS.
Para restabelecer o uso da réplica após o procedimento de recuperação,
supondo que sua fstab seja a mesma acima e a réplica que falhou (e foi
desabilitada) seja /real2, use o sistema de arquivos de control para habilitá-la
conforme abaixo: echo 0 > /var/run/chironctl/_real2/status As funções de hash correntemente sendo usadas são as funções de inteiros de
32 bits de Robert Jenkins tal como encontradas neste
documento de Twang, apenas adaptado para linguagem C.
As funções de mistura de 64 bits também foram pegas dali. Em versões anteriores do ChironFS, o tamanho da tabela hash era igual ao
parametro file-max do kernel. Agora foi diminuído para minimizar o uso de
memória. Isto foi feito sem sacrificar a performance em vista da grande
distribuição obtida com estas funções hash. O parâmetro file-max do kernel é global para todo o sistema operacional
e se todo o sistema de arquivos for ChironFSzado e usado um mínimo de duas
réplicas, nós precisaríamos apenas 33% da velha tabela.
Uma vez que as novas funções de hash têm uma distribuição muito superior e são
muito boas até o uso de 80% do espaço dispoonível, eu decidi usar uma alocação
proporcional ao file-max, usando a maior potência de 2 que seja inferior a 50%
de file-max. A estatística mostrou uma baixa taxa de colisão para
para o uso de 50% da tabela (em torno de 18% de file-max na minha máquina, o que
significa que, usando duas réplicas, eu estava usando 54% dos descritores de
arquivo do sistema.
Eu fiz um programa de teste de hash que simula alocações de descritores
de arquivo e conta, para cada slot da tabela hash, o total de colisões,
diretamente dos cálculos hash ou indiretamente quando, em função de uma
colisão prévia, o sistem tentou alocar o próximo endereço e descobriu que
este também já estava alocado.
Cada pixel do gráfico abaixo representa um endereço. Os brancos são slots
livres, os verdes são alocados mas sem colisão. Os vermelhos são endereços
com apenas uma colisão e os pretos são os que têm mais de uma colisão.
Eu teste com três tabelas: pequena, média e grande. A pequena é a que o
ChironFS está usando e foi dimensionada para a maior potência de 2 que
seja menor que 50% de file-max. A média foi dimensionada para o dobro
da pequena. A grande é 4 vezes a média. Os testes foram feitos alocando
50% da pequena, 25% da média e 6,25% da grande.
No meu sistema, o file-max é 365718. Então, a tabela pequena tem 128K
descritores de arquivo, a média tem 256K e a grande 1M. As alocações
totalizaram 64K descritores de arquivo.
Assim, há uma taxa de colisão aceitável num grande número de
arquivos abertos concorrentemente (64k ChironFS descritores de
arquivo, usando um mínimo de 2 réplicas, significa 192k (53%) do
limite de 360k do file-max).
Mas, a discussão não termina aqui. Após esta explicação acerca do
gerenciamento de descritores de arquivo e empurrando eles para os
limites, nós devemos considerar como o sistem trata estas coisas.
O ponto é que o parâmetro file-max do kernel é global para todo o
sistema operacional. Mas o sistema limita
a quantidade de arquivos abertos por processo também. Qunanso
você monta o ChironFS, ele vai tentar aumentar os paramêtros do sistema
para os valores necessários. Mas, ele vai ter sucesso somente se for
executado como root! Se você rodar o ChironFS como usuário sem privilégios
você vai ter que aumentar o máximo de arquivos abertos por processo. Como
root, edite o arquivo /etc/security/limits.conf se certificando que
ele tenha linhas como as abaixo, por exemplo. Ajuste o máximo de arquivos
abertos para o usuário "www":
www soft nofile 65536
Note que você tem que se relogar para que as mudanças sejam válidas. Se
você estivar em um terminal X, você tem que fechar sua sessão X, logar
de novo e então abrir seu terminal X.
Atenção! Verifique a documentação do software que você
pretende rodar usando o ChironFS. Por exemplo, se a documentação do seu
software diz que você precisa de 3000 arquivos abertos e diz a você para
mudar a configuração em /etc/security/limits.conf e o usuário que vai montar
o ChironFS é um usuário sem privilégios (não root), você tem que configurar os
limites deste usuário também, usando a seguinte fórmula: 2 * NF * NR + 6 (2 vezes
a quantidade de arquivos vezes a quantidade de réplicas mais 6).
Por exemplo, para poder abrir 30000 arquivos replicados sobre 3 réplicas,
você tem que configurar seu /etc/security/limits.conf para 180006 (2 * 30000 * 3 + 6).
Então seu /etc/security/limits.conf, para o usuário "someuser", por exemplo,
seria algo do tipo:
someuser soft nofile 180006
Enfim, isto é tudo para fazê-lo rodar apropriadamente. Agora, se você está
curioso acerca do porquê fazer todos estes cálculos, as razões são:
b) Desktop com Backup em Rede
Capítulo 5. Falhas das Réplicas
Capítulo 6. Considerações acerca de Hash, descritores de arquivo e ulimit
Estatísticas
Figura 1. Alocações na tabela pequena.
Figura 2. Alocações na tabela Média.
Figura 3. Alocações na tabela grande.
www hard nofile 65536
someuser hard nofile 180006
Como nós estamos iniciando a publicação deste sistema, muitas coisas ainda têm que ser feitas. Este software é provido "Como está" e, então, envie-me um e-mail (coloque [CHIRONFS] no assunto) e eu vou TENTAR fazer o meu melhor para te dar o suporte. Agora, há uma lista de discussão, então, usuários também dispõem desta forma de solucionar seus problemas também.