Dalam kasus khusus saya, saya ingin memulai remote-fs
unit setelah semua glusterfs
benar - benar dimulai.
File systemd saya:
glusterfs
target:
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
target:
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, semua daemon Gluster mulai berhasil dan saya ingin me-mount sistem file Gluster melalui NFS, tetapi bagian NFS Gluster bersiap-siap tidak segera setelah glusterfs.service
dimulai, tetapi beberapa detik kemudian, jadi biasanya remote-fs
tidak dapat me- mountnya bahkan mengenai Requires
dan After
arahan.
Mari kita lihat log:
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...
Di sini semuanya OK, sistem file jarak jauh (/ stor) tampaknya akan dipasang setelah glusterfs dimulai, karena seharusnya sesuai dengan file unit ... Tetapi baris selanjutnya adalah:
//...skipped.....
Apr 14 16:16:22 node04 systemd[1]: Started GlusterFS brick processes (stopping only).
Apa? GlusterFS bersiap-siap hanya untuk saat ini! Dan kemudian kita melihat:
//...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.
Mount gagal karena server NFS tidak siap ketika systemd mencoba me-mount penyimpanan.
Karena sifat non-deterministik dari proses boot sistem, terkadang (sekitar 1 dari 10 boot) pemasangan sistem file ini pada boot berhasil.
Jika onboot mount tidak berhasil, saya bisa masuk ke server dan secara manual me-mount direktori / stor, jadi layanan NFS Gluster sepertinya berfungsi dengan baik.
Jadi bagaimana memulai remote-fs
setelah glusterfsd
, yaitu setelah Started GlusterFS brick processes
baris muncul dalam log?
remote-fs
tampaknya menjadi salah satu target terakhir, jadi saya tidak bisa memulainya setelah target "penyelesaian" lain yang sebenarnya tidak diperlukan oleh remote-fs
.
ExecStartPre=<command>
properti ke bagian Unitglusterfsd.service
yang mengeksekusi perintah yang akan diblokir sampai glusterfs siap? Itu dapat mencegahglusterfsd.service
dari menunjukkan keberhasilan dan mengaktifkanremotefs.target
.glusterfsd.service
file unit Anda . Tampaknya tidak benar-benar memulai layanan apa pun, dan pada kenyataannya membunuhglusterfsd
proses apa pun . Apakah Anda memiliki file unit terkait gluster lainnya?stor.mount
unitnya?Jawaban:
Anda dapat menganalisis urutan boot systemd dengan mengikuti perintah. Lihat file output dengan menggunakan browser web yang mendukung SVG.
Plotting itu akan memberikan Anda statistik waktu boot terakhir, yang akan memberi Anda lebih banyak sudut pandang untuk masalah.
Saya memecahkan masalah pemasangan NFS saya dengan menambahkan
mount
perintah ke/etc/rc.local
. Namun saya tidak yakin, apakah ini akan bekerja dengan integrasi glusterd, patut dicoba untuk perbaikan cepat. Untuk membuat systemd menjalankan rc.local Anda harus memenuhi ketentuan berikut:sumber
Seperti yang sudah disarankan oleh orang lain; Saya tidak yakin apakah itu benar-benar ketergantungan pada 'glusterfsd', alih-alih penundaan umum dalam hal lain, misalnya pencarian DNS yang perlu berhasil agar dapat menyelesaikan 'node4' dan berhasil me-mount share NFS.
Kami mengalami keterlambatan ini karena sebagian besar pengaturan kami menggunakan penyelesai validasi lokal, yang harus tersedia sebelum layanan lain yang bergantung pada DNS dapat memulai dengan sukses.
Solusi untuk ini adalah memiliki skrip 'ExecStartPre' yang pada dasarnya menguji ketersediaan dependensi spesifik berulang-ulang, sampai berhasil (keluar 0) atau waktu mencoba (keluar 1).
Pastikan Anda menyesuaikan di luar direktori systemd lib utama, jika Anda bisa. Mengubah file paket akan berarti mereka kemungkinan akan ditimpa pada pembaruan berikutnya yang datang.
sumber
Mungkin Anda bisa menambahkan ini ke
remote-fs
target:sumber
Mungkin beberapa polling bisa membantu. Ini tidak tergantung pada systemd. Sebagai contoh saya gunakan
mysql -e ';'
dalam satu lingkaran sebelum melakukan sesuatu yang berguna dengan mysql.sumber