Bug 3892 - Ошибка при старте сервиса ctdb
: Ошибка при старте сервиса ctdb
Status: RESOLVED FIXED
Product: Desktop Bugs
Classification: ROSA Desktop
Component: Main Packages
: Fresh
: All Linux
: Normal normal
: ---
Assigned To: Alexey Ivanov
: Private ROSA Bugs
:
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2014-03-31 13:19 MSD by Eugene Shatokhin
Modified: 2015-07-31 23:35 MSD (History)
3 users (show)

See Also:
RPM Package:
ISO-related:
Bad POT generating:
Upstream:
vladimir.potapov: qa_verified+
eugene.shatokhin: published+


Attachments
log.ctdb (1.55 KB, application/octet-stream)
2015-07-18 12:39 MSD, Alexander Petryakov
Details
Успешный тест (3.13 KB, text/x-log)
2015-07-20 10:11 MSD, Alexey Ivanov
Details
strace log (3.53 MB, text/x-log)
2015-07-24 00:55 MSD, Alexander Petryakov
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Eugene Shatokhin 2014-03-31 13:19:07 MSD
Пакет: ctdb-1.13-1-rosa2012.1.x86_64.rpm

systemctl start ctdb.service отработала с ошибкой. 

Из системного лога:
-----------------
sudo[6734]: autotest : TTY=pts/1 ; PWD=/home/autotest ; USER=root ; COMMAND=/bin/systemctl start ctdb.service
systemd[1]: Starting CTDB...
ctdb_drop_all_public_ips[6737]: /etc/ctdb/systemd/ctdb_drop_all_public_ips: строка 16: /etc/ctdb/init_functions: Нет такого файла или каталога
systemd[1]: ctdb.service: control process exited, code=exited status=1
systemd[1]: Failed to start CTDB.
systemd[1]: Unit ctdb.service entered failed state.
-----------------

Это выявилось при автоматический проверке сервисов.
Comment 1 Alexey Ivanov 2015-07-15 17:43:39 MSD
Вот эти три скрипта инклудят файл, который исходным кодом по какой-то причине не генерируется:

ExecStartPost=/etc/ctdb/systemd/ctdb_set_ctdb_variables.post
ExecStartPre=/etc/ctdb/systemd /ctdb_check_persistent_databases.pre
ExecStartPre=/etc/ctdb/systemd/ctdb_drop_all_public_ips

Есть патч, адаптировал его к имеющейся версии, проверил - служба стартует и работает.

Однако имеется нюанс: это кластерная служба, требующая предварительно ручной настройки. Как минимум вот эти два параметра уникальны для каждой инсталяции и должны быть заранее бережно настроены ответственным лицом:

# You must specify the location of a shared lock file across all the
# nodes for split brain prevention to work.
# This must be on shared storage.
# CTDB can operate without a reclock file, but this means that there is no
# protection against a split brain.
# It is strongly suggested to NOT run ctdb without a reclock file.

# the NODES file must be specified or ctdb won't start
# it should contain a list of IPs that ctdb will use
# it must be exactly the same on all cluster nodes

Если не вмешаться в эти два параметра, служба не стартует.
Первый можно закомментировать - ctdbd это терпит, а вот без корректного списка ip адресов демон не стартует.

Можно соорудить некую сферическую конфигурацию в вакууме, только для того, чтобы автотесты проходили. Например, брать при установке ip адрес первого интерфейса и писать его в /etc/ctdb/nodes. Но это криво.

Полагаю, больше смысла будет, если добавить свой ExecStartPre, проверять корректно ли указаны NODES и внятно ругаться, если это не так.

Впрочем, у нас старая версия ctdb за номером 2.0 от 2012 года, а текущая версия в апстриме - 2.5.5. Попробую обновить. Возможно, в свежих версиях что-то поменялось.
Comment 2 Denis Silakov 2015-07-15 17:45:30 MSD
Чисто ради автотестов можно не трудиться, проще автотесты отключить.
Comment 3 Alexey Ivanov 2015-07-15 18:02:48 MSD
Хорошо.

С обновлением тогда повременю - ctdb включен в состав Samba 4.2. Полагаю, лучше готовиться по-немногу к обновлению Самбы.

А т.к. данный пакет действительно сломан, патч стоит наложить. Добавлю ещё скрипт, который будет проверять NODES и этим пока ограничусь. Билд-листы сюда положу.
Comment 4 Alexey Ivanov 2015-07-16 15:54:00 MSD
Контейнеры, на которых тестировалось:

