标签:nginx+多实例tomcat负载均衡 web服务器并发优化 nginx负载均衡
前言:
我之前在服务器方面不太懂,经过此次的配置让我的技术有了很大的进步,写此给大家共享一下,如有错误之处欢迎指正。
配置这个初衷是为了给java(s2sh框架)写的app接口提供大的并发量支持 ,并且是https的接口
一、服务器配置
2.20GHZ;6核心 4CPU 4G内存 CentOS系统;
二、web架构设计图示
1.有两台服务器,暂且叫做服务器a和服务器b;
2.服务器a部署是单tomcat两个实例
注:之前是配置了3个tomcat(注:实际只启动了两个tomcat,多出一个是为了测试几个tomcat并发量最大),端口分别是 444 555
3.服务器b部署了nginx和https的测试工具siege
三、nginx配置...
1. 原料:nginx-
0.7
.
63
.tar.gz
pcre-8.37.tar.gz
2. 安装:
1、上传nginx-0.7.63.tar.gz至/usr/local
2、执行如下命令解压nginx:
1.
#cd
/usr/local
2.
#tar
zxvf nginx-
0.7
.
63
.tar.gz
3、编译安装nginx
1.
#cd
nginx-
0.7
.
63
2.
#./configure
--with-http_stub_status_module --with-http_ssl_module #启动server状态页和https模块
(红色部分配https必需加上,否则后面坑死人)
执行完后会提示一个错误,说缺少PCRE library 这个是HTTP Rewrite 模块,也即是url静态化的包
可上传pcre-7.9.tar.gz,输入如下命令安装:
1.
#tar
zxvf pcre-
7.9
.tar.gz
2.
#cd
pcre-
7.9
3.
#./configure
4.
#make
5.
#make
install
安装pcre成功后,继续安装nginx
1.
#cd
nginx-
0.7
.
63
2.
#
./configure
--with-http_stub_status_module --with-http_ssl_module
3.
#make
4.
#make
install
4、nginx安装成功后的安装目录为/usr/local/nginx
(千万别搞错了/usr/local/目录下会有两个nginx的目录,分别是nginx-0.7.65和nginx;曾经搞错了,填了很久的坑)
3. 配置:
编辑安装目录下conf文件夹中的nginx.conf
备份原来的nginx.conf文件,将原来的内容用下面完整的复制进去
#-------------------内容开始--------------------------
worker_processes 5;
events {
use epoll;
worker_connections 65535;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream aa{
ip_hash; #轮询形式分配下面
server www.xxx.com.cn:444;(www.xxx.com.cn是tomcat部署的服务器域名)
server www.xxx.com.cn:555;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
proxy_pass http://aa; (与上面同深红保持一致)
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 15;
proxy_send_timeout 15;
proxy_read_timeout 15;
proxy_buffer_size 8k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 443 ;
server_name localhost;
ssl on;
ssl_certificate /usr/local/nginx/conf/server.crt; #淘宝买的ssl证书
ssl_certificate_key /usr/local/nginx/conf/server.key;#
location / {
root html;
index index.html index.htm;
proxy_pass https://aa;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 15;
proxy_send_timeout 15;
proxy_read_timeout 15;
proxy_buffer_size 8k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
#-------------------内容结束--------------------------
4. nginx常用命令:
5、修改/usr/local/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:
1.
#/usr/local/nginx/sbin/nginx
-t
如果屏幕显示以下两行信息,说明配置文件正确:
1.
the
configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
2.
the
configuration file /usr/local/nginx/conf/nginx.conf was tested successfully
如果提示unknown host,则可在服务器上执行:ping www.baidu.com如果也是同样提示unknown
host则有两种可能:
a、服务器没有设置DNS服务器地址,查看/etc/resolv.conf下是否设置,若无则加上
b、防火墙拦截
(对了别忘了给444和555端口在防火墙添加例外让外部能够访问,什么,你不会!!! 那百度去吧!!!)
6、启动nginx的命令
1.
#
/usr/local/nginx-0.7.65/objs
/nginx如果启动提示nginx
服务提示98: Address already in use 查看80端口占用情况ps -ef|grep 80 然后杀进程即可
7、停止nginx的命令
1.
#
/usr/local/nginx-0.7.65/objs
/nginx -s
stop
附配置好的nginx.conf文件:
深入了解nginx参考资料:
四、tomcat配置
1.原料:
apache-tomcat-6.0.28 jdk-6u45-linux-x64-rpm.bin
2.安装:见文档
3.配置:
1.给单个tomcat配置多个实例
教程在如下链接中
1、安装好tomcat
2、在tomcat根目录新建app1和app2两目录
3、拷贝 conf、logs、 temp、 webapps、 work目录到app1和app2,并分别删除webapps内的所有文件
4、分别修改conf内的server.xml文件的<server>和<Connector port="8088" protocol="HTTP/1.1"两个端口不相互冲突。如果使用集群方式还要修改<Connector port="8099" protocol="AJP/1.3"端口不相互冲突。
修改的文件如下:
1. web.xml最后几行配置了:每次强制使用https
2. server.xml
a. 开启了tomcat的NIO(
New I/O)特性
b.增加了tomcat的连接池配置(此方法提高并发超级给力)
c.指定了端口 app1我指定了444端口
d.指定了项目路径我的项目为Personal3C
e.配置了了https的密钥 .jks
app1
app2的
5、新建两个启动文件startApp1.sh、 startApp2.sh,内容分别为:
(注意:配置startApp.sh时不能有空格和回车,我被坑过)
cat startApp1.sh
export CATALINA_BASE=$CATALINA_HOME/app1
sh $CATALINA_HOME/bin/startup.sh -Dcatalina.base
cat startApp1.sh
export CATALINA_BASE=$CATALINA_HOME/app2
sh $CATALINA_HOME/bin/startup.sh -Dcatalina.base
6、chmod 777 startApp1.sh和startApp2.sh文件为可动行状态。
7、分别向app1和app2的webapps内放入web工程
8、分别启动startApp1.sh和startApp2.sh启动实例,进行测试。
单tomcat多实例参考资料:
tomcat配置优化参考资料:
2.bin目录下catalina.sh文件增加jvm的内存设置 添加红色部分
JAVA_OPTS="-Xms1400m -Xmx1400m -Xss256K -XX:PermSize=256m -XX:MaxPermSize=256m"
五、https测试工具
或
压力测试工具siege的用法
Siege是linux下的一个web系统的压力测试工具,支持多链接,支持get和post请求,可以对web系统进行多并发下持续请求的压力测试。
安装 Siege
#wget http://download.joedog.org/siege/siege-latest.tar.gz (最好下载下来安装)
#tar -xzvf siege-latest.tar.gz
#./configure -prefix=/usr/local/siege -with-ssl=/usr/include/openssl((安装目录:/usr/local/siege))
#make #make install
如果第三步报错configure: error: no acceptable C compiler found in $PATH 则执行
#yum install gcc
|
Siege命令常用参数
-c 200 指定并发数200
-r 5 指定测试的次数5
-f urls.txt 制定url的文件
-i internet系统,随机发送url
-b 请求无需等待 delay=0
-t 5 持续测试5分钟
-r和-t一般不同时使用
常用的siege命令举例
200个并发对http://www.google.com发送请求100次
siege -c 200 -r 100 http://www.google.com
|
在urls.txt中列出所有的网址
siege -c 200 -r 100 -f urls.txt
|
随机选取urls.txt中列出所有的网址
siege -c 200 -r 100 -f urls.txt -i
|
delay=0,更准确的压力测试,而不是功能测试
siege -c 200 -r 100 -f urls.txt -i -b
|
指定http请求头 文档类型
siege -H "Content-Type:application/json" -c 200 -r 100 -f urls.txt -i -b
Siege输出结果说明
Transactions: 总共测试次数
Availability: 成功次数百分比
Elapsed time: 总共耗时多少秒
Data transferred: 总共数据传输
Response time: 等到响应耗时
Transaction rate: 平均每秒处理请求数
Throughput: 吞吐率
Concurrency: 最高并发
Successful transactions: 成功的请求数
Failed transactions: 失败的请求数
Siege使用的一些总结
1,发送post请求时,url格式为:
http://www.xxxx.com/ POST p1=v1&p2=v2
2,如果url中含有空格和中文,要先进行url编码,否则siege发送的请求url不准确
版权声明:本文为博主原创文章,未经博主允许不得转载。
web服务器并发优化(nginx+多实例tomcat负载均衡并发5000左右)
标签:nginx+多实例tomcat负载均衡 web服务器并发优化 nginx负载均衡
原文地址:http://blog.csdn.net/nevergiveuplzl/article/details/46731093