前面说完了nginx的安装与配置文件的介绍以及静态项目的访问:
一篇文章掌握nginx——nginx的安装
一篇文章掌握nginx——nginx的配置
一篇文章掌握nginx——nginx代理不同项目
本次,说一下nginx的负载均衡
准备工作
[root@localhost webapps]# mkdir test
[root@localhost webapps]# touch b.html
[root@localhost webapps]# cd test
[root@localhost test]# vim b.html
首先我们在tomcat1中也添加一个test文件夹,并创建b.html文件,这样两个tomcat都有了test项目。
重启一下tomcat。
可以看到两个项目均可以访问。
二、配置nginx.conf
nginx 分配服务器策略
第一种 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
第二种 weight
weight 代表权重默认为 1,权重越高被分配的客户端越多
第三种 ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器
第四种 fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配
打开nginx.config在http模块里面添加下面配置(第二种)
upstream server_pool{
server 192.168.111.129:8080 weight=10;
server 192.168.111.129:9080 weight=10;
}
在server块里面添加下面配置。
location / {
proxy_pass http://server_pool;
proxy_connect_timeout 10;
}
重启nginx
[root@localhost nginx]# cd sbin/
[root@localhost sbin]# ./nginx -s reload
[root@localhost sbin]# vim ../conf/nginx.conf
我们在外网访问一下
在刷新一下
我们发现刷新一次页面就变化一次,轮流执行,因为我们配置的weight权重是一样的。
除此之外还有其他几种配置。
ip_hash
upstream server_pool{
ip_hash;
server 192.168.111.129:8080;
server 192.168.111.129:9080;
}
fair
upstream server_pool{
server 192.168.111.129:8080;
server 192.168.111.129:9080;
fair;
}
最后说一下nginx的其他参数原理
master-workers 的机制的好处
首先,对于每个 worker 进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,
同时在编程以及问题查找时,也会方便很多。其次,采用独立的进程,可以让互相之间不会
影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快启动新的
worker 进程。当然,worker 进程的异常退出,肯定是程序有 bug 了,异常退出,会导致当
前 worker 上的所有请求失败,不过不会影响到所有请求,所以降低了风险。
需要设置多少个 worker
Nginx 同 redis 类似都采用了 io 多路复用机制,每个 worker 都是一个独立的进程,但每个进
程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话
下。每个 worker 的线程可以把一个 cpu 的性能发挥到极致。所以 worker 数和服务器的 cpu
数相等是最为适宜的。设少了会浪费 cpu,设多了会造成 cpu 频繁切换上下文带来的损耗。
#设置 worker 数量。
worker_processes 4
#work 绑定 cpu(4 work 绑定 4cpu)。
worker_cpu_affinity 0001 0010 0100 1000
#work 绑定 cpu (4 work 绑定 8cpu 中的 4 个) 。
worker_cpu_affinity 0000001 00000010 00000100 00001000
连接数 worker_connection
这个值是表示每个 worker 进程所能建立连接的最大值,所以,一个 nginx 能建立的最大连接
数,应该是 worker_connections * worker_processes。当然,这里说的是最大连接数,对于
HTTP 请 求 本 地 资 源 来 说 , 能 够 支 持 的 最 大 并 发 数 量 是 worker_connections *
worker_processes,如果是支持 http1.1 的浏览器每次访问要占两个连接,所以普通的静态访
问最大并发数是: worker_connections * worker_processes /2,而如果是 HTTP 作 为反向代
理来说,最大并发数量应该是 worker_connections *
worker_processes/4。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服
务的连接,会占用两个连接。