https://abf.io/build_lists/2523046
https://abf.io/build_lists/2523047

Pull-request:

https://abf.io/import/ctdb/pull_requests/1

С настройками по умолчанию сервер не стартует, т.к. требует обязательной ручной настройки (вчера упоминал).

Тестировал так:

localhost alexey # systemctl start ctdb
Job for ctdb.service failed. See 'systemctl status ctdb.service' and 'journalctl -xn' for details.
localhost alexey # systemctl status ctdb
ctdb.service - CTDB
   Loaded: loaded (/lib/systemd/system/ctdb.service; enabled)
   Active: failed (Result: exit-code) since Чт 2015-07-16 16:36:18 YEKT; 1min 48s ago
  Process: 14199 ExecStartPre=/etc/ctdb/systemd/ctdb_check_config (code=exited, status=2)

июл 16 16:36:18 localhost ctdb_check_config[14199]: You have recloc file path $CTDB_RECOVERY_LOCK set to "/some/place/on/shared/storage" but the file does not exist.
июл 16 16:36:18 localhost ctdb_check_config[14199]: CTDB daemon can not operate. Please see /etc/sysconfig/ctdb for details.
июл 16 16:36:18 localhost systemd[1]: ctdb.service: control process exited, code=exited status=2
июл 16 16:36:18 localhost systemd[1]: Failed to start CTDB.
июл 16 16:36:18 localhost systemd[1]: Unit ctdb.service entered failed state.

Можно закомментировать CTDB_RECOVERY_LOCK (не приветствуется, но допустимо) в файле /etc/sysconfig/ctdb:

localhost ~ # sed -i 's/CTDB_RECOVERY_LOCK=/#CTDB_RECOVERY_LOCK=/g' /etc/sysconfig/ctdb
localhost alexey # systemctl start ctdb
Job for ctdb.service failed. See 'systemctl status ctdb.service' and 'journalctl -xn' for details.
localhost alexey # systemctl status ctdb
ctdb.service - CTDB
   Loaded: loaded (/lib/systemd/system/ctdb.service; enabled)
   Active: failed (Result: exit-code) since Чт 2015-07-16 16:39:47 YEKT; 1s ago
  Process: 15507 ExecStartPre=/etc/ctdb/systemd/ctdb_check_config (code=exited, status=2)

июл 16 16:39:47 localhost systemd[1]: Starting CTDB... 
июл 16 16:39:47 localhost ctdb_check_config[15507]: The NODES file /etc/ctdb/nodes is empty.
июл 16 16:39:47 localhost ctdb_check_config[15507]: CTDB daemon can not operate. Please see /etc/sysconfig/ctdb for details.
июл 16 16:39:47 localhost systemd[1]: ctdb.service: control process exited, code=exited status=2
июл 16 16:39:47 localhost systemd[1]: Failed to start CTDB.
июл 16 16:39:47 localhost systemd[1]: Unit ctdb.service entered failed state.

В файле /etc/ctdb/nodes должен быть список ip адресов, на которых слушает CTDB. Для теста пойдёт ip адрес интерфейса eth0:

localhost ~ # ip a s dev eth0 | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -n 1 | tee /etc/ctdb/nodes
172.16.50.201
localhost alexey # systemctl start ctdb
localhost alexey # systemctl status ctdb
ctdb.service - CTDB
   Loaded: loaded (/lib/systemd/system/ctdb.service; enabled)
   Active: active (running) since Чт 2015-07-16 16:42:11 YEKT; 1s ago
  Process: 16406 ExecStartPost=/etc/ctdb/systemd/ctdb_set_ctdb_variables.post (code=exited, status=0/SUCCESS)
  Process: 16401 ExecStart=/etc/ctdb/systemd/ctdb.systemd (code=exited, status=0/SUCCESS)
  Process: 16395 ExecStartPre=/etc/ctdb/systemd/ctdb_check_persistent_databases.pre (code=exited, status=0/SUCCESS)
  Process: 16392 ExecStartPre=/etc/ctdb/systemd/ctdb_drop_all_public_ips (code=exited, status=0/SUCCESS)
  Process: 16388 ExecStartPre=/etc/ctdb/systemd/ctdb_check_config (code=exited, status=0/SUCCESS)
 Main PID: 16405 (ctdbd)
   CGroup: /system.slice/ctdb.service
           ├─16405 /usr/sbin/ctdbd -d 'ERR'
           ├─16478 /usr/sbin/ctdbd -d 'ERR'
           ├─16479 /usr/sbin/ctdbd -d 'ERR'
           ├─16480 /usr/sbin/ctdbd -d 'ERR'
           └─16481 /usr/sbin/ctdbd -d 'ERR'

