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 и моя конфигурация выглядит следующим образом:
Чтобы проверить все, я убиваю процесс 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, если программа не выполнялась. Это также успешно, если не был указан сигнал и не было программы для завершения, потому что она уже завершена.