Add a flag to handle RabbitMQ high availability
A combination of durable queues and classic queue mirroring can be used to provide high availability of RabbitMQ. However, these options should only be used together, otherwise the system will become unstable. Using the flag ``om_enable_rabbitmq_high_availability`` will either enable both options at once, or neither of them. There are some queues that should not be mirrored: * ``reply`` queues (these have a single consumer and TTL policy) * ``fanout`` queues (these have a TTL policy) * ``amq`` queues (these are auto-delete queues, with a single consumer) An exclusionary pattern is used in the classic mirroring policy. This pattern is ``^(?!(amq\\.)|(.*_fanout_)|(reply_)).*`` Change-Id: I51c8023b260eb40b2eaa91bd276b46890c215c25
This commit is contained in:
parent
fb8d77a146
commit
09df6fc1aa
ansible
group_vars
roles
aodh/templates
barbican/templates
blazar/templates
ceilometer/templates
cinder/templates
cloudkitty/templates
cyborg/templates
designate/templates
glance/templates
heat/templates
ironic/templates
keystone/templates
magnum/templates
manila/templates
masakari/templates
mistral/templates
murano/templates
neutron/templates
nova-cell/templates
nova/templates
octavia/templates
rabbitmq/templates
sahara/templates
senlin/templates
solum/templates
tacker/templates
trove/templates
vitrage/templates
watcher/templates
zun/templates
doc/source/reference/message-queues
releasenotes/notes
@ -234,6 +234,8 @@ om_enable_rabbitmq_tls: "{{ rabbitmq_enable_tls | bool }}"
|
||||
# CA certificate bundle in containers using oslo.messaging with RabbitMQ TLS.
|
||||
om_rabbitmq_cacert: "{{ rabbitmq_cacert }}"
|
||||
|
||||
om_enable_rabbitmq_high_availability: false
|
||||
|
||||
####################
|
||||
# Networking options
|
||||
####################
|
||||
|
@ -66,3 +66,6 @@ heartbeat_in_pthread = {{ service_name == 'aodh-api' }}
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
@ -84,6 +84,9 @@ heartbeat_in_pthread = false
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
[oslo_middleware]
|
||||
enable_proxy_headers_parsing = True
|
||||
|
@ -59,6 +59,9 @@ heartbeat_in_pthread = false
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
{% if blazar_policy_file is defined %}
|
||||
[oslo_policy]
|
||||
|
@ -41,6 +41,9 @@ heartbeat_in_pthread = false
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
{% if ceilometer_policy_file is defined %}
|
||||
[oslo_policy]
|
||||
|
@ -71,6 +71,9 @@ heartbeat_in_pthread = {{ service_name == 'cinder-api' }}
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
[oslo_middleware]
|
||||
enable_proxy_headers_parsing = True
|
||||
|
@ -50,6 +50,9 @@ heartbeat_in_pthread = {{ service_name == 'cloudkitty-api' }}
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
[collect]
|
||||
collector = {{ cloudkitty_collector_backend }}
|
||||
|
@ -63,3 +63,6 @@ heartbeat_in_pthread = false
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
@ -98,6 +98,9 @@ heartbeat_in_pthread = false
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
[oslo_concurrency]
|
||||
lock_path = /var/lib/designate/tmp
|
||||
|
@ -126,6 +126,9 @@ heartbeat_in_pthread = false
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
{% if glance_policy_file is defined %}
|
||||
[oslo_policy]
|
||||
|
@ -78,6 +78,9 @@ heartbeat_in_pthread = {{ service_name == 'heat-api' or service_name == 'heat-ap
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
{% if heat_policy_file is defined %}
|
||||
[oslo_policy]
|
||||
|
@ -18,6 +18,9 @@ heartbeat_in_pthread = true
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
[ironic]
|
||||
{% if ironic_enable_keystone_integration | bool %}
|
||||
|
@ -33,6 +33,9 @@ heartbeat_in_pthread = {{ service_name == 'ironic-api' }}
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
{% if ironic_policy_file is defined %}
|
||||
[oslo_policy]
|
||||
|
@ -65,6 +65,9 @@ heartbeat_in_pthread = {{ service_name == 'keystone' }}
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
{% if enable_osprofiler | bool %}
|
||||
[profiler]
|
||||
|
@ -132,6 +132,9 @@ heartbeat_in_pthread = false
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
{% if magnum_policy_file is defined %}
|
||||
[oslo_policy]
|
||||
|
@ -62,6 +62,9 @@ heartbeat_in_pthread = false
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
[oslo_middleware]
|
||||
enable_proxy_headers_parsing = True
|
||||
|
@ -56,6 +56,9 @@ heartbeat_in_pthread = {{ service_name == 'masakari-api' }}
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
[oslo_middleware]
|
||||
enable_proxy_headers_parsing = True
|
||||
|
@ -78,6 +78,9 @@ heartbeat_in_pthread = false
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
{% if mistral_policy_file is defined %}
|
||||
[oslo_policy]
|
||||
|
@ -67,6 +67,9 @@ heartbeat_in_pthread = false
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
[oslo_middleware]
|
||||
enable_proxy_headers_parsing = True
|
||||
|
@ -142,6 +142,9 @@ heartbeat_in_pthread = false
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
{% if neutron_policy_file is defined %}
|
||||
[oslo_policy]
|
||||
|
@ -190,6 +190,9 @@ heartbeat_in_pthread = false
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
{% if service_name in nova_cell_services_require_policy_json and nova_policy_file is defined %}
|
||||
[oslo_policy]
|
||||
|
@ -144,6 +144,9 @@ heartbeat_in_pthread = {{ service_name == 'nova-api' }}
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
{% if service_name in nova_services_require_policy_json and nova_policy_file is defined %}
|
||||
[oslo_policy]
|
||||
|
@ -128,6 +128,9 @@ heartbeat_in_pthread = {{ service_name == 'octavia-api' }}
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
{% if octavia_policy_file is defined %}
|
||||
[oslo_policy]
|
||||
|
@ -16,5 +16,13 @@
|
||||
{"user": "{{ murano_agent_rabbitmq_user }}", "vhost": "{{ murano_agent_rabbitmq_vhost }}", "configure": ".*", "write": ".*", "read": ".*"}
|
||||
{% endif %}
|
||||
],
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
"policies":[
|
||||
{"vhost": "/", "name": "ha-all", "pattern": "^(?!(amq\\.)|(.*_fanout_)|(reply_)).*", "apply-to": "all", "definition": {"ha-mode":"all"}, "priority":0}{% if project_name == 'outward_rabbitmq' %},
|
||||
{"vhost": "{{ murano_agent_rabbitmq_vhost }}", "name": "ha-all", "pattern": "^(?!(amq\\.)|(.*_fanout_)|(reply_)).*", "apply-to": "all", "definition": {"ha-mode":"all"}, "priority":0}
|
||||
{% endif %}
|
||||
]
|
||||
{% else %}
|
||||
"policies":[]
|
||||
{% endif %}
|
||||
}
|
||||
|
@ -46,6 +46,9 @@ heartbeat_in_pthread = false
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
{% if sahara_policy_file is defined %}
|
||||
[oslo_policy]
|
||||
|
@ -74,6 +74,9 @@ heartbeat_in_pthread = false
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
{% if senlin_policy_file is defined %}
|
||||
[oslo_policy]
|
||||
|
@ -73,3 +73,6 @@ heartbeat_in_pthread = false
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
@ -74,6 +74,9 @@ heartbeat_in_pthread = false
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
{% if tacker_policy_file is defined %}
|
||||
[oslo_policy]
|
||||
|
@ -77,6 +77,9 @@ heartbeat_in_pthread = false
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
{% if enable_osprofiler | bool %}
|
||||
[profiler]
|
||||
|
@ -75,6 +75,9 @@ heartbeat_in_pthread = {{ service_name == 'vitrage-api' }}
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
[oslo_concurrency]
|
||||
lock_path = /var/lib/vitrage/tmp
|
||||
|
@ -65,6 +65,9 @@ heartbeat_in_pthread = false
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
||||
{% if watcher_policy_file is defined %}
|
||||
[oslo_policy]
|
||||
|
@ -130,3 +130,6 @@ heartbeat_in_pthread = {{ service_name == 'zun-api' }}
|
||||
ssl = true
|
||||
ssl_ca_file = {{ om_rabbitmq_cacert }}
|
||||
{% endif %}
|
||||
{% if om_enable_rabbitmq_high_availability | bool %}
|
||||
amqp_durable_queues = true
|
||||
{% endif %}
|
||||
|
@ -109,3 +109,12 @@ https://erlang.org/doc/man/erl.html#emulator-flags
|
||||
The ``+sbwt none +sbwtdcpu none +sbwtdio none`` arguments prevent busy waiting
|
||||
of the scheduler, for more details see:
|
||||
https://www.rabbitmq.com/runtime.html#busy-waiting.
|
||||
|
||||
High Availability
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
RabbitMQ offers two features that, when used together, allow for high
|
||||
availability. These are durable queues and classic queue mirroring. Setting the
|
||||
flag ``om_enable_rabbitmq_high_availability`` to ``true`` will enable both of
|
||||
these features. There are some queue types which are intentionally not mirrored
|
||||
using the exclusionary pattern ``^(?!(amq\\.)|(.*_fanout_)|(reply_)).*``.
|
||||
|
10
releasenotes/notes/add-a-flag-to-handle-rabbitmq-high-availability-44c709318be6cb7b.yaml
Normal file
10
releasenotes/notes/add-a-flag-to-handle-rabbitmq-high-availability-44c709318be6cb7b.yaml
Normal file
@ -0,0 +1,10 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
Adds the flag ``om_enable_rabbitmq_high_availablity``. Setting this to
|
||||
``true`` will enable both durable queues and classic mirrored queues in
|
||||
RabbitMQ. Note that classic queue mirroring and transient (aka non-durable)
|
||||
queues are deprecated and subject to removal in RabbitMQ version 4.0 (date
|
||||
of release unknown).
|
||||
Changes the pattern used in classic mirroring to exclude some queue types.
|
||||
This pattern is ``^(?!(amq\\.)|(.*_fanout_)|(reply_)).*``.
|
Loading…
x
Reference in New Issue
Block a user