В моем конкретном случае я хочу запустить remote-fs
модуль после того, как все glusterfs
полностью запускается.
Мои системные файлы:
glusterfs
цель:
node04:/usr/lib/systemd/system # cat glusterfsd.service
[Unit]
Description=GlusterFS brick processes (stopping only)
After=network.target glusterd.service
[Service]
Type=oneshot
ExecStart=/bin/true
RemainAfterExit=yes
ExecStop=/bin/sh -c "/bin/killall --wait glusterfsd || /bin/true"
ExecReload=/bin/sh -c "/bin/killall -HUP glusterfsd || /bin/true"
[Install]
WantedBy=multi-user.target
remote-fs
цель:
node04:/usr/lib/systemd/system # cat remote-fs.target
[Unit]
Description=Remote File Systems
Documentation=man:systemd.special(7)
Requires=glusterfsd.service
After=glusterfsd.service remote-fs-pre.target
DefaultDependencies=no
Conflicts=shutdown.target
[Install]
WantedBy=multi-user.target
Хорошо, все демоны Gluster запускаются успешно, и я хочу смонтировать файловую систему Gluster через NFS, но общий ресурс Gluster NFS готовится не сразу после glusterfs.service
запуска, а спустя несколько секунд, поэтому обычно remote-fs
не может смонтировать его даже с учетом директив Requires
и After
указаний.
Давайте посмотрим журнал:
Apr 14 16:16:22 node04 systemd[1]: Started GlusterFS, a clustered file-system server.
Apr 14 16:16:22 node04 systemd[1]: Starting GlusterFS brick processes (stopping only)...
Apr 14 16:16:22 node04 systemd[1]: Starting Network is Online.
Apr 14 16:16:22 node04 systemd[1]: Reached target Network is Online.
Apr 14 16:16:22 node04 systemd[1]: Mounting /stor...
Здесь все в порядке, удаленная файловая система (/ stor), кажется, монтируется после запуска glusterfs, как это и должно быть в соответствии с единичными файлами ... Но следующие строки:
//...skipped.....
Apr 14 16:16:22 node04 systemd[1]: Started GlusterFS brick processes (stopping only).
Какая? GlusterFS приготовился только к этому моменту! И тогда мы видим:
//...skipped.....
Apr 14 16:16:23 node04 mount[2960]: mount.nfs: mounting node04:/stor failed, reason given by server: No such file or directory
Apr 14 16:16:23 node04 systemd[1]: stor.mount mount process exited, code=exited status=32
Apr 14 16:16:23 node04 systemd[1]: Failed to mount /stor.
Apr 14 16:16:23 node04 systemd[1]: Dependency failed for Remote File Systems.
Apr 14 16:16:23 node04 systemd[1]: Unit stor.mount entered failed state.
Сбой монтирования, поскольку сервер NFS не был готов, когда systemd попытался смонтировать хранилище.
Из-за недетерминированной природы процесса загрузки systemd иногда (примерно 1 из 10 загрузок) монтирование этой файловой системы при загрузке завершается успешно.
Если подключение при загрузке не удалось, я могу войти на сервер и вручную смонтировать каталог / stor, поэтому служба NFS в Gluster, похоже, работает нормально.
Так как начать remote-fs
после glusterfsd
, т.е. после Started GlusterFS brick processes
появления строки в журнале?
remote-fs
Кажется, это одна из самых последних целей, поэтому я не могу запустить ее после другой цели «обходного пути», которая фактически не требуется remote-fs
.
ExecStartPre=<command>
свойство в раздел Unit,glusterfsd.service
которое выполняет команду, которая будет блокировать, пока glusterfs не будет готов? Это может помешать тому, чтобы theglusterfsd.service
указывал успех и активировалremotefs.target
.glusterfsd.service
файлом модуля. Похоже, что на самом деле он не запускает никаких сервисов и фактически убивает любыеglusterfsd
процессы. Есть ли у вас какие-либо другие файлы, связанные с кластерами?stor.mount
блок?Ответы:
Вы можете проанализировать последовательность загрузки systemd, выполнив следующую команду. Просмотрите выходной файл с помощью веб-браузера, поддерживающего SVG.
Этот график предоставит вам статистику времени последней загрузки, которая предоставит вам более ясную точку зрения на проблему.
Я решил проблему с монтированием NFS, добавив
mount
команды в/etc/rc.local
. Однако я не уверен, будет ли это работать с интеграцией Glusterd, стоит попробовать для быстрого исправления. Чтобы заставить systemd запустить rc.local, вы должны выполнить следующее условие:источник
Как уже предложено другими; Я не уверен, является ли это зависимостью от 'glusterfsd', а не общей задержкой в чем-то другом, например поиском DNS, который должен быть успешным, чтобы он мог разрешить 'узел4' и успешно смонтировать общий ресурс NFS.
Мы столкнулись с этой задержкой, потому что большинство наших установок используют локальный проверяющий распознаватель, который должен быть доступен, прежде чем другие службы, зависящие от DNS, смогут успешно запускаться.
Решением этой проблемы было создание сценария «ExecStartPre», который в основном проверяет наличие определенных зависимостей снова и снова, пока он не будет успешным (выход 0) или попыткой тайм-аута (выход 1).
Убедитесь, что вы настраиваете вне основного каталога systemd lib, если можете. Изменение файлов пакета будет означать, что они, вероятно, будут перезаписаны при следующем обновлении.
источник
Может быть, вы могли бы добавить это к
remote-fs
цели:источник
Может быть, какой-то опрос может помочь. Это не зависит от systemd. Например, я использую
mysql -e ';'
в цикле, прежде чем делать что-то полезное с MySQL.источник