《 Apache+Tomcat 实现负载均衡/反向代理 》
在进行系统部署环境架构时,选择的是 Windows 系统,并使用 Apache+Tomcat 实现负载均衡/反向代理,提高服务器的高可用和横向扩展,不过最近公司打算将 Windows 系统替换为 Linux 系统,并将 Apache 替换为 Nginx,为什要替换?萝卜青菜各个有所爱,说法很广泛。
关于 Apache + Tomcat 实现负载均衡和反向代理的解决方案目前我所知道的有以下三种:
1、jk方式集成 : mod_jk.so(常用的,也是我一直在使用的)
2、ajp_proxy
3、http_proxy
解决方案一:jk 方式集成
1)、下载 jk
下载 jk 文件,这儿需要根据 Apache 版本进行下载;
一个:将两个版本改为 32 位,jk_32位_下载地址:https://download.csdn.net/download/hello_world_qwp/10123760
二个:将两个版本改为 64 位,jk_64位_下载地址:https://download.csdn.net/download/hello_world_qwp/10123765
下载完成后改名为 mod_jk.so 放进Apache的 modules 文件夹内;
2)、配置 httpd
接下来在 Apache conf目录下找到 httpd.conf 并追加如下内容:
AddDefaultCharset UTF-8 #注意:这个非常重要哟
# Load mod_jk module
LoadModule jk_module modules/mod_jk.so
# Load mod_jk conf
Include conf/mod_jk.conf
# Where to find workers.properties
JkWorkersFile conf/workers.properties
# Where to put jk logs
JkLogFile logs/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
JkMountFile conf/uriworkermap.properties
#JkMount /jkstatus jkstatus
# Send servlet for context /examples to worker named ajp13
#JkMount /servlet/* controller
# Send JSPs for context /examples to worker named ajp13
#JkMount /* controller
#========controller,负载均衡控制器========
worker.list = controller,jkstatus,tomcatA,tomcatB
#========tomcatA========
#ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcatA.port=9001
#tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcatA.host=localhost
worker.tomcatA.type=ajp13
#server的加权比重,值越高,分得的请求越多
worker.tomcatA.lbfactor = 1
#========tomcatB========
#ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcatB.port=9011
#tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcatB.host=localhost
worker.tomcatB.type=ajp13
#server的加权比重,值越高,分得的请求越多
worker.tomcatB.lbfactor = 1
#========controller,负载均衡控制器========
#指定分担请求的tomcat
worker.controller.type=lb
worker.controller.balanced_workers=tomcatA,tomcatB
worker.controller.sticky_session=false
worker.controller.sticky_session_force=1
#worker.controller.sticky_session=1
#集群状态监控配置
worker.jkstatus.type=status
worker.jkstatus.read_only=1
Include conf/extra/httpd-vhosts.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
ProxyRequests Off
BalancerMember ajp://192.168.78.158:9001 loadfactor=1 route=worker3
BalancerMember ajp://192.168.78.159:9002 loadfactor=1 route=worker2
ServerAdmin [email protected] # 公网访问的域名
DocumentRoot "${SRVROOT}/docs/dummy-host.example.com"
ServerName dummy-host.example.com # 域名
ServerAlias www.dummy-host.example.com # 别名 (全域名)
ProxyPass / balancer://loadbalance/ stickysession=jsessionid nofailover=On # session 共享
ProxyPassReverse / balancer://loadbalance/ # 这儿我理解为映射到刚才在 httpd.conf 中配置项目的那个节点上吧!!!
ErrorLog "logs/dummy-host.example.com-error.log" # 错误日志
CustomLog "logs/dummy-host.example.com-access.log" common # 自定义日志
ProxyRequests Off
BalancerMember http://192.168.78.158:9001 loadfactor=1 route=worker3
BalancerMember http://192.168.78.159:9002 loadfactor=1 route=worker2
配置完成后,在浏览器地址栏键入 域名 或者 localhost 直接回车即可访问部署的项目了。
注意: 关于虚拟主机,在这儿也可以一个或多个哟!!!