环境:
linux centos7
jdk1.7
tomcat7
apache2.4
所需资源包列表
apr #好像1.5版本
apr-util #好像1.5版本
#以上,都可以在:http://apr.apache.org/download.cgi 中下载
pcre #Perl工具
#下载地址: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
#不要下载pcre2
linux下,源码安装就是各种依赖比较蛋疼,其他的配置跟win下差不多。
PS:我首先是把所有要安装的源码包和安装文件下载好
sp 0: 安装jdk
由于open jdk 和 Oracle 的jdk在有些方面不兼容(或者缺失),而且我们一般在开发中使用的Oracle jdk.
具体可以查看:http://fgh2011.iteye.com/blog/1771649
切换到root用户下 # su root # Password: 输入密码 查看当前jdk版本 # java -version prf: java version "xxxxx" .....
则表示已经安装了jdk
我们需要替换我们自己安装的,所以我们要先去卸载了jdk
查询我们安装的jdk信息
#rpm -qa | grep jdk
出现了xxxxx_openjdk_xxxx的条目,选择第一个复制
然后我们删除
#yum -y remove java 上面复制的内容
等待完成删除
#java -version
然后重复以上操作,直到java -version 没有jdk的信息或者rpm -qa | grep jdk没有了条目信息即可
安装
我们下载好的jdk.rpm文件
#rpm -ivh jdk安装包路径
#java -version
有版本信息表示已经安装好了
sp 1: 安装apache
首先我们先来安装依赖包,分辨进入各自解压好的文件夹中
复制到/usr/local/下
#cp 源文件 目标文件夹 解压命令:#tar -zxvf xxxxx.gz
1.1 安装apr
把我们的源码包解压
#./configure --prefix=/usr/local/apr #make && make install
1.2 安装apr-util
把我们的源码包解压
#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr #make && make install
PS:因为我们现在是已知缺少这两个依赖,所以我就先安装了。
1.3 安装apache
./configure --prefix=/usr/local/apache --enable-so -enable-proxy -enable-proxy_http=shared--enable-module=so --enable-mods-shared=all --enable-proxy-ajp=shared --enable-proxy-balancer -with-mpm=worker --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
提示缺少 pcre
这里可能有个问题,因为一般的系统会带有pcre,千万不要卸载系统自带的pcre包,这个,你可以试试。
1.4 安装pcre (这里可以跳过,直接使用系统自带的pcre)
源码包cp到我们/usr/local下
然后解压
#cd ./pcre-xx.xx.xx #./configure --prefix=/usr/local/pcre #make && make install
1.5 给我们的1.3步骤上加上 pcre的依赖
#./configure --prefix=/usr/local/apache2.4 --enable-so -enable-proxy -enable-proxy_http=shared--enable-module=so --enable-mods-shared=all --enable-proxy-ajp=shared --enable-proxy-balancer -with-mpm=worker --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/user/local/pcre
PS:反正这个地方,如果少神马依赖就添加安装神马依赖(不能使用pcre2)
#--prefix :这个指定需要安装的路径
#--enalbe-so :这个指定你需要打开的so模块
#-enable-xxxxx:这个指定具体的模块
#以上除了--prefix,有必要设定以外,其他的可以可以省略到最后手动配置
#--with-xxxx :这个指定编译安装所需要的依赖
#make && make install
如果安装通过,我们就可以进行下一步了
sp 2.配置apahce
2.1 修改httpd.conf
#vim /usr/local/apache2.4/conf/httpd.conf
修改ServerName 为本机ip
打开我们要使用的so module
在DirectoryIndex 添加 index.jsp
保存修改
#:wq!
启动apache
#/usr/local/apache2.4/bin/apachectl start
如果在浏览器上,访问127.0.0.1没有出现It's works!表示没有启动成功。
我们可以查看错误日志来解决问题
#less /usr/local/apache2.4/logs/error.log
查看apache是否正常的运行了
#ps -ef | grep httpd
重启:restart ,关闭:stop
sp 3. 安装tomcat(这里我们使用3个tomcat来测试我们是否搭建成功)
3.1 解压我们下载的tomcat包
3.2 复制3个,分辨命名为:tomcat7.1 tomcat7.2 tomcat7.3
3.3 cp到/usr/local/下面
sp 4.进行集群的配置(这里我们使用ajp)
Ps:1.<Connector port="8081|8082|8083" protocl="HTTP/1.1" redirectPort="9441|9442|9443" <Connector port="9001|9002|9003" protocl="AJP/1.1" redirectPort="8441|8442|8443" <Server port="9006|9007|9008"
4.1 配置tomcat中的
4.1.1 改shutdown 端口,同一服务器下不一样
<Server port="9006" shutdown="SHUTDOWN">
4.1.2 改http port redirectPort,同一服务器下不一样
<Connector port="8081" protocol="HTTP/1.1" executor="tomcatThreadPool" connectionTimeout="20000" redirectPort="9441" />
4.1.3 改ajp port redirectPort,同一服务器下不一样
<Connector port="9001" protocol="AJP/1.3" redirectPort="8441" />
4.1.4 改 Engine 加上 jvmRoute 需要跟httpd.conf中保持一致
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
4.1.5 加上Cluster 具体如下(Receiver port="5001|5002|5003" 同一服务器下,不能一样)
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6"> <Manager className="org.apache.catalina.ha.session.BackupManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" mapSendOptions="6" /> <Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000" /> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="5001" selectorTimeout="100" maxThreads="6" /> <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" /> </Sender> <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector" /> <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor" /> <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor" /> </Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;" /> <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false" /> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener" /> </Cluster>
4.1.6 添加一个测试项目
省略
4.1.7 改项目web.xml
添加 <distributable /> 节点
4.2 配置 httpd.conf中的
ProxyVia Off ProxyRequests Off <Proxy "balancer://cluster"> BalancerMember "ajp://127.0.0.1:9001" loadfactor=1 route="jvm1" BalancerMember "ajp://127.0.0.1:9002" loadfactor=1 route="jvm2" BalancerMember "ajp://127.0.0.1:9003" loadfactor=1 route="jvm3" ProxySet lbmethod=bytraffic </Proxy> <Location "/balancer-manager"> SetHandler balancer-manager Require host localhost </Location>
打开的模块
#可能不需要这么多 LoadModule proxy_module modules/mod_proxy.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 LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so LoadModule proxy_scgi_module modules/mod_proxy_scgi.so LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_express_module modules/mod_proxy_express.so LoadModule session_module modules/mod_session.so LoadModule session_cookie_module modules/mod_session_cookie.so LoadModule slotmem_shm_module modules/mod_slotmem_shm.so LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so LoadModule status_module modules/mod_status.so LoadModule speling_module modules/mod_speling.so LoadModule alias_module modules/mod_alias.so LoadModule rewrite_module modules/mod_rewrite.so
4.3 修改httpd-vhosts.conf配置
<VirtualHost *:80> ServerAdmin [email protected] ServerName localhost ServerAlias localhost DirectoryIndex index.jsp ProxyPass "/" "balancer://cluster/" stickysession=JSESSIONID scolonpathdelim=On ProxyPassReverse "/" "balancer://cluster/" ErrorLog "logs/lbtest-error.log" CustomLog "logs/lbtest-access.log" common </VirtualHost>
PS: 最后要说明一点:
如果开启了seliunx和防火墙
先去关闭seliunx, 然后修改防火墙策略
不然开启不了组播,从而导致无法session复制
# /sbin/iptables -I INPUT -p udp --dport 45564 -j ACCEPT # /etc/rc.d/init.d/iptables save
#seliunx #setenforce 0 #semanage port -a -t http_port_t -p udp 45564