共享存储上的符号链接

假设我有一个在多个服务器之间共享的glusterfs挂载,这个挂载被一个应用程序访问,并且日志被写入一个通常位于该挂载点的目录树中的目录。 (比如说/ foo是我们的挂载共享存储,而/ foo / bar是写入日志的目录)为了防止所有服务器试图写入同一个日志文件,我想使/ foo / bar成为一个符号链接另一个是本地目录/ var / bar。 是否可以在共享存储装载上创build本地符号链接? 这些符号链接是否可以映射到访问该存储的其他服务器上? 或者,如果没有,是否有另一种解决方法,像循环设备? 假设更改写入日志的目录是不可能的。

如果文件系统支持符号链接,则符号链接(根据POSIX标准)在客户端而不是服务器上解释。 因此,您应该能够在任何Unix或类Unix系统(如Linux)上可靠地链接到其他文件系统。

例如:

/foo A gluster remote file system /var A local file system 

如果/foo/bar/var/log/myhost的符号链接,那么每个写入/ foo / bar的机器都将写入该机器上的本地/ var / log / myhost。

但是,如果/var/log不存在,写入操作将会失败,并显示一条错误消息,令您感到意外。 (试一试)所以,确保/var/log存在。 这不是一个问题,因为在大多数系统中安装时会创build/var/log 。 但是,如果链接是/var/log/dirname/filename.txt ,很有可能/var/log/dirname还不存在。 我之前遇到过这个问题。

(我想在系统和networkingpipe理实践的第28章中有这样的例子,有build议将其链接到networking文件系统的/ etc /。

所以,是的,你可以用符号链接来做到这一点。 但是,你可能会混淆同事。 是否有可能告诉软件只写入/var/log/foo ? 它会减less混乱,更可持续。 你的同事会感谢你。

这取决于共享文件系统。 但一般来说,如果远程FS支持符号链接,它将起作用。 我可以做gluster音量的符号链接,并没有问题(testing)。

也许你想要设置像这样的符号链接?

 /foo - Gluster mountpoint /var/log - local filesystem mountpoint 

本地服务器上的服务被configuration为login到/foo/log/app.log 。 并且该/foo/log目录应该是每个服务器,但也位于Gluster卷上,以便其他人可以在需要时检查日志。

为此,我build议创build两个相关链接。 在每台服务器上:

 # mkdir /foo/logs/$(hostname) # ln -s /foo/logs/$(hostname) /var/log/app 

而在Gluster卷(只需要一次):

 # ln -s /var/log/app /foo/log 

当应用程序写入/foo/log/app.log ,symlink /foo/logparsing为/var/log/app 。 现在, /var/log/app是每个服务器的本地文件系统的符号链接,每个服务器都指向Gluster卷上的不同目录。 所以, /var/log/app指向一个服务器上的/foo/logs/server2.example.com ,另一个指向/foo/logs/server2.example.com

 /foo/log/app.log -> /var/log/app/app.log -> /foo/logs/server1.example.com/app.log