annotate xml/en/docs/http/load_balancing.xml @ 1800:9d722e4153ab

Documented the "max_conns" parameter as opensource.
author Yaroslav Zhuravlev <yar@nginx.com>
date Wed, 28 Sep 2016 20:25:42 +0300
parents f9a138e5ab14
children 4cafd82e5007
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1076
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
1 <?xml version="1.0"?>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
2
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
3 <!--
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
4 Copyright (C) Nginx, Inc.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
5 -->
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
6
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
7 <!DOCTYPE article SYSTEM "../../../../dtd/article.dtd">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
8
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
9 <article name="Using nginx as HTTP load balancer"
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
10 link="/en/docs/http/load_balancing.html"
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
11 lang="en"
1527
f9a138e5ab14 Updated links to nginx.com website.
Valentin Bartenev <vbart@nginx.com>
parents: 1194
diff changeset
12 rev="4">
1076
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
13
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
14 <section name="Introduction">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
15
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
16 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
17 Load balancing across multiple application instances is a commonly used
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
18 technique for optimizing resource utilization, maximizing throughput,
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
19 reducing latency, and ensuring fault-tolerant configurations.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
20 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
21
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
22 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
23 It is possible to use nginx as a very efficient HTTP load balancer to
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
24 distribute traffic to several application servers and to improve
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
25 performance, scalability and reliability of web applications with nginx.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
26 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
27
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
28 </section>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
29
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
30
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
31 <section id="nginx_load_balancing_methods"
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
32 name="Load balancing methods">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
33
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
34 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
35 The following load balancing mechanisms (or methods) are supported in
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
36 nginx:
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
37 <list type="bullet" compact="no">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
38
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
39 <listitem>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
40 round-robin — requests to the application servers are distributed
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
41 in a round-robin fashion,
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
42 </listitem>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
43
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
44 <listitem>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
45 least-connected — next request is assigned to the server with the
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
46 least number of active connections,
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
47 </listitem>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
48
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
49 <listitem>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
50 ip-hash — a hash-function is used to determine what server should
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
51 be selected for the next request (based on the client’s IP address).
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
52 </listitem>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
53
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
54 </list>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
55 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
56
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
57 </section>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
58
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
59
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
60 <section id="nginx_load_balancing_configuration"
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
61 name="Default load balancing configuration">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
62
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
63 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
64 The simplest configuration for load balancing with nginx may look
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
65 like the following:
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
66 <programlisting>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
67 http {
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
68 upstream myapp1 {
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
69 server srv1.example.com;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
70 server srv2.example.com;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
71 server srv3.example.com;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
72 }
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
73
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
74 server {
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
75 listen 80;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
76
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
77 location / {
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
78 proxy_pass http://myapp1;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
79 }
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
80 }
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
81 }
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
82 </programlisting>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
83 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
84
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
85 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
86 In the example above, there are 3 instances of the same application
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
87 running on srv1-srv3.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
88 When the load balancing method is not specifically configured,
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
89 it defaults to round-robin.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
90 All requests are
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
91 <link doc="ngx_http_proxy_module.xml" id="proxy_pass">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
92 proxied</link> to the server group myapp1, and nginx applies HTTP load
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
93 balancing to distribute the requests.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
94 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
95
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
96 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
97 Reverse proxy implementation in nginx includes load balancing for HTTP,
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
98 HTTPS, FastCGI, uwsgi, SCGI, and memcached.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
99 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
100
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
101 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
102 To configure load balancing for HTTPS instead of HTTP, just use “https”
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
103 as the protocol.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
104 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
105
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
106 <para>
1181
b8f0362f61e5 Added links to scgi.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 1178
diff changeset
107 When setting up load balancing for FastCGI, uwsgi, SCGI, or memcached, use
1076
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
108 <link doc="ngx_http_fastcgi_module.xml" id="fastcgi_pass"/>,
1194
9264fdb6c833 Added links to uwsgi.
Ruslan Ermilov <ru@nginx.com>
parents: 1181
diff changeset
109 <link doc="ngx_http_uwsgi_module.xml" id="uwsgi_pass"/>,
1181
b8f0362f61e5 Added links to scgi.
Yaroslav Zhuravlev <yar@nginx.com>
parents: 1178
diff changeset
110 <link doc="ngx_http_scgi_module.xml" id="scgi_pass"/>, and
1076
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
111 <link doc="ngx_http_memcached_module.xml" id="memcached_pass"/>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
112 directives respectively.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
113 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
114
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
115 </section>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
116
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
117
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
118 <section id="nginx_load_balancing_with_least_connected"
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
119 name="Least connected load balancing">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
120
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
121 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
122 Another load balancing discipline is least-connected.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
123 Least-connected allows controlling the load on application
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
124 instances more fairly in a situation when some of the requests
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
125 take longer to complete.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
126 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
127
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
128 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
129 With the least-connected load balancing, nginx will try not to overload a
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
130 busy application server with excessive requests, distributing the new
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
131 requests to a less busy server instead.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
132 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
133
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
134 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
135 Least-connected load balancing in nginx is activated when the
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
136 <link doc="ngx_http_upstream_module.xml" id="least_conn">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
137 least_conn</link> directive is used as part of the server group configuration:
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
138 <programlisting>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
139 upstream myapp1 {
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
140 least_conn;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
141 server srv1.example.com;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
142 server srv2.example.com;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
143 server srv3.example.com;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
144 }
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
145 </programlisting>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
146 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
147
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
148 </section>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
149
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
150
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
151 <section id="nginx_load_balancing_with_ip_hash"
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
152 name="Session persistence">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
153
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
154 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
155 Please note that with round-robin or least-connected load
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
156 balancing, each subsequent client’s request can be potentially
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
157 distributed to a different server.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
158 There is no guarantee that the same client will be always
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
159 directed to the same server.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
160 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
161
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
162 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
163 If there is the need to tie a client to a particular application server —
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
164 in other words, make the client’s session “sticky” or “persistent” in
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
165 terms of always trying to select a particular server — the ip-hash load
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
166 balancing mechanism can be used.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
167 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
168
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
169 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
170 With ip-hash, the client’s IP address is used as a hashing key to
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
171 determine what server in a server group should be selected for the
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
172 client’s requests.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
173 This method ensures that the requests from the same client
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
174 will always be directed to the same server
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
175 except when this server is unavailable.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
176 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
177
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
178 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
179 To configure ip-hash load balancing, just add the
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
180 <link doc="ngx_http_upstream_module.xml" id="ip_hash"/>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
181 directive to the server (upstream) group configuration:
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
182 <programlisting>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
183 upstream myapp1 {
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
184 ip_hash;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
185 server srv1.example.com;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
186 server srv2.example.com;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
187 server srv3.example.com;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
188 }
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
189 </programlisting>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
190 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
191
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
192 </section>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
193
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
194
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
195 <section id="nginx_weighted_load_balancing"
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
196 name="Weighted load balancing">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
197
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
198 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
199 It is also possible to influence nginx load balancing algorithms even
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
200 further by using server weights.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
201 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
202
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
203 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
204 In the examples above, the server weights are not configured which means
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
205 that all specified servers are treated as equally qualified for a
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
206 particular load balancing method.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
207 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
208
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
209 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
210 With the round-robin in particular it also means a more or less equal
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
211 distribution of requests across the servers — provided there are enough
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
212 requests, and when the requests are processed in a uniform manner and
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
213 completed fast enough.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
214 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
215
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
216 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
217 When the
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
218 <link doc="ngx_http_upstream_module.xml" id="server">weight</link>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
219 parameter is specified for a server, the weight is accounted as part
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
220 of the load balancing decision.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
221 <programlisting>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
222 upstream myapp1 {
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
223 server srv1.example.com weight=3;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
224 server srv2.example.com;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
225 server srv3.example.com;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
226 }
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
227 </programlisting>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
228 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
229
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
230 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
231 With this configuration, every 5 new requests will be distributed across
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
232 the application instances as the following: 3 requests will be directed
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
233 to srv1, one request will go to srv2, and another one — to srv3.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
234 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
235
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
236 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
237 It is similarly possible to use weights with the least-connected and
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
238 ip-hash load balancing in the recent versions of nginx.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
239 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
240
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
241 </section>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
242
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
243
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
244 <section id="nginx_load_balancing_health_checks"
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
245 name="Health checks">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
246
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
247 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
248 Reverse proxy implementation in nginx includes in-band (or passive)
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
249 server health checks.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
250 If the response from a particular server fails with an error,
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
251 nginx will mark this server as failed, and will try to
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
252 avoid selecting this server for subsequent inbound requests for a while.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
253 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
254
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
255 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
256 The
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
257 <link doc="ngx_http_upstream_module.xml" id="server">max_fails</link>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
258 directive sets the number of consecutive unsuccessful attempts to
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
259 communicate with the server that should happen during
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
260 <link doc="ngx_http_upstream_module.xml" id="server">fail_timeout</link>.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
261 By default,
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
262 <link doc="ngx_http_upstream_module.xml" id="server">max_fails</link>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
263 is set to 1.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
264 When it is set to 0, health checks are disabled for this server.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
265 The
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
266 <link doc="ngx_http_upstream_module.xml" id="server">fail_timeout</link>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
267 parameter also defines how long the server will be marked as failed.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
268 After
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
269 <link doc="ngx_http_upstream_module.xml" id="server">fail_timeout</link>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
270 interval following the server failure, nginx will start to gracefully
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
271 probe the server with the live client’s requests.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
272 If the probes have been successful, the server is marked as a live one.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
273 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
274
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
275 </section>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
276
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
277
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
278 <section id="nginx_load_balancing_additional_information"
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
279 name="Further reading">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
280
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
281 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
282 In addition, there are more directives and parameters that control server
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
283 load balancing in nginx, e.g.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
284 <link doc="ngx_http_proxy_module.xml" id="proxy_next_upstream"/>,
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
285 <link doc="ngx_http_upstream_module.xml" id="server">backup</link>,
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
286 <link doc="ngx_http_upstream_module.xml" id="server">down</link>, and
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
287 <link doc="ngx_http_upstream_module.xml" id="keepalive"/>.
1177
e33858baaecd Links to the nginx reference docs and lb blogposts added.
Maxim Konovalov <maxim@nginx.com>
parents: 1165
diff changeset
288 For more information please check our
1178
52747e115aba A relative URL instead of absolute one used.
Maxim Konovalov <maxim@nginx.com>
parents: 1177
diff changeset
289 <link url="..">reference documentation</link>.
1076
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
290 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
291
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
292 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
293 Last but not least,
1527
f9a138e5ab14 Updated links to nginx.com website.
Valentin Bartenev <vbart@nginx.com>
parents: 1194
diff changeset
294 <link url="https://www.nginx.com/products/application-load-balancing/">
1165
0a441212ef0f A link to nginx.com application load balancing product page fixed.
Maxim Konovalov <maxim@nginx.com>
parents: 1076
diff changeset
295 application load balancing</link>,
1527
f9a138e5ab14 Updated links to nginx.com website.
Valentin Bartenev <vbart@nginx.com>
parents: 1194
diff changeset
296 <link url="https://www.nginx.com/products/application-health-checks/">
1076
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
297 application health checks</link>,
1527
f9a138e5ab14 Updated links to nginx.com website.
Valentin Bartenev <vbart@nginx.com>
parents: 1194
diff changeset
298 <link url="https://www.nginx.com/products/live-activity-monitoring/">
1076
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
299 activity monitoring</link> and
1527
f9a138e5ab14 Updated links to nginx.com website.
Valentin Bartenev <vbart@nginx.com>
parents: 1194
diff changeset
300 <link url="https://www.nginx.com/products/on-the-fly-reconfiguration/">
1076
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
301 on-the-fly reconfiguration</link> of server groups are available
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
302 as part of our paid NGINX Plus subscriptions.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
303 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
304
1177
e33858baaecd Links to the nginx reference docs and lb blogposts added.
Maxim Konovalov <maxim@nginx.com>
parents: 1165
diff changeset
305 <para>
e33858baaecd Links to the nginx reference docs and lb blogposts added.
Maxim Konovalov <maxim@nginx.com>
parents: 1165
diff changeset
306 The following articles describe load balancing with NGINX Plus
e33858baaecd Links to the nginx reference docs and lb blogposts added.
Maxim Konovalov <maxim@nginx.com>
parents: 1165
diff changeset
307 in more detail:
e33858baaecd Links to the nginx reference docs and lb blogposts added.
Maxim Konovalov <maxim@nginx.com>
parents: 1165
diff changeset
308 <list type="bullet" compact="no">
e33858baaecd Links to the nginx reference docs and lb blogposts added.
Maxim Konovalov <maxim@nginx.com>
parents: 1165
diff changeset
309
e33858baaecd Links to the nginx reference docs and lb blogposts added.
Maxim Konovalov <maxim@nginx.com>
parents: 1165
diff changeset
310 <listitem>
1527
f9a138e5ab14 Updated links to nginx.com website.
Valentin Bartenev <vbart@nginx.com>
parents: 1194
diff changeset
311 <link url="https://www.nginx.com/blog/load-balancing-with-nginx-plus/">
1177
e33858baaecd Links to the nginx reference docs and lb blogposts added.
Maxim Konovalov <maxim@nginx.com>
parents: 1165
diff changeset
312 Load Balancing with NGINX and NGINX Plus</link>
e33858baaecd Links to the nginx reference docs and lb blogposts added.
Maxim Konovalov <maxim@nginx.com>
parents: 1165
diff changeset
313 </listitem>
e33858baaecd Links to the nginx reference docs and lb blogposts added.
Maxim Konovalov <maxim@nginx.com>
parents: 1165
diff changeset
314
e33858baaecd Links to the nginx reference docs and lb blogposts added.
Maxim Konovalov <maxim@nginx.com>
parents: 1165
diff changeset
315 <listitem>
1527
f9a138e5ab14 Updated links to nginx.com website.
Valentin Bartenev <vbart@nginx.com>
parents: 1194
diff changeset
316 <link url="https://www.nginx.com/blog/load-balancing-with-nginx-plus-part2/">
1177
e33858baaecd Links to the nginx reference docs and lb blogposts added.
Maxim Konovalov <maxim@nginx.com>
parents: 1165
diff changeset
317 Load Balancing with NGINX and NGINX Plus part 2</link>
e33858baaecd Links to the nginx reference docs and lb blogposts added.
Maxim Konovalov <maxim@nginx.com>
parents: 1165
diff changeset
318 </listitem>
e33858baaecd Links to the nginx reference docs and lb blogposts added.
Maxim Konovalov <maxim@nginx.com>
parents: 1165
diff changeset
319
e33858baaecd Links to the nginx reference docs and lb blogposts added.
Maxim Konovalov <maxim@nginx.com>
parents: 1165
diff changeset
320 </list>
e33858baaecd Links to the nginx reference docs and lb blogposts added.
Maxim Konovalov <maxim@nginx.com>
parents: 1165
diff changeset
321 </para>
e33858baaecd Links to the nginx reference docs and lb blogposts added.
Maxim Konovalov <maxim@nginx.com>
parents: 1165
diff changeset
322
1076
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
323 </section>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
324
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
325 </article>