В моем конкретном случае я хочу запустить 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
.
glusterfsd.service
файлом модуля. Похоже, что на самом деле он не запускает никаких сервисов и фактически убивает любые glusterfsd
процессы. Есть ли у вас какие-либо другие файлы, связанные с кластерами?
stor.mount
блок?
ExecStartPre=<command>
свойство в раздел Unit,glusterfsd.service
которое выполняет команду, которая будет блокировать, пока glusterfs не будет готов? Это может помешать тому, чтобы theglusterfsd.service
указывал успех и активировалremotefs.target
.