发表于: 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实例变换第三行,其余不用修改

#!/bin/bash 
export JRE_HOME=/usr/lib/jvm/java-8-oracle 
export CATALINA_HOME=/usr/local/tomcat
export CATALINA_BASE="/usr/local/tomcat2" 
export CATALINA_TMPDIR="$CATALINA_BASE/temp" 
export  CATALINA_PID="$CATALINA_BASE/bin/tomcat.pid" 
export JAVA_OPTS="-server -Xms1024m -Xmx1024m -Djava.awt.headless=true -Dtomcat.name=tomcat1" #创建logs目录 
if [ ! -d "$CATALINA_BASE/logs" ];then 
mkdir $CATALINA_BASE/logs 
fi 
#创建temp目录
if [ ! -d "$CATALINA_BASE/temp" ];then 
mkdir $CATALINA_BASE/temp 
fi 
# 调用tomcat启动脚本
bash $CATALINA_HOME/bin/startup.sh "$@"

②创建停止脚本

shell> touch shutdown.sh 

shell> chmod +x shutdown.sh 

shell> vim shutdown.sh

将下面代码拷贝到脚本中,注意点同上

#!/bin/bash 
export JRE_HOME=/usr/lib/jvm/java-8-oracle 
export CATALINA_HOME=/usr/local/tomcat 
export CATALINA_BASE="/usr/local/tomcat3" 
export CATALINA_TMPDIR="$CATALINA_BASE/temp" 
export CATALINA_PID="$CATALINA_BASE/bin/tomcat.pid" 
bash $CATALINA_HOME/bin/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.自定义日志格式并使用

自定义nginx日志
log_format access  '$remote_addr $remote_user "$time_local" $request'  
                               '$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的负载均衡


返回列表 返回列表
评论

    分享到