Fixed down server issue after reloading keepalived

When removing a UDP health monitor, keepalived is reloaded with a
configuration without any checkers.
But if keepalived has previously detected a down server, the state of
the server is unchanged and it will never be added to the list of IPVS
servers.

Restarting keepalived on configuration change works around this issue.

This issue is fixed in keepalived (>=2.0.14):
https://github.com/acassen/keepalived/issues/1163

Story: 2005774
Task: 33491

Change-Id: Iaa34db6cb1dfed98e96a585c5d105e263c7efa65
This commit is contained in:
Gregory Thiemonge 2019-05-23 13:55:19 +02:00
parent 4decb6d53c
commit 0a9f587015
3 changed files with 20 additions and 0 deletions

View File

@ -198,6 +198,13 @@ class KeepalivedLvs(udp_listener_base.UdpListenerApiServerBase):
message='Invalid Request', message='Invalid Request',
details="Unknown action: {0}".format(action)), status=400) details="Unknown action: {0}".format(action)), status=400)
# When octavia requests a reload of keepalived, force a restart since
# a keepalived reload doesn't restore members in their initial state.
#
# TODO(gthiemonge) remove this when keepalived>=2.0.14 is widely use
if action == consts.AMP_ACTION_RELOAD:
action = consts.AMP_ACTION_RESTART
self._check_udp_listener_exists(listener_id) self._check_udp_listener_exists(listener_id)
if action == consts.AMP_ACTION_RELOAD: if action == consts.AMP_ACTION_RELOAD:
if consts.OFFLINE == self._check_udp_listener_status(listener_id): if consts.OFFLINE == self._check_udp_listener_status(listener_id):

View File

@ -556,6 +556,7 @@ SYSCTL_CMD = '/sbin/sysctl'
AMP_ACTION_START = 'start' AMP_ACTION_START = 'start'
AMP_ACTION_STOP = 'stop' AMP_ACTION_STOP = 'stop'
AMP_ACTION_RELOAD = 'reload' AMP_ACTION_RELOAD = 'reload'
AMP_ACTION_RESTART = 'restart'
GLANCE_IMAGE_ACTIVE = 'active' GLANCE_IMAGE_ACTIVE = 'active'
INIT_SYSTEMD = 'systemd' INIT_SYSTEMD = 'systemd'

View File

@ -0,0 +1,12 @@
---
issues:
- |
When a load balancer with a UDP listener is updated, the listener service
is restarted, which causes an interruption of the flow of traffic during a
short period of time. This issue is caused by a keepalived bug
(https://github.com/acassen/keepalived/issues/1163) that was fixed in
keepalived 2.0.14, but this package is not yet provided by distributions.
fixes:
- |
Fix a bug that prevented UDP servers to be restored as members of a pool
after removing a health monitor resource.