在进行系统部署环境架构时,选择的是 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 版本进行下载;
寻找mod_jk就挺麻烦,先把地址告诉大家:
http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/
下载合适的版本,如图:
下载完成后改名为 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
3)、配置 jk
在Apache 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
4)、配置 workers
在Apache conf目录下修改 workers.properties 配置文件 ,并键入配置内容如下:
- #========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
解决方案二:ajp_proxy 方式集成
在 Apache conf目录下修改 httpd.conf 配置文件,找到一下配置项,版本不一样,有的配置项注释了,如果注释了就开启即去掉配置项前面的 “ # ” 号即可,所需内容如下:
- 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
注意:需要将 解决方案一中 httpd.conf 的配置项注释掉哟,然后再追加如下内容,如果不注释掉上面的配置内容会冲突的哈!
- ProxyRequests Off
- <proxy balancer://loadbalance>
- BalancerMember ajp://192.168.78.158:9001 loadfactor=1 route=worker3
- BalancerMember ajp://192.168.78.159:9002 loadfactor=1 route=worker2
- </proxy>
然后在 Apache 配置目录下 conf/extra 找到 httpd-vhosts.conf 虚拟主机配置文件,将里面的 VirtualHost 节点注释去掉即可,具体配置内容如下:
- <VirtualHost *:80>
- ServerAdmin webmaster@dummy-host.example.com # 公网访问的域名
- 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 # 自定义日志
- </VirtualHost>
配置完成后,在浏览器地址栏键入 域名 或者 localhost 直接回车即可访问部署的项目了。
注意: 关于虚拟主机,在这儿可以一个或多个哟!!!
解决方案三:http_proxy 方式集成
http_proxy 集成方式和 ajp_proxy 集成方式相似,不同的是代理节点配置不同,将 ajp 修改为 http 即可,具体配置文件的修改同 “解决方案三”,具体需要修改的内容如下:
- ProxyRequests Off
- <proxy balancer://loadbalance>
- BalancerMember http://192.168.78.158:9001 loadfactor=1 route=worker3
- BalancerMember http://192.168.78.159:9002 loadfactor=1 route=worker2
- </proxy>
配置完成后,在浏览器地址栏键入 域名 或者 localhost 直接回车即可访问部署的项目了。
注意: 关于虚拟主机,在这儿也可以一个或多个哟!!!