annotate xml/en/docs/http/load_balancing.xml @ 1149:1501e5848052

Corrected the usage of the definite article.
author Yaroslav Zhuravlev <yar@nginx.com>
date Tue, 08 Apr 2014 20:13:53 +0400
parents 5f41c6582a4b
children 0a441212ef0f
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"
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
12 rev="1">
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>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
107 When setting up load balancing for FastCGI, uwsgi or memcached, use
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
108 <link doc="ngx_http_fastcgi_module.xml" id="fastcgi_pass"/>,
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
109 uwsgi_pass and
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
110 <link doc="ngx_http_memcached_module.xml" id="memcached_pass"/>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
111 directives respectively.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
112 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
113
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
114 </section>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
115
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
116
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
117 <section id="nginx_load_balancing_with_least_connected"
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
118 name="Least connected load balancing">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
119
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
120 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
121 Another load balancing discipline is least-connected.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
122 Least-connected allows controlling the load on application
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
123 instances more fairly in a situation when some of the requests
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
124 take longer to complete.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
125 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
126
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
127 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
128 With the least-connected load balancing, nginx will try not to overload a
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
129 busy application server with excessive requests, distributing the new
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
130 requests to a less busy server instead.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
131 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
132
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
133 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
134 Least-connected load balancing in nginx is activated when the
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
135 <link doc="ngx_http_upstream_module.xml" id="least_conn">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
136 least_conn</link> directive is used as part of the server group configuration:
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
137 <programlisting>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
138 upstream myapp1 {
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
139 least_conn;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
140 server srv1.example.com;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
141 server srv2.example.com;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
142 server srv3.example.com;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
143 }
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
144 </programlisting>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
145 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
146
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
147 </section>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
148
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
149
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
150 <section id="nginx_load_balancing_with_ip_hash"
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
151 name="Session persistence">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
152
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
153 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
154 Please note that with round-robin or least-connected load
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
155 balancing, each subsequent client’s request can be potentially
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
156 distributed to a different server.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
157 There is no guarantee that the same client will be always
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
158 directed to the same server.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
159 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
160
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
161 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
162 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
163 in other words, make the client’s session “sticky” or “persistent” in
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
164 terms of always trying to select a particular server — the ip-hash load
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
165 balancing mechanism can be used.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
166 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
167
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
168 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
169 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
170 determine what server in a server group should be selected for the
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
171 client’s requests.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
172 This method ensures that the requests from the same client
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
173 will always be directed to the same server
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
174 except when this server is unavailable.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
175 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
176
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
177 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
178 To configure ip-hash load balancing, just add the
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
179 <link doc="ngx_http_upstream_module.xml" id="ip_hash"/>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
180 directive to the server (upstream) group configuration:
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
181 <programlisting>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
182 upstream myapp1 {
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
183 ip_hash;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
184 server srv1.example.com;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
185 server srv2.example.com;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
186 server srv3.example.com;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
187 }
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
188 </programlisting>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
189 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
190
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
191 </section>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
192
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
193
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
194 <section id="nginx_weighted_load_balancing"
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
195 name="Weighted load balancing">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
196
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
197 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
198 It is also possible to influence nginx load balancing algorithms even
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
199 further by using server weights.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
200 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
201
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
202 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
203 In the examples above, the server weights are not configured which means
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
204 that all specified servers are treated as equally qualified for a
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
205 particular load balancing method.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
206 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
207
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
208 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
209 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
210 distribution of requests across the servers — provided there are enough
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
211 requests, and when the requests are processed in a uniform manner and
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
212 completed fast enough.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
213 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
214
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
215 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
216 When the
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
217 <link doc="ngx_http_upstream_module.xml" id="server">weight</link>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
218 parameter is specified for a server, the weight is accounted as part
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
219 of the load balancing decision.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
220 <programlisting>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
221 upstream myapp1 {
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
222 server srv1.example.com weight=3;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
223 server srv2.example.com;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
224 server srv3.example.com;
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
225 }
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
226 </programlisting>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
227 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
228
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
229 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
230 With this configuration, every 5 new requests will be distributed across
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
231 the application instances as the following: 3 requests will be directed
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
232 to srv1, one request will go to srv2, and another one — to srv3.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
233 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
234
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
235 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
236 It is similarly possible to use weights with the least-connected and
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
237 ip-hash load balancing in the recent versions of nginx.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
238 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
239
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
240 </section>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
241
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
242
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
243 <section id="nginx_load_balancing_health_checks"
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
244 name="Health checks">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
245
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
246 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
247 Reverse proxy implementation in nginx includes in-band (or passive)
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
248 server health checks.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
249 If the response from a particular server fails with an error,
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
250 nginx will mark this server as failed, and will try to
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
251 avoid selecting this server for subsequent inbound requests for a while.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
252 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
253
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
254 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
255 The
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
256 <link doc="ngx_http_upstream_module.xml" id="server">max_fails</link>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
257 directive sets the number of consecutive unsuccessful attempts to
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
258 communicate with the server that should happen during
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
259 <link doc="ngx_http_upstream_module.xml" id="server">fail_timeout</link>.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
260 By default,
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
261 <link doc="ngx_http_upstream_module.xml" id="server">max_fails</link>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
262 is set to 1.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
263 When it is set to 0, health checks are disabled for this server.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
264 The
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
265 <link doc="ngx_http_upstream_module.xml" id="server">fail_timeout</link>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
266 parameter also defines how long the server will be marked as failed.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
267 After
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
268 <link doc="ngx_http_upstream_module.xml" id="server">fail_timeout</link>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
269 interval following the server failure, nginx will start to gracefully
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
270 probe the server with the live client’s requests.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
271 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
272 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
273
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
274 </section>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
275
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
276
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
277 <section id="nginx_load_balancing_additional_information"
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
278 name="Further reading">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
279
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
280 <para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
281 In addition, there are more directives and parameters that control server
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
282 load balancing in nginx, e.g.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
283 <link doc="ngx_http_proxy_module.xml" id="proxy_next_upstream"/>,
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
284 <link doc="ngx_http_upstream_module.xml" id="server">backup</link>,
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
285 <link doc="ngx_http_upstream_module.xml" id="server">down</link>, and
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
286 <link doc="ngx_http_upstream_module.xml" id="keepalive"/>.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
287 For more information please check our reference documentation.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
288 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
289
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 Last but not least,
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
292 <link url="http://nginx.com/products/advanced-load-balancing/">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
293 advanced load balancing</link>,
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
294 <link url="http://nginx.com/products/application-health-checks/">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
295 application health checks</link>,
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
296 <link url="http://nginx.com/products/live-activity-monitoring/">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
297 activity monitoring</link> and
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
298 <link url="http://nginx.com/products/on-the-fly-reconfiguration/">
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
299 on-the-fly reconfiguration</link> of server groups are available
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
300 as part of our paid NGINX Plus subscriptions.
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
301 </para>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
302
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
303 </section>
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
304
5f41c6582a4b [mq]: p
Ruslan Ermilov <ru@nginx.com>
parents:
diff changeset
305 </article>