Назад | Перейти на главную страницу

символические ссылки на общее хранилище

Скажем, у меня есть монтирование 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

Это зависит от общей файловой системы. Но в целом, если удаленная ФС поддерживает символические ссылки, это будет работать. Я могу сделать символическую ссылку на объем блеска, и это нормально (проверено).