Я настраиваю кластер 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)
Думаю проблема в сценарий инициализации, он не уважает Спецификация 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 на pid, найденный в
$PIDFILE
тогда и только тогда, когда этот pid принадлежит $ HAPROXY. Если названный$PIDFILE
не существует, killproc предполагает, что демон $ HAPROXY не запущен. Статус выхода устанавливается на 0 для успешной доставки сигналов по умолчанию SIGTERM и SIGKILL, иначе на 7, если программа не была запущена. Он также считается успешным, если не был указан сигнал и не было программы для завершения, потому что оно уже завершено.