Nginx实现负载均衡
Nginx是一个性能非常好的反向代理服务器,用来做负载均衡的绝佳选择。
1、何为反向代理?
既然提到反向代理,那么就有正向代理。接下来,我们解释一下这讲个概念:
1.1、正向代理
现在很多人喜欢在国外买东西,因为便宜。比如买一罐新西兰的奶粉,如果我们亲自去新西兰一趟,就不划算了,其他不说,就往返的机票都很贵,这样算下来,原本便宜的奶粉,变得比国内的贵了更多。于是你找到在新西兰留学的朋友帮你买一罐,然后邮寄给你,这样就很划算了。
那么在此过程中的新西兰朋友就是你的代理人,帮助你完成了你的需求。这就是正向代理。
正向代理其实就是一般的代理,通常所说的代理就是正向代理。
1.2、反向代理
比如你拨打银行客服电话400xxxxxxx,负责接电话的银行客服可能有几百人,你永远都会不知道,接听你电话的客服叫什么、身高、是否帅气或者漂亮;当然,这些你都不关心,你关心的是你的问题是否有人帮你解决。其中400客服总机就是反向代理,你不需要知道真正给你提供服务的是谁。这个例子中的400总机就是反向代理。
2、反向代理和负载均衡
反向代理是负载均衡的核心原理,可以理解为负载均衡是反向代理的一个具体实现。负载均衡的图示如下:
如上图,负载均衡服务器就好比400客服总机,它是服务器1、服务器2、服务器3的代理,用户通过负载均衡服务器将需求发送给服务器1或者服务器2或者服务器3,具体是那一台服务器在提供服务,用户不需要关心。
3、负载均衡的优点
负载均衡,扩展了网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。换而言之,负载均衡将原本一台服务器做不完的活,交给了其他服务器来处理,这样“雨露均沾”,减轻了一台服务器的压力,同时提高了响应速度(用户不用一直看着浏览器读条了)。
4、Nginx的配置
接下来,我们开始进行负载均衡的配置。
4.1、准备工作
1.准备2台电脑(或者在一台电脑上安装虚拟机也行),其中一台电脑是windows系统(电脑A),另一台是linux系统(电脑B)。
4.2、安装和配置
4.2.1、在电脑B上安装jre环境和2个tomcat服务器,分别是tomcat1和tomcat2。将tomcat2的端口号修改为下图中红色方框的值(因为在一台电脑上不能有2个端口一样的tomcat存在)。修改tomcat2安装目录下的conf/server.xml文件:
4.2.2、测试tomcat是否安装成功,分别启动2个Tomcat,关闭Linux服务器的防火墙,在windows系统中访问Tomcat地址(http://电脑B的IP:8080/ 和 http://电脑B的IP:8081/),你会看到tomcat的首页,则表示配置成功。
4.2.3、安装Nginx。在电脑A上安装Nginx,下载地址(点击这里),下载之后解压(解压就行,不需要安装)。
4.2.4、进入Nginx安装目录,打开配置文件conf/nginx.conf,添加如下配置信息:
server {
listen 80; #负载均衡服务器的端口
server_name localhost; #负载均衡服务器的主机名称
...
}
...
location / {
proxy_pass http://qianfeng.com;
proxy_redirect default;
root html;
index index.html index.htm;
}
...
upstream qianfeng.com{
#weight是权重,表示优先访问那一台服务器,取值一样,表示雨露均沾
server tomcat1的IP:8080 weight=1;
server tomcat2的IP:8081 weight=1;
}
4.3、测试
在电脑A上使用DOS命令,执行nginx.exe,启动Nginx反向代理服务器(不要关闭DOS窗口)。然后在电脑A上打开浏览器,输入地址:http://localhost/index.jsp。就可以看到访问成功的效果。
可以通过修改Tomcat安装目录下的webapps中的ROOT文件夹下的index.jsp中的内容,以便能区分2个Tomcat的项目切换,这就是负载均衡。
最后,我们就可以将项目部署到tomcat1和tomcat2上,之后在通过http://localhost/project_name/ 访问就实现了负载均衡。
4.4、问题
2个tomcat服务器,会导致session也有2个,tomcat1和tomcat2中的session无法进行数据共享,如何进行session共享,我们下一节讲解。