From 58b5acbf65013f468db3fe73349689271a3c287e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Piliszek?= Date: Fri, 15 Nov 2019 09:38:43 +0100 Subject: [PATCH] Default to etcd3gw driver for etcd-based coordination To fix instability and availability issues: etcd3 is not available in repos for binary kolla images. etcd3 does not support eventlet-based services [1]. [1] https://review.opendev.org/466098 Change-Id: I430bab735da204fc81696130b17931a89214c876 Closes-bug: #1852086 Closes-bug: #1854932 --- ansible/roles/cinder/templates/cinder.conf.j2 | 7 +++++-- .../roles/designate/templates/designate.conf.j2 | 7 +++++-- ...dination-backend-etcd3gw-8a58a2f5eddd1f57.yaml | 15 +++++++++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 releasenotes/notes/coordination-backend-etcd3gw-8a58a2f5eddd1f57.yaml diff --git a/ansible/roles/cinder/templates/cinder.conf.j2 b/ansible/roles/cinder/templates/cinder.conf.j2 index 4dbed097ce..e4c6001952 100644 --- a/ansible/roles/cinder/templates/cinder.conf.j2 +++ b/ansible/roles/cinder/templates/cinder.conf.j2 @@ -209,6 +209,9 @@ auth_endpoint = {{ keystone_internal_url }} {% if cinder_coordination_backend == 'redis' %} backend_url = {{ redis_connection_string }} {% elif cinder_coordination_backend == 'etcd' %} -# NOTE(jeffrey4l): python-etcd3 module do not support multi endpoint here. -backend_url = etcd3://{{ 'api' | kolla_address(groups['etcd'][0]) | put_address_in_context('url') }}:{{ etcd_client_port }} +# NOTE(yoctozepto): etcd-compatible tooz drivers do not support multiple endpoints here (verified in Stein, Train) +# NOTE(yoctozepto): we must use etcd3gw (aka etcd3+http) due to issues with alternative (etcd3) and eventlet (as used by cinder) +# see https://bugs.launchpad.net/kolla-ansible/+bug/1854932 +# and https://review.opendev.org/466098 for details +backend_url = etcd3+http://{{ 'api' | kolla_address(groups['etcd'][0]) | put_address_in_context('url') }}:{{ etcd_client_port }} {% endif %} diff --git a/ansible/roles/designate/templates/designate.conf.j2 b/ansible/roles/designate/templates/designate.conf.j2 index 686cb3c669..b1b67deece 100644 --- a/ansible/roles/designate/templates/designate.conf.j2 +++ b/ansible/roles/designate/templates/designate.conf.j2 @@ -103,6 +103,9 @@ policy_file = {{ designate_policy_file }} {% if designate_coordination_backend == 'redis' %} backend_url = {{ redis_connection_string }} {% elif designate_coordination_backend == 'etcd' %} -# NOTE(noxoid): python-etcd3 does not support multiple endpoints -backend_url = etcd3://{{ 'api' | kolla_address(groups['etcd'][0]) | put_address_in_context('url') }}:{{ etcd_client_port }} +# NOTE(yoctozepto): etcd-compatible tooz drivers do not support multiple endpoints here (verified in Stein, Train) +# NOTE(yoctozepto): we must use etcd3gw (aka etcd3+http) due to issues with alternative (etcd3) and eventlet (as used by designate) +# see https://bugs.launchpad.net/kolla-ansible/+bug/1854932 +# and https://review.opendev.org/466098 for details +backend_url = etcd3+http://{{ 'api' | kolla_address(groups['etcd'][0]) | put_address_in_context('url') }}:{{ etcd_client_port }} {% endif %} diff --git a/releasenotes/notes/coordination-backend-etcd3gw-8a58a2f5eddd1f57.yaml b/releasenotes/notes/coordination-backend-etcd3gw-8a58a2f5eddd1f57.yaml new file mode 100644 index 0000000000..572b8a908b --- /dev/null +++ b/releasenotes/notes/coordination-backend-etcd3gw-8a58a2f5eddd1f57.yaml @@ -0,0 +1,15 @@ +--- +fixes: + - | + When ``etcd`` is used with ``cinder_coordination_backend`` + and/or ``designate_coordination_backend``, the config has been changed + to use the ``etcd3gw`` (aka ``etcd3+http``) ``tooz`` coordination driver + instead of ``etcd3`` due to issues with the latter's availability and + stability. ``etcd3`` does not handle well eventlet-based services, + such as cinder's and designate's. + See bugs `1852086 + `__ and `1854932 + `__ + for details. + See also `tooz change introducing etcd3gw + `__.