Nexenta, NFS e LOCK_EX

1

Atualmente estou usando uma arquitetura LAMP e espero um grande problema: (

Eu tenho vários servidores web http usando PHP5. Todos estão montando via NFS (v3) o diretório para todos os sites hospedados. O servidor de arquivos está executando o Nexenta Storage Appliance usando o ZFS.

O problema é que todo o cliente NFS que está tentando gravar algo em um arquivo sobre o NFS tem esse problema:

Isso está dentro do processo apache2:

open("/nfs/website1/file.txt", ORDWR|OCREAT, 0600) = 11647 fstat(11647, {stmode=SIFREG|0600, st_size=23754, ...}) = 0 flock(11647, LOCK_EX

E o processo nunca fica com o LOCK e continua esperando ... sempre.

O efeito? Todos os processos do apache2 são usados e aguardados. Meus servidores ainda não podem processar os outros pedidos porque não há mais processos disponíveis.

Eu não sei onde encontrar uma solução .. para mim, é sobre o lado do servidor NFS .. mas qual configuração está errada ou faltando? Como posso encontrar o que está errado? Se você precisar de mais informações sobre a configuração, apenas me pergunte o que pode te ajudar mais:)

    
por Givre 28.06.2012 / 20:49

1 resposta

2

Parece que o daemon de bloqueio não está sendo executado no lado do servidor.

Você pode testar isso alterando sua montagem NFS (no lado do cliente) para usar a opção nolock. Usar essa opção não impede o bloqueio na máquina do cliente (o bloqueio local é usado), mas impede o bloqueio entre as máquinas de funcionar, portanto, essa pode não ser uma solução válida para você. Você poderia tentar como um teste, no entanto, para ver se ele impede que os processos do servidor da Web sejam bloqueados.

Uma vez que você sabe ao certo se o daemon de bloqueio é o problema, você pode ver por que ele não está sendo executado no servidor (ou se há algum tipo de firewall impedindo que o protocolo de bloqueio entre os clientes e o servidor).

    
por 29.06.2012 / 08:44