全部运行在Tomcat下
第一台主机:192.168.200.131 安装nginx
修改hosts文件
[root@localhost ~]# vim /etc/hosts
192.168.200.131 nginx
192.168.200.130 node1
192.168.200.122 node2
//将hosts文件发送给另外两台主机
[root@nginx ~]# scp /etc/hosts 192.168.200.122:/etc
[root@nginx ~]# scp /etc/hosts 192.168.200.130:/etc
//关闭防火墙及安全机制
[root@localhost ~]# iptables -F
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# hostname nignx
[root@localhost ~]# bash //bash刷新
[root@nignx ~]#vim /usr/local/nginx/conf/nginx.conf
修改如下
#gzip on; upstream tomcat_pool { //声明tomcat_pool,默认轮询 server 192.168.200.130:8080 weight=1 max_fails=1 fail_timeout=10s;
//server 192.168.200.130:8080(节点端口)
//weight=1(权重)
//max_fails=1(最大故障数)
//fail_timeout=10s(故障超时)
server 192.168.200.122:8080 weight=1 max_fails=1 fail_timeout=10s;
}
server {
listen 80;
server_name localhost;
charset utf-8;
access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
proxy_set_header Host $http_host; //此处要添加host头
//如果反向代理层的nginx不重写请求头中的host字段,将会导致请求失败,报400错误
proxy_pass http://tomcat_pool; //做tomcat代理
}
[root@nginx ~]# nginx -t
[root@nginx ~]# killall -HUP nginx
测试:
结论:131主机nginx做tomcat反向代理依旧可以访问tomcat页面
轮询测试:介于122、130ip之间相互变化
因为130、122主机都做了session.jsp服务,此时131主机也可以进入测试页面
Session绑定测试使得在122或130任意主机之间一个保持ip不变:
[root@nignx ~]#vim /usr/local/nginx/conf/nginx.conf
upstream tomcat_pool {
ip_hash; //ip_hash表示绑定
server 192.168.200.130:8080 weight=1 max_fails=1 fail_timeout=10s;
server 192.168.200.122:8080 weight=1 max_fails=1 fail_timeout=10s;
}
测试:
结论:这种方式极不稳定一旦122的主机服务中断,那么131服务必定从120跳转到130,这样会影响线上服务
解决方案一进行Session复制(在tomcat两台主机做nginx主机不用改变)
Session复制测试(131主机):
可以利用IE浏览器测试,测试结果为session不变,node在变,ip也在变
解决方案2:
=================================================================================
第二台主机:192.168.200.130 安装tomcat
[root@localhost ~]# hostname node1
[root@localhost ~]# bash
[root@node1 ~]#
建立session.jsp的测试
[root@node1 ~]# vim /usr/local/tomcat8/webapps/ROOT/session.jsp
Session ID:<%= session.getId() %><BR>
SessionPort:<%= request.getServerPort() %>
//第一条与第二条:开头都是直接在网页上输出
//后面的函数都是会自动获取本机session的ID号,根据机器信息自动生成
<% out.println("This tomcat server 192.168.200.130");%>
启动tomcat
[root@node1 ~]# /usr/local/tomcat8/bin/shutdown.sh
[root@node1~]# /usr/local/tomcat8/bin/startup.sh
测试:
Session复制:
[root@node1 ~]# /usr/local/tomcat8/bin/shutdown.sh
[root@node1 ~]# /usr/local/tomcat8/bin/startup.sh
[root@node1 ~]# netstat -anpt | grep -E "8080|4000" //有4000端口表示复制成功,没有4000端口表示复制失败,测试失败
Session复制测试:
Session复制测试结果应该为session不变,node在变,ip也在变(图为教师图)
本次实验失败
===============================================================================
第三台主机:192.168.200.122 安装tomcat
[root@localhost ~]# hostname node2
[root@localhost ~]# bash
[root@node2 ~]#
建立session.jsp的测试
[root@node2 ~]# vim /usr/local/tomcat8/webapps/ROOT/session.jsp
Session ID:<%= session.getId() %><BR>
SessionPort:<%= request.getServerPort() %>
//第一条与第二条:开头都是直接在网页上输出
//后面的函数都是会自动获取本机session的ID号,根据机器信息自动生成
<% out.println("This tomcat server 192.168.200.122");%>
启动tomcat
[root@node2~]# /usr/local/tomcat8/bin/shutdown.sh
[root@node2 ~]# /usr/local/tomcat8/bin/startup.sh
测试:
Session复制:
[root@node2~]# /usr/local/tomcat8/bin/shutdown.sh
[root@node2 ~]# /usr/local/tomcat8/bin/startup.sh
[root@node2~]# netstat -anpt | grep -E "8080|4000" //有4000端口表示复制成功没有4000端口表示失败
Session复制测试结果应该为session不变,node在变,ip也在变(图为教师图)
本次实验失败