Load Balancing (reprint)

Source: Internet
Author: User
Tags node server haproxy nginx load balancing

Nginx/lvs/haproxy is currently the most widely used three load balancing software, I have been implemented in a number of projects, reference to some information, combined with some of their own experience, summed up.

The general use of load balancing is to use different technologies depending on the stage of the site's ascent. Specific application needs to be specific analysis, if it is small and medium-sized Web applications, such as the daily PV less than 10 million, with Nginx can be completely; if there are many machines, you can use DNS polling, LVS consumes more machines or more, large web sites or important services, and the server is relatively long, You can consider using LVS.

One is through the hardware, the common hardware has more expensive F5 and array and other commercial load balancer, it is the advantage of a professional maintenance team to the maintenance of these services, the disadvantage is that the cost is too large, so for the smaller network services for the moment there is no need to use The other is Linux-based, open-source, free load balancing software similar to Nginx/lvs/haproxy, which is implemented at the software level, so it's very inexpensive.

At present, the structure of the Web site architecture is generally more reasonable: the Web front-end uses nginx/haproxy+ keepalived as the load balancer, and the backend uses the MySQL database as a master-slave and read-write separation, adopting the lvs+keepalived architecture. Of course, according to the specific needs of the project plan.

The following is the respective characteristics and applicable occasions.

The advantages of Nginx are:

1. Work on the 7 layer of the network, can be targeted at the HTTP application to do some shunt strategy, such as for the domain name, directory structure, its regular rules than haproxy more powerful and flexible, which is the main reason for its widespread popularity, nginx alone can use the occasion more than LVS.

2. Nginx relies on the stability of the network is very small, in theory can ping through the load function, this is one of its advantages; on the contrary, LVS depends on the stability of the network is relatively large, which I have deep experience;

3. Nginx installation and configuration is relatively simple, easy to test, it is basically able to print out the error log. LVS configuration, testing will take a relatively long time, LVS on the network dependence is relatively large.

4. Can bear high load pressure and stability, in the case of hardware is not bad generally can support tens of thousands of times the concurrency, the load is relatively smaller than LVS.

5. Nginx can detect the internal failure of the server through the port, for example, according to the server processing the status code returned by the Web page, timeout, etc., and will return the wrong request to another node, but the disadvantage is that the URL is not supported to detect. For example, the user is uploading a file, and processing the upload node just in the upload process failure, Nginx will upload to another server to re-processing, and LVS directly broken off, if it is to upload a large file or very important files, users may be dissatisfied.

6. Nginx is not only a good load balancer/reverse proxy software, it is also a powerful Web application server. Lnmp is also a very popular web architecture in recent years and has a good stability in high-traffic environments.

7. Nginx is now becoming more mature as a Web reverse-acceleration cache, faster than a traditional squid server, and can be considered as a reverse proxy accelerator.

8. Nginx can be used as a middle-class reverse proxy, this level nginx basically no opponent, only can compare Nginx only lighttpd, but lighttpd at present has not done nginx full function, configuration is not so clear and easy to read, Community information is far from Nginx active.

9. Nginx can also be used as a static web page and image server, this performance is also no opponent. The Nginx community is very active and there are many third-party modules.

The drawbacks of Nginx are:

1. Nginx can only support HTTP, HTTPS and email protocol, so it is smaller in the scope of application, this is its disadvantage.
2. The health check of the backend server is only supported by the port, and is not supported by URL detection. the direct hold of the session is not supported, but can be solved by Ip_hash.

LVS: Using a Linux kernel cluster to implement a high-performance, highly available load-balancing server with good scalability (Scalability), Reliability (reliability), and manageability (manageability).

The advantages of LVS are:

1. Strong anti-load capacity, is the work in the Network 4 layer only for distribution, No traffic generated , this feature also determines its performance in the Load Balancer software is the strongest, the memory and CPU resource consumption is low.
2. Low configuration, this is a disadvantage is also a advantage, because there is not much to configure things, so do not need too much contact, greatly reducing the chance of human error.
3. Stable work, because of its own strong resistance to load, the self has a complete dual-machine hot-standby program, such as Lvs+keepalived, but we in the implementation of the project is the most used or lvs/dr+keepalived.
4. No traffic, LVS only distributes the request, and the traffic does not go out from itself, which ensures that the performance of the Equalizer Io is not affected by large traffic.
5. The application scope is wide, because LVS is working on 4 layers, so it can load balance almost all applications, including HTTP, database, online chat room and so on.

The disadvantages of LVS are:

1. The software itself does not support regular expression processing, can not do static and dynamic separation, and now many sites in this area have a strong demand, this is the advantage of nginx/haproxy+keepalived.
2. If the application of the site is relatively large, lvs/dr+keepalived implementation of the more complex, especially after the Windows server machine, if the implementation and configuration and maintenance process is more complex, relatively speaking, nginx/haproxy+ Keepalived is a lot easier.

Haproxy is characterized by:

1. Haproxy is also supported for virtual hosting.
2. The advantages of haproxy can be supplemented with some of Nginx's shortcomings, such as supporting session retention, cookie boot, and support to detect the status of the backend server by obtaining the specified URL.
3. Haproxy similar to LVS, itself is just a load balancer software, simply from the efficiency of haproxy will be better than nginx load balancing speed, in concurrent processing is better than nginx.
4. HAProxy supports the TCP protocol load balancing forwarding , can load balance MySQL read, the backend of the MySQL node detection and load balancing, you can use lvs+keepalived to load balance MySQL master and slave.
5. Haproxy Load Balancing strategy is very many, Haproxy load balancing algorithm now has the following 8 kinds:

