apache搭建Tomcat集群(Cluster)
搭建集群:
apache:特点处理静态资源(html 图片 js等) apache的请求操作,Cluster工具
tomcat:特点处理动态资源
apache+tomcat(apache是web服务器,tomcat是应用(java)服务器它是 apache组织在j2EE的JSP和Servlet标准环境下开发的一个JSP服务器)
下载Apache服务器工具并启动
1.打开网页,地址为: http://httpd.apache.org/ 点击Download 界面如下:
2.选择Stable Release – Latest Version(稳定版本——最新版本),它会自动跳转到当前页面的下载资源版本的位置,选择File for Microsoft Windows版本
3.跳转新的页面,选择下载的镜像地址的,提示这个那个地方的镜像,我选择的是第一个是来自德国的地址
4.这个页面点击此处,再次跳转到别的页面之后会进行自动下载。
5.下载后,文件如下
如上的操作apache服务工具已经准备就绪。开始准备环境
环境准备
1.在电脑上的配的盘符,创建一个文件夹再次我取的名称是Cluster里面存放刚刚下载好并已经进行解压的Apache服务工具
2.在conf目录下的httpd.conf文件进行Apache的服务地址配置,定义为宝宝们自己存放的位置
3.将apache配置注册为services系统服务
使用管理员身份打开CMD命令行
输入: “D:\Cluster\Apache24\bin\httpd.exe” -k install -n apache24(宝宝们可随意编写,但是建议和软件的名称相关,毕竟你们都是专业的)
我第一输入,是因为我的电脑安装了VM,我将它的服务给暂停了
第二次输入,前面提示还是报错,但是具体本人也不清楚,但是后面提示服务显示安装成功。
打开电脑的服务,或者win+r键,出现运行窗体,输入services.msc后回车,可以看到我们的系统服务中已经包含了宝宝们刚刚创建的apache的服务名
,当让了,能够创建就能够删除,删除命令为:
sc delete apache24(宝宝们之前创建的名字)
注意:如有宝宝不知道自己的端口被那个软件所占用,简单方法
可以打开任务管理器,点击详细信息
专业必备方法命令:
查看某个具体的端口被占用的情况
netstat -ano | findstr “80”
4.以上的操作,厉害的宝宝们应该已经完成了,那么我们就该启动服务了,之后Apache配置完成了。Give Me Five
注意了注意了注意了,到启动的时候很多人会遇见错误,如下所图所示:遇到这种问题,网上有很多的决解方案,而我说一下我遇到这个问题的原因,端口没有被占用可以启动还是报错。
遇到的一些错误
首先打开此电脑——管理——可以查看电脑的应用日志。
看完之后,我的问题是这样的
我根据排错的原因发现,端口没有被占用,而真正的原因就是因为我的D盘下有两个Apache24的文件
一个位置在D:\Cluster\Apache24
另一个位置了在D:\Apache24
所以导致启动报错的原因所在了。所以哦专业的小宝宝们注意细节了!!!
5.最后我们可以进行Apache的配置测试了
打开浏览器,输入localhost即可,因为它默认的端口好就是80,出现如下如,恭喜宝宝们,你们已经完美的完成了Apache配置。干的漂亮!!!很棒!!!
Cluster通过Web服务器,配置java服务器,接下来进行Tomcat的配置。
Tomcat集群搭建
1.将创建的两个Tomcat复制到Clustere文件中去,进行部署,当然了因为是模拟两个不同的Tomcat那么它的名称是不能一样的,需要重命名进行区分。
注意: 当本地有两个Tomcat时,我们需要修改端口号,不修改同样的端口号会导致第二个Tomcat启动失败,因为端口被占用了
2.打开Tomcat目录中conf下文件的server.xml进行端口的修改。
注意运行一个Tomcat服务器需要3个端口分别是:servlet:8005、http:8080、ajp:8009三个默认的端口号
由于有两个Tomcat名称分别是如下,为它们设置端口号用于区分
Tomcat9-A:默认端口号不变
Tomcat9-B:9005、9090、9009
3.修改服务器的引擎:Engine(使用Cluster需要配置),还是位于Servlet.xml配置文件中。宝宝们,这次需要两个Tomcat服务器配置都进行修改。
引擎表示处理的入口点(在Catalina中)
每一个要求。Tomcat的引擎实现是独立的
分析请求中包含的HTTP标头,并传递它们
转到适当的主机(虚拟主机)。
文档在/docs/config/engine.html—>
你应该通过AJP ie设置jvmRoute来支持负载平衡
这段话是Tomcat中告诉我们的,如果需要Tomcat支持负载平衡就需要设置jvmRoute,宝宝们接下来我们进行jvmRoute的配置
<!– defaultHost 代表一个虚拟机主机 jvmRoute jvm路由功能,请求给了apache,apache它是怎么进行查看是那个Tomcat服务器,它可以通过我们配置的路由名称进行设置 –>
4.打开集群开关(server.xml)默认为关闭的,将注解去掉即可开启
注解中又说如何配置可以参照下面的案例。
位置在Tomcat——webapp——docs——cluster-howto.html
Tomcat——webapp——docs——config——cluster.html
最后Tomcat集群配置结束和Apache启动完成之后进行整合。
整合需要一个插件:mod_jk.so
再次下载mod_jk.so
1.网址为: http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/
mod_jk.so这个文件在这个网址下zip的一个文件中。
所以需要先下载这个zip文件,下载完后将它解压找到mod_jd.so放大到Apache24——modules文件下
2.对mod_jk.so进行配置,由于次文件是个二进制文件,那些进行配置就需要重新创建一个properties文件,我在Apache——conf文件下创建一个名为这个的worker.properties文件。进行配置
配置信息如下:
###定义了worket的对象列表,要配置多少个Tomcat就写多个对象列表 都需要在后文进行配置
###它只是一个标识符,不一定要和Tomcat\conf\下的server.xml中jvmRoute=”tomA” 这个名称一样
###controller
apache的分流(分配那个Cluster服务器),也叫控制器
worker.list=controller,TomA,TomB
#type 协议类型 mod_jk有4个类型:ajp12、ajp13、jni、lb
#负载平衡的比重,比如有100请求,可是服务器是两个,那么可以设置一下多少请求给A,多少请求给B 3-7 5-5
#设置为1那么请求就是两个服务器1比1请求,设置A为1B为2,那么请求就是1给A,2、3请求给B这么轮着来
#port服务器协议的端口号
,此配置和type结合使用,Tomcat的三大端口
#如type=ajp13,此时port的值就是Tomcat服务器中ajp13协议的端口号
#host 服务器IP地址,既然是Cluster那么那肯定有自己的服务器地址 ,本机电脑可以写localhost
#控制器没有负载均衡#lb表示这个控制器负载平衡worker,可以设置分流参与负载均衡的Tomcat服务器
#使用controller控制器告诉apache可以分流那些服务器
worker.controller.balanced_workers=TomA,TomB
#举个例子:宝宝A现在想apache发送了登录的请求,那登录的请求apache是给了我们的TomA这个服务器,那么宝宝A的session
#信息就存储在了TomA服务器上,可以当我们宝宝A再一次请求apache时,这是apache却将请求给了我们TomB这个服务
#器,可是我们TomB服务器上却没有存储宝宝A的Session值,那宝宝A就又需要登录一次了,宝宝A表示好烦,我不要这样
#1.sticky策略,绑定分配session,当我们的宝宝A第一次登录时apache分配的服务器是TomA,那么以后都用
#TomA来处理我们宝宝A的信息,可是这样有一个弊端,那就是无法失败迁移,但我们的TomA服务器坏了,
#2. session广播(自动同步session)策略:还是我们的宝宝A进行登录,每次登录后不管apache分配给那个服务器,那个服务器都
#将会把apache分配的那个session信息,进行广播传输。就是将这个session的信息自动同步给每个Tomcat服务器都发放一份
#弊端更大,服务器太多,会造成广播风暴(没次保存一个session就要广播给每个服务器,这提高了性能的开销)。
#3.集中管理方式(推荐):在apache和tomcat中添加一个数据库来进行保存session,这样宝宝A每次不管请求
#的是那个服务器,他都可以通过Tomcat服务器的去访问数据库查看宝宝A的session信息是否存在
#True就是sticky策略,false就是session广播策略
worker.controller.sticky_session=false
3.宝宝们不要着急,不要烦躁,我还需要在Apache——conf文件创建一个mod_jk.conf配置,用于加载(1、2两步的配置),之前虽然有了mod_jk.so和它的配置worker.properties,但是需要给他进行加载
#加载mod_jk.so和worker.propertity
#加载路径,它的加载路径是从Apache24的根目录开始的
LoadModule jk_module modules/mod_jk.so
#加载workers.propertity
JkWorkersFile conf/worker.properties
#分流什么 /*分流所有请求(JSP、Servlet)
JkMount /* controller
4.宝宝们别急快了,在第3步是已将1、2步进行了读取配置,可以第3步没有人认识它,那么又需要在apache24目录下的conf的httpd.conf配置一下,就是apache程序来认识它自动加载第3步
在httpd.conf中最后一行添加
include conf/mod_jk.conf
读取这个文件
前期工作基本已经完成了,宝宝们幸苦了!!!
因为集群主要是为了部署项目的。
所以我们创建一个简单的web项目,之后将这个项目发布在tomcatA和tomcatB两个服务其的的部署目录里面\webapps下
一个简单的web项目,它的基本结构如下:
JSP代码如下:
<body>
</br>
服务器地址
<%
out.print(request.getRemoteAddr());
%>
</br>
服务器端口
<%
out.print(request.getLocalPort());
%>
</br>
sessionId
<%
out.print(session.getId());
%>
</body>
5.最后一步了,只要在web.xml中加上一句话,就可以让session进行数据的同步了
<distributable />
最终上面部署了这么久我们可以看到成果了!!!准备测试
启动apache和两个Tomcat服务
这里需要注意一下因为是本地电脑(单机环境)所以环境配置记得需要将之前配置的Tomcat环境CATALINA_Home给删除掉,因为如果加上这个环境变量,那么我们每次启动他使用的都是同一个Tomcat服务器这样是不行的
分别启动Tomcat的服务
正常启动完成两个Tomcat服务器后之这样的:
,如果点击启动闪退,一般是CATALINA_Home环境变量没有删除
开始测试:
第二次请求:
为什么服务器地址为::1了。
C:\Windows\System32\drivers\etc
最终终于成功进程集群的搭建了,不容易呀!!!!!如用小伙伴不明白的地方可以在评论区@本人,并将问题可以发布到评论区,看到后我会进行答复!!!
所以需要先下载这个zip文件,下载完后将它解压找到mod_jd.so放大到Apache24——modules文件下