windows实现apache+tomcat集群
程序员文章站
2022-06-07 10:54:07
...
好消息,百度网盘专业搜索网站上线了
打开瞧一瞧:http://bitar.cn
打开瞧一瞧:http://bitar.cn
【只集群,未处理session问题】 apache http server 反向代理 实现集群 apache http server2.4.16 下载地址:http://httpd.apache.org/ 1、下载 2、下载代理组件mod_jk 3、tomcat配置 4、配置apache 5、安装启动apache 6、出现问题 7、session复制 8、更多 ============== 1、下载apache软件 apache http server web官网没有提供windows64位,下边这个网站稳定编译发布64位的 http://www.apachelounge.com/download/ 直接解压 2、下载mod_jk 代理组件 mod_jk tomcat-connector1.2.40下载地址 http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/ 解压后 把mod_jk.so 复制到apache modules 下 3、配置tomcat <Engine name="Catalina" //用于设置容器级别 <Engine name="Standalone" //用于集群和负载 开启server.xml下边两个配置 <Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat2"> 不影响负载通过端口连接识别的 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> 一台机器防止服务端口和负载端口冲突 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> #AJP(Apache JServ Protocol)是定向包协议,因为性能原因,使用二进制格式来传输可读性文本 4、配置apache2.4 -----------Apache+mod_jk方式实现负载均衡--------------- httpd.conf 下边需按实际修改 Require all denied 拒绝访问文件系统 Require all granted允许外网访问 ServerRoot "E:/balance/apache/Apache24" ServerName 127.0.0.1:80 #标示本身 Listen 80 DocumentRoot "E:/balance/apache/Apache24/htdocs" ScriptAlias /cgi-bin/ "E:/balance/apache/Apache24/cgi-bin/" 最后加入(参考:httpd.conf最后加入内容↓) 新建workers.properties (配置负载) 内容参考(workers.properties 内容) ---------Apache proxy,mod_proxy只实现请去跳转到其他服务器,没有负载均衡------------------------------ mod_proxy_balancer是mod_proxy的扩展,提供负载平衡支持 5、启动 win7 64位 可能会提示vcruntime140.dll\api ms win crt runtime 1-1-0.dll缺失 安装vc_redist.x64.exe INSTALL.txt 中说明了linux和window启动方式(Running Apache as a Service) 安装windows服务 (如果没有提示错误就成功,否则需先处理提示的错误 ) httpd.exe -k install httpd.exe -k install -n "MyServiceName" #一台多服务,指定服务名称 httpd.exe -k install -n "MyServiceName" -f "c:\files\my.conf" #默认conf\httpd.conf httpd.exe -f files\anotherconfig.conf #相对路径 httpd.exe -k uninstall 卸载 sc delete Apache2.4 httpd.exe -k uninstall -n "MyServiceName" httpd.exe -n "MyServiceName" -t 测试 启动 httpd.exe -k start -n "MyServiceName" httpd.exe -k stop -n "MyServiceName" httpd.exe -k shutdown -n "MyServiceName" httpd.exe -k restart -n "MyServiceName" 安装: httpd.exe -k install #Apache2.4 启动:httpd.exe -k start 6、问题 1)64位tomcat7在win7上运行提示Can't load AMD 64-bit .dll on a IA 32-bit platform 问题:编译的cup不同, 所以使用32位的tomcat做的集群 ===============Apache+mod_jk方式实现负载均衡======================================================== ================httpd.conf最后加入内容↓======================= #导入和追加 # JK module settings 使用导入文件方式 #Include conf/mod_jk.conf 下边直接追加方式不用mod_jk.conf文件 # Load mod_jk2 module 加载mod_jk.so LoadModule jk_module modules/mod_jk.so #判断是否加载mod_jk.so <IfModule jk_module> # Where to find workers.properties( 引用 workers 配置文件 ) JkWorkersFile conf/workers.properties #加载workers的请求处理分配文件 #JkMountFile conf/uriworkermap.properties <Location /status/> JkMount jkstatus Order deny,allow Deny from all Allow from 127.0.0.1 #可禁用ip 参考http://*.com/questions/29313092/mod-jk-failing-to-create-ajp13-extension-fixjk-uri-worker-map-c-could-not-fin #status查看apache配置http://127.0.0.1/status/ 访问 </Location> # Where to put jk logs(log 文件路径 ) JkLogFile logs/mod_jk2.log # Set the jk log level [debug/error/info](log 级别 ) JkLogLevel error # Select the log format(log 格式 ) JkLogStampFormat "[%F %T] " # JkOptions indicate to send SSL KEY SIZE, JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories # JkRequestLogFormat set the request format JkRequestLogFormat "%w %V %T" # Send JSPs for context / to worker named loadBalancer(URL 转发配置,匹配的 URL 才转发到 tomcat 进行处理 ) JkMount /*.* controller #JkMount /*.* loadBalancer </IfModule> ---------JkRequestLogFormat 选项--------------------- #Options Description(选项的说明) # %b 发送的字节, 不包括 HTTP headers (CLF format) # %B 发送的字节, 不包括 HTTP headers # %H 协议 # %m 请求方式(get/post) # %p 服务器响应请求的规范端口. # %q 查询字符串 (如果存在以?开头,否则是空串) # %r 请求的第一行. # %s HTTP状态码 # %T 请求间隔, 处理请求耗费的时间 秒.微秒 # %U 请求的url路径,不包含查询字符串. # %v 响应请求的规范服务器名字 # %V 根据UseCanonicalName设置的服务器名字. # %w Tomcat worker 名字 -----uriworkermap.properties------------ doc:http://tomcat.apache.org/connectors-doc/reference/uriworkermap.html /*=controller #所有请求都由controller这个server处理 /jkstatus=status #所有包含jkstatus请求的都由status这个server处理 !/*.gif=controller #所有以.gif结尾的请求都不由controller这个server处理,以下几个都是一样的意思 !/*.jpg=controller !/*.png=controller !/*.css=controller !/*.js=controller !/*.htm=controller !/*.html=controller #这里的"!”类似于java中的"!”,是“非”的意思。 ====================workers.properties 内容=================== #server 列表 worker.list = controller,tomcat1,tomcat2 # tomcat1(ajp13 端口号,在tomcat下server.xml配置,默认8009) worker.tomcat1.port=8009 #tomcat 的主机地址,如不为本机,请填写ip地址 worker.tomcat1.host=localhost worker.tomcat1.type=ajp13 #server 的加权比重,值越高,分得的请求越多 worker.tomcat1.lbfactor = 1 # tomcat2 worker.tomcat2.port=9009 worker.tomcat2.host=localhost worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor = 1 # controller( 负载均衡控制器) worker.controller.type=lb # 指定分担请求的tomcat worker.controller.balance_workers=tomcat1,tomcat2 #worker.controller.sticky_session=true or 1 #会话只在一台服务器上sticky/'stiki/粘性 worker.controller.sticky_session=true worker.controller.sticky_session_force=false #设置运行状态的控制器 (网站访问apache状态type=status) worker.jkstatus.type=status ====================workers.properties 结束=================== 7、 8、更多 访问客户端访问apache服务器,代理模块反向代理客户端访问tomcat session复制 session复制(session replication)机制将session发到其他所有结点上,用户数量和集群数量导致性能瓶颈 通过第三方缓存来存放session数据 现象: apache只存储了一个tomcat1的session,这时直接访问tomcat2会导致访问tomcat1的session失效?只能 就是sticky_session控制的?session只能在一台电脑