
Digamos que eu tenha uma montagem glusterfs compartilhada entre vários servidores, que é acessada por um aplicativo, e os logs são gravados em um diretório que normalmente estaria na árvore de diretórios desse ponto de montagem. (digamos que /foo é nosso armazenamento compartilhado montado e /foo/bar é o diretório onde os logs são gravados) Para evitar que todos os servidores tentem gravar no mesmo arquivo de log, quero fazer de /foo/bar um link simbólico para outro diretório local, /var/bar. É possível criar links simbólicos locais em uma montagem de armazenamento compartilhado? E esses links simbólicos poderiam ser mapeados em outros servidores que acessam esse armazenamento? Ou, se não, existe outra maneira de contornar isso, como dispositivos de loop? Suponha que não seja possível alterar o diretório no qual os logs são gravados.
Responder1
Se o sistema de arquivos suportar links simbólicos, então os links simbólicos (de acordo com o padrão POSIX) serão interpretados no cliente, não no servidor. Portanto, você deve ser capaz de criar links simbólicos para outros sistemas de arquivos de forma confiável em qualquer sistema Unix ou semelhante ao Unix, como o Linux.
Por exemplo:
/foo A gluster remote file system
/var A local file system
Se /foo/bar
for um link simbólico para /var/log/myhost
cada máquina que grava em /foo/bar gravará no /var/log/myhost local nessa máquina.
Porém se /var/log
não existir, a gravação falhará com uma mensagem de erro que irá surpreendê-lo. (tente) Então, certifique-se de /var/log
que existe. Isso não é um problema, pois /var/log
é criado no momento da instalação na maioria dos sistemas. No entanto, e se o link fosse para /var/log/dirname/filename.txt
lá, há uma boa chance de que /var/log/dirname
ainda não exista. Já me deparei com esse problema antes.
(Acho que há exemplos disso no Capítulo 28 de The Practice of System and Network Administration, onde há recomendações para vincular a /etc/ a partir de sistemas de arquivos em rede.)
Então, sim, você pode fazer isso com links simbólicos. No entanto, você pode confundir colegas de trabalho. É possível dizer ao software para apenas escrever /var/log/foo
? Será menos confuso e mais sustentável. Vocês, colegas de trabalho, vão agradecer.
Responder2
Depende do sistema de arquivos compartilhado. Mas, em geral, se o FS remoto suportar links simbólicos, funcionará. Posso fazer um link simbólico no volume do gluster e está ok (testado).
Responder3
Talvez você queira configurar links simbólicos como este?
/foo - Gluster mountpoint
/var/log - local filesystem mountpoint
Um serviço no servidor local está configurado para fazer login /foo/log/app.log
. E esse /foo/log
diretório deve ser por servidor, mas também localizado no volume Gluster para que outros possam inspecionar o log quando necessário.
Para isso, sugiro criar dois links simbólicos. Em cada servidor:
# mkdir /foo/logs/$(hostname)
# ln -s /foo/logs/$(hostname) /var/log/app
E no volume Gluster (necessário apenas uma vez):
# ln -s /var/log/app /foo/log
Quando um aplicativo grava em /foo/log/app.log
, o link simbólico /foo/log
é resolvido em /var/log/app
. Agora, /var/log/app
é um link simbólico no sistema de arquivos local de cada servidor, e cada servidor aponta para um diretório diferente no volume Gluster. Portanto, /var/log/app
aponta para /foo/logs/server1.example.com
um servidor e para /foo/logs/server2.example.com
outro.
/foo/log/app.log -> /var/log/app/app.log -> /foo/logs/server1.example.com/app.log