①roundrobin, said the simple polling, this is not much to say, this is the load balancer basically have;
②STATIC-RR, said according to the weight, suggest concern;
③leastconn, indicating that the minimum number of connections to deal with, suggest concern;
④source, according to the request source IP, this is similar to Nginx's ip_hash mechanism, we use it as a way to solve the session problem, it is recommended to pay attention to;
⑤ri, which represents the URI according to the request;
⑥rl_param, which represents the URL parameter according to the request ' balance Url_param ' requires an URL parameter name;
⑦HDR (name), which indicates that each HTTP request is locked according to the HTTP request header;
⑧rdp-cookie (name), which indicates that each TCP request is locked and hashed according to the cookie (name).

a summary of the comparison between Nginx and LVs:

1. Nginx works on the 7 layer of the network, so it can be used for the HTTP application itself to do the shunt strategy, such as for the domain name, directory structure, compared to LVS does not have such a function, so nginx alone this can be used more than LVS. But Nginx is useful for these functions to make it more adjustable than LVS, so often to touch touch, touch more, the probability of human problems will be large.

2. Nginx dependence on network stability is small, in theory, as long as the ping, Web Access is normal, nginx can be connected, this is a big advantage of Nginx! Nginx at the same time can also distinguish between internal and external network, if the node has both internal and external network, the equivalent of a single machine has a backup line, LVS is more dependent on the network environment, at present, the server in the same network segment and LVS using direct mode shunt, the effect is more guaranteed. In addition, the LVS need to apply to the custodian at least one more IP to do the visual IP, it seems that it is not possible to use their own IP to do VIP. To do a good job of the LVS administrator, do have to follow up learning a lot about network communication knowledge, it is no longer an HTTP so simple.

3. Nginx installation and configuration is relatively simple, testing is also very convenient, because it basically can be used to print the error log. LVS installation and configuration, testing will take a long time, LVS on the network rely on a large number of times can not be configured to succeed is because of network problems rather than configuration problems, the problem to solve also the corresponding will be more troublesome.

4. Nginx can also withstand a high load and stability, but the load and stability of the LVS there are several levels: Nginx processing all traffic so limited by the machine IO and configuration, and its own bugs are still unavoidable.

5. Nginx can detect the internal failure of the server, for example, according to the server to handle the return of the page status code, timeout, etc., and will return the wrong request resubmitted to another node. At present, LDIRECTD in LVS can also support monitoring the internal conditions of the server, but the principle of LVS makes it impossible to re-send requests. For example, the user is uploading a file, and processing the upload node just in the upload process failure, Nginx will upload to another server re-processing, and LVS is directly broken off, if it is to upload a large file or very important files, users may be annoyed.

6. The asynchronous processing of the request can help the node server to reduce the load, if the use of Apache Direct External services, then there are many narrow-band links when the Apache server will occupy a lot of memory and can not be released, using more than one nginx to do Apache agent, These narrow-band links will be blocked by Nginx, Apache will not accumulate too many requests, which reduces a considerable amount of resource consumption. This use squid also has the same effect, even if the squid itself is configured to not cache, the Apache still has a lot of help.

7. Nginx can support HTTP, HTTPS and email (the function of email is relatively less), LVS support the application in this more than Nginx. In use, the general front-end strategy should be the LVS, that is, the DNS point should be the LVS equalizer, the advantages of LVS make it very suitable for this task. Important IP address, preferably by the LVS hosting, such as the database IP, WebService server IP and so on, these IP addresses over time, the use of polygons will become larger, if the replacement of IP will follow. So it is most prudent to give these important IPs to the LVS hosting, the only disadvantage is that the number of VIPs will be more. Nginx can be used as the LVS node machine, one can use Nginx function, the second is the performance of Nginx can be used. Of course, this level can also directly use the function of Squid,squid is weaker than Nginx, performance is also inferior to nginx. Nginx can also be used as a middle-tier agent, this level nginx basically no opponent, the only one can shake Nginx only lighttpd, but lighttpd at present has not been able to do nginx full function, configuration is not so clear and easy to read. In addition, the middle-level proxy IP is also important, so the middle-level agent also has a VIP and LVs is the most perfect solution. Specific application also have to be specific analysis, if it is relatively small site (PV less than 10 million), with Nginx can be completely, if the machine is also a lot, you can use DNS polling, LVS the cost of the machine is more; large web sites or important services, machines do not worry about the time, You should consider using LVs a lot.

The use of Network Load Balancing is now using different technologies as the scale of the site increases depending on the stage:

The first stage: using Nginx or Haproxy for a single point of load balancing, this stage of the server scale just out of the single-server, single-database mode, requires a certain load balancing, but still small, no professional maintenance team to maintain, there is no need for large-scale site deployment. This use of Nginx or Haproxy is the first choice, at this time these things get started fast, easy to configure, on the seven layer above the use of HTTP protocol can. This is the first choice.

The second stage: with the further expansion of network services, then the single-point nginx can not be satisfied, when the use of LVS or commercial array is the first choice, nginx at this time as a LVS or array of nodes to use, The specific LVS or array is selected according to the size of the company and the budget to choose, the application delivery function of the array is very powerful, I used in a project, cost-effective is much higher than the F5, commercial preferred, but generally this phase of the relevant talent can not keep up with the promotion of business, So buying a business load balancer has become a necessity.

The third stage: The Network Service has become the mainstream products, at this time with the company's popularity is further expanded, the ability of relevant talents and the number of the increase, then regardless of the development of their own product customization, and reduce the cost of the open source LVs, has become the first choice, then LVS will become the mainstream.

The final form of the ideal basic structure is: Array/lvs-nginx/haproxy-squid/varnish-appserver.

Load Balancing (reprint)

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.