-
Notifications
You must be signed in to change notification settings - Fork 13
/
deploying.md.erb
92 lines (56 loc) · 4.58 KB
/
deploying.md.erb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
---
breadcrumb: RabbitMQ for Pivotal Cloud Foundry® Documentation
title: Deploying the RabbitMQ Service
---
## Default Deployment
Deploying RabbitMQ for [Pivotal Cloud Foundry®](https://network.pivotal.io/products/pivotal-cf) (PCF) through Ops Manager will deploy a RabbitMQ cluster of **2 nodes** by default.
The deployment includes a single load balancer `haproxy` which spreads connections on all of the default ports, for all of the shipped plugins across all of the machines within the cluster.
The deployment will occur in a single availability zone (AZ).
<%= image_tag("images/deployment_default.jpeg") %>
### Considerations for this deployment
* Provides HA for RabbitMQ nodes to avoid data loss
* HAProxy is a single point of failure (SPOF)
* The entire deployment is in a single AZ, which does not protect against external failures from failures in hardware, networking, etc.
## Recommended Deployment
We recommend that RabbitMQ is deployed across at least two availability zones.
The HAProxy job instance count should also be increased to match the number of AZs to ensure there is a HAProxy located in each AZ.
This removes the HAProxy SPOF and provides further redundancy.
<%= image_tag("images/deployment_recommended.jpeg") %>
In the above diagram, you can see that you can now suffer the failure of a single HAProxy and single RabbitMQ node and still keep your cluster online and applications connected.
### Upgrading to this deployment from a single AZ deployment
It is **not** possible to upgrade to this setup from the default deployment across a single AZ.
This is because the AZ setup cannot be changed once the tile has being deployed for the first time, this is to protect against data loss when moving jobs between AZs.
### Upgrading to this deployment from a multi AZ deployment
If you have deployed the tile across two AZs, but with a single HAProxy instance you can migrate to this setup as follows:
1. Deploy an additional HAProxy instance through OpsManager
2. New or re-bound applications to the RabbitMQ service will see the IPs of both HAProxys immediately
3. Existing bound applications will continue to work, but only using the previously deployed HAProxy IP Address. They can be re-bound as required at your discretion.
### Considerations for this deployment
* Requires IaaS configuration for availability zones ahead of deploying the RabbitMQ tile
* Application developers will be handed the IPs of each deployed HAProxy in their environment variables
## Advanced Deployment
This deployment builds upon the above recommended deployment, so follows the same upgrade paths.
This allows you to replace the use of HAProxy with your own external load balancer.
You may choose to do this to remove any knowledge of the topology of the RabbitMQ setup from application developers.
<%= image_tag("images/deployment_advanced.jpeg") %>
Advantages
* Application developers do not need to handle multiple IPs for the HAProxy jobs in their applications
Disadvantages
* The load balancer needs to be configured with the IPs of the RabbitMQ Nodes. These will only be known once the deployment has finished. The IPs should remain the same during subsequent deployments but there is a risk they can change.
### Upgrading to this deployment from the recommended deployment
It is possible to first deploy with multiple HAProxy jobs, as per the recommended deployment and decided to later use your own external load balancer.
This can be achieved without downtime to your applications.
This can be achieved as follows:
1. Configure your external load balancer to point to the RabbitMQ Node IPs
2. Configure the DNS name or IP address for the external load balancer (ELB) on the RabbitMQ tile in OpsManager
3. Deploy the changes
4. Any new instances of the RabbitMQ service **or** any re-bound connections will use the DNS name or IP address of the ELB in their `VCAP_SERVICES`
5. Any existing instances will continue to use the HAProxy IP addresses in their `VCAP_SERVICES`
6. Phase the re-binding of existing applications to have their environment variables updated
7. Once all applications are updated
8. Reduce the instance count of the `HAProxy` job in OpsManager to 0
9. Deploy the changes
This approach works as any existing bound applications have their `VCAP_SERVICES` information cached in the cloud controller and are only updated by a re-bind request.
### Downgrading from this deployment to the recommended deployment
If you are currently using an external load balancer, then you can move back to using HAProxys instead.
You can achieve this by following the above steps in reverse order and re-instating the HAProxy jobs.