最近遇到单体架构tomcat的项目遇到高并发出现阻塞的情况,考虑方向如上:
1.Docker安装:
centos 下载docker:
yum -y install docker-io
启动容器:
service docker restart
2.Mysql安装:
docker pull mysql
docker run -p 3306:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
使用navicat连接出现1521错误:
解决办法如下:
使用 docker exec 进入容器:
docker exec -it mysql容器id /bin/bash
设置root用户开启远程连接:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
set GLOBAL max_connections=200 ;#自己想设置的链接个数
3.安装tomcat和nginx 参考:https://blog.youkuaiyun.com/u012383839/article/details/79801105
4.将ssm项目打成war放到tomcat下webapps下
5.安装ab测试工具:
yum -y install httpd-tools
ab -v 查看ab版本
ab –help
使用:ab -n 2000 -c 2000 -p test.json -T 'application/json' 'http://120.78.140.3:8080/signs/Sign' 查看并发情况
打开druid监控页面:
6.tomcat开启arp模式:
***tomcat 以arp模式运行:
tomcat apr模式安装:
tomcat-native 安装文件已经存在于 tomcat 中,位于 $CATALINA_HOME/bin
的文件 tomcat-native.tar.gz
。 将文件 tomcat-native.tar.gz
拷贝出来后解压,配置,安装。
./configure --with-apr=/usr/bin/apr-1-config --with-java-home=/usr/lib/jvm/jdk1.8.0_161 && make && make install
在catalina.sh添加:
JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"
修改server.xml
启动tomcat:出现如下字样则表示apr模式启动成功:
具体参看:
https://www.cnblogs.com/zishengY/p/7101616.html?utm_source=itdadao&utm_medium=referral
7.负载均衡:
# 使用默认策略,轮询
upstream ydzwV3{
# 下面介绍几种负载均衡策略,其中轮询、weight、ip_hash是nginx内置的,可以直接使用。fair和url_hash需要第三方支持才可以使用。
# 1、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
server localhost:8080;
server localhost:9090;
# 2、weight:指定权重,按照权重进行请求的分配。wight和访问比例成正比,适合后端服务器性能不均的情况。
# 下面的配置就会经常访问8080的服务。如果后端服务器8080down掉,能够立刻切换到9090。
# server localhost:8080weight=10;
# server localhost:9090weight=1;
# 3、ip_hash:每个请求按照ip的hash结果进行分配,这样的话每个访客固定请求一个后端服务器,可以解决session没共享的问题。
# 如果8080down掉,则依然可以访问,可能会缓存9090。如果8288启动,则会从9090切换到8080。
# ip_hash;
# server localhost:8080;
# server localhost:9090;
# 4、fair(第三方):后端服务器响应时间短的优先分配。
# fair;
# server localhost:8080;
# server localhost:9090;
# 5、url_hash(第三方):按访问的url的hash结果来分配请求,这样相同url会分配到相同的后端服务器。适合后端服务器有缓存的情况。
# hash $request_uri;
# hash_method crc32;
# server localhost:8080;
# server localhost:9090;
}