Corosync/Pacemaker + Haproxy Failed Actions: недостаточно прав

Я устанавливаю кластер Corosync/Pacemaker + HAproxy, используя следующее руководство по Ubuntu 14.04 LTS: http://www.sebastien-han.fr/blog/2012/04/15/active-passive-failover-cluster-on-a-mysql-galera-cluster-with-haproxy-lsb-agent/

Я не добавил настройки виртуального IP-адреса, только два узла, оба с установленным Haproxy. Я использую lsb:haproxy и моя конфигурация выглядит следующим образом:

Corosync lsb:haproxyнеудачные действия: недостаточные привилегииЧтобы проверить все, я убиваю процесс haproxy, выполнив следующую команду: sudo kill -9 [PID#]

Затем я проверяю состояние своего кластера и получаю следующее сообщение об ошибке: "Неудачные действия: недостаточно прав". Я не изменил определение пользователя / группы haproxy, и мой aisexec{} использует root как для пользователя, так и для группы.

Какими должны быть мои разрешения, если я хочу, чтобы Corosync/Pacemaker управлял Haproxy?

РЕДАКТИРОВАТЬ: Когда я запускаю приведенную ниже команду остановки службы, haproxy перезапускается, как ожидалось. проверка crm status haproxy демон работает как обычно

# sudo service haproxy stop
# sudo crm status
HaproxyHA     (lsb:haproxy):    Started node1
Failed Actions:

Но когда я убиваю pid вручную, я продолжаю видеть ошибку:

# sudo kill -9 $PID
HaproxyHA (lsb:haproxy): Started node1 (unmanaged) FAILED
Failed Actions:

После внесения изменений Федерико упомянул (/bin/kill $pid || return 7) это не меняет мою проблему, и я нахожу это в моих журналах:

pengine: warning: unpack_rsc_op: Processing failed op stop for HaproxyHA on node1: not running (7)

1 ответ

Я думаю, что проблема в сценарии инициализации, он не соответствует спецификации LSB.

Если вы посмотрите на функцию haproxy_stopв файле /etc/init.d/haproxy:

haproxy_stop()
{
    if [ ! -f $PIDFILE ] ; then
        # This is a success according to LSB
        return 0
    fi
    for pid in $(cat $PIDFILE) ; do
        /bin/kill $pid || return 4
    done
    rm -f $PIDFILE
    return 0
}

В частности, линия /bin/kill $pid || return 4, Это приводит к тому, что процесс завершается, возвращаемое значение равно 4, что, согласно спецификации, таково: у пользователя недостаточно прав. Что не правильно.

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

1 generic or unspecified error (current practice)
2 invalid or excess argument(s)
3 unimplemented feature (for example, "reload")
4 user had insufficient privilege
5 program is not installed
6 program is not configured
7 program is not running
8-99  reserved for future LSB use
100-149   reserved for distribution use
150-199   reserved for application use
200-254   reserved

Вы можете попробовать изменить:

/bin/kill $pid || return 7

правильный путь - остановить демон с помощью killproc(8), и если это не удастся killproc устанавливает возвращаемое значение в соответствии с LSB.

Например.

/sbin/killproc -p $PIDFILE $HAPROXY

отправляет сигнал SIGTERM на пид, найденный в $PIDFILE если и только если этот pid принадлежит $HAPROXY. Если названный $PIDFILE не существует, killproc предполагает, что демон $ HAPROXY не работает. Состояние выхода установлено на 0 для успешной доставки сигналов по умолчанию SIGTERM и SIGKILL, в противном случае на 7, если программа не выполнялась. Это также успешно, если не был указан сигнал и не было программы для завершения, потому что она уже завершена.

Другие вопросы по тегам