High Availability Guide¶
Designate supports running all of its components services in “active-active” HA modes.
Some services require some extra setup to ensure that they can work in active-active, and the services are listed below.
designate-api¶
Needs Access to:¶
AMQP
![digraph APIHA {
rankdir=LR
{"L7 Load Balancers" [shape=box]
"API Server 1" [shape=box]
"API Server 2" [shape=box]
"API Server 3" [shape=box]
"AMQP Servers" [shape=box]
}
subgraph "API Servers" {
cluster=true;
label="API Servers";
"API Server 1";
"API Server 2";
"API Server 3";
}
"L7 Load Balancers" -> {"API Server 1" "API Server 2" "API Server 3"} -> "AMQP Servers";
}](../_images/graphviz-2a127d38c9d42f677cb51c21555545958cea56b8.png)
Notes¶
To run multiple designate-api services, you should run the services behind a load balancer.
When behind the load balancer, you may need to set the following:
[service:api]
api_base_uri = http://<load balancer URI>/
enable_host_header = True
Or the following:
[oslo_middleware]
enable_proxy_headers_parsing = true
And then the load balancer to set appropriate headers (e.g. enable mod_proxy in apache.)
designate-central¶
Needs Access to:¶
AMQP
Database
![digraph CENTRALHA {
rankdir=LR
{"AMQP Servers" [shape=box]
"designate-central Server 1" [shape=box]
"designate-central Server 2" [shape=box]
"designate-central Server 3" [shape=box]
"Database Servers" [shape=cylinder]
}
subgraph "designate-central Servers" {
cluster=true;
label="designate-central Servers";
"designate-central Server 1";
"designate-central Server 2";
"designate-central Server 3";
}
"AMQP Servers" -> "designate-central Server 1" [dir=both];
"AMQP Servers" -> "designate-central Server 2" [dir=both];
"AMQP Servers" -> "designate-central Server 3" [dir=both];
"designate-central Server 1" -> "Database Servers";
"designate-central Server 2" -> "Database Servers";
"designate-central Server 3" -> "Database Servers";
}](../_images/graphviz-43e2baedf03ebc636c48312f5eae1cdc78edef49.png)
Notes¶
You can run as many designate-central services as needed, as long as they all have access to the AMQP server(s), work will be distributed across all of them.
designate-mdns¶
Needs Access to:¶
AMQP
Database
DNS Servers
![digraph MDNSHA {
rankdir=LR
{"AMQP Servers" [shape=box]
"designate-mdns Server 1" [shape=box]
"designate-mdns Server 2" [shape=box]
"designate-mdns Server 3" [shape=box]
"DNS Servers" [shape=egg]
"Database Servers" [shape=cylinder]
}
subgraph "designate-mdns Servers" {
cluster=true;
label="designate-mdns Servers";
"designate-mdns Server 1";
"designate-mdns Server 2";
"designate-mdns Server 3";
}
"AMQP Servers" -> "designate-mdns Server 1" [dir=both];
"AMQP Servers" -> "designate-mdns Server 2" [dir=both];
"AMQP Servers" -> "designate-mdns Server 3" [dir=both];
"designate-mdns Server 1" -> "Database Servers" [dir=back];
"designate-mdns Server 2" -> "Database Servers" [dir=back];
"designate-mdns Server 3" -> "Database Servers" [dir=back];
"designate-mdns Server 1" -> "DNS Servers"
"designate-mdns Server 2" -> "DNS Servers"
"designate-mdns Server 3" -> "DNS Servers"
}](../_images/graphviz-413cd8dde1602014a8599a54a1e8d0cbbfe3c359.png)
Notes¶
You can run as many designate-mdns services as needed, as long as they all have access to the AMQP server(s), work will be distributed across all of them.
designate-worker¶
Needs Access to:¶
AMQP
DNS Servers
![digraph WORKERSHA {
rankdir=LR
{"AMQP Servers" [shape=box]
"designate-worker Server 1" [shape=box]
"designate-worker Server 2" [shape=box]
"designate-worker Server 3" [shape=box]
"DNS Servers" [shape=egg]
}
subgraph "designate-worker Servers" {
cluster=true;
label="designate-worker Servers";
"designate-worker Server 1";
"designate-worker Server 2";
"designate-worker Server 3";
}
"AMQP Servers" -> "designate-worker Server 1" [dir=both];
"AMQP Servers" -> "designate-worker Server 2" [dir=both];
"AMQP Servers" -> "designate-worker Server 3" [dir=both];
"designate-worker Server 1" -> "DNS Servers"
"designate-worker Server 2" -> "DNS Servers"
"designate-worker Server 3" -> "DNS Servers"
}](../_images/graphviz-7ac27ce83c92f32060e4900ca02ebf0981a276f7.png)
Notes¶
You can run as many designate-worker services as needed, as long as they all have access to the AMQP server(s), work will be distributed across all of them.
designate-producer¶
Needs Access to:¶
AMQP
DLM
![digraph PRODUCERSHA {
rankdir=LR
{"AMQP Servers" [shape=box]
"designate-producer Server 1" [shape=box]
"designate-producer Server 2" [shape=box]
"designate-producer Server 3" [shape=box]
"DLM Servers" [shape=octagon]
}
subgraph "designate-producer Servers" {
cluster=true;
label="designate-producer Servers";
"designate-producer Server 1";
"designate-producer Server 2";
"designate-producer Server 3";
}
"AMQP Servers" -> "designate-producer Server 1" [dir=both];
"AMQP Servers" -> "designate-producer Server 2" [dir=both];
"AMQP Servers" -> "designate-producer Server 3" [dir=both];
"designate-producer Server 1" -> "DLM Servers"
"designate-producer Server 2" -> "DLM Servers"
"designate-producer Server 3" -> "DLM Servers"
}](../_images/graphviz-cbce0a2b9463981f6b10337d36a00d2686fa4b1b.png)
Notes¶
You can run as many designate-producer services as needed, as long as they all have access to the AMQP server(s), and a distributed lock manager, work will be sharded across all the services.
You will need to set a coordination backend_url. This needs to be a DLM that is supported by tooz, that supports group membership. See tooz driver list for available drivers
Warning
Failure to set a backend_url can cause unexpected consequences, and may result in some periodic tasks being ran more than once.
[coordination]
backend_url = kazoo://<zookeeper url>:<zookeeper port>
designate-sink¶
Needs Access to:¶
AMQP
![digraph SINKSHA {
rankdir=LR
{"AMQP Servers" [shape=box]
"designate-sink Server 1" [shape=box]
"designate-sink Server 2" [shape=box]
"designate-sink Server 3" [shape=box]
}
subgraph "designate-sink Servers" {
cluster=true;
label="designate-sink Servers";
"designate-sink Server 1";
"designate-sink Server 2";
"designate-sink Server 3";
}
"AMQP Servers" -> "designate-sink Server 1" [dir=both];
"AMQP Servers" -> "designate-sink Server 2" [dir=both];
"AMQP Servers" -> "designate-sink Server 3" [dir=both];
}](../_images/graphviz-209e4d5f3b6ad39e578c231b9638bed930b7d7d4.png)
Notes¶
You can run as many designate-sink services as needed, as long as they all have access to the AMQP server(s), work will be distributed across all of them.