本帖最后由 小蜀哥哥 于 2017-9-5 12:51 编辑 简介:随着互联网的飞速发展,互联网的用户也飞速增加。随之而来就是如何解决大量用户访问导致高并发的问题,倘若用单机版的tomcat在理想状态下能够承受的并发访问量大概为150到200左右,为了解决高并发就需要引入负载均衡技术。负载均衡就是一个web服务器解决不了的问题可以通过多个web服务器来平均分担压力来解决,并将发过来的请求被平均分配到多个后台web服务器来处理,这样压力就被分解开来。如:将同一个系统部署到多台tomcat服务器,每个tomcat服务器都可以独立提供服务——tomcat集群,并且通过负载均衡技术反向代理tomcat集群,这样既可提供系统的访问压力。负载均衡技术有两种方式实现:(1) 硬件负载均衡——如F5 (2)软件负载均衡——如Nginx、Apache等,但是硬件负载均衡的成本比较大,所以一般都采用软件负载均衡。而很多大型网站如京东、淘宝都采用Nginx负载均衡解决高并发问题,所有我们这里也采用Nginx实现负载均衡,反向代理tomcat集群。 一.Nginx+tomcat广播机制实现session共享 1. 环境准备 ![]() 2. Nginx安装与启动 (1) 解压Nginx压缩包 ![]() (2) 双击nginx.exe启动Nginx,在浏览器输入http://localhost展示如下页面即表示安装成功 ![]() 3. Tomcat集群 (1) 解压apache-tomcat-7.0.69.zip成两个tomcat1、tomcat2 ![]() (2) 修改tomcat1的配置文件conf/server.xml 1). 修改server的port端口为18005 ![]() 2). 修改Connector的port端口为18080 ![]() 3). 修改<Connector port="18009"protocol="AJP/1.3" redirectPort="8443" /> ![]() 4). 修改Engine添加jvmRoute="tomcat" ![]() 5). 在<Engine>下添加如下配置文件 ![]() [XML] 纯文本查看 复制代码
(3) tomcat2操作同上,修改位置参照tomcat1,修改tomcat2的配置文件conf/server.xml 1). 修改server的port端口为28005 同tomcat1修改server的port端口 2). 修改Connector的port端口为28080 同tomcat1修改Connector的port 3). 修改<Connector port="28009"protocol="AJP/1.3" redirectPort="8443" /> 同tomcat1修改操作 4). 修改Engine添加jvmRoute="tomcat" 同tomcat1该操作 5). 在<Engine>下添加如下配置文件 同tomcat1的该操作 (4) 修改Nginx安装目录下conf/nginx.conf文件 ![]() ![]() 4. 创建Web项目并测试广播机制的session共享 (1) 创建一个Web项目,名称为TestJQ ![]() (2) 编辑index.jsp的内容如下 ![]() (3) 在WEB-INF下的web.xml中加入<distributable/> ![]() (4) 将该web项目分部复制到tomcat1和tomcat2的webapps目录下 (5) 分别修改tomcat1和tomcat2下web项目的index.jsp内容如下 ![]() ![]() (6) 启动tomcat1和tomcat2 (7) 在Nginx安装目录下,进入cmd命令模式执行如下命令 ![]() (8) 测试,在浏览器输入http://localhost/TestJQ。不断刷新该页面,session如果保持不变则完成广播机制的Nginx+tomcat集群下的session共享 注意:依靠广播方式来实现的session复制,会浪费很多带宽导致整个网络反映缓慢。官网也建议这种方式最好不要超过4台tomcat!推荐使用下面方式实现,当然如果是分布式架构。那么应该考虑sso单点登录系统来使用redis模拟session机制 二.Nginx+tomcat集群+redis实现session共享 1. 环境准备 ![]() 2. Nignx的配置信息参照上面的,无序做任何修改 3. 修改tomcat如下内容 (1). 将tomcat1和tomcat2目录下conf/server.xml文件中的<Engine>节点中的jvmRoute属性去掉 (2). 删除tomcat1和tomcat2目录下conf/server.xml文件中的<Cluster> ... </Cluster>节点 (3). 删除tomcat1和tomcat2的webapps下TestJQ项目的web.xml,去掉<distributable/>节点 4. Redis的安装 (1) 解压redis压缩包 ![]() (2) 启动redis,在redis安装目录下,进入cmd命令窗口执行启动命令 ----64位redis启动命令:redis-server.exe redis.windows.conf ----32位redis启动命令:redis-server.exe Redis.conf ![]() 5. tomcat使用redis实现session共享 (1) 解压如下压缩包,并将解压后的所有jar拷贝到tomcat1和tomcat2的lib目录下 ![]() (2) 修改tomcat1和tomcat2下conf/context.xml配置文件,加入以下内容 [XML] 纯文本查看 复制代码
6. 重启redis和Nginx服务,启动tomcat1和tomcat2。在浏览器输入http://localhost/TestJQ。不断刷新该页面,session如果保持不变则实现Nginx+tomcat集群+redis实现session共享 三.总结 这里只是简单的整理Nginx反向代理实现tomcat集群中的session共享,对于集群、负载均衡做一个入门案例。让大家对如今互联网行业面临的问题有一个大概的了解,当然随着我们的学习,我们会更加深入集群、分布式架构、SOA、各种微服务等技术! 希望这篇文章对大家有所帮助,也希望我们共同进步,共同探讨新技术,不断提升! 不发展的技术只会淘汰,不学习的人才终会沉沦!Let's rock and control it , come on |
|