我是靠谱客的博主 怡然帽子,最近开发中收集的这篇文章主要介绍java负载均衡测试_[例子] nginx负载均衡搭建及测试,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2配置nginx

修改nginx.conf

#user nobody; # user root root #Nginx所在的用户和用户组

user root root; #Nginx所在的用户和用户组

worker_processes 1;# 启动的工作进程数量

#错误日志存放路径

#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

error_log logs/error.log info; #add by olddoor-----------

#pid logs/nginx.pid;

#add by olddoor-----------

#add end------------------

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

#定义日志格式

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '

# '$status $body_bytes_sent "$http_referer" '

# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;

#tcp_nopush on;

#keepalive_timeout 0;

keepalive_timeout 65;

#gzip on;

#add by olddor---------------------

upstream localhost {

#发到localhost上的请求,通过Nginx转发到实际处理请求的服务器

server 192.168.64.132:8080 weight=1;

server 192.168.64.132:8081 weight=1;

server 192.168.64.132:8082 weight=1;

}

#add by olddor over----------------

server {

listen 8000; #宿主机访问虚拟机的80端口好像有点问题,建议不使用80端口

server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {

proxy_connect_timeout 3; #add by olddoor

proxy_send_timeout 30; #add by olddoor

proxy_read_timeout 30; #add by olddoor

proxy_pass http://localhost; #add by olddoor

#root html; #ignore by olddoor

#index index.html index.htm; #ignore by olddoor

}

location /test/jpgs/ {

alias /data/imgs/;

}

#location /jpgs

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html

#

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

# deny access to .htaccess files, if Apache's document root

# concurs with nginx's one

#

#location ~ /.ht {

# deny all;

#}

}

# another virtual host using mix of IP-, name-, and port-based configuration

#

#server {

# listen 8000;

# listen somename:8080;

# server_name somename alias another.alias;

# location / {

# root html;

# index index.html index.htm;

# }

#}

# HTTPS server

#

#server {

# listen 443;

# server_name localhost;

# ssl on;

# ssl_certificate cert.pem;

# ssl_certificate_key cert.key;

# ssl_session_timeout 5m;

# ssl_protocols SSLv2 SSLv3 TLSv1;

# ssl_ciphers HIGH:!aNULL:!MD5;

# ssl_prefer_server_ciphers on;

# location / {

# root html;

# index index.html index.htm;

# }

#}

}

通过

server 192.168.64.132:8080 weight=1;

server 192.168.64.132:8081 weight=1;

server 192.168.64.132:8082 weight=1;

的配置完成3台tomcat的轮询负载均衡.

访问时候使用 192.168.64.132:8000/test 取代192.168.64.132:8080/test ,192.168.64.132:8081/test ,192.168.64.132:8082/test

3 使用nginx管理部分静态数据

配置方式可以直接拦截指定路径的 jpg之类的文件.

这里只拦截目录

location  /test/jpgs/ {

alias /data/imgs/;  #即拦截/test/jpgs/请求->匹配物理路径:/data/imgs/

}

注意alias 和root 的拦截逻辑略有不同.

在linux服务器上创建对应的文件夹并上传图片123.jpg

启动三台tomcat以及Nginx服务器. 然后进行测试:

继续通过192.168.64.132:8080/test访问可以看到效果是:

094d9f1223dcce4230b2bea408a7c1fa.png

两张图片的来源都是tomcat-1

8f5299a21af1227c08e1870e7358b344.png

而访问192.168.64.132:8000/test 使用nginx服务则

随机显示第一张图片. 而第二张123.jpg 则显示的是nginx指定目录的图片而非tomcat上的图片.

e08c3554ac36b65f6618ea43a8233518.png

或者是

e31566e15317365036952e7e5cd3a442.png

2张图片来源都是nginx, 只是第一个是nginx到tomcat上获取. 第二张图片被拦截到/data/imgs上获取.

3a125b601bc736797cecc55f7b4999f2.png

以404-2为例

b8edc9c88a398aac67af79910e9b3cfa.png

4 性能测试对比

使用ab工具的压力测试方法和结果,ab是针对apache的性能测试工具,可以只安装ab工具。

ubuntu安装ab

apt-get install apache2-utils

centos安装ab

yum install httpd-tools

通过命令测试:

ab -kc 1000 -n 1000 http://192.168.64.132:8080/test/

这个指令会使用1000个并发,进行连接1000次测试tomcat-1

ab -kc 1000 -n 1000 http://192.168.64.132:80/test/

这个指令会使用1000个并发,进行连接1000次测试nginx

对比结果:

8080

#用于描述每个请求处理时间的分布情况,例如:50% 28 50%请求处理时间不超过28毫秒 (这里所指的处理时间是指:Time per request )

Percentage of the requests served within a certain time (ms)

50% 28

66% 32

75% 34

80% 35

90% 53

95% 62

98% 65

99% 66

100% 1823 (longest request)

second表示当前测试的服务器每秒可以处理16.54个静态html的请求事务,后面的mean表示平均。这个数值表示当前机器的整体性能,值越大越好。

Requests per second: 547.04 [#/sec] (mean)

Time per request: 1828.016 [ms] (mean)

Time per request: 1.828 [ms] (mean, across all concurrent requests)

Transfer rate: 76.93 [Kbytes/sec] received

80   nginx在小规模请求下响应速度慢于直接请求tomcat, 而处理能力nginx明显强于tomcat

Percentage of the requests served within a certain time (ms)

50% 107

66% 201

75% 243

80% 257

90% 334

95% 360

98% 1116

99% 1117

100% 1118 (longest request)

second表示当前测试的服务器每秒可以处理16.54个静态html的请求事务,后面的mean表示平均。这个数值表示当前机器的整体性能,值越大越好。

Requests per second: 873.38 [#/sec] (mean)

Time per request: 1144.983 [ms] (mean)

Time per request: 1.145 [ms] (mean, across all concurrent requests)

Transfer rate: 216.83 [Kbytes/sec] received

当请求改为1000个并发,进行连接1000次后

8080已经无法及时响应

This is ApacheBench, Version 2.3

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)

Total of 9967 requests completed

而80还是稳稳的

Server Hostname: localhost

Server Port: 80

Time taken for tests: 1.145 seconds

Complete requests: 1000

Failed requests: 551

(Connect: 0, Receive: 0, Length: 551, Exceptions: 0)

Non-2xx responses: 1000

Keep-Alive requests: 0

Total transferred: 254220 bytes

HTML transferred: 105792 bytes

second表示当前测试的服务器每秒可以处理16.54个静态html的请求事务,后面的mean表示平均。这个数值表示当前机器的整体性能,值越大越好。

Requests per second: 873.38 [#/sec] (mean)

Time per request: 1144.983 [ms] (mean)

Time per request: 1.145 [ms] (mean, across all concurrent requests)

Transfer rate: 216.83 [Kbytes/sec] received

Connection Times (ms)

min mean[+/-sd] median max

Connect: 16 26 4.6 27 33

Processing: 16 155 174.5 88 1101

Waiting: 13 155 174.6 88 1101

Total: 44 181 172.5 107 1118

Percentage of the requests served within a certain time (ms)

50% 107

66% 201

75% 243

80% 257

90% 334

95% 360

98% 1116

99% 1117

100% 1118 (longest request)

tips 如需将屏幕上的测试结果生成为文本文件, 可以在测试时候配合|tee 命令

如:

ab -kc 1000 -n 1000 http://192.168.64.132:80/test/ |tee /usr/111.txt #将结果保存到/usr/111.txt中

二、Nginx + Tomcat +Redis (用户session会话集中管理)

在上例的基础上新增Redis, 用于集中管理用户会话session

效果如图

93c3c052b681f5ff4fa0ba9904b0b74d.png

配置过程

1 、实验环境介绍:

安装nginx、tomcat、redis服务

软件versionip:portNginx1.4.6192.168.127.58 : 8000

Redis3.2.5-1192.168.127.58 : 7001

tomcat-7-17.0.73192.168.127.58:8080

tomcat-7-27.0.73192.168.127.58:8081

tomcat-7-37.0.73192.168.127.58:80822、测试:

编写id.jsp 放到3个tomcat的 /webapps/test下

response from tomcat_3

此时分别访问192.168.127.58:8080/test/id.jsp和192.168.127.58:8081/test/id.jsp  192.168.127.58:8082/test/id.jsp地址,因为访问的是不同web服务器,所以各自显示不同的页面内容及session值肯定不同。

3、配置tomcat的session管理(持久化到redis中):

添加jedis-2.0.0.jar、tomcat-redis-session-manager-1.2-tomcat-7-java-7、commons-pool-1.3.jar 三个jar到tomcat的lib目录下;            注意不可用commons-pool-1.2.jar修改tomcat的conf/context.xml 文件;

host="localhost"

port="7001"

database="0"

maxInactiveInterval="60" />

4  配置Nginx的负载均衡

本文第一部分已经做了。跳过

5、验证:

访问

的结果都是一样的 session id

response from tomcat_1

E47C459C5B9800294F408D0FFCFEFFD8

response from tomcat_2

E47C459C5B9800294F408D0FFCFEFFD8

response from tomcat_3

E47C459C5B9800294F408D0FFCFEFFD8

使用 redis-cli 连接 redis 服务器,查看会显示有 “E47C459C5B9800294F408D0FFCFEFFD8” key的 session 数据,value为序列化数据。登录redis-cli

1abc97bc946c61627e0e79d350787172.png

redis 查询所有的key

keys *

25ca9ff24b77871ad60e062e6a816150.png

最后

以上就是怡然帽子为你收集整理的java负载均衡测试_[例子] nginx负载均衡搭建及测试的全部内容,希望文章能够帮你解决java负载均衡测试_[例子] nginx负载均衡搭建及测试所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部