linux 下 apache tomcat 高可用负载集群
linux 下 apache tomcat 高可用负载集群
小七酱 发表于3年前
linux 下 apache tomcat 高可用负载集群
  • 发表于 3年前
  • 阅读 27
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: 反正这几天就是走了很多的弯路了!!!

环境:

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 xxxxxxx@xxxx.com            
            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



共有 人打赏支持
粉丝 3
博文 30
码字总数 17079
×
小七酱
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: