项目开发完成之后,需要打包到线上测试。搭建一个后台的集群,以提高高可用的访问

    使用了empty centOS6.5虚拟机镜像,在虚拟机中打开。采用了V8网卡(后期再整理一篇关于linux)

    v8:代表将windows当做了一个路由器,连接“路由器”上网(NAT模式);

 

在linux中创建自己的软件文件夹,使用rz -E 上传压缩包(tomcat需要jdk 配置):jdk8 和apache—tomcat

上传并解压: tar -xf apache-tomcat-9.0.6.tar.gz

                       tar -xf jdk-8u65-linux-x64.tar.gz 

配置linux的jdk环境: vim  /etc/profile
        直接在最后添加这些内容JAVA_HOME=/home/software/jdk1.8
                                             PATH=$PATH:./:$JAVA_HOME/bin                                                export PATH JAVA_HOME

保存退出,调用命令使环境变量生效  source /etc/profile       

                                            java -version  测试 环境是否生效

复制多个tomcat   方便后续操作 复制并改名改为t1 t2 t3 

测试启动tomcat  从windows连接linux 需要访问8080端口,开启8080  或者关闭防火墙

service iptables stop

将t1 t2 t3 中的server.xml文件中启动tomcat的端口信息:消息接受端口8081  70行;http服务器传递消息的端口8015 22行;体质启动端口8019  116行

 

tomcat 访问windows数据库访问不到:

        原因1:windows没有开启remote(远程)访问权限

                grant all on *.* to root@% identified by 'root';

        原因2:防火墙,windows其他的安全软件开启或屏蔽。将其关闭

 

 

将后台工程打包发布:

        停止tomcat 清空数据rm -rf /home/software/t1/webapps/*    rm -rf /home/software/t1/work/*   rm -rf /home/software/t1/temp/*

 

在eclipse中  run as工程  maven  install  将根据pom文件中配置的finalname值命令发布到当前工程下target 文件夹下的war包 ROOT.war.

        将war包串串到t1 2 3 中的webapp中   并再次启动tomc

    记得修改当前配置文件一些内容:jdbc.properties:localhost  linux访问windows的ip  v8在windws中展示的ip地址

jdbc.url=jdbc:mysql://v8ip

    修改完毕  重启tomcat

                                        nginx基础配置

 

对于这个集群,需要nginx来完成负载均衡的调度工作      (支持http协议的反向代理服务器)

反向代理服务器:接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

负载均衡:轮训(每一次访问都在循环tomcat集群中的节点,挨个去访问)

                   权重(根据服务器性能或者业务需求,可设置访问权重配比,性能高的,数字相比其他的越大)

                    黏着(一个用户第一次访问了t1tomcat     第二次访问的时候 通过session黏着继续访问t1 tomcat 不会访问其他服务器)

这些事通过配置nginx.conf来修改nginx启动加载的功能内容   (logs 当前启动nginx日志文件)

 

 

打开nginx.conf

http { //启动nginx,完成http服务器的功能必须的关键字

            #后台服务器 代理访问运行后台项目的tomcat服务器

server { //nginx启动会根据server关键字加载一个线程管理的虚拟
机单位,代理
 

listen 80; //listen 表示监听的nginx所在服务器的端口
server_name manage.jt.com; //当前代理从http请求中获取
的访问host头信息,进行对比,满足server-name将会根据
location进行转发逻辑

location / {
 proxy_pass http://192.168.179.128:8081
 proxy_connect_timeout 600;
 proxy_read_timeout 600;
 }}}

每次修改完配置文件后需要重启nginx

 

nginx完成负载均衡的三种方式

轮训:

    upstream dpp{//定义一个应用访问库的配置

//相当于保存了一个数组,保存了想要访问的集群ip和端口 
    server 192.168.25.23:8081
  server 192.168.25.23:8083
  server 192.168.25.23:8082
}
Server{
Listern 80;
Server_name "host"拦截的内容
location/{
Proxy-pass=http://dpp;
}
}
 
权重:
 
    upstream dpp{//定义一个应用访问库的配置
//相当于保存了一个数组,保存了想要访问的集群ip和端口 
    server 192.168.25.23:8081 weight=5;
  server 192.168.25.23:8083 weight=3;
  server 192.168.25.23:8082weight=1;
}

session 黏着

        由代理提供的负载均衡  session 共享 (jsp首页发起请求,登录的user放在ervlet中,发起请求,再放到session对象中 )

session作为共享数据的范围,可以将数据库查询的user信息,响应到页面。EL表达式展示数据

但是  使用session保存数据,受限制的是session对象的共享问题,tomcat无法共享一个session度夏凝

        nginx解决session共享,使用session黏着(nginx做session 黏着,将客户端绑定访问同一个ip地址的服务器)
 

底层的实现原理:

 

一:

    nginx获取客户端的ip地址将访问的程序端口(String字符串)

    ip+port的字符串进行哈希取余计算

假如有3个tomcat几圈

hash=(ip+port).hashCode() 的一个散列值
hash01 =Hash&Integer.Max_VALUe  保证结果是正数
result=hash01%2     -----(等于3个tomcat 减1    【0  -  2 】)

nginx记录当前取余结果的取值范围和tomcat的对应关系 

    0-t1   1 -t2   。。。。

配置ip_hash

Upstream dpp{
ip_hash;
server 192.168.52.52:8081;
server 192.168.52.52:8082;
server 192.168.52.52:8083;
}

 

二:url_hash

通过客户端访问的url连接地址进行hash取余

第三方插件实现url-hash

 

 

 

课堂内容:

如何回显上传的图片