июл 16 16:42:11 localhost systemd[1]: Starting CTDB...
июл 16 16:42:11 localhost ctdb_check_config[16388]: The NODES file /etc/ctdb/nodes exists and is not empty. Proceeding.
июл 16 16:42:11 localhost ctdb_check_config[16388]: Check "/var/log/log.ctdb" file if CTDB fails to start beyond this point.
июл 16 16:42:11 localhost ctdb.systemd[16401]: No recovery lock specified. Starting CTDB without split brain prevention
июл 16 16:42:11 localhost systemd[1]: Started CTDB.
Comment 5 Alexey Ivanov 2015-07-16 16:27:42 MSD
Собрал во Fresh.

====================================

Build lists:

https://abf.io/build_lists/2523122
https://abf.io/build_lists/2523123

Advisory:
************************************
Add missing wrapper library definitions.
Add configuration check script.
************************************

ВАЖНО: процедура тестирования.

Служба с конфигурацией по умолчанию *не стартует - так задумано*. Это кластерная БД, которую необходимо настраивать вручную под имеющуюся инфраструктуру.

Можно смоделировать такую ситуацию:
1. Закомментировать строку CTDB_RECOVERY_LOCK="/some/place/on/shared/storage" в файле /etc/sysconfig/ctdb
2. В файл /etc/ctdb/nodes вписать ip адрес любого интерфейса.

Можно сделать это двумя командами:
sed -i 's/CTDB_RECOVERY_LOCK=/#CTDB_RECOVERY_LOCK=/g' /etc/sysconfig/ctdb
ip a s dev eth0 | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -n 1 | tee /etc/ctdb/nodes

После этого служба должна начать работать.
Comment 6 Alexander Petryakov 2015-07-16 23:25:14 MSD
Сервис стартует с сообщениями в  логе
Jul 16 22:23:17 FR5-amd64 systemd[1]: Starting CTDB...
Jul 16 22:23:17 FR5-amd64 ctdb_check_config[15363]: The NODES file /etc/ctdb/nodes exists and is not empty. Proceeding.
Jul 16 22:23:17 FR5-amd64 ctdb_check_config[15363]: Check "/var/log/log.ctdb" file if CTDB fails to start beyond this point.
Jul 16 22:23:17 FR5-amd64 ctdb.systemd[15377]: No recovery lock specified. Starting CTDB without split brain prevention
Jul 16 22:23:17 FR5-amd64 systemd[1]: Started CTDB.
Comment 7 Vladimir Potapov 2015-07-17 05:27:34 MSD
The update is sent to expanded testing
**************************************
Comment 8 Alexander Petryakov 2015-07-18 12:39:02 MSD
Created attachment 4187 [details]
log.ctdb
Comment 9 Alexander Petryakov 2015-07-18 12:41:23 MSD
[root@FR5-amd64 sasha]# cat /etc/ctdb/nodes 
192.168.10.244
[root@FR5-amd64 sasha]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP qlen 1000
    link/ether 08:00:27:40:69:04 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.244/24 brd 192.168.10.255 scope global dynamic eth0
       valid_lft 83072sec preferred_lft 83072sec
    inet6 fe80::a00:27ff:fe40:6904/64 scope link 
       valid_lft forever preferred_lft forever
Comment 10 Alexey Ivanov 2015-07-20 10:11:25 MSD
Created attachment 4190 [details]
Успешный тест

Любопытно, у меня тестовая инсталяция отрабатывает как положено. Подробности в приложенном файле.

CTDB может отказаться работать с корректным на ервый взгляд файлом если в него затесались лишние символы - пробел в конце строки и т.п.. Однако, судя по вашему копипасту, с файлом полный порядок.

Можно ещё вывод команды "strace /usr/sbin/ctdbd -i" приложить?
Comment 11 Alexander Petryakov 2015-07-24 00:55:05 MSD
Created attachment 4193 [details]
strace log
Comment 12 Vladimir Potapov 2015-07-28 19:03:02 MSD
ctdb-2.0-11
https://abf.io/build_lists/2523122
https://abf.io/build_lists/2523123
********************************* Advisory ***************************
Add missing wrapper library definitions.
Add configuration check script.
***********************************************************************
QA Verified