Nginx/lvs/haproxy is currently the most widely used three load balancing software, the general use of load balancing with the increase in the size of the site according to different stages of the use of different technologies, specific application needs to be specific analysis.
if it is a small and medium-sized Web application, such as the day PV less than 10 million, with Nginx can be completely, if a lot of machines, you can use DNS polling, LVS, the cost of the machine is more than a large web site or important services, and the server is relatively long, you can consider using LVS.
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 and read-write separation, using the lvs+keepalived architecture. Of course, according to the specific needs of the project plan, the following talk about their characteristics and applicable occasions.
Nginx
The advantages of Nginx:
- Work on the 7 layer of the network, can be targeted at the HTTP application to do some diversion 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 this can be used more than LVS.
- Nginx dependence on network stability is very small, in theory can ping through the load function, this is also one of its advantages; instead, LVS depends on the stability of the network is relatively large, which has been used by nginx people have deep experience;
- 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.
- 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.
- Nginx can detect the internal failure of the server through the port, such as the status code returned by the server processing, timeout and so on, and will return the wrong request back 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.
- 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.
- Nginx is now becoming more and more mature as a web reverse acceleration cache, faster than a traditional squid server, and can be considered as a reverse proxy accelerator.
- 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.
- 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:
- Nginx only supports HTTP, HTTPS, and email protocols, so it's a disadvantage when it's smaller in scope.
- Health checks on back-end servers are only supported through ports and are not supported for detection by URLs. The direct hold of the session is not supported, but can be solved by Ip_hash.
LVS
LVs is a high-performance, high-availability load-balancing server implemented using a Linux kernel cluster with good scalability (Scalability), Reliability (reliability), and manageability (manageability).
Advantages of LVS:
- Strong anti-load capability, working on 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.
- 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.
- Stable work, because of its own resistance to load is very strong, the self has a complete two-machine hot-standby program, such as Lvs+keepalived, but we in the implementation of the project is the most used or lvs/dr+keepalived.
- No traffic, LVS only distributes the request, and the traffic does not go out from it, which guarantees that the performance of the Equalizer IO will not be affected by large traffic.
- The application scope is wide, because LVS works on 4 levels, so it can load balance almost all applications, including HTTP, databases, online chat rooms, and so on.
Disadvantages of LVs:
- 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.
- If it is a large web site application, lvs/dr+keepalived implementation is 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
features of Haproxy:
- Haproxy is also supported for virtual hosts.
- The advantages of haproxy can be supplemented with some of Nginx's shortcomings, such as supporting session retention, cookie guidance, and the ability to detect the status of the backend server by obtaining the specified URL.
- 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.
- 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 is now specific to the following 8 kinds:
Roundrobin:For Simple polling, this is not much to say, this is the load balancer basically have;
STATIC-RR:It is suggested that the attention should be paid according to weights;
Leastconn:indicates that the least connected person should deal with it first, and suggest concern;
Source:indicates that according to the request source IP, this is similar to nginx ip_hash mechanism, we use it as a method to solve the session problem, it is recommended to pay attention;
RI:represents the URI according to the request;
Rl_param:represents the URL parameter according to the request ' balance Url_param ' requires an URL parameter name;
HDR (name):indicates that each HTTP request is locked according to the HTTP request header;
Rdp-cookie (name):indicates that each TCP request is locked and hashed according to the cookie (name).
Nginx and LVs comparison summary:
nginx work in the network layer 7, so it can be targeted at the HTTP application itself to do the shunt strategy, for example, for the domain name, directory structure, compared to LVS does not have such a function, so the nginx alone can use the occasion far 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.
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.
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.
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 is limited to machine IO and configuration, and its own bugs are still unavoidable.
Nginx can detect the internal faults of the server, such as the status code returned by the server processing the page, timeout, and so on, 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.
nginx Asynchronous processing of the request can help the node server to reduce the load, if the use of Apache Direct External services, then a lot of 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.
Nginx can support HTTP, HTTPS and email (the function of email is 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 F5, commercial first choice! But in general this phase of the relevant talent to keep up with the business, so the purchase of commercial load balance has become the only way. The ability and quantity of talent is also increased, at this time, regardless of the development of customized products for their own, and reduce the cost of open source LVs, has become the first choice, then LVS will become the mainstream.
- 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.
Comparison of advantages and disadvantages of nginx/lvs/haproxy load balancer software