
Digamos que tengo un montaje glusterfs que se comparte entre varios servidores, al que accede una aplicación, y los registros se escriben en un directorio que normalmente estaría en el árbol de directorios de ese punto de montaje. (digamos que /foo es nuestro almacenamiento compartido montado, y /foo/bar es el directorio donde se escriben los registros) Para evitar que todos los servidores intenten escribir en el mismo archivo de registro, quiero hacer de /foo/bar un enlace simbólico a otro, directorio local, /var/bar. ¿Es posible crear enlaces simbólicos locales en un soporte de almacenamiento compartido? ¿Y esos enlaces simbólicos podrían mapearse en otros servidores que accedan a ese almacenamiento? O si no, ¿hay otra forma de evitar esto, como dispositivos de bucle? Supongamos que no es posible cambiar el directorio en el que se escriben los registros.
Respuesta1
Si el sistema de archivos admite enlaces simbólicos, entonces los enlaces simbólicos (según el estándar POSIX) se interpretan en el cliente, no en el servidor. Por lo tanto, debería poder realizar enlaces simbólicos a otros sistemas de archivos de manera confiable en cualquier sistema Unix o similar, como Linux.
Por ejemplo:
/foo A gluster remote file system
/var A local file system
Si /foo/bar
es un enlace simbólico, /var/log/myhost
entonces cada máquina que escriba en /foo/bar escribirá en el /var/log/myhost local de esa máquina.
Sin embargo, si /var/log
no existe, la escritura fallará con un mensaje de error que te sorprenderá. (pruébalo) Entonces, asegúrate de /var/log
que exista. Eso no es un problema, ya que /var/log
se crea durante la instalación en la mayoría de los sistemas. Sin embargo, ¿qué pasaría si el vínculo fuera /var/log/dirname/filename.txt
allí? Es muy probable que /var/log/dirname
aún no exista. Me he encontrado con este problema antes.
(Creo que hay ejemplos de esto en el Capítulo 28 de La práctica de la administración de sistemas y redes, donde hay recomendaciones para vincular a /etc/ desde sistemas de archivos en red).
Entonces, sí, puedes hacer esto con enlaces simbólicos. Sin embargo, puede confundir a sus compañeros de trabajo. ¿Es posible decirle al software que simplemente escriba /var/log/foo
? Será menos confuso y más sostenible. Tus compañeros de trabajo te lo agradecerán.
Respuesta2
Depende del sistema de archivos compartido. Pero, en general, si el FS remoto admite enlaces simbólicos, funcionará. Puedo hacer un enlace simbólico en el volumen de gluster y está bien (probado).
Respuesta3
¿Quizás quieras configurar enlaces simbólicos como este?
/foo - Gluster mountpoint
/var/log - local filesystem mountpoint
Un servicio en el servidor local está configurado para iniciar sesión /foo/log/app.log
. Y ese /foo/log
directorio debe ser por servidor, pero también debe estar ubicado en el volumen de Gluster para que otros puedan inspeccionar el registro cuando sea necesario.
Para eso, sugeriría crear dos enlaces simbólicos. En cada servidor:
# mkdir /foo/logs/$(hostname)
# ln -s /foo/logs/$(hostname) /var/log/app
Y en el volumen de Gluster (sólo se necesita una vez):
# ln -s /var/log/app /foo/log
Cuando una aplicación escribe en /foo/log/app.log
, el enlace simbólico /foo/log
se resuelve en /var/log/app
. Ahora, /var/log/app
hay un enlace simbólico en el sistema de archivos local de cada servidor, y cada servidor apunta a un directorio diferente en el volumen de Gluster. Entonces, /var/log/app
apunta /foo/logs/server1.example.com
a un servidor y a /foo/logs/server2.example.com
otro.
/foo/log/app.log -> /var/log/app/app.log -> /foo/logs/server1.example.com/app.log