在CentOS 7 1804 中 安装 Apache HTTP Server 2.4 与 Apache Tomcat 9 集群


  1. 关闭SELinux:

    1. 查看Selinux的状态:
      getenforce
    2. 临时关闭:
      setenforce 0
      临时关闭后打开:
      setenforce 1
    3. 永久关闭:
      编辑配置文件:
      vim /etc/selinux/config
      如果没有vim命令请安装vim,或使用vi,安装vim命令:
      yum -y install vim
      修改配置:
      #SELINUX=enforcing    #打开
      SELINUX=disabled      #关闭
      需要重启后生效。
      如果现在不方便重启,临时关闭与永久关闭结合使用。
  2. 安装httpd并配置:

    1. 安装httpd:
      yum -y install httpd
    2. 启动httpd:
      systemctl start httpd.service
      查看是否启动:
      systemctl status httpd.service
    3. 设置httpd开机自启:
      systemctl enable httpd.service 
      查看是否设置了开机自启:
      systemctl list-unit-files | grep httpd.service
    4. 开启httpd的http(s)端口:
      1. 查看防火墙是否开启:
        systemctl status firewalld
      2. 开启防火墙:
        systemctl start firewalld
      3. 查看防火墙是否开机自启:
        systemctl list-unit-files | grep firewalld
      4. 开启防火墙的开机自启:
        systemctl enable firewalld.service
      5. 查看80/443端口是否开放:
        firewall-cmd --list-ports
      6. 开启80/443端口(需要重启防火墙):
        firewall-cmd --zone=public --add-port=80/tcp --permanent
        firewall-cmd --zone=public --add-port=443/tcp --permanent
      7. 重启防火墙:
        systemctl restart firewalld.service
        或:
        firewall-cmd --reload
      8. 查看已开放端口:
        firewall-cmd --list-ports
        至此httpd就可以访问了。
        通过ip访问:http://192.168.113.151/
  3. 安装java 8:

    1. 查看是否安装了java(查看已安装java版本):
      java -version
      查看java安装路径:
      whereis java
      或:
      which java
    2. 下载java:
      1. java全版本下载网页:
        https://www.oracle.com/technetwork/java/javase/downloads/index.html
         
      2. 本教程安装java 8,在上述网页中找到java 8下载网页:
        https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
         
      3. 下载Linux x64(根据自己的需要下载)版:
        下载后使用FlashFXP、Xftp 6等工具上传到服务器。
        路径为:
        /usr/java/jdk-8u191-linux-x64.tar.gz
      4. 解压jdk:
        tar -zxvf jdk-8u191-linux-x64.tar.gz
        解压后的路径:
        /usr/java/jdk1.8.0_191
      5. 配置java环境变量:
        编辑环境变量文件:
        vim /etc/profile
        在最下面添加下列代码:
        #set java jdk1.8.0_191 environment
        JAVA_HOME=/usr/java/jdk1.8.0_191
        JRE_HOME=/usr/java/jdk1.8.0_191/jre
        CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
        PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
        export JAVA_HOME JRE_HOME CLASS_PATH PATH
      6. 刷新环境变量:
        source /etc/profile
      7. 测试java:
        java -version
  4. 安装Tomcat 9并配置:

    1. 下载tomcat 9:
      tomcat 官网:http://tomcat.apache.org/
      tomcat 9 下载网址:https://tomcat.apache.org/download-90.cgi
      下载到/usr/java文件夹下:
      wget -P /usr/java/ http://mirrors.hust.edu.cn/apache/tomcat/tomcat-9/v9.0.12/bin/apache-tomcat-9.0.12.tar.gz
    2. 解压tomcat 9:
      tar -zxvf apache-tomcat-9.0.12.tar.gz
    3. 重命名解压后的文件:
      mv apache-tomcat-9.0.12 tomcat9
      复制tomcat9为tomcat9-1,用于集群:
      cp -r tomcat9 tomcat9-1
    4. 设置开机启动时的java环境变量(开机启动tomcat时,系统环境变量还未加载,需要在tomcat中单独配置java环境变量):
      1. tomcat9配置:
        编辑tomcat配置文件:
        vim /usr/java/tomcat9/bin/catalina.sh
        添加以下内容(位置在# OS specific support.  $var _must_ be set to either true or false.前面):
        JAVA_HOME=/usr/java/jdk1.8.0_191
        JRE_HOME=/usr/java/jdk1.8.0_191/jre
         
        # 注意此时的位置
        # OS specific support.  $var _must_ be set to either true or false.
      2. tomcat9-1配置:
        编辑tomcat配置文件:
        vim /usr/java/tomcat9-1/bin/catalina.sh
        添加以下内容(位置在# OS specific support.  $var _must_ be set to either true or false.前面):
        JAVA_HOME=/usr/java/jdk1.8.0_191
        JRE_HOME=/usr/java/jdk1.8.0_191/jre
         
        # 注意此时的位置
        # OS specific support.  $var _must_ be set to either true or false.
    5. 创建tomcat开机启动文件,并进行相关配置:
      1. tomcat9配置:
        1. 创建文件:
          vim /usr/lib/systemd/system/tomcat9.service
        2. 新增内容:
          [Unit]
          Description=tomcat9
          After=syslog.target network.target remote-fs.target nss-lookup.target
           
          [Service]
          Type=oneshot
          ExecStart=/usr/java/tomcat9/bin/startup.sh
          ExecStop=/usr/java/tomcat9/bin/shutdown.sh
          ExecReload=/bin/kill -s HUP $MAINPID
          RemainAfterExit=yes
           
          [Install]
          WantedBy=multi-user.target
      2. tomcat9-1配置:
        1. 创建文件:
          vim /usr/lib/systemd/system/tomcat9-1.service
        2. 新增内容:
          [Unit]
          Description=tomcat9-1
          After=syslog.target network.target remote-fs.target nss-lookup.target
           
          [Service]
          Type=oneshot
          ExecStart=/usr/java/tomcat9-1/bin/startup.sh
          ExecStop=/usr/java/tomcat9-1/bin/shutdown.sh
          ExecReload=/bin/kill -s HUP $MAINPID
          RemainAfterExit=yes
           
          [Install]
          WantedBy=multi-user.target
      3. 开启tomcat9-1前的准备:
        说明:
        tomcat9使用默认端口配置即可,tomcat9-1需要修改端口,否则启动时会出现端口冲突。
        编辑tomcat9-1配置文件:
        vim /usr/java/tomcat9-1/conf/server.xml
        修改内容如下:
        1. 修改:等待shutdown命令的TCP / IP端口号:
          将
          <Server port="8005" shutdown="SHUTDOWN"> 
          修改为:
          <Server port="8006" shutdown="SHUTDOWN">
        2. 修改:http(s)端口:
          将:
          <Connector port="8080" protocol="HTTP/1.1"
                         connectionTimeout="20000"
                         redirectPort="8443" />
          修改为:
          <Connector port="8081" protocol="HTTP/1.1"
                         connectionTimeout="20000"
                         redirectPort="8444" />
        3. 修改:AJP 连接端口与https端口:
          将
          <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
          修改为
          <Connector port="8010" protocol="AJP/1.3" redirectPort="8444" />
      4. 开启tomcat9、tomcat9-1的http(s)端口:
        firewall-cmd --zone=public --add-port=8080/tcp --permanent
        firewall-cmd --zone=public --add-port=8081/tcp --permanent
        firewall-cmd --zone=public --add-port=8443/tcp --permanent
        firewall-cmd --zone=public --add-port=8444/tcp --permanent
        firewall-cmd --reload
        firewall-cmd --list-ports
      5. 开启tomcat:
        systemctl start tomcat9
        systemctl start tomcat9-1
        查看tomcat是否启动:
        systemctl status tomcat9
        systemctl status tomcat9-1
      6. 打开tomcat开机自启:
        systemctl enable tomcat9
        systemctl enable tomcat9-1
        查看tomat是否打开了开机自启:
        systemctl list-unit-files | grep tomcat
        上述命令会查出开机启动名字带有tomcat的启动项是否开启了开机启动。
        至此tomcat9、tomcat9-1就可以访问了。
        tomcat9:http://192.168.113.151:8080/
        tomcat9-1:http://192.168.113.151:8081/
  5. 安装mod_jk:

    1. mod_jk依赖安装:
      yum -y install gcc httpd-devel
    2. mod_jk下载与解压:
      网址:https://tomcat.apache.org/download-connectors.cgi
      wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.46-src.tar.gz
      tar -zxvf tomcat-connectors-1.2.46-src.tar.gz
      
    3. 编译及安装:
      在tomcat-connectors-1.2.46-src/native/文件夹下执行:
      进入源码文件夹:
      cd tomcat-connectors-1.2.46-src/native/
      配置安装:
      ./configure --with-apxs=/usr/bin/apxs
      编译及安装:
      make && make install
  6. 配置mod_jk:

    1. 找到下载的mod_jk中的conf文件夹下,查看是否存在httpd-jk.conf、uriworkermap.properties、workers.properties:
      cd /usr/java/doc/tomcat-connectors-1.2.46-src/conf/
      ls
    2. 将conf文件夹中的内容全都复制到httpd安装配置文件夹(/etc/httpd/conf)下:
      cp httpd-jk.conf /etc/httpd/conf
      cp uriworkermap.properties /etc/httpd/conf
      cp workers.properties /etc/httpd/conf
    3. 编辑httpd.conf文件:
      让httpd加载mod_jk:
      cd /etc/httpd/conf
      vim httpd.conf
      在末尾加上:
      IncludeOptional conf/httpd-jk.conf
      
    4. 编辑httpd-jk.conf文件:
      vim httpd-jk.conf
      将前面的#去掉(取消注释),并更改为uriworkermap.properties的正确路径,如下:
      JkMountFile conf/uriworkermap.properties
    5. 编辑workers.properties文件:
      配置集群的tomcat服务器:
      定时(默认每分钟)刷新workers.properties:
      vim workers.properties
      workers.properties配置文件中列举了两个配置,分别为node1、node2,将带有node1、node2的配置全部都注释掉(前面增加#)。
      添加以下内容:
      1. tomcat0配置:
        worker.balancer.balance_workers=tomcat0
        worker.tomcat0.reference=worker.template
        worker.tomcat0.host=localhost
        worker.tomcat0.port=8009
        worker.tomcat0.activation=A
      2. tomcat1配置:
        worker.balancer.balance_workers=tomcat1
        worker.tomcat1.reference=worker.template
        worker.tomcat1.host=localhost
        worker.tomcat1.port=8010
        worker.tomcat1.activation=A
      3. 编辑uriworkermap.properties文件:
        vim uriworkermap.properties
        将全部请求都交给tomcat处理,新增如下内容:
        /*=balancer
      4. 重启httpd:
        systemctl restart httpd
        访问httpd:http://192.168.113.151/
        显示的是tomcat页面。
  7. 负载均衡:

    1. tomcat9中:
      1. 创建文件夹:
        mkdir /usr/java/tomcat9/webapps/test/
      2. 创建页面:
        vim /usr/java/tomcat9/webapps/test/index.jsp
        新增内容:
        <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
        <head>
        <title>Tomcat0 集群测试</title>
        </head>
        <body>
        <h1>Tomcat0 集群测试</h1>
        </body>
        </html>
        
    2. tomcat9-1中:
      1. 创建文件夹:
        mkdir /usr/java/tomcat9-1/webapps/test/
      2. 创建页面:
        vim /usr/java/tomcat9-1/webapps/test/index.jsp
      3. 新增内容:
        <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
        <head>
        <title>Tomcat1 集群测试</title>
        </head>
        <body>
        <h1>Tomcat1 集群测试</h1>
        </body>
        </html>
        
    3. 编辑workers.properties文件:
      vim /etc/httpd/conf/workers.properties
      在tomcat0配置下新增:
      worker.tomcat0.lbfactor=2
      在tomcat1配置下新增:
      worker.tomcat1.lbfactor=1
      说明:
      lbfactor:整数,负载平衡因子。
      为了看出效果,tomcat0的权重为2,tomcat的权重为1,刷新页面时,没出现两次tomcat0,才出现一次tomcat1。
      刷新页面网址:http://192.168.113.151/test/index.jsp
  8. session共享:

    1. 编辑tomcat9的server.xml配置文件:
      vim /usr/java/tomcat9/conf/server.xml
      修改下面的标签:
      修改
      <Engine name="Catalina" defaultHost="localhost">
      为
      <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat0">
      在<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat0">标签内新增下列代码:
              <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                       channelSendOptions="6">
      
                <Manager className="org.apache.catalina.ha.session.BackupManager"
                         expireSessionsOnShutdown="false"
                         notifyListenersOnReplication="true"
                         mapSendOptions="6"/>
                <!--
                <Manager className="org.apache.catalina.ha.session.DeltaManager"
                         expireSessionsOnShutdown="false"
                         notifyListenersOnReplication="true"/>
                -->
                <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="5000"
                            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.MessageDispatchInterceptor"/>
                  <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
                </Channel>
      
                <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                       filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>
      
                <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                          tempDir="/usr/java/tomcat9/tmp/war-temp/"
                          deployDir="/usr/java/tomcat9/tmp/war-deploy/"
                          watchDir="/usr/java/tomcat9/tmp/war-listen/"
                          watchEnabled="false"/>
      
                <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
              </Cluster>
      其中:
      <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                            address="auto" 
                            port="5000"
                            selectorTimeout="100"
                            maxThreads="6"/>
      <!-- 其中虚拟机要将address="auto"中的auto改为localhost,或者改为本地ip -->
      <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                          tempDir="/usr/java/tomcat9/tmp/war-temp/"
                          deployDir="/usr/java/tomcat9/tmp/war-deploy/"
                          watchDir="/usr/java/tomcat9/tmp/war-listen/"
                          watchEnabled="false"/>
      <!-- 其中tempDir、deployDir、watchDir改为本tomcat的位置 -->
    2. 编辑tomcat9-1的server.xml配置文件:
      vim /usr/java/tomcat9-1/conf/server.xml
      修改
      <Engine name="Catalina" defaultHost="localhost">
      为
      <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
      在<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">标签内新增内容如上所示。
       
    3. 新建一个名称为test的web项目,在web.xml中添加:
      <distributable/>
    4. index.jsp页面编写:
      <%@ page import="java.text.SimpleDateFormat"%>
      <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <html>
      <head>
      <title>Tomcat 集群测试</title>
      </head>
      <body>
      
      	<%
      		String date = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
      		System.out.println(date);
      		out.println(date + "<br>");
      
      		String uuid = (String) session.getAttribute("uuid");
      		if (uuid == null || uuid == "") {
      
      			System.out.println("uid为空,创建uuid");
      			out.println("uid为空,创建uuid" + "<br>");
      
      			uuid = UUID.randomUUID().toString();
      
      			System.out.println("创建的uuid为:" + uuid);
      			out.println("创建的uuid为:" + uuid + "<br>");
      
      			session.setAttribute("uuid", uuid);
      
      		} else {
      			System.out.println("uuid为:" + uuid);
      			out.println("uuid为:" + uuid + "<br>");
      		}
      
      		System.out.println("session id为:" + session.getId());
      		out.println("session id为:" + session.getId() + "<br>");
      	%>
      
      </body>
      </html>
      
    5. 依次启动httpd、tomcat9、tomcat9-1:
      systemctl start httpd
      systemctl start tomcat9
      systemctl start tomcat9-1
      查看两个tomcat日志,和以前启动并没有什么区别。
       
    6. 开通端口45564/udp,非tcp:
      firewall-cmd --zone=public --add-port=45564/udp --permanent
      firewall-cmd --reload
      firewall-cmd --list-ports
      两个tomcat日志分别会输入:
      26-Oct-2018 13:46:22.612 INFO [Membership-MemberAdded.] org.apache.catalina.ha.tcp.SimpleTcpCluster.memberAdded Replication member added:[org.apache.catalina.tribes.membership.MemberImpl[tcp://{127, 0, 0, 1}:5001,{127, 0, 0, 1},5001, alive=42615, securePort=-1, UDP Port=-1, id={115 39 63 118 80 0 70 -54 -82 0 36 -55 97 44 88 -96 }, payload={}, command={}, domain={}]]
      26-Oct-2018 13:46:22.686 INFO [GroupChannel-Heartbeat[Catalina-Channel]-1] org.apache.catalina.tribes.io.BufferPool.getBufferPool Created a buffer pool with max size:[104857600] bytes of type: [org.apache.catalina.tribes.io.BufferPool15Impl]
      26-Oct-2018 13:46:22.696 INFO [GroupChannel-Heartbeat[Catalina-Channel]-1] org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor.report ThroughputInterceptor Report[
      	Tx Msg:1 messages
      	Sent:0.00 MB (total)
      	Sent:0.00 MB (application)
      	Time:0.01 seconds
      	Tx Speed:0.07 MB/sec (total)
      	Tx Speed:0.07 MB/sec (application)
      	Error Msg:0
      	Rx Msg:0 messages
      	Rx Speed:0.00 MB/sec (since 1st msg)
      	Received:0.00 MB]
      
      26-Oct-2018 13:46:22.711 INFO [GroupChannel-Heartbeat[Catalina-Channel]-1] org.apache.catalina.tribes.tipis.AbstractReplicatedMap.mapMemberAdded Map member added:[org.apache.catalina.tribes.membership.MemberImpl[tcp://{127, 0, 0, 1}:5001,{127, 0, 0, 1},5001, alive=42615, securePort=-1, UDP Port=-1, id={115 39 63 118 80 0 70 -54 -82 0 36 -55 97 44 88 -96 }, payload={}, command={}, domain={}]]
      26-Oct-2018 13:46:22.618 INFO [Tribes-Task-Receiver[Catalina-Channel]-1] org.apache.catalina.tribes.io.BufferPool.getBufferPool Created a buffer pool with max size:[104857600] bytes of type: [org.apache.catalina.tribes.io.BufferPool15Impl]
      26-Oct-2018 13:46:22.706 INFO [Tribes-Task-Receiver[Catalina-Channel]-3] org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor.report ThroughputInterceptor Report[
      	Tx Msg:1 messages
      	Sent:0.00 MB (total)
      	Sent:0.00 MB (application)
      	Time:0.00 seconds
      	Tx Speed:0.27 MB/sec (total)
      	Tx Speed:0.27 MB/sec (application)
      	Error Msg:0
      	Rx Msg:2 messages
      	Rx Speed:0.01 MB/sec (since 1st msg)
      	Received:0.00 MB]
      
      26-Oct-2018 13:46:22.804 INFO [Membership-MemberAdded.] org.apache.catalina.ha.tcp.SimpleTcpCluster.memberAdded Replication member added:[org.apache.catalina.tribes.membership.MemberImpl[tcp://{127, 0, 0, 1}:5000,{127, 0, 0, 1},5000, alive=52140, securePort=-1, UDP Port=-1, id={70 116 -73 102 37 81 76 95 -93 64 -1 -63 92 -83 -44 -73 }, payload={}, command={}, domain={}]]
      26-Oct-2018 13:46:27.012 INFO [GroupChannel-Heartbeat[Catalina-Channel]-1] org.apache.catalina.tribes.tipis.AbstractReplicatedMap.mapMemberAdded Map member added:[org.apache.catalina.tribes.membership.MemberImpl[tcp://{127, 0, 0, 1}:5000,{127, 0, 0, 1},5000, alive=56147, securePort=-1, UDP Port=-1, id={70 116 -73 102 37 81 76 95 -93 64 -1 -63 92 -83 -44 -73 }, payload={}, command={}, domain={}]]
      说明一切就绪了。
       
    7. 下面4幅图分别为:
      1. 初次访问httpd:链接:http://192.168.113.151/test/index.jsp
      2. 二次访问httpd:链接:http://192.168.113.151/test/index.jsp
      3. 访问tomcat9:链接:http://192.168.113.151:8080/test/index.jsp
      4. 访问tomcat9-1:链接:http://192.168.113.151:8081/test/index.jsp

        所有session id相同,session中的信息也相同(本次分配到tomcat0中了)。

         
      5. 本次分配给了tomcat1:
  9. 本教程使用的是单主机多tomcat集群,不可进行多主机tomcat在session共享。
     
  10. 特别提醒:
    使用httpd添加ssl时,需要在/etc/httpd/conf.d/ssl.conf文件中添加JkMount /* balancer:
    <VirtualHost _default_:443>
    JkMount /* balancer
    
    
    否则使用http协议可进行负载均衡,而使用https不可进行负载均衡。

猜你喜欢

转载自blog.csdn.net/qq_32596527/article/details/83188624