复习电商笔记-16-Linux版本TOMCAT的安装、代码的部署和ngnix介绍

Tomcat集群

nginx + tomcats实现Tomcat集群

三个tomcat部署的业务相同,它们共同访问一个数据库

配置XShell黏贴复制

选中文本自动复制到剪贴板上,类似Ctrl+v

实现Ctrl+v黏贴文本

扫描二维码关注公众号,回复: 4116593 查看本文章

配置进入后执行脚本

go最简单的Shell脚本

cd /usr/local/src			#进入用户默认安装文件目录
. go						#手动执行Shell脚本

xShell文件->属性:

克隆虚拟机

网络模式

桥接模式:自动分配新的IP地址,相当于当前局域网多了台电脑。

NAT模式:自己组一个私有局域网,实现双网卡,VMware8虚拟网卡。这样随着教室和办公室切换,IP地址不会变更。而桥接可能IP地址发生变更。不需要多个环境切换时,推荐使用桥接。

虚拟机的坑

很多优化软件如360,腾讯管家都会自动关闭这两个服务,如果关闭手动打开。

设置为自动启动!

QQ电脑管家会关闭,也需要打开

安装JDK

yum -y install glibc.i686		#jdk依赖glibc
mkdir /usr/local/src/java		#按习惯用户自己安装的软件存放到/usr/local/src目录下
rz 上传jdk tar包				#利用xshell的rz命令上传文件
tar -xvf jdk-7u51-linux-x64.tar.gz	#解压压缩包

配置环境变量

1)vi /etc/profile
2)在尾行添加
#set java environment
JAVA_HOME=/usr/local/src/java/jdk1.7.0_51
JAVA_BIN=/usr/local/src/java/jdk1.7.0_51/bin
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
保存退出
3)source /etc/profile 使更改的配置立即生效
4)java -version 查看JDK版本信息。如显示1.7.0证明成功。

安装Tomcat

上传解压

创建目录/usr/local/src/java

上传文件xshell rz

解压文件tar –xvf apache-tomcat-7.0.55.tar.gz

端口配置

cd apache-tomcat-7.0.55

cd conf

vi server.xml 修改8080为80

注意:多个tomcat修改3个端口。8005/8009/8080。

启动停止服务

进入tomcat/bin目录

运行shell脚本:      ./startup.sh   或者 sh startup.sh

停止服务:           sh shutdown.sh

查看日志

查看日志: 

tail –f ../logs/catalina.out	

注意在linux和windows下查看的日志文件不同。在windows下查看的是localhost.2016-02-08.log文件。

删除日志,临时文件:    rm -rf ./*    删除当前目录下所有文件

*关闭防火墙

service iptables stop //关闭防火墙

start/stop/restart   开启、停止、重启防火墙

打开端口8080, 8090, 8100

/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT 	

#I不指定位置就是插入到最前面   -A默认是插入到尾部的,可以-I来插入到指定位置

iptables -I INPUT 3 -p tcp -m tcp --dport 8080 -j ACCEPT

#INPUT是进入的链接,TCP协议的链接,连接的80端口 ACCEPT是允许,REJECT是拒绝

/etc/rc.d/init.d/iptables save		#修改生效
/etc/init.d/iptables status			#查看配置

开启MYSQL远程访问权限

语法:

grant [权限] on [数据库名].[表名] to ['用户名']@['web服务器的ip地址'] identified by ['密码'];

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

或者指定IP地址

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

部署京淘项目

cd /usr/local/src
mkdir java
cd java
rz						#上传tomcat
tar –xvf apache-tomcat-7.0.55.tar.gz		#解压
mv apache-tomcat-7.0.55 t1				#修改目录名形成第一个tomcat
cd /usr/local/src/java/t1/webapps
rm -rf *				#删除所有,不需留
rz						#上传war包
mv jt-manage-web-0.0.1-SNAPSHOT.war ROOT.war	#修改文件名为ROOT.war
cd ..
bin/startup.sh			#启动tomcat,自动解压war包
bin/shutdown.sh		#停止tomcat,进行配置
cd webapps/ROOT/WEB-INF/classes		#进入目录修改数据库连接属性
vim jdbc.properties	#注意:mysql必须授权grant all远程访问权限

清除现场

cd logs
rm –rf *.*		#删除所有日志文件,查看日志时更加方便,没有以前数据干扰
cd ..
rm –rf work	#删除缓存目录,防止文件不更新

部署多个实例

cp –r t1 t2			#复制t1目录为t2目录,形成第二个tomcat
cp –r t1 t3			#复制t1目录为t3目录,形成第三个tomcat
vim conf/server.xml	#修改三处8005,8080,8009,每次加10,方便记忆
启动t1,t2,t3			#启动所有tomcat
tail –f t1/logs/catalina.out		#查看日志,看启动是否成功,需要一会

访问测试

http://192.168.163.158:8080/page/index
http://192.168.163.158:8090/page/index
http://192.168.163.158:8100/page/index

*负载均衡

提供5种负载均衡策略:

  1. 轮询:每个请求按时间顺序轮流分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
  2. 权重:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
  3. IP_HASH:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,针对解决session共享问题。
  4. URL_HASH(第三方):访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。FAIR(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。针对解决session共享问题。

轮询

默认配置,tomcats有n个,请求就被平均分配到这n个服务器上。请求次数%n,平均分配到每个服务器。

例子:3个tomcat

修改3个端口,在同一台服务器上启动3个tomcat。每个tomcat下放一个index.html。然后内容修改,分别展示T1,T2,T3。当请求nignx,通过这种方法验证得出默认nginx轮询这3个页面,但顺序不一定是配置的顺序。

    #前台,有3个tomcat集群,用户访问时轮询转向到某一个tomcat

server {
		listen       80;
		server_name  www.jt.com;

		location / {					#拦截所有的资源
			proxy_pass   http://jt_tomcats;	#引用定义的upstream
		}
		
	}

#配置一个upstream,声明一个名称jt_tomcats,配置多个ip地址转向,默认就是轮询。

upstream jt_tomcats {
		server 127.0.0.1:8080;
		server 127.0.0.1:8090;
		server 127.0.0.1:8100; 
	}

轮询方式存在问题:服务器有性能比较好的,有性能比较差的。新的服务器的配置比旧的服务器强悍很多。CPU核也多,内存也大,硬盘容量也大,速度还快。

如果还使用轮询的方式,就会造成新服务器资源的浪费,旧的服务器资源压力大。显然资源分配不合理,应该多劳多得。

权重

#前台,有3个tomcat集群,用户访问时轮询转向到某一个tomcat

server {
		listen       80;
		server_name  www.jt.com;

		location / {					#拦截所有的资源
			proxy_pass   http://jt;	#引用下面定义的upstream
		}
		
	}

#配置一个upstream,声明一个名称jt,配置多个ip地址转向,默认就是轮询

upstream jt {
		server 127.0.0.1:8080 weight=8;		#访问请求分成9份,这个tomcat负责8份的链接
		server 127.0.0.1:8090 weight=1;		#访问请求分成9份,这个tomcat负责1份的链接
		server 127.0.0.1:8100 down;		#这个tomcat暂时不参加负载
	}

*解决Session共享的解决办法

问题的由来:访问一个网站时,有两类请求。一种请求叫做无状态的请求,一种请求叫做有状态。

无状态,例如:登录页面,类似这种页面,哪个tomcat给我们响应都是一样的,不需要区分。这是我们最喜欢的。集群的动态伸缩性(增加节点,移除节点)。

有状态,例如:系统登录后,假如用户的请求被转发到tomcat1上,这时系统会写一个当前用户的信息放入session中。这种情况就称为有状态的,问题就来了。nginx负载均衡后,下一次用户的请求就被转发tomcat2上。tomcat2上没有session。系统就会要求用户去登录,这显然是不合理的。把这个问题称作session共享问题。

解决的办法:

session同步

tomcat支持动态将某个tomcat下的session复制到其他的tomcat中。但是这个方式是早期的企业级应用习惯的方式。现在很少使用。

这种方式在集群数量很少时,结果还是可以的。但如果集群数量庞大。都需要复制session,这时会因为网络延迟,或者session的内容非常大。都会造成隐患,这时可能读到脏数据。

Session黏着-放在服务端

对ip地址或者域名地址进行hash;或者uri进行hash。

缺点:用户浏览器的IP地址hash以后满足单调性。会可能造成资源的分配不均衡,负载均衡就达不到到目的。有的服务器负载过重,有的服务器负载过轻,显然没有充分利用资源。

#配置一个upstream,声明一个名称jt,配置多个ip地址转向,默认就是轮询
	upstream jt {
		ip_hash;				#IP_HASH方式来实现session共享
		server 127.0.0.1:8080 weight=5;		#访问请求分成9份,这个tomcat负责8份的链接
		server 127.0.0.1:8090 weight=5;		#访问请求分成9份,这个tomcat负责1份的链接
		server 127.0.0.1:8100 down;		#这个tomcat暂时不参加负载
	}

因为uri比ip地址相应数量多,变化就多,因此uri-hash比ip-hash分布更均衡些。

uri-hash需要第三方软件支持pcre-8.02.tar.gz、Nginx_upstream_hash-0.3.1.tar.gz

将信息放到cookie-放在客户端

session存在服务器端,会对服务器产生压力。如果将信息保存到cookie中,减轻了服务器的压力,同时每个客户端的压力也很小。因为只保存自己的信息。这种方式在实际的开发中广泛的采用。

缺点:cookie可以被禁用,cookie要随着浏览器传递,增大了传输的内容,cookie大小有限制。

 

猜你喜欢

转载自blog.csdn.net/qq_40680190/article/details/84070249