]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
systemd: Support Graceful Reboot for AIO Node 37301/head
authorWong Hoi Sing Edison <hswong3i@gmail.com>
Tue, 25 Aug 2020 04:16:54 +0000 (12:16 +0800)
committerWong Hoi Sing Edison <hswong3i@pantarei-design.com>
Tue, 22 Sep 2020 08:09:52 +0000 (16:09 +0800)
Ceph AIO installation with single/multiple node is not friendly for
loopback mount, especially always get deadlock issue during graceful
system reboot.

We already have `rbdmap.service` with graceful system reboot friendly as
below:

    [Unit]
    After=network-online.target
    Before=remote-fs-pre.target
    Wants=network-online.target remote-fs-pre.target

    [Service]
    ExecStart=/usr/bin/rbdmap map
    ExecReload=/usr/bin/rbdmap map
    ExecStop=/usr/bin/rbdmap unmap-all

This PR introduce:

  - `ceph-mon.target`: Ensure startup after `network-online.target` and
    before `remote-fs-pre.target`
  - `ceph-*.target`: Ensure startup after `ceph-mon.target` and before
    `remote-fs-pre.target`
  - `rbdmap.service`: Once all `_netdev` get unmount by
    `remote-fs.target`, ensure unmap all RBD BEFORE any Ceph components
    under `ceph.target` get stopped during shutdown

The logic is concept proof by
<https://github.com/alvistack/ansible-role-ceph_common/tree/develop>;
also works as expected with Ceph + Kubernetes deployment by
<https://github.com/alvistack/ansible-collection-kubernetes/tree/develop>.
No more deadlock happened during graceful system reboot, both AIO
single/multiple no de with loopback mount.

Also see:

  - <https://github.com/ceph/ceph/pull/36776>
  - <https://github.com/etcd-io/etcd/pull/12259>
  - <https://github.com/cri-o/cri-o/pull/4128>
  - <https://github.com/kubernetes/release/pull/1504>

Fixes: https://tracker.ceph.com/issues/47528
Signed-off-by: Wong Hoi Sing Edison <hswong3i@gmail.com>
(cherry picked from commit d88c834ea44bd67cfde0bd11ec4ded079b76d11a)

Conflicts:
systemd/ceph-immutable-object-cache.target
- only exists in branch octopus and master, not exists in branch nautilus
systemd/ceph-mgr@.service.in
systemd/ceph-mon@.service.in
- reorder lines due to original branch different, no logical changes

14 files changed:
systemd/ceph-fuse.target
systemd/ceph-mds.target
systemd/ceph-mds@.service.in
systemd/ceph-mgr.target
systemd/ceph-mgr@.service.in
systemd/ceph-mon.target
systemd/ceph-mon@.service.in
systemd/ceph-osd.target
systemd/ceph-osd@.service.in
systemd/ceph-radosgw.target
systemd/ceph-radosgw@.service.in
systemd/ceph-rbd-mirror.target
systemd/ceph.target
systemd/rbdmap.service.in

index 70f5cb6e16b63759542916766dc14ade274b5ab9..c31fdfa8dce7a2ae5ccd110131e2498e479ff37f 100644 (file)
@@ -2,5 +2,6 @@
 Description=ceph target allowing to start/stop all ceph-fuse@.service instances at once
 PartOf=ceph.target
 Before=ceph.target
+
 [Install]
 WantedBy=remote-fs.target ceph.target
index 238f3ab90c73e5421a409e62773141f6d148e674..1101f21f699cdbea2edcc6f7480a5dbe59a35a92 100644 (file)
@@ -1,6 +1,9 @@
 [Unit]
 Description=ceph target allowing to start/stop all ceph-mds@.service instances at once
 PartOf=ceph.target
+After=ceph-mon.target
 Before=ceph.target
+Wants=ceph.target ceph-mon.target
+
 [Install]
 WantedBy=multi-user.target ceph.target
index 39a2e63105b0625725b542a3457b656fd47340c4..e47738a274a6733b9f37f426add1b84595e9c087 100644 (file)
@@ -1,8 +1,9 @@
 [Unit]
 Description=Ceph metadata server daemon
-After=network-online.target local-fs.target time-sync.target
-Wants=network-online.target local-fs.target time-sync.target
 PartOf=ceph-mds.target
+After=network-online.target local-fs.target time-sync.target
+Before=remote-fs-pre.target ceph-mds.target
+Wants=network-online.target local-fs.target time-sync.target remote-fs-pre.target ceph-mds.target
 
 [Service]
 LimitNOFILE=1048576
index f25e494b1d382cc2af0f638a70c48e7cc10b9b3a..288888b0d8d5196f1b1cd6254628fe811221a97d 100644 (file)
@@ -1,6 +1,9 @@
 [Unit]
 Description=ceph target allowing to start/stop all ceph-mgr@.service instances at once
 PartOf=ceph.target
+After=ceph-mon.target
 Before=ceph.target
+Wants=ceph.target ceph-mon.target
+
 [Install]
 WantedBy=multi-user.target ceph.target
index c98f6378b9725169a4c6d580ae984a49e7b12f2f..0ff9db237a443893ca29bddfc5ac20861521d212 100644 (file)
@@ -1,8 +1,9 @@
 [Unit]
 Description=Ceph cluster manager daemon
-After=network-online.target local-fs.target time-sync.target
-Wants=network-online.target local-fs.target time-sync.target
 PartOf=ceph-mgr.target
+After=network-online.target local-fs.target time-sync.target
+Before=remote-fs-pre.target ceph-mgr.target
+Wants=network-online.target local-fs.target time-sync.target remote-fs-pre.target ceph-mgr.target
 
 [Service]
 LimitNOFILE=1048576
@@ -12,11 +13,9 @@ Environment=CLUSTER=ceph
 ExecStart=/usr/bin/ceph-mgr -f --cluster ${CLUSTER} --id %i --setuser ceph --setgroup ceph
 ExecReload=/bin/kill -HUP $MAINPID
 LockPersonality=true
-
 # We need to disable this protection as some python libraries generate
 # dynamic code, like python-cffi, and require mmap calls to succeed
 MemoryDenyWriteExecute=false
-
 NoNewPrivileges=true
 PrivateDevices=yes
 ProtectControlGroups=true
index 097c83ba3be8322ba92e200d1efdffa228ac9369..4325bac7afeb6102fcee7cb1dd49aae73d173972 100644 (file)
@@ -2,5 +2,7 @@
 Description=ceph target allowing to start/stop all ceph-mon@.service instances at once
 PartOf=ceph.target
 Before=ceph.target
+Wants=ceph.target
+
 [Install]
 WantedBy=multi-user.target ceph.target
index c95fcabb26d6c6f87580cfa651543adae6cef208..d3121d59dcf06f8b5c697a0a4b173c9a37676917 100644 (file)
@@ -1,14 +1,13 @@
 [Unit]
 Description=Ceph cluster monitor daemon
-
+PartOf=ceph-mon.target
 # According to:
 #   http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget
 # these can be removed once ceph-mon will dynamically change network
 # configuration.
 After=network-online.target local-fs.target time-sync.target
-Wants=network-online.target local-fs.target time-sync.target
-
-PartOf=ceph-mon.target
+Before=remote-fs-pre.target ceph-mon.target
+Wants=network-online.target local-fs.target time-sync.target remote-fs-pre.target ceph-mon.target
 
 [Service]
 LimitNOFILE=1048576
index 7f677f54d5ece2bb256369555bbc2df05b76e391..e4d1b9f07fc6ae5ac2ba741201c73de3fc575b31 100644 (file)
@@ -1,6 +1,9 @@
 [Unit]
 Description=ceph target allowing to start/stop all ceph-osd@.service instances at once
 PartOf=ceph.target
+After=ceph-mon.target
 Before=ceph.target
+Wants=ceph.target ceph-mon.target
+
 [Install]
 WantedBy=multi-user.target ceph.target
index 1b5c9c82b8668317f5969bc5929656a2d2a1cf88..2e5ea6ae4501676b31f3eae5be9184843f33705e 100644 (file)
@@ -1,8 +1,9 @@
 [Unit]
 Description=Ceph object storage daemon osd.%i
-After=network-online.target local-fs.target time-sync.target ceph-mon.target
-Wants=network-online.target local-fs.target time-sync.target
 PartOf=ceph-osd.target
+After=network-online.target local-fs.target time-sync.target
+Before=remote-fs-pre.target ceph-osd.target
+Wants=network-online.target local-fs.target time-sync.target remote-fs-pre.target ceph-osd.target
 
 [Service]
 LimitNOFILE=1048576
index 1799e29e84d7450afc3547c04e9d1dd9caf7cb2c..8ea707a0bbdf6f65cebe31707cb979a5c6c36f56 100644 (file)
@@ -1,6 +1,9 @@
 [Unit]
 Description=ceph target allowing to start/stop all ceph-radosgw@.service instances at once
 PartOf=ceph.target
+After=ceph-mon.target
 Before=ceph.target
+Wants=ceph.target ceph-mon.target
+
 [Install]
 WantedBy=multi-user.target ceph.target
index 7e3ddf6c04731ab1a20c410711c526ff2bbcc8a7..dee501b4771c7b780bc877f8a01273493d22c15b 100644 (file)
@@ -1,8 +1,9 @@
 [Unit]
 Description=Ceph rados gateway
-After=network-online.target local-fs.target time-sync.target
-Wants=network-online.target local-fs.target time-sync.target
 PartOf=ceph-radosgw.target
+After=network-online.target local-fs.target time-sync.target
+Before=remote-fs-pre.target ceph-radosgw.target
+Wants=network-online.target local-fs.target time-sync.target remote-fs-pre.target ceph-radosgw.target
 
 [Service]
 LimitNOFILE=1048576
index 43e9a4c816478244154b55729d1e9bbd65b9582f..57ea09f1dc510901eb81dede8be13cfed6563bea 100644 (file)
@@ -2,5 +2,6 @@
 Description=ceph target allowing to start/stop all ceph-rbd-mirror@.service instances at once
 PartOf=ceph.target
 Before=ceph.target
+
 [Install]
 WantedBy=multi-user.target ceph.target
index 60734baff689d6603c520e14d11ed224b0ef31e7..67a982c5b446abe17832e5aa24466252dec0880c 100644 (file)
@@ -1,4 +1,5 @@
 [Unit]
 Description=ceph target allowing to start/stop all ceph*@.service instances at once
+
 [Install]
 WantedBy=multi-user.target
index 4757ee6ccb29de1d892b24c26762265866ac5c5b..6644508cf0dea9ffb617bcf55e37d9315109926a 100644 (file)
@@ -1,9 +1,8 @@
 [Unit]
 Description=Map RBD devices
-
-After=network-online.target
+After=network-online.target ceph.target
 Before=remote-fs-pre.target
-Wants=network-online.target remote-fs-pre.target
+Wants=network-online.target remote-fs-pre.target ceph.target
 
 [Service]
 EnvironmentFile=-@SYSTEMD_ENV_FILE@