mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-01-07 01:41:00 +01:00
MAJOR: mworker: exits the master on failure
This patch changes the behavior of the master during the exit of a worker. When a worker exits with an error code, for example in the case of a segfault, all workers are now killed and the master leaves. If you don't want this behavior you can use the option "master-worker no-exit-on-failure".
This commit is contained in:
parent
86d0df0b66
commit
4cfede87a3
@ -869,19 +869,20 @@ lua-load <file>
|
||||
This global directive loads and executes a Lua file. This directive can be
|
||||
used multiple times.
|
||||
|
||||
master-worker [exit-on-failure]
|
||||
master-worker [no-exit-on-failure]
|
||||
Master-worker mode. It is equivalent to the command line "-W" argument.
|
||||
This mode will launch a "master" which will monitor the "workers". Using
|
||||
this mode, you can reload HAProxy directly by sending a SIGUSR2 signal to
|
||||
the master. The master-worker mode is compatible either with the foreground
|
||||
or daemon mode. It is recommended to use this mode with multiprocess and
|
||||
systemd.
|
||||
The "exit-on-failure" option allows the master to kill every workers and
|
||||
exit when one of the current workers died. It is convenient to combine this
|
||||
option with Restart=on-failure in a systemd unit file in order to relaunch
|
||||
the whole process.
|
||||
By default, if a worker exits with a bad return code, in the case of a
|
||||
segfault for example, all workers will be killed, and the master will leave.
|
||||
It is convenient to combine this behavior with Restart=on-failure in a
|
||||
systemd unit file in order to relaunch the whole process. If you don't want
|
||||
this behavior, you must use the keyword "no-exit-on-failure".
|
||||
|
||||
See alors "-W" in the management guide.
|
||||
See also "-W" in the management guide.
|
||||
|
||||
nbproc <number>
|
||||
Creates <number> processes when going daemon. This requires the "daemon"
|
||||
|
||||
@ -65,7 +65,7 @@
|
||||
#define GTUNE_RESOLVE_DONTFAIL (1<<7)
|
||||
|
||||
#define GTUNE_SOCKET_TRANSFER (1<<8)
|
||||
#define GTUNE_EXIT_ONFAILURE (1<<9)
|
||||
#define GTUNE_NOEXIT_ONFAILURE (1<<9)
|
||||
#define GTUNE_USE_SYSTEMD (1<<10)
|
||||
|
||||
/* Access level for a stats socket */
|
||||
|
||||
@ -716,8 +716,8 @@ int cfg_parse_global(const char *file, int linenum, char **args, int kwm)
|
||||
if (alertif_too_many_args(1, file, linenum, args, &err_code))
|
||||
goto out;
|
||||
if (*args[1]) {
|
||||
if (!strcmp(args[1], "exit-on-failure")) {
|
||||
global.tune.options |= GTUNE_EXIT_ONFAILURE;
|
||||
if (!strcmp(args[1], "no-exit-on-failure")) {
|
||||
global.tune.options |= GTUNE_NOEXIT_ONFAILURE;
|
||||
} else {
|
||||
ha_alert("parsing [%s:%d] : '%s' only supports 'exit-on-failure' option.\n", file, linenum, args[0]);
|
||||
err_code |= ERR_ALERT | ERR_FATAL;
|
||||
|
||||
@ -759,7 +759,7 @@ restart_wait:
|
||||
if (current_child(exitpid)) {
|
||||
ha_alert("Current worker %d left with exit code %d\n", exitpid, status);
|
||||
if (status != 0 && status != 130 && status != 143
|
||||
&& global.tune.options & GTUNE_EXIT_ONFAILURE) {
|
||||
&& !(global.tune.options & GTUNE_NOEXIT_ONFAILURE)) {
|
||||
ha_alert("exit-on-failure: killing every workers with SIGTERM\n");
|
||||
mworker_kill(SIGTERM);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user