chapter4 tomcat集群与nginx负载均衡
4.1 tomcat集群
问题1:tomcat集群能带来什么优势?
性能up,并发up,高可用,横向拓展...
问题2:tomcat集群会带来什么问题?
session如何共享,定时任务并发,分布式锁,分布式事务...
4.2 tomcat单机部署多应用
假设现在一台机器上安装了两个tomcat,tomcat1和tomcat2。
4.2.1 linux/mac
(1)环境变量文件
修改/etc/profile文件,增加如何配置:
export CATALINA_BASE=/user/imooc/tocmat1
export CATALINA_HOME=/user/imooc/tocmat1
export TOMCAT_HOME=/user/imooc/tocmat1
export CATALINA_2_BASE=/user/imooc/tocmat2
export CATALINA_2_HOME=/user/imooc/tocmat2
export TOMCAT_2_HOME=/user/imooc/tocmat2
执行命令source /etc/profile是修改生效。
执行命令echo $CATALINA_HOME等查看生效后的值是否正确。
(2)tomcat2的catalina.sh文件
在#OS的后行增加:
export CATALINA_BASE=$CATALINA_2_BASE
export CATALINA_HOME=$CATALINA_2_HOME
(3)tomcat2的server.xml
需要修改端口,避免和tomcat1冲突。
8005->9005,8080->9080,8009->9009
(4)依次启动两个tomcat
4.2.2 windows
(1)环境变量
和上面类似,使用windows的方式加上6个环境变量。
(2)tomcat2的catalina.bat和startup.bat
注意,linux下只需要修改catalina.sh,windows还需要修改startup文件。
将文件中的CATALINA_HOME替换为CATALINA_2_HOME,CATALINA_BASE替换为CATALINA_2_BASE。
(3)tomcat2的server.xml
同上。
(4)依次启动两个tomcat
4.3 tomcat多机部署多应用
(1)仍然是单机多实例模式
即虽然是多机的,但每台机器仍然部署了多个tomcat,参看上节。
(2)单机单部署模式
正常部署即可,端口和配置文件互不影响。
注意,不同机器上的tomcat要保证网络畅通,且与nginx也是互通。
4.4 nginx负载均衡
4.4.1 策略
(1)轮询
简单,但是没考虑服务器各自的能力。
upstream www.happymmall.com{
server www.happymmall:8080;
server www.happymmall:9080;
}
(2)权重
用的较多。
upstream www.happymmall.com{
server www.happymmall:8080 weight=10;
server www.happymmall:9080 weight=18;
}
(3)ip hash
同一用户可访问同一台server,但是hash的结果不一定平均,并没有考虑到服务器的利用率和各自的能力。
upstream www.happymmall.com{
ip.hash;
server www.happymmall:8080;
server www.happymmall:9080;
}
(4)url hash
同一个url会访问同一台server,但是hash的结果不一定平均,并没有考虑到某些被频繁访问的url。
upstream www.happymmall.com{
server www.happymmall:8080;
server www.happymmall:9080;
hash $request_url;
}
(5)fair
server响应时间短的先分配。
upstream www.happymmall.com{
server www.happymmall:8080;
server www.happymmall:9080;
fair;
}
4.4.2 其他配置
down:不工作
backup:其他服务器全down才工作。
4.5 tomcat+nginx集群搭建
4.5.1 tomcat准备
(1)区分tomcat1和tomcat2
修改tomcat的图标(webapp/ROOT/tomcat.png),以方便区分最终访问的是哪台服务器。
(2)启动tomcat
按照前面所说的,启动好两台tomcat。
4.5.2 域名准备
(1)hosts文件
因为没有申请域名,所以修改hosts文件。
127.0.0.1 www.imooc.com
(2)验证
ping www.imooc.com,没有问题。
分别访问www.imooc.com:8080和www.imooc.com:9080,没有问题。
4.5.3 nginx准备
(1)启动nginx
linux下nginx的默认安装路径为/usr/local/nginx。执行sbin目录下的nginx.sh。
windows下,执行bin目录下的nginx.exe,注意用命令行启动且不关闭窗口,如果使用双击exe的方式启动容易造成启动多个而不自知。
(2)验证
访问http:www.imooc.com或者http:localhost均可,出现nginx首页即可。默认是80端口,可以不输入。
(3)配置文件
在nginx.conf中增加:
include vhost/*.conf
创建vhost/www.imooc.com.conf,以后自定义的配置都放在vhost目录下。
访问imooc.com/时,会被转发到http://www.imooc.com,然后找到上方的upstream,会被转发到这两个server上。
upstream www.imooc.com{
server www.imooc:8080;
server www.imooc:9080;
}
server{
//其余略
server_name imooc.com
access_log c:/access.log combind;
location /{
proxy_pass http://www.imooc.com;
...
}
}
(4)重新加载
修改了配置文件后,不需要重启nginx,重新加载即可。
linux:sudo ./nginx -s reload
window:原窗口不关闭,新开一个窗口,执行nginx.exe -s reload
(5)验证负载均衡
访问imooc.com,多次刷新,发现图片有所变化,表明是不同的tomcat。