一、tomcat集群
1.1 tomcat集群搭建
由多台服务器共同为用户提供服务.但是为了抗击高并发,需要配合负载均衡策略实现
1.2 搭建集群
修改application.yml配置文件,将端口 分别为
8081
,8082
,8083
进行打包为 3 台tomcat服务器
启动三台服务器,测试集群是否可用 , 动态获取端口信息
@RestController
public class MessageController {
@Value("${server.port}")
private String port;
@RequestMapping("/getPort")
public String getMsg() {
return "当前端口为:" + port;
}
}
二、Nginx负载均衡
2.1 轮循策略
按照配置文件的顺序,依次访问服务器
- 在
nginx.conf
中配置 jlWindows 轮循策略配置- 在后台服务器的 location 中配置代理路径为
proxy_pass http://jlWindows;
#定义tomcat集群 1.轮循策略
upstream jlWindows {
server localhost:8081;
server localhost:8082;
server localhost:8083;
}
2.2 权重策略
为了让性能更好的服务器更多的承担访问压力 , 所以采用权重策略
在
upstream jlWindows
增加 weight 属性值
例 :
server localhost:8081 weight=8;
server localhost:8082 weight=2;
第一个weight=8,第二个weight=2,总数是10。
即第一个tomcat负载80%的请求,第二个tomcat负载20%的请求
2.3 down 属性-停用
如果在服务器中标识down属性之后,该服务器将不会再为用户提供服务
2.4 backup 属性-备用机
如果需要在集群中设置备用机.则需要设置backup属性
设置为备用机之后,当主机遇忙/主机宕机时生效
2.5 Nginx负载均衡策略
当按照配置文件中指定的负载均衡方式进行访问时,如果后台服务器有宕机的显现,则在超时时间过后,会访问全新的服务器.保证用户访问正确
2.6 Nginx实现tomcat高可用配置
属性说明:
- 定义最大失败次数为1 :
max_fails=1
- 设定失败的时间周期为60s :
fail_timeout=60s
原理说明:当nginx访问后台服务器时,如果发现后台服务器连接不通.当失败次数达到了设定的最大次数时,则开启高可用的策略.规定用户在时间周期之内,不会再次访问故障机
2.7 nginx.conf 配置文件
#搭建后台服务器.
server {
listen 80;
server_name manage.jl.com;
location / {
#配置代理路径
#proxy_pass http://localhost:8091;
#proxy_pass http://jlWindows;
proxy_pass http://jlLinux;
proxy_connect_timeout 2;
proxy_read_timeout 2;
proxy_send_timeout 2;
}
}
#定于tomcat集群 1.轮循策略 2.权重策略 3.负载均衡策略
upstream jlWindows {
server localhost:8081 weight=6 max_fails=1 fail_timeout=60s down;
server localhost:8082 weight=3 max_fails=1 fail_timeout=60s;
server localhost:8083 weight=1 max_fails=1 fail_timeout=60s backup;
}
#配置Linux集群
upstream jlLinux {
server 192.168.56.129:8081;
server 192.168.56.129:8082;
server 192.168.56.129:8083;
}
2.8 项目上线步骤
要求在线部署.尽可能少影响用户
nginx/tomcats
设计项目上线方案
将需要上线部署的服务器标识down,之后重启nginx
之后进行jar包的部署
之后完成项目的测试(可能会出现问题)
之后切换其他的服务器标识down,直到部署完成
nginx一般都会有2台.方便完成上线部署
三、部署到本地虚拟机linux
3.1 连接linux
使用Xshell 通过SSH远程连接linux系统 ip:
192.168.56.129
阿里云服务器 :123.56.98.7
3.2 linux系统安装JDK
- 通过rz插件实现与linux文件的传输
- 安装rz插件 :
yum -y install lrzsz
上传rz
下载sz
- 将JDK安装包上传到指定文件目录下/usr/local/src下 (直接将JDK拖进Xshell)
- 解压JDK文件 :
tar -xvf jdk-8u51-linux-x64.tar.gz
3.3 配置环境变量
修改Linux系统中环境变量需要修改/etc/profile文件
vim /etc/profile
配置JKD环境变量
#set java env
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
环境变量生效 :
source /etc/profile
3.4 检测JDK是否生效
java -version
3.5 Linux tomcat集群部署
步骤 :
- 修改数据库连接地址windows地址
- 关闭2个系统的防火墙
- 关闭数据库权限
3.5.1 修改数据库连接地址
注意 : 链接地址切记写net8网卡IP地址
在
application.yml
配置数据连接192.168.56.1
#引入druid数据源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.56.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
username: root
password: root
3.5.2 关闭windows防火墙
3.5.2 关闭Linux防火墙
- 永久关闭防火墙 :
chkconfigiptables off
- 关闭现有防火墙 :
service iptables stop
3.5.3 开放数据库对外访问权限
说明 :
grant [权限] on [数据库名].[表名] to ['用户名']@['web服务器的ip地址'] identified by ['密码'];
全开 :
grant all on *.* to 'root'@'%' identified by 'root';
指定IP地址 :
grant all on *.* to 'root'@'ip地址' identified by 'root';
在数据库中执行该指令
/*开放数据库权限*/
GRANT ALL ON *.* TO "root"@"%" IDENTIFIED BY "root";
3.5.4 jar包项目发布
完成以上操作后 ,
- 将项目
install
打包 , 上传到linux系统上/usr/local/src/tomcats
目中- 运行项目 :
java -jar 8081.war
3.5.5 配置nginx.conf
配置linux 服务器集群
#搭建后台服务器.
server {
listen 80;
server_name manage.jl.com;
location / {
#配置代理路径
#proxy_pass http://localhost:8091;
proxy_pass http://jlLinux;
proxy_connect_timeout 2;
proxy_read_timeout 2;
proxy_send_timeout 2;
}
}
#配置Linux集群
upstream jlLinux {
server 192.168.56.129:8081;
server 192.168.56.129:8082;
server 192.168.56.129:8083;
}
3.5.6 实现效果
在Windows 浏览器上 访问
http://192.168.56.129:8081/
随手笔记
1.快捷切换hosts的小工具
2.IDEA maven常用的生命周期
clean: 清除target目录
install: 将工程打包到本地仓库,这时本地项目可以依赖,别人是依赖不了的;
package: 将项目中的各种文件,比如源代码、编译生成的字节码、配置文件、文档,按照规范的格式生成归档,最常见的当然就是JAR包和WAR包;
deploy: 将打包的jar文件上传到私服(如果有私服),此时连接私服的人才可以下载依赖
区别:
- package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
- install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库
- deploy命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
4.分布式发布项目
要按严格的顺序进行
install
: 直接父工程 install (父工程 - common -子工程)执行过
install
, 之后做tomcat集群的时候 , 只需修改配置文件的端口 , 重新发布子工程的install
就可以了
5.bat命令 : 一键启动集群tomcat
使用的是批处理
打开一个新cmd窗口 :
start cmd
命令执行完仍然显示cmd窗口 :
/k
输出提示信息 :
echo
下面是启动三个tomcat服务器的案例 :
start cmd /k "echo 服务器:8081 && java -jar 8081.war "
start cmd /k "echo 服务器:8082 && java -jar 8082.war "
start cmd /k "echo 服务器:8083 && java -jar 8083.war "
6.bat命令 : 关闭nginx
bat 以管理员身份下运行命令
在bat文件开头添加一下内容
cd /d %~dp0
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
获得管理员权限,关闭nginx
cd /d %~dp0
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
start cmd /k "echo 关闭nginx && nginx -s stop"
7.linux命令
consten7 : 查看ip :
ip addr
检查当前路径 :pwd
清屏 :clear
自动补齐名字 : 先输入唯一标识的前缀文件名,再摁Tab
永久关闭/开防火墙 :chkconfig iptables off/on
关闭/开现有防火墙 :service iptables stop/start
8.linux 传输文件
安装rz插件 :
yum -y install lrzsz
10.IPHASH策略(了解)
- nginx实现Session共享. 用户的信息紧紧的绑定到了nginx中.耦合性高
- url重写技术.sessionId=UUID,动态拼接SessionI
- IPHASH: 将用户信息(IP地址)动态的与服务器进行绑定.将来用户访问的服务器只有一台
在upstream中 添加
ip_hash;
存在的问题:
- 采用IPhash策略可能会造成负载不均
- 如果其中某台服务器宕机.则直接影响用户体验
现在用sso(单点登录系统) 来实现一次登录,就可以访问其他相互信任的系统
11.关于杀死tomcat进程
检索服务 :
ps -ef |grep java*
查的进程号强制杀死进程 :
kill -9 进程号