负载平衡:一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的
Tomcat集群:一组部署有相同应用的Tomcat服务器。用户的请求无论连接到哪台Tomcat服务器上,都能得到相同的处理。
负载均衡服务器:将用户的请求根据特定规则转发到Tomcat服务器上进行处理。从而实现完整的集群处理系统。
主流负载均衡服务器:
Nginx:基于特定环境、配置简单、使用灵活、成本低廉,可以满足大部分的负载均衡需求经因为它的稳定性、丰富的功能集、目前国内各大门户网站已经部署了Nginx,如新浪、网易、腾讯等
使用Nginx作为Tomcat的负载平衡器,Tomcat的会话Session数据存储在Redis,能够实现0当机的7x24运营效果。
当我们需要部署新应用代码时,只要停止任何一台tomcat,所有当前在线用户都会导向到运行中的tomcat实例,因为会话数据被序列化到Redis,在线用户不会受到影响,一旦停掉的tomcat实例上线,另外其他重复部署过程。
1,安装两个Tomcat:端口号:一个8080,一个8081
2,打开Tomcat1的conf目录下的server.xml,修改三处端口
connectionTimeout="20000"
redirectPort="8443" />
redirectPort="8443" />
3,将同一个web项目复制到webApps下 修改页面标题用于标识具体的 Tomcat容器:tomcat1或tomcat2
1,下载Nginx服务器:
下载地址: http://nginx.org/en/download.html
2,下载完成后进行解压,将解压后的文件放到预备安装的Nginx的目录下
3,启动Nginx服务
双击nginx.exe,启动Nginx服务,查看任务管理器:
验证是否启动,直接访问http://localhost如下图所示,代表安装启动成功
4,Nginx的cmd简单命令:在bin目录下操作
nginx.exe -s stop //停止nginx
nginx.exe -s reload //重新加载nginx
nginx.exe -s quit //退出nginx
Nginx配置
Nginx 的配置主要是修改 nginx/conf/nginx.conf文件
1,修改conf/nginx.conf文件,在server标签上边添加upstream如下:
upstream localhost{
#weigth参数表示权值,权值越高被分配到的几率越大
#本机上的Squid开启3128端口
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=1;
}
这里指定了本机下的两个Tomcat实例,端口分别为8080,8081,权重都为1,后边配置Tomcat实例
2,配置server标签 中的location,指向刚才的localhost!
#主机配置
server {
listen 80;
#域名
server_name localhost;
#字符集 utf-8
#charset utf-8;
# 第一个必选规则
#反向代理配置,将所有请求全部转发到upstream中定义的目标服务器中。
location / {
#此处配置的域名必须与upstream的域名一致,才能转发。
proxy_pass http://localhost;
}
#第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
proxy_pass http://localhost;
}
}
3,启动Nginx、Tomcat1、Tomcat2
浏览器地址栏中输入http://localhost/
按F5刷新页面,浏览器页面会在Tomcat1与Tomcat2之间切换,至此负载均衡配置完成。
注意事项:
1,Upstream的name 改成 localhost,否则请求能转发,但是项目中所有的路径不对。
2,server_name域名 和 upstream 的name 一致!
修改EBP项目标题:TOMCAT1、TOMCAT2 用于区分服务器:
1,修改:两个login.jsp页面、adminLayout.jsp、userLayout.jsp
2,可以看出来,nginx已经对请求进行了转发,注意一下session会话!
登录成功后,我们将user放到session作用域了,页面标题也已经显示了。
继续点击其它页面,发现请求到另一个tomcat了,session作用域也消失了。
解决方式:
session是存在服务器端,分布式之后,session的维护就变得困难。
可以使用Redis实现session共享。