反向代理+负载均衡部署javaWeb项目

时间:2021-10-30 13:36:40


准备

  • 四台虚拟机(Ubuntu14.04)
    • 建议后台服务器与数据库服务器用server版加winSCP或Xshell辅助就ok,没必要上desktop版的
    • 负载均衡器 * 1
      • 搭载apache
    • 后台服务器 * 2
      • 搭载tomcat并部署项目(建议通过官网安装包下载,不建议apt-get安装)
      • 安装java8 (后文有提及)
      • 安装mysql
    • 数据库服务器 * 1
      • 安装mysql服务器

具体方法

  • winSCP访问ubuntu方法

    ssh localhost ssh试一下装了没,没装就apt-get install openssh-server装一下

然后查看安装目录,我的是在/usr/lib/openssh/sftp-server

接下来参见此文


  • ubuntu14.04安装java8

    • 第一步:去掉系统中已安装的OpenJDK

      sudo apt-get purge openjdk*

    • 第二步: 安装

      sudo apt-get install software-properties-common

    • 第三步: 添加信赖的软件源:

      sudo add-apt-repository ppa:webupd8team/java

    • 第四步,更新

    sudo apt-get update

  • 开启apache的反向代理和负载均衡模块

    两种方式:通过ln -s软链接或a2enmod方式,这里只写ln -s方式,注意绝对路径
ln -s /etc/apache2/mods-available/proxy.load /etc/apache2/mods-enabled/proxy.load
ln -s /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enabled/proxy_http.load
ln -s /etc/apache2/mods-available/proxy_balancer.load /etc/apache2/mods-enabled/proxy_banancer.load
service apache2 restart

  • 建立虚拟主机处理反向代理请求

    在/etc/apache2/sites-available下建立新文件reverse-proxy.conf,编辑内容如下:
<VirtualHost *:80> #监听本机80端口

ProxyRequests Off
ProxyMaxForwards 100
ProxyPreserveHost On

ProxyPass / http://192.168.134.155:8080 #将所有请求转发到对应IP
ProxyPassReverse / http://192.168.134.155:8080 #

<Proxy *>
Order Deny,Allow
Allow from all
</Proxy>

</VirtualHost>

然后建立软链接启动该虚拟主机并重启apache

ln -s /etc/apache2/sites_available/reverse-proxy.conf /etc/apache2/sites_enabled/reverse-proxy.conf
service apache2 restart

  • 建立负载均衡

    同样在/etc/apache2/sites-available下建立新文件balance.conf,并添加内容如下:
<VirtualHost *:80>
#ServerAdmin caterpillarous@gmail.com

ProxyRequests Off
Proxypass / balancer://proxy/ #注意此处proxy是协议名,可自定义,只要跟下面一样即可

<Proxy balancer://proxy> # 就跟这里的第二个proxy一样即可
Order Deny,Allow
Allow from all
BalancerMember http://192.168.134.155:8080 loadfactor=1
BalancerMember http://192.168.134.156:8080 loadfactor=1
</Proxy>
</VirtualHost>

上面两个IP分别是后台两个web服务器的虚拟机,loadfactor=1代表采用的是最简单的算法,两台服务器权重一样,当访问负载均衡器的时候,转发到任意一台服务器的几率是相等的。

同样的,建立软链接激活该虚拟主机并重启apache

ln -s /etc/apache2/sites_available/balancer.conf /etc/apache2/sites_enabled/balancer.conf
service apache2 restart

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

注意替换username,将其变成自己的username

在其他服务器上尝试连接

mysql -u root -h 'any ip address here' -p

  • 部署javaWeb项目至Tomcat(以IDEA为例)

    • 首先在ubuntu上搞个IDEA,不要在Windows上

    • IDEA连数据库:View -> Tool Window -> Database,但是这是不够的。

    • 还需要 Project Structure -> Library -> 添加mysql connnetor的jar包

    • 然后Build -> Build Artifact 注意要是war-exploded版本的

    • 在tomcat根目录下建立一个新文件夹,这里我建的是javaWeb,将生成的war-exploded文件放在javaWeb文件夹中。

    • 将Tomcat的ROOT目录下东西删光,进入conf -> Catalina -> localhost ,新建ROOT.xml文件

      <?xml version='1.0' encoding='utf-8'?> 
      <Context path="/" docBase="/usr/apache-tomcat-8.5.6/javaWeb" debug="0" privileged="true" reloadable="true"/>
    • 尝试访问即可


  • session的共享问题

    太懒没弄