用四种方式代理tomcat实现负载均衡集群

前言

这篇博客的目的主要是想总结一下目前已经学习到了代理服务,以便记忆也方便以后查阅。接下来的内容都是纯实验演示,主要是各代理服务的配置方法。


操作

准备

这次准备的是三台CentOS7.3的服务器,两台作为tomcat服务器,一台作为代理。

两台tomcat的服务器的IP分别是:172.16.253.143,172.16.254.235
代理服务器的地址是:172.16.250.39

在后面的实验中两台服务器相同的操作内容就不重复演示,比如安装包


配置两台tomcat服务器

[root@tomcat1 ~]# yum install java-1.8.0-openjdk-devel tomcat-lib tomcat tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp -y #安装所需要的包,这里注意别忘了装另外一台
[root@proxy ~]# yum install nginx -y #代理服务器安装nginx
[root@tomcat1 ~]# mkdir -p /usr/share/tomcat/webapps/test/{classes,lib,WEB-INF}
[root@tomcat2 ~]# mkdir -p /usr/share/tomcat/webapps/test/{classes,lib,WEB-INF}  #创建测试应用目录
[root@tomcat1 ~]# vim /usr/share/tomcat/webapps/test/index.jsp
<%@ page language="java" %>
<html>
        <head><title>TomcatA</title></head>
        <body>
                <h1><font color="red">TomcatA.chenjingyu.cn</font></h1>
                <table align="centre" border="1">
                        <tr>
                                <td>Session ID</td> 
                        <% session.setAttribute("chenjingyu.cn","chenjingyu.cn"); %>
                                <td><%= session.getId() %></td> 
                        </tr>
                        <tr>
                                <td>Created on</td> 
                                <td><%= session.getCreationTime() %></td> 
                        </tr>
                </table>
        </body>
</html>
#写入测试页面A,对应的在tomcat2服务器上也要部署对应的tomcatB
[root@tomcat1 ~]# vim /etc/tomcat/server.xml #更改配置文件在默认host下添加
<Context path="/test" docBase="test" reloadable="true" />
#到这里基本上配置好tomcat了,下面启动服务
[root@tomcat ~]# systemctl start tomcat

这里我先测试一下tomcat服务器是否正常

访问172.16.253.143:8080

访问172.16.253.143:8080/test

访问172.16.254.235:8080

访问172.16.254.235:8080/test

如图所示,一切正常


nginx的实现方法

tomcat服务器到这里就算是搭建好了,下面配置代理服务器。

[root@proxy ~]# yum install nginx -y #安装nginx
[root@proxy ~]# vim /etc/nginx/nginx.conf #配置nginx
#在http下加上
upstream tomcatsrvs {
    server 172.16.253.143:8080;
    server 172.16.254.235:8080;
}
#在server下加上
location / {
    proxy_pass http://tomcatsrvs;
}
#保存退出
[root@proxy ~]# nginx -t #检查没问题就启动服务
[root@proxy ~]# systemctl start nginx #启动服务

配置完成,下面测试

访问172.16.250.39,因为这里两个tomcat服务器的欢迎界面都一样所以刷新也看不出来

访问172.16.250.39/test,刷新之后页面就变化了


之后的几种方法测试步骤我就不再演示了,因为结果都和这上面是一样的。


haproxy的实现方法

[root@proxy ~]# systemctl stop nginx #首先停止nginx服务
[root@proxy ~]# yum install haproxy -y #安装haproxy
[root@proxy ~]# vim /etc/haproxy/haproxy.cfg #进入配置文件删除frontend这行包括这行以下所有内容或者注释这些内容,然后添加以下内容
frontend tomcat
    bind *:80
    default_backend tomcatsrvs

backend tomcatsrvs
    balance roundrobin
    server cat1 172.16.253.143:8080 check
    server cat2 172.16.254.235:8080 check
#保存退出
[root@proxy ~]# systemctl start haproxy #启动服务

配置完成,测试过程就不再演示了,效果和上面的相同。


httpd的实现方法

[root@proxy ~]# systemctl stop haproxy #停止haproxy服务
[root@proxy ~]# yum install httpd -y #安装httpd
[root@proxy ~]# vim /etc/httpd/conf.d/tomcat-http.conf #创建配置文件并添加以下内容
<proxy balancer://tomcatsrvs>
        balancermember http://172.16.253.143:8080
        balancermember http://172.16.254.235:8080
        proxyset lbmethod=byrequests
</proxy>
<virtualhost *:80>
        servername 172.16.250.39
        proxyvia on
        proxyrequests off
        proxypreservehost on
        <proxy *>
                require all granted
        </proxy>
        proxypass / balancer://tomcatsrvs/
        proxypassreverse / balancer://tomcatsrvs/
        <location />
                require all granted
        </location>
</virtualhost>
[root@proxy ~]# systemctl start httpd #启动服务

到这里就配置完成了。

httpd还有一种实现方法是用proxy_ajp_module模块实现

配置文件和上面只有协议和端口不同,如下

<proxy balancer://tomcatsrvs>
        balancermember ajp://172.16.253.143:8009
        balancermember ajp://172.16.254.235:8009
        proxyset lbmethod=byrequests
</proxy>
<virtualhost *:80>
        servername 172.16.250.39
        proxyvia on
        proxyrequests off
        proxypreservehost on
        <proxy *>
                require all granted
        </proxy>
        proxypass / balancer://tomcatsrvs/
        proxypassreverse / balancer://tomcatsrvs/
        <location />
                require all granted
        </location>
</virtualhost>

实验完毕