Скажем, у меня есть монтирование glusterfs, которое совместно используется несколькими серверами, к которому обращается приложение, и журналы записываются в каталог, который обычно находится в дереве каталогов этой точки монтирования. (скажем, / foo - это наше смонтированное общее хранилище, а / foo / bar - это каталог, в который записываются журналы) Чтобы все серверы не пытались писать в один и тот же файл журнала, я хочу сделать / foo / bar символической ссылкой на другой, локальный каталог, / var / bar. Можно ли сделать локальные символические ссылки на монтировании общего хранилища? И смогут ли эти символические ссылки отображаться на других серверах, которые обращаются к этому хранилищу? Или, если нет, есть ли другой способ обойти это, например, петлевые устройства? Предположим, изменение каталога, в который записываются журналы, невозможно.
Если файловая система поддерживает символические ссылки, то символьные ссылки (согласно стандарту 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
существуют. Это не проблема, поскольку /var/log
создается во время установки в большинстве систем. Однако что, если бы ссылка была на /var/log/dirname/filename.txt
есть хороший шанс, что /var/log/dirname
еще не существует. Я сталкивался с этой проблемой раньше.
(Я думаю, что есть примеры этого в главе 28 Практики системного и сетевого администрирования, где есть рекомендации ссылаться на / etc / из сетевых файловых систем.)
Итак, да, вы можете сделать это с помощью символических ссылок. Однако вас это может сбить с толку коллег. Можно ли указать программе просто писать на /var/log/foo
? Это будет менее запутанным и более устойчивым. Вы, коллеги, скажете вам спасибо.
Может быть, вы хотите настроить такие символические ссылки?
/foo - Gluster mountpoint
/var/log - local filesystem mountpoint
Служба на локальном сервере настроена для входа в /foo/log/app.log
. И это /foo/log
Каталог должен быть для каждого сервера, но также расположен на томе Gluster, чтобы другие могли при необходимости проверить журнал.
Для этого я предлагаю создать две символические ссылки. На каждом сервере:
# mkdir /foo/logs/$(hostname)
# ln -s /foo/logs/$(hostname) /var/log/app
И на томе Gluster (нужно только один раз):
# ln -s /var/log/app /foo/log
Когда приложение пишет в /foo/log/app.log
, символическая ссылка /foo/log
решает /var/log/app
. Сейчас, /var/log/app
- это символическая ссылка на локальную файловую систему каждого сервера, и каждый сервер указывает на свой каталог на томе Gluster. Так, /var/log/app
указывает на /foo/logs/server1.example.com
на одном сервере и на /foo/logs/server2.example.com
на другом.
/foo/log/app.log -> /var/log/app/app.log -> /foo/logs/server1.example.com/app.log
Это зависит от общей файловой системы. Но в целом, если удаленная ФС поддерживает символические ссылки, это будет работать. Я могу сделать символическую ссылку на объем блеска, и это нормально (проверено).