发表于: 2018-04-26 11:13:59
1 686
今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin)
一、补充一点昨天动静分离的点
1.当配置了动静分离之后,如果不使用Nginx进入即只使用端口号进入,会发现图片无法加载,只有使用Nginx代理进入,才会正常加载静态资源
二、单机多实例 https://blog.csdn.net/xyang81/article/details/51997053
1.单机多实例就是利用一台服务器的一个Tomcat安装包,备份出多个Tomcat,从而实现一台服务器可以运行多个不同的项目,充分利用服务器的性能。因为单个的tomcat项目是有内存上限的。
至于为什么是备份多个Tomcat而不是安装多个包,主要是为了日后维护起来比较方便
2.因为之前已经有一个tomcat了,所以再在同一文件夹下创建两个平行tomcat文件夹
shell> mkdir -p /usr/locat/tomcat2
shell> mkdir -p /usr/locat/tomcat2
3.将tomcat中的conf文件夹拷贝到tomcat2/3中
shell> cp -R /usr/local/tomcat/conf /usr/locat/tomcat2
4.在tomcat2/3中创建bin文件夹,并在里面创建startup.sh和shutdown.sh,并给其赋予权限
①创建开始脚本
shell> mkdir -p /usr/locat/tomcat2/bin
shell> touch startup.sh
shell> chmod +x startup.sh
shell> vim startup.sh
将下面代码拷贝到startup.sh脚本中,注意根据自己的JRE和tomcat地址变换前两行,根据不同tomcat实例变换第三行,其余不用修改
②创建停止脚本
shell> touch shutdown.sh
shell> chmod +x shutdown.sh
shell> vim shutdown.sh
将下面代码拷贝到脚本中,注意点同上
5.修改每个tomcat/conf/server.xml中的端口号
依次修改下面三个地方,端口号就依次+1,只要不和其他端口冲突即可,同时要去阿里云安全组中添加8081和8082的端口
而下面的appBase则均改为/usr/local/deploy/webapps,方便统一管理
下面的docBase是之前配置隐藏虚拟目录的地方,修改后面对应的项目名就可以
6.创建实例部署应用的目录
将几个Tomcat的项目放在一起方便管理,而不是之前的在每个tomcat下面的webapps中
shell> mkdir -p /usr/local/deploy/webapps
同时,将做了调整的项目分别打包放入webapps中,注意,项目名要和上面的对应,即MybatisTest02和MybatisTest03
7.启动两个tomcat
shell> /usr/local/tomcat2/bin/startup.sh
shell> /usr/local/tomcat3/bin/startup.sh
此时,Tomcat启动,会自动解压war包,等待几分钟后,输入端口号就可以直接进入Tomcat2和tomcat3了
好像和预计的不一样啊。。。本来是准备两个tomcat分别进入不同的项目中的项目,上面的标题应该是新手村2和新手村3。。。但是,实际上都进了同一个项目。
所以证明此方法只能进入同一个项目,即多个Tomcat 实现同一个项目的话可以将其webapps设置为同一个,从而方便项目的管理,而现在我想看出多个Tomcat的区别,所以还是应该将项目放在单独的tomcat对应的webapps下面
遂作出修改如下,首先在两个Tomcat下分别新建webapps,将war包分别移动进去,再修改server.xml文件中对应appBose,重新加载tomcat即可,实际效果如下
可以看到,实现了不同端口号部署不同的项目,单机多实例至此完成
二、负载均衡
1.为什么要实现负载均衡
当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。
我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。
2.负载均衡的几种方式
①轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
②weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况
权重越高,在被访问的概率越大,通过在ip后面添加weight=n设置
③ip_hash
上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。
我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
④fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
⑤url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
3.每个设备的连接状态
①down :表示单前的server暂时不参与负载
②weight :默认为weight越大,负载的权重就越大。
③max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
④fail_timeout:max_fails次失败后,暂停的时间。
⑤backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。相当于预备役
4.设置最简单的轮询,主要就是将server中location的proxy_pass改为http://upstreamname;
然后在和server平行的下方新建upstream属性,主要是server 内网ip:端口号;
最后实现了默认端口按顺序跳转三个服务器
最简单的负载均衡就完成了。
三、Nginx日志 https://www.cnblogs.com/crazylqy/p/6891991.html
1.Nginx日志简介
通过访问日志,你可以得到用户地域来源、跳转来源、使用终端、某个URL访问量等相关信息;通过错误日志,你可以得到系统某个服务或server的性能瓶颈等。因此,将日志好好利用,你可以得到很多有价值的信息。
2.Nginx日志格式
打开nginx.conf配置文件:vim /etc/nginx/conf/nginx.conf
日志部分内容:
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
日志生成的到/var/nginx/access.log文件,默认使用“main”日志格式,也可以自定义格式。
自定义日志对应的参数明细表如下
$request_time 用于记录请求的时间
查看日志命令tail -f /var/log/nginx/access.log
此命令可以做到实时刷新日志的功能,相当于大屏幕滚动,按Ctrl+C可以退出
3.自定义日志格式并使用
'$status $http_referer'
'"$http_user_agent" $http_x_forwarded_for "$request_time"';
其中access为此自定义日志格式名,可以在后面通过此名称引用
后面的格式就是我希望的日志输出格式,具体可对照上表
将其配置进nginx.conf文件中,在转发的server下面配置,然后重新加载nginx
可以看到此时我实时滚动日志,并操作网页,其会输出相关记录,最后一个就是响应时间
明天计划的事情:(一定要写非常细致的内容)
1.研究脚本的写法以及编写具体脚本统计nginx的访问数,请求时间
2.在项目中添加一个访问数据库的时间统计,使得可以通过日志查看到数据库的访问时间
再添加一个controller处理时间的统计,使得可以通过日志查看到controller层处理的时间
3.编写脚本使得启动之后可以统计出上面两个时间
遇到的问题:(遇到什么困难,怎么解决的)
1.按照博客教程结果发现所有实例设置同一个webapps只能运行一个项目,无法实现每个tomcat运行单独的项目,重新配置了实例地址才解决
收获:(通过今天的学习,学到了什么知识)
1.实现了tomcat单机多实例
2.实现了nginx的负载均衡
评论