项目开发完成之后,需要打包到线上测试。搭建一个后台的集群,以提高高可用的访问
使用了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
课堂内容:
如何回显上传的图片