集群:
可以做集群的工具:apache、 nginx
为何要集群 : tomcat:理论上 单节点tomcat能够稳定的 处理请求并发量200-300;
集群解决的问题 :实现负载均衡 和 失败迁移
服务端集群:
a.水平集群 :将服务器安装在 各个不同的计算机上 (失败迁移)
b.垂直集群 :将多个服务器,安装在同一个计算机上 (负载均衡)
搭建集群:
工具:Apache,两个Tomcat(可以更多)
两个服务器的区别 : apache+tomcat:动静分离
apache :特点是处理静态资源(html 图片 js) .这里的apache是一个服务工具,不是 之前理解的 基金组织。
tomcat:特点 可以处理动态资源
apache:请求的分流操作 Apache下载
Apache配置:修改配置 + 注册服务
修改配置
在Apache中 的 conf/http.conf 文件中
Define SRVROOT "Apache根目录"
例如:Define SRVROOT "D:\cluster\Apache24"
注册服务
将apache配置成windows服务,管理员身份打开cmd,通过命令注册apache服务
命令 : "路径" -k install -n 服务名
例如 : "D:\dev\cluster\Apache24\bin\httpd.exe" -k install -n apache24
删除服务
sc delete 服务名
注意:
如果在注册apache服务时,提示“丢失VCRUNTIME140.DLL”,则需要下载并安装vc_redist.x64.exe。下载地址https://www.microsoft.com/en-US/download/details.aspx?id=48145
vmvare 端口为 443 可能造成对口占用 服务不能启动
检查
注册成功后,启动,localhost 查看是否成功访问
直接访问 localhost 默认端口是80
整合apache+tomcat
1、规划+修改端口
规划:可以自定义,这只是我个人的
Tomcat服务器 | server端口 | http协议端口 | ajp协议端口 |
---|---|---|---|
tomcat-a | 1005 | 1080 | 1009 |
tomcat-b | 2005 | 2080 | 2009 |
以下配置-位置均在 \apache-tomcat-8a\conf\server.xml中
server端口:<Server port=“1005” shutdown=“SHUTDOWN”>
http协议端口:<Connector URIEncoding=“utf-8” connectionTimeout=“20000” port=“1080” protocol=“HTTP/1.1” redirectPort=“8443”/>
ajp协议端口: <Connector port=“1009” protocol=“AJP/1.3” redirectPort=“8443”/>
2、配置Tomcat引擎
<Engine defaultHost=“localhost” name=“Catalina” jvmRoute=“tomacat-a”>
只需要添加 jvmRoute=“tomacat-a”
每个 jvmRoute 的值不能一样
3、打开集群开关
打开以下注释
<Cluster className=“org.apache.catalina.ha.tcp.SimpleTcpCluster”/>
Tomcat配置完成
4 配置Apache参数
两者结合需要 mod_jk.so 文件
下载 mod_jk.so 中的httpd.zip中
i、存放位置(建议) \Apache24\modules\mod_jk.so
ii、配置\Apache24\conf\workers.properties
worker.list=controller,tomcata,tomcatb
#tomcata
worker.tomcata.port=1009
worker.tomcata.host=localhost
worker.tomcata.type=ajp13
#负载均衡的权重
worker.tomcata.lbfactor=1
#tomcatb
worker.tomcatb.port=2009
worker.tomcatb.host=localhost
worker.tomcatb.type=ajp13
worker.tomcatb.lbfactor=2
#controller
worker.controller.type=lb
worker.controller.balanced_workers=tomcata,tomcatb
worker.controller.sticky_session=false
分布式session策略:
1.sticky:固定将每一个用户的请求 分给特定的服务器,后期的请求不会分给其他服务器
2.session广播(自动同步session): 自动同步session,
弊端:如果服务器太多,可能造成广播风暴(将一个服务器的session,需要同步到其他所有的服务器中)
3.集中管理方式(推荐):将各个服务器的session集群存储到一个 数据库中
iii、配置\Apache24\conf\mod_jk.conf (用于加载mod_jk.so和workers.properties)
#加载mod_jk.so
LoadModule jk_module modules/mod_jk.so
#加载workers.properties
JkWorkersFile conf/workers.properties
#需要拦截的类容 /* 表示所有
JkMount /* controller
Apache加载流程
mod_jk.so,workers.properties ->mod_jk.conf -> apache程序会自动加载httpd.conf
集群 应用阶段 :部署实施
依次启动apache、tomcata、tomcatb
测试:失败迁移 负载均衡 session共享
注意:
CATALINA_HOME会使 启动tomcat时 自动开启CATALINA_HOME指定的tomcat。
而集群中 需要开启多个不同的tomcat,因此 在单机环境下,需要删除CATALINA_HOME。
依次启动apache、tomcata、tomcatb
细节
apache:
worker.list=controller,tomcata,tomcatb
tomcat配置:(只需要保证 所有tomcat的jvmRoute不能重名即可 ,可以和apache中的命名不一致)
jvmRoute="tomcat-a"
jvmRoute="tomcat-b"
流程:apache->workers.properties中配置的 ip:端口 找到具体的tomcat服务(与tomcat中的jvmRoute="tomcat-a"的没有关系)
tomcat服务的目录名:(任意)
tomcata
tomcatb