diff --git a/ansible/roles/rabbitmq/defaults/main.yml b/ansible/roles/rabbitmq/defaults/main.yml
index 06aaf8a9c495eb9601456ec8dd8bee09e364fd4f..ee983d672c2dd2c999941fae63b4372d562970a4 100644
--- a/ansible/roles/rabbitmq/defaults/main.yml
+++ b/ansible/roles/rabbitmq/defaults/main.yml
@@ -89,6 +89,10 @@ rabbitmq_cluster_partition_handling: "pause_minority"
 # More details see:
 # https://www.rabbitmq.com/ha.html#promoting-unsynchronised-mirrors
 rabbitmq_ha_promote_on_shutdown:
+# If no replica count is specified, replicates across all nodes with definition
+# "ha-mode":"all". Otherwise, uses
+# "ha-mode":"exactly","ha-params":{{ rabbitmq_ha_replica_count | int }}
+rabbitmq_ha_replica_count:
 rabbitmq_extra_config: {}
 
 ####################
diff --git a/ansible/roles/rabbitmq/templates/definitions.json.j2 b/ansible/roles/rabbitmq/templates/definitions.json.j2
index d04a0deabd3cf8338707d9b7cbc4897aecaee464..4bf42d94810355df81a1e15df53ac54f51334f9f 100644
--- a/ansible/roles/rabbitmq/templates/definitions.json.j2
+++ b/ansible/roles/rabbitmq/templates/definitions.json.j2
@@ -18,8 +18,8 @@
   ],
 {% if om_enable_rabbitmq_high_availability | bool %}
   "policies":[
-    {"vhost": "/", "name": "ha-all", "pattern": "^(?!(amq\\.)|(.*_fanout_)|(reply_)).*", "apply-to": "all", "definition": {"ha-mode":"all"{% if rabbitmq_ha_promote_on_shutdown is not none %},"ha-promote-on-shutdown":"{{ rabbitmq_ha_promote_on_shutdown }}"{% endif %}}, "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"{% if rabbitmq_ha_promote_on_shutdown is not none %},"ha-promote-on-shutdown":"{{ rabbitmq_ha_promote_on_shutdown }}"{% endif %}}, "priority":0}
+    {"vhost": "/", "name": "ha-all", "pattern": "^(?!(amq\\.)|(.*_fanout_)|(reply_)).*", "apply-to": "all", "definition": {"ha-mode":{% if rabbitmq_ha_replica_count is not none %}"exactly","ha-params":{{ rabbitmq_ha_replica_count | int }}{% else %}"all"{% endif %}{% if rabbitmq_ha_promote_on_shutdown is not none %},"ha-promote-on-shutdown":"{{ rabbitmq_ha_promote_on_shutdown }}"{% endif %}}, "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":{% if rabbitmq_ha_replica_count is not none %}"exactly","ha-params":{{ rabbitmq_ha_replica_count | int }}{% else %}"all"{% endif %}{% if rabbitmq_ha_promote_on_shutdown is not none %},"ha-promote-on-shutdown":"{{ rabbitmq_ha_promote_on_shutdown }}"{% endif %}}, "priority":0}
     {% endif %}
   ]
 {% else %}
diff --git a/releasenotes/notes/rabbitmq-ha-flag-to-change-replication-factor-321c2f9e08e7d179.yaml b/releasenotes/notes/rabbitmq-ha-flag-to-change-replication-factor-321c2f9e08e7d179.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..53c05998e6090de7019103c12a3667335e77c2bc
--- /dev/null
+++ b/releasenotes/notes/rabbitmq-ha-flag-to-change-replication-factor-321c2f9e08e7d179.yaml
@@ -0,0 +1,9 @@
+---
+features:
+  - |
+    The config option `rabbitmq_ha_replica_count` is added, to allow for
+    changing the replication factor of mirrored queues in RabbitMQ. While the
+    flag is unset, the queues are mirrored across all nodes using
+    "ha-mode":"all". Note that this only has an effect if the flag
+    ` om_enable_rabbitmq_high_availability` is set to `True`, as otherwise
+    queues are not mirrored.
diff --git a/tools/validate-all-file.py b/tools/validate-all-file.py
index dc16bf382a9c216591499c0c3c176570c2d55d8b..763020e52b7961512c09a6b60bc203e02d677bd5 100755
--- a/tools/validate-all-file.py
+++ b/tools/validate-all-file.py
@@ -127,6 +127,7 @@ def check_json_j2():
             'api_interface_address': '',
             'kolla_internal_fqdn': '',
             'octavia_provider_drivers': '',
+            'rabbitmq_ha_replica_count': 2,
         }
         data = template.render(**context)
         json.loads(data)