美文网首页
nginx+haproxy做负载均衡到后端2台tomcat服务器

nginx+haproxy做负载均衡到后端2台tomcat服务器

作者: lijincheng | 来源:发表于2017-09-03 11:13 被阅读0次

    1台nginx(haproxy)+2台tomcat主机做负载均衡
    步骤1:拓扑图

    tomcat A 主机的配置
    安装必要的软件:
    yum -y install java-1.8.0-openjdk-devel tomcat-lib tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp

    创建tomcat存放数据目录
    mkdir -pv /data/webapps/ROOT/{classes,lib,WEB-INF,META-INF}
    具体目录的说明:

    WEB-INF/:当前webapp的私有资源路径;通常用于存储当前webapp的web.xml和context.xml配置文件;
    META-INF/:类似于WEB-INF/;
    classes/:类文件,当前webapp所提供的类;
    lib/:类文件,当前webapp所提供的类,被打包为jar格式;
    配置tomcat的文件server.xml
    

    配置主配置文件
    vim /etc/tomcat/server.xml 中的<host>标签中添加如下配置,该配置主要是配置tomcat主机的路径、主机名以及日志格式

      <Host name="www.ilinux.io" appBase="/data/webapps" unpackWARs="true" autoDeploy="true" >
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="ilinux_access_log." suffix=".log"
                   pattern="%h %l %u %t "%r" %s %b" />
            </Host>
    

    添加tomcatA的测试文件
    vim /data/webapps/ROOT/index.jsp

     <%@ page language="java" %>
    <html>
          <head><title>TomcatA</title></head>
                <body>
                      <h1><font color="red">TomcatA.magedu.com</font></h1>
                    <table align="centre" border="1">
                  <tr>
                  <td>Session ID</td>
                    <% session.setAttribute("magedu.com","magedu.com"); %>
                <td><%= session.getId() %></td>
            </tr>
            <tr>
                <td>Created on</td>
              <td><%= session.getCreationTime() %></td>
            </tr>
            </table>
        </body>
    </html>
    

    为了测试方便,把默认的测试目录修改下路径
    cp -r /data/webapps/ROOT/ /usr/share/tomcat/webapps/test
    重启tomcat服务
    systemctl start tomcat
    查看下端口是否开启
    ss -tnl

    tomcatB 主机的配置和comcatA一样,此处省略

    测试主页
    输入ip地址为:192.168.100.205/test

    到此,两台tomcat主机已经配置完成!

    使用haproxy做负载均衡

    安装haproxy
    yum -y install haproxy
    配置haproxy.cfg
    vim /etc/haproxy/haproxy.cfg 添加如下内容,即可!

    frontend http-in
        bind *:80
        default_backend appsrvs # 定义默认后端服务
    backend appsrvs
        balance roundrobin    #轮询
            server  app1 192.168.100.203:8080 check  #开启健康检查
            server  app2 192.168.100.204:8080 check  #开启健康检查
    
    listen stats   #开启状态管理接口
        bind *:9009
        stats enable
    

    启动haproxy服务
    systemctl start haproxy
    查看端口
    ss -tnl
    80和9009端口启动证明服务正常。

    测试,输入如下ip地址:192.168.100.205/test
    查看状态页输入地址:192.168.100.205:9009/haproxy?stats 即可

    使用nginx做负载均衡

    安装nginx服务
    yum install nginx
    配置配置文件
    vim /etc/nginx/conf/nginx.conf 增加一组webapps即可

        upstream appsrvs {
            server 192.168.100.203:8080;
            server 192.168.100.204:8080;
     }
    
    

    启动服务
    systemctl start nginx
    查看端口
    ss -tnl

    http负载均衡实验(有两种方式:http模式和ajp模式 )

    首先使用httpd做负载均衡

    安装httpd服务
    yum install httpd -y
    配置httpd服务 ,新建一个虚拟主机

    vim /etc/httpd/con.d/comcat-httpd.conf 添加如下配置
    
                <proxy balancer://appsrvs>
                    BalancerMember http://192.168.100.203:8080
                    BalancerMember http://192.168.100.204:8080
                    ProxySet lbmethod=byrequests
                </Proxy>
    
                <VirtualHost *:80>
                    ServerName  www.ilinux.io
                    ProxyRequests Off
                    ProxyVia        On
                    ProxyPreserveHost On
                    <Proxy *>
                        Require all granted
                    </Proxy>
                    ProxyPass / balancer://appsrvs/
                    ProxyPassReverse / balancer://appsrvs/
                    <Location />
                        Require all granted
                    </Location>
                </VirtualHost>
    

    启动httpd服务
    systemctl start httpd
    测试:输入ip地址:192.168.100.205/test

    ajp模式的负载均衡

    修改配置文件

    vim /etc/httpd/http.d/tomcat.ajp.conf
                <proxy balancer://appsrvs>
                    BalancerMember ajp://192.168.100.203:8009
                    BalancerMember ajp://192.168.100.204:8009
                    ProxySet lbmethod=byrequests
                </Proxy>
    
                <VirtualHost *:80>
                    ServerName  www.ilinux.io
                    ProxyRequests Off
                    ProxyVia        On
                    ProxyPreserveHost On
                    <Proxy *>
                        Require all granted
                    </Proxy>
                    ProxyPass / balancer://appsrvs/
                    ProxyPassReverse / balancer://appsrvs/
                    <Location />
                        Require all granted
                    </Location>
                </VirtualHost>
    注意:端口一定要写出8009,否则方向代理不到后端服务器
    

    使用cookie实现sessions绑定

    在tomcat-apj-conf 中添加一些配置即可

    vim /etc/httpd/conf.d/tomcat-ajp.conf

    
    
    Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED  新增加的信息   
                            <proxy balancer://appsrvs>
                                    BalancerMember ajp://192.168.100.203:8009 route=TomcatA  新增加的信息
                                    BalancerMember ajp://192.168.100.204:8009 route=TomcatB 新增加的信息
                                    ProxySet lbmethod=byrequests
                                    ProxySet stickysession=ROUTEID  新增加的信息
                            </Proxy>
    
                            <VirtualHost *:80>
                                    ServerName  www.ilinux.io
                                    ProxyRequests Off
                                    ProxyVia        On
                                    ProxyPreserveHost On
                                    <Proxy *>
                                            Require all granted
                                    </Proxy>
                                    ProxyPass / balancer://appsrvs/
                                    ProxyPassReverse / balancer://appsrvs/
                                    <Location />
                                            Require all granted
                                    </Location>
                            </VirtualHost>
    

    如果需要启动管理接口功能,在以上配置下添加如下配置。

                    <Location /balancer-manager>
                        SetHandler balancer-manager
                        ProxyPass !
                        Require all granted
                    </Location> 
    

    以下为:管理接口的图形界面

    使用session culster 做会话绑定

    在原有的tomcatA的server.xml 配置中,把配置放置在host标签中

    <Engine name="Catalina" defaultHost="localhost" "> 中添加如下信息jvmRoute="tcA"
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tcA">
    
    vim /etc/tomcat/server.xml
            <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                     channelSendOptions="8">
    
              <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="192.168.100.203"  atuo改成本地对外的通讯地址 
                          port="4000"
                          autoBind="100"
                          selectorTimeout="5000"
                          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"/>
              </Channel>
    
              <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                     filter=""/>
              <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
    
              <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.JvmRouteSessionIDBinderListener">
              <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener">
            </Cluster>
    

    为了安全,需要把web.xml 文件放在下如下目录,
    cp /etc/tomcat/web.xml /usr/share/tomcat/webapps/test/WEN-INF目录中,WEN-INF目录私有目录,在web.xml中添加如下一行配置,是为了能够两个后端的两台tomcat可以同步数据。
    编辑该文件

    vim web.xml  
    在<server>标签外添加一行信息;        <distributable/>即可
    

    在tomcatB 中配置也需要添加<distributable/>信息。
    在浏览器中输入:http://192.168.100.205/test 做测试,结果如下:

    负载均衡两个节点都可以保持session一致。

    使用memcache做session服务器

    拓扑图如下:


    下载如下jar文件至各tomcat节点的tomcat安装目录下的/usr/share/java/tomcat/
    目录中,其中的${version}要换成你所需要的版本号,tc${6,7,8}要换成与tomcat版本相同的版本号。
    这里我使用的是tomcat7.0 ,其他没有版本对应要求,需要的软件包如下

    
    memcached-session-manager-${version}.jar
        memcached-session-manager-tc7-${version}.jar
        spymemcached-${version}.jar
        msm-javolution-serializer-${version}.jar
        javolution-${version}.jar
    

    分别在两个tomcat上的某host上定义一个用于测试的context容器,并在其中创建一个会话管理器

            <Context path="/test" docBase="test" reloadable="true">
                  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
                    memcachedNodes="n1:192.168.100.203:11211,n2:192.168.100.204:11211"
                    failoverNodes="n1"
                    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
                    transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
                  />
            </Context>
    

    配置完成,启动memcached服务
    systemctl start memcached
    在浏览器中输入测试地址:http://192.168.100.205/test
    测试结果:nginx(haproxy)调度,都可以保持session。

    相关文章

      网友评论

          本文标题:nginx+haproxy做负载均衡到后端2台tomcat服务器

          本文链接:https://www.haomeiwen.com/subject/frnkjxtx.html