I prefer to use keepalived for high-availability. I find it simpler to setup (one daemon and config) than heartbeat and company. The only drawback I run into, is that keepalived doesn't have a unicast option by default, and only uses VRRP for communication (The author of HAProxy has written a unicast patch for keepalived however)
I think the problem is in the init script, it does not respect the LSB spec.
If you look at the function haproxy_stop
, in file /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
}
In particularly, the line /bin/kill $pid || return 4
. This makes the case that the process is killed the return value is 4, which according to the spec this is: user had insufficient privileges. Which is not correct.
In case of an error while processing any init-script action except for
status, the init script shall print an error message and exit with a
non-zero status code:
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
You can try to change by:
/bin/kill $pid || return 7
the correct way is stop daemon with killproc(8) and if this fails killproc
sets the return value according to LSB.
Eg.
/sbin/killproc -p $PIDFILE $HAPROXY
sends the signal SIGTERM to the pid found in $PIDFILE
if and only
if this pid belongs to $HAPROXY. If the named $PIDFILE
does not
exist, killproc assumes that the daemon of $HAPROXY is not
running. The exit status is set to 0 for successfully delivering the
default signals SIGTERM and SIGKILL otherwise to 7 if the program
was not running. It is also successful if no signal was specified and
no program was there for Termination because it is already
terminated.
Best Answer
For more information about pcs you can follow the Redhat documentation, anyway, you can use the following to achieve your task:
After you deleted all your defined resources, Now you can disable and stop the cluster with: