保姆级:详细说明双节点负载均衡与集群
2、负载均衡(Load Balance):先得从集群讲起,集群就是一组连在一起的计算机,从外部看它是一个系统,各节点可以是不同的操作系统或不同硬件构成的计算机。如一个提供Web服务的集群,对外界来看是一个大Web服务器。不过集群的节点也可以单独提供服务。
总体来说,在负载均衡的思路下,多台服务器为对等方式,每台服务器都具有同等的地位,可以单独对外提供服务而无需其他服务器的辅助。通过负载分担技术,将外部发送来的请求按一定规则分配到对称结构中的某一台服务器上,而接收到请求的服务器都独立回应客户机的请求
一、环境配置、软件说明
平台
Windows Server 2012 X64
Apache
httpd-2.4.53-win64-vs16
TomCat
apache-tomcat-9.0.37-windows-x64.zip
JDK(TomCat需要)
jdk-8u261-windows-x64.exe
Apache插件,用于连接tomcat
mod_jk-1.2.48-win64-vs16
二、实现目地
通过配置Apache与TomCat,做多个TomCat站点的负载均衡,其中某个TomCat站点崩溃异常,不会影响用户正常浏览体验。
三、实现原理
四、实验功能
同机器部署一个Apache两个TomCat:
1、实现两个TomCat负载均衡;
2、实现其中一个TomCat崩溃,服务器自动切换并且保持登录不掉线。
五、负载均衡部署
1、安装JDK,双击jdk-8u112-windows-x64.exe 选择安装路径,点下一步直到完成,然后配置系统环境变量。详细配置变量步骤,请百度或看往期图文消息。
2、apache、tomcat解压安装。
D:\Apache24
D:\tomcat1
D:\tomcat2
D:\java\
3、安装mod_jk.so
#配置MOD.JK 集群要的配置文件
Include conf/mod_jk.conf
#加载mod_jk Module
#LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so
LoadModule jk_module modules/mod_jk.so
#指定 workers.properties文件路径
JkWorkersFile conf/workers.properties
#加载workers的请求处理分配文件
JkMountFile conf/uriworkermap.properties
#指定jk的日志输出文件
JkLogFile logs/mod_jk.log
JkMount /*.jsp controller
#指定日志级别
JkLogLevel warn
<Location /jkstatus>
JKMount jk-status
Require ip 127.0.0.1
</Location>
#server 列表 tomcat1,tomcat2配置文件里的AJP端口要对应下方配置的port
worker.list= controller ,tomcat1,tomcat2
#========tomcat1========
worker.tomcat1.port=9019
worker.tomcat1.host=192.168.10.100
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
#两个tomcat部署在本机,部署在不同服务器就改对应的IP地址
#========tomcat2========
worker.tomcat2.port=9020
worker.tomcat2.host=192.168.10.100
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.retries=3
worker.controller.balance_workers=tomcat1,tomcat2
#worker.controller.sticky_session=false
worker.controller.sticky_session=1
worker.list=controller,jkstatus
#worker.controller.sticky_session_force=1
worker.jkstatus.type=status
D:\Apache24\conf文件夹下,(和http.conf同目录下)新建 uriworkermap.properties文件,内容如下:
#所有请求都由controller这个server处理
/*=controller
#所有包含jkstatus请求的都由status这个server处理
/jkstatus=jkstatus
#所有以.gif结尾的请求都不由controller这个server处理,以下几个都是一样的意思
/*.*=controller 或 /*=controller
#!/*.gif=controller
#!/*.jpg=controller
#!/*.png=controller
#!/*.bmp=controller
#!/*.css=controller
#!/*.js=controller
#!/*.htm=controller
#!/*.html=controller
#!/*.swf=controller
需要修改的端口配置:
tomcat1的端口配置如下:
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector protocol="AJP/1.3"
address="192.168.10.100"
port="9019"
redirectPort="8444" secretRequired="" URIEncoding="UTF8" />
#注意 下方的名称jvmRoute='tomcat1',tomcat2的server.xml里配置成tomcat2
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
#打开集群开关,默认注释掉了,把注释去掉就可以
#channelSendOptions="8" 属性值不加也行,默认值就是8
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"/>
-------------------------------------
tomcat2 server.xml端口配置如下
<Server port="8006" shutdown="SHUTDOWN">
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector protocol="AJP/1.3"
address="192.168.10.100"
port="9020"
redirectPort="8444" secretRequired="" URIEncoding="UTF8" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
#打开集群开关,默认注释掉了,把注释去掉就可以
#channelSendOptions="8" 属性值不加也行,默认值就是8
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"/>
1、先启动tomcat1、tomcat2 ,通过浏览器测试两个tomcat节点是否正常,浏览器测试都能正常显示页面,请继续下面操作。
2、启动apache,
打开CMD ,运行命令终端,cd 到apache路径bin下
执行http -k install
进到D:\Apache24\bin,双击打工ApacheMonitor,启动服务
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" useBodyEncodingForURI="true" URIEncoding="UTF8" />
<Connector protocol="AJP/1.3"
address="192.168.10.100"
port="9020"
redirectPort="8444" secretRequired="" URIEncoding="UTF8" />
2、启动tomcat报错 The AJP Connector is configured with secretRequired=“true” but the secret attribute is either null or “”. This combination is not valid. 解决 添加secretRequired=""即可,如下图。
3、tomcat集群各节点通过建立tcp链接来完成Session的拷贝,拷贝有同步和异步两种模式。在同步模式下,对客户端的响应必须在Session拷贝到其他节点完成后进行;异步模式无需等待Session拷贝完成就可响应。异步模式更高效,但是同步模式可靠性更高。同步异步模式由channelSendOptions参数控制,默认值是8,为异步模式,4是同步模式。
故上方tomcat 配置文件里使用到下面这句,请注意这些细节。
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"/>