LINUX.ORG.RU
решено ФорумAdmin

pacemaker systemd resource

 , ,


0

1

Категорически приветствую! Есть кластер состоящий из 2 серверов с ubuntu 20 (Pacemaker 2.0.3, corosync 3.0.3) + qdevice, но это вобщем-то не важно. Хочу создать ресурс systemd, на обоих нодах создаю юнит dummy.service

[Unit]
Description=Dummy

[Service]
Restart=on-failure
StartLimitInterval=20
StartLimitBurst=5
TimeoutStartSec=0
RestartSec=5
Environment="HOME=/root"
SyslogIdentifier=dummy
ExecStart=/usr/local/sbin/dummy.sh

[Install]
WantedBy=multi-user.target

сам /usr/local/sbin/dummy.sh:

#!/bin/bash

CNT=0
while true; do
  let CNT++
  echo "hello world $CNT"
  sleep 5
done

Пытаемся объявить ресурс pcs resource create dummy.service systemd:dummy op monitor interval="10s" timeout="15s"

И спустя пару секунд одна нода убивает вторую и она уходит в ребут. Почему так происходит? Судя по логам, он буквально чем за секунду пытается запустить 2 раза сервис, решает что он «Timed Out», при этом сервис работает, так как он успевает написать в лог «hello world 1», после чего отстреливает ноду.

Собсно вопрос всё тот же: что я делаю не так?

Jul 21 15:53:41 node2.local pacemaker-controld[1813]:  notice: Result of probe operation for dummy.service on node2.local: 7 (not running) 
Jul 21 15:53:41 node2.local systemd[1]: Reloading.
Jul 21 15:53:42 node2.local systemd[1]: /lib/systemd/system/dbus.socket:5: ListenStream= references a path below legacy directory /var/run/, updating /var/run/dbus/system_bus_socket → /run/dbus/system_bus_socket; please update the unit file accordingly.
Jul 21 15:53:42 node2.local systemd[1]: /lib/systemd/system/docker.socket:6: ListenStream= references a path below legacy directory /var/run/, updating /var/run/docker.sock → /run/docker.sock; please update the unit file accordingly.
Jul 21 15:53:42 node2.local pacemaker-execd[1808]:  notice: Giving up on dummy.service start (rc=0): timeout (elapsed=259719ms, remaining=-159719ms)
Jul 21 15:53:42 node2.local pacemaker-controld[1813]:  error: Result of start operation for dummy.service on node2.local: Timed Out 
Jul 21 15:53:42 node2.local systemd[1]: Started Cluster Controlled dummy.
Jul 21 15:53:42 node2.local dummy[9330]: hello world 1
Jul 21 15:53:42 node2.local systemd-udevd[922]: Network interface NamePolicy= disabled on kernel command line, ignoring.
Jul 21 15:53:42 node2.local pacemaker-attrd[1809]:  notice: Setting fail-count-dummy.service#start_0[node2.local]: (unset) -> INFINITY 
Jul 21 15:53:42 node2.local pacemaker-attrd[1809]:  notice: Setting last-failure-dummy.service#start_0[node2.local]: (unset) -> 1595336022 
Jul 21 15:53:42 node2.local systemd[1]: Reloading.
Jul 21 15:53:42 node2.local systemd[1]: /lib/systemd/system/dbus.socket:5: ListenStream= references a path below legacy directory /var/run/, updating /var/run/dbus/system_bus_socket → /run/dbus/system_bus_socket; please update the unit file accordingly.
Jul 21 15:53:42 node2.local systemd[1]: /lib/systemd/system/docker.socket:6: ListenStream= references a path below legacy directory /var/run/, updating /var/run/docker.sock → /run/docker.sock; please update the unit file accordingly.
Jul 21 15:53:42 node2.local pacemaker-execd[1808]:  notice: Giving up on dummy.service stop (rc=0): timeout (elapsed=317181ms, remaining=-217181ms)
Jul 21 15:53:42 node2.local pacemaker-controld[1813]:  error: Result of stop operation for dummy.service on node2.local: Timed Out 
Jul 21 15:53:42 node2.local systemd[1]: Stopping Daemon for dummy...
Jul 21 15:53:42 node2.local pacemaker-attrd[1809]:  notice: Setting fail-count-dummy.service#stop_0[node2.local]: (unset) -> INFINITY 
Jul 21 15:53:42 node2.local pacemaker-attrd[1809]:  notice: Setting last-failure-dummy.service#stop_0[node2.local]: (unset) -> 1595336022 
Jul 21 15:53:42 node2.local systemd[1]: dummy.service: Succeeded.
Jul 21 15:53:42 node2.local systemd[1]: Stopped Daemon for dummy.
... lost connection (node rebooting)

Если вручную запустить сервис(без pacameker) и через некоторое время посмотреть на systemctl status dummy - что там?

К слову, если б у тебя тут не было вообще никакого выхлопа от запускаемого бинаря, я бы посоветовал указать Type=exec вместо дефолтного Type=simple в юните, но тут судя по всему скрипт у тебя таки запускается, так что причина не в этом.

TimeoutStartSec=0

Судя по документации, чтобы отключить проверку на таймаут запуска надо передавать TimeoutStartSec=infinity

Непонятно правда, чем тебя не устроил дефолтный таймаут в аж 90 секунд - это более чем достаточно для запуска bash-скрипта таких масштабов.

Pinkbyte ★★★★★ ()
Последнее исправление: Pinkbyte (всего исправлений: 4)
Ответ на: комментарий от Pinkbyte

Если вручную запустить сервис(без pacameker) и через некоторое время посмотреть на systemctl status dummy - что там?

То там будет Hello world N, нормально всё работает когда запускаешь «с руки».

Непонятно правда, чем тебя не устроил дефолтный таймаут в аж 90 секунд

Да я почти на 100% уверен что дело не в юните, этот, что в примере, - просто шаблон из прода, болванка, их вообще даже не человек генерит. Этот юнит просто одна из версий MRE (Minimal, Reproducible Example), я туда всё что угодно уже пробовал писАть - ничего не работает, точнее «работает» так, как в топике описано.

[Unit]
Description=Dummy

[Service]
Type=simple
ExecStart=/usr/local/sbin/dummy.sh

[Install]
WantedBy=multi-user.target

Вот, например, так можно сделать - результат будет тот же. Это не имеет вообще никакого значения. И объявлять можно его без параметров pcs resource create dummy.service systemd:dummy, задавая op start/stop timeout или не задавая, задавая метапараметры meta migration-threshold=10 failure-timeout=600s или не задавая их - результат через секунду всегда один и тот же: "error: Result of start operation for dummy.service on node2.local: Timed Out "

Я уже в отчаянии. Но всё равно спасибо что хоть попытались помочь.

Grotesque ()
Ответ на: комментарий от Pinkbyte

В помойку убунту, я возвращаюсь на центос, до встречи ;(

P.S. И это не первый раз уже. Я помню задал вопрос на SO после которого чувак создал issue, эти ребята просто забыли clvmd в пакет добавить. С кем не бывает…

Grotesque ()
Последнее исправление: Grotesque (всего исправлений: 2)