W moim szczególnym przypadku chcę uruchomić remote-fs
urządzenie po tym, jak wszystko się glusterfs
całkowicie uruchomi .
Moje pliki systemowe:
glusterfs
cel:
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
cel:
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
OK, wszystkie demony Glustera zaczynają się pomyślnie i chcę zamontować system plików Glustera przez NFS, ale udział NFS Glustera jest gotowy nie natychmiast po glusterfs.service
uruchomieniu, ale kilka sekund później, więc zwykle remote-fs
nie jest w stanie zamontować go nawet w odniesieniu Requires
do After
dyrektyw i dyrektyw.
Zobaczmy dziennik:
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...
Tutaj wszystko jest w porządku, zdalny system plików (/ stor) wydaje się montowany po uruchomieniu glusterfs, ponieważ miał być zgodny z plikami jednostkowymi ... Ale następne wiersze to:
//...skipped.....
Apr 14 16:16:22 node04 systemd[1]: Started GlusterFS brick processes (stopping only).
Co? GlusterFS przygotował się tylko na ten moment! A potem widzimy:
//...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.
Montowanie nie powiodło się, ponieważ serwer NFS nie był gotowy, gdy systemowo próbował zainstalować pamięć.
Ze względu na niedeterministyczny charakter systemowego procesu rozruchu, czasami (około 1 na 10 rozruchów) montowanie tego systemu plików podczas rozruchu kończy się powodzeniem.
Jeśli montowanie przy rozruchu nie powiodło się, mogę zalogować się do serwera i ręcznie zamontować katalog / stor, więc usługa NFS Gluster wydaje się działać dobrze.
Jak więc zacząć remote-fs
po glusterfsd
, tj. Po Started GlusterFS brick processes
pojawieniu się wiersza w dzienniku?
remote-fs
wydaje się być jednym z ostatnich celów, więc nie mogę zacząć od kolejnego celu „obejścia”, który w rzeczywistości nie jest wymagany remote-fs
.
glusterfsd.service
plikiem jednostki. Wydaje się, że nie uruchamia żadnych usług i w rzeczywistości zabija wszelkie glusterfsd
procesy. Czy masz jakieś inne pliki jednostek związane z gluster?
stor.mount
urządzenie?
ExecStartPre=<command>
właściwość do sekcji Unit,glusterfsd.service
która wykonuje polecenie, które będzie blokować, dopóki glusterfs nie będzie gotowy? Może to uniemożliwićglusterfsd.service
wskazanie sukcesu i aktywacjęremotefs.target
.