Windows下使用Nginx搭建集群及Session共存

来源:互联网 发布:社区app软件 编辑:程序博客网 时间:2024/05/16 12:51

Windows下使用Nginx搭建集群及Session共存

  • Windows下使用Nginx搭建集群及Session共存
    • 在一台电脑上安装两个tomcat
    • 项目准备
      • 新建项目
      • 修改项目
      • 打包项目
    • 修改tomcat的配置文件
    • tomcat部署和启动
    • 下载和安装
      • 下载
      • 安装
    • 配置Nginx
    • session共存
      • 配置Tomcat中session的共享方式1
        • 修改serverxml文件
        • 修改项目的webxml文件
      • 配置Nginx中session的共享方式2

在一台电脑上安装两个tomcat

需要在一台电脑模拟:在E盘解压两个tomcat,分别命名为tomcat1,tomcat2.

项目准备

新建项目

分别新建两个web项目(名字随意)

修改项目

分别修改javaweb项目默认index.jsp文件,如下图所示:
tomcat1
tomcat2

打包项目

分别将项目打包成war文件
war

修改tomcat的配置文件

tomcat1采用默认配置,tomcat2需要修改server.xml配置文件,避免端口冲突:

<?xml version='1.0' encoding='utf-8'?><Server port="8015" shutdown="SHUTDOWN">  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />  <Listener className="org.apache.catalina.core.JasperListener" />  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />  <GlobalNamingResources>    <Resource name="UserDatabase" auth="Container"              type="org.apache.catalina.UserDatabase"              description="User database that can be updated and saved"              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"              pathname="conf/tomcat-users.xml" />  </GlobalNamingResources>  <Service name="Catalina">    <Connector port="8090" protocol="HTTP/1.1"               connectionTimeout="20000"               redirectPort="8453" />    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />    <Engine name="Catalina" defaultHost="localhost">        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"               resourceName="UserDatabase"/>      </Realm>      <Host name="localhost"  appBase="webapps"            unpackWARs="true" autoDeploy="true">        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"               prefix="localhost_access_log." suffix=".txt"               pattern="%h %l %u %t &quot;%r&quot; %s %b" />      </Host>    </Engine>  </Service></Server>

tomcat部署和启动

将两个war包分别放置到tomcat的webapps目录下,分别启动tomcat

下载和安装

下载

该实验使用nginx1.8.1

1.8.1下载传送门:http://nginx.org/download/nginx-1.8.1.zip
其他版本下载传送门:http://nginx.org/en/download.html

安装

解压nginx1.8.1到两个tomcat同级目录下,进入nginx1.8.1目录下,双击nginx.exe。
启动完以后访问http://localhost,如显示下图则启动成功:
启动成功

nginx默认启动端口是80,如访问http://localhost不能正常显示,Nginx服务有时起动不了了,原因是80端口为其它应用程序占用了,这时,我们需要查看是哪个程序占用了它,可能是IIS的某个站点,或者Tomat,Apache等,都有可能,所以,我们需要查看一下电脑80端口的使用情况,使用下面命令:netstat -aon|findstr “:80″
找到并关闭占用80端口的进程,再次重启。

配置Nginx:

修改nginx/conf/nginx.conf文件:
配置文件

进入任务管理器,关闭nginx进程,打开多个浏览器,分别输入http://localhost/nginx-project1/,多次刷新查看效果,出现下图所示”tomcat2”则表示成功
这里写图片描述

不出现效果原因解决办法:给nginx代理服务器分配权重
upstream server_zakary{
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8090 weight=2;
}

说明:weigth值越大,访问次数越多。如上配置,8090的权重为2,则表示假如有3次访问中,8090的访问次数可能为2

session共存

通常请求负载过程中要求会话信息不能丢失,因此要在多个tomcat中session需要共享。
配置Tomcat的session共享可以有三种解决方案:

1、以负载均衡服务器本身提供的session共享策略,每种服务期的配置是不一样的并且nginx本身是没有的。(在Linux下建议使用此方法)
2、利用web容器本身的session共享策略来配置共享。针对于weblogic这种方式还是靠普的。但是针对于tomcat这种方式存在很大的缺陷,主要因为是依靠广播方式来实现的session复制,会浪费很多带宽导致整个网络反映缓慢。官网也建议这种方式最好不要超过4台tomcat,具体的内容可参考/webapps/docs/cluster-howto.html里面有详细的说明。(只能在window下好使)
3、Tomcat集群+redis的Session共享配置方法。
注意:在Linux下建议使用方法1,放法2只能在window下好使

配置Tomcat中session的共享(方式1)

修改server.xml文件

修改两个tomcat的server.xml文件,最简单的集群配置只需要将节点中注释掉的下面这句取消注释即可

<Cluster className=”org.apache.catalina.ha.tcp.SimpleTcpCluster”\>

修改项目的web.xml文件

web.xml文件的修改很简单:只需要在节点中添加这个节点<distributable/>就可以了。
有了这二步就实现了Tomcat的集群和Session的共享,重启两个tomcat和nginx,观察tomcat运行日志输出,如发现以下日志则说明成功,从nginx反向代理服务器访问,留意多次刷新浏览器观察效果这里写图片描述

配置Nginx中session的共享(方式2)

保证一个ip地址永远的访问一台web服务器,就不存在session共享问题了
方法:在nginx的配置文件nginx.conf中的upstream中添加 ip_hash
添加 ip_hash

0 0
原创粉丝点击