> For the complete documentation index, see [llms.txt](https://1938494248.gitbook.io/linux/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://1938494248.gitbook.io/linux/master.md).

# LVS和Nginx负载均衡原理

### LVS和Nginx负载均衡原理

#### 一、LVS负载均衡原理

先上图，有图有真相。

![](https://268074949-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M-s3h0i9bWi7RREw1SC%2F-MApmy7Sdbh-RwyMJFph%2F-MApnINtaKQP0NLn7CN-%2F1593224132296.png?alt=media\&token=226eb63b-e9ea-4bf3-9419-5e7685c35cd7)

首先由User（Ip:181.11.12.13 假设为公网IP）发起报文请求到LVS服务器（Ip：10.11.12.13 假设为公网IP）。当报文到达LVS服务器后，通过规则库（一堆算法和映射关系 在下一篇文章中详解）转发至后面的Apache服务器（后台内容服务器和LVS在同一个局域网内，没有公网IP），注意这里只更改了报文中的目标地址。后端的apache服务器响应后，返回响应报文（红色框）。但是这个时候的响应报文是不能够直接发送给User的，为什么呢？因为报文不匹配。响应报文的源IP是192.168.10.11和10.11.12.13不匹配，不符合通信的原理。这个时候就需要通过LVS做源地址转换了。转换完成之后红色框内容变为绿色框内容，这样响应报文就可以被User接受到了。

**总结：**

由上面的简介可以看出，LVS在整个数据请求响应过程中，所做的工作就是一个打标签。User的报文发过来后，把目标地址的标签换掉 打上后台服务器的地址标签。响应数据返回后在把包裹的源地址换为自己的，发给User。由于就是一个打标签的工作，所以LVS服务器压力很小。

#### 二、Nginx负载均衡的原理

同样先上图哦

![](https://268074949-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M-s3h0i9bWi7RREw1SC%2F-MApmy7Sdbh-RwyMJFph%2F-MApnL9HXiSjZw83my0i%2F1593258109942.png?alt=media\&token=11fd8be8-3264-42a5-8cb6-04a288f0c54c)

相比LVS而言，Nginx的负载均衡方式给服务器的负担就比较重了。具体流程是首先User发起一个TCP请求，请求Nginx服务器（10.11.12.13），当接受到请求后，Nginx发现本地没有User要的数据，则又通过规则库向同局域网内的Apache服务器发送一次TCP连接把数据先请求到本地，然后又打包向User进行发送。

#### 三、对比总结

通过对比我们可以得到以下对比表

|         | LVS | Nginx |
| ------- | --- | ----- |
| TCP连接次数 | 一次  | 两次    |
| 是否入库    | 否   | 是     |

&#x20;通过对比我们知道，LVS只进行一次TCP连接，如果把整个过程类比为快递物流那么可以这么说：LVS在期间充当的是一个办材料的机构，用户和服务器之间的通信必须要通过材料机构进行办理，用户想要买一件商品，那么快递员（TCP连接）去从用户手中拿到货物清单，然后第一步到材料办理机构（LVS）办理,材料办理机构（LVS）在快递单（报文）上更改货物目标地址后又交给同一个快递员（TCP连接），快递员根据材料清单的地址取到货物之后，又要去材料办理机构（LVS）办理，机构的工作人员把那个发货地址改为机构所在地后又把货物交给同一个快递员，快递员把货物给用户。在整个过程中只用了一个快递员，材料办理机构只是做了改地址的工作。

&#x20;Nginx就好比是快递中转站，一个快递员先把取货单给快递中转站，然后快递中转站再派另外一个快递员去几个货舱取货。取货回来之后 中转站入库打包后交给第一个快递员送还给用户。整个工作完成。整个过程中用了两个快递员，而且货物在中转站又入库了。耗用了库存（内存）。

那我们可能会想了，LVS只用了一个快递员会不会压力更大呢，这里说的压力是针对服务器的。也就是所谓的材料办理机构或者是快递中转站。这里的快递员（TCP连接）是superman，压力不会那么大的啦。
