forked from cloudfoundry/docs-cf-admin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
configure-lb-healthcheck.html.md.erb
100 lines (82 loc) · 4.62 KB
/
configure-lb-healthcheck.html.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
93
94
95
96
97
98
99
---
title: Configuring Load Balancer Healthchecks for Cloud Foundry Routers
owner: Routing
---
<strong><%= modified_date %></strong>
This topic describes how to configure load balancer healthchecks for Cloud Foundry (CF) routers to ensure that the load balancer only forwards requests to healthy router instances. You can also configure a healthcheck for your HAProxy if your deployment uses the HAProxy component.
In environments that require high availability, operators must configure their own redundant load balancer to forward traffic directly to the CF routers. In environments that do not require high availability, operators can skip the load balancer and configure DNS to resolve the CF domains directly to a single instance of a router.
## <a id="load-balancer"></a> Add Healthcheck Endpoints for Routers
Configure your load balancer to use the following HTTP healthcheck endpoints. Add the IP addresses of all router instances along with their corresponding port and path.
* HTTP Router (Gorouter): `http://GOROUTER_IP:8080/health`
* TCP Router: `http://TCP_ROUTER_IP:80/health`
The configuration above assumes the default healthcheck ports for the CF routers. To modify these ports, see the sections below.
<% if vars.product_name == 'CF' %>
<%= partial 'go_tcp_routers_health_check_oss' %>
<% end %>
## <a id="haproxy"></a> Add a Healthcheck Endpoint for HAProxy
If you have deployed one or more instances of HAProxy between your infrastructure load balancer and Gorouters, configure your infrastructure load balancer to use the following HTTP healthcheck endpoint: `http://HAPROXY_IP:8080/health`.
The HAProxy is an optional component that provides some features that Gorouter does not and can be helpful for demonstrating horizontal scalability of the CF routers in environments where an infrastructure load balancer is not available.
## <a id="router_upgrade"></a> Set the Healthy and Unhealthy Threshold Properties for the Gorouter
To maintain high availability during upgrades to the HTTP router, each router is upgraded on a rolling basis. During upgrade of a highly available environment with multiple routers, each router is shutdown, upgraded, and restarted before the next router is upgraded. This ensures that any pending HTTP request passed to the HTTP router are handled correctly.
<% if vars.product_name == 'CF' %>
<%= partial 'lb_health_check_oss' %>
<% else %>
<%= partial '../opsguide/lb_health_check' %>
<% end %>
The image and table below describe the behavior of the load balancer health checks when a router shuts down and is restarted.
<%= image_tag("lb-health-check.png") %>
<table>
<tr>
<th>Step</th>
<th>Description</th>
</tr>
<tr>
<td>1</td>
<td>A shutdown request is sent to the router.</td>
</tr>
<tr>
<td>2</td>
<td>The router receives shutdown request, which causes the following:
<ul>
<li>The router begins sending Service Unavailable responses to the load balancer health checks.</li>
<li>The load balancer continues sending HTTP request to the router</li>
</td>
</tr>
<tr>
<td>3</td>
<td>The load balancer considers the router to be in an unhealthy state, which causes the load balancer to stop sending HTTP requests to the router.
<p>
The time between step 2 and 3 is defined by the values of the health check interval and threshold configured on the load balancer.
</p>
</td>
</tr>
<tr>
<td>4</td>
<td>The router shuts down.
<p>The interval between step 2 and 4 is defined by the <%= vars.lb_health_chk_healthy %> property of the Gorouter. In general, the value of this property should be longer than the value of the interval and threshold values (interval x threshold) of the load balancer. This additional interval ensures that any remaining HTTP requests are handled before the router shuts down.</p>
</td>
</tr>
<tr>
<td>5</td>
<td>If the router shutdown is initiated by an upgrade, the Gorouter software is upgraded.</td>
</tr>
<tr>
<td>6</td>
<td>The router restarts. The router will return Service Unavailable responses for load balancer health checks for 20 seconds; during this time the routing table is preloaded.
<%= vars.healthcheck_duration %>
</td>
</tr>
<tr>
<td>7</td>
<td>The routers begins returning Service Available responses to the load balancer health check.</td>
</tr>
<tr>
<td>8</td>
<td>The load balancer considers the router to be in a healthy state.
The time between step 7 and 8 is specified by the health check interval and threshold configured for your load balancer (health check threshold x health check interval).</td>
</tr>
<tr>
<td>9</td>
<td>Shutdown and upgrade of the other router begins.</td>
</tr>
</table>