首页 > Linux系统管理 > fastdfs安装压力测试 nginx lua fastdfs
2017
06-22

fastdfs安装压力测试 nginx lua fastdfs

安装FastDFS依赖lib包

git clone https://github.com/happyfish100/libfastcommon.git
cd libfastcommon/
./make.sh
./make.sh install
 
安装FastDFS
git clone https://github.com/happyfish100/fastdfs
cd FastDFS
./make.sh
./make.sh install

如果是集群的话 每台机器都要安装

tracker配置

sed -i 's#/usr/local/bin/#/usr/bin/#g' /etc/init.d/fdfs_trackerd
 
mkdir -p /data/fastdfs/tracker
 
cd /etc/fdfs/
cp tracker.conf.sample tracker.conf
vim tracker.conf
disabled=false                  #启用配置文件
port=22122                      #设置 tracker 的端口号
base_path=/data/fastdfs/tracker #设置 tracker 的数据文件和日志目录(需预先创建)
http.server_port=8888           #设置 http 端口号    指的是在tracker服务器上启动http服务进程,如:apache或者nginx 启动时所监听的端口
/etc/init.d/fdfs_trackerd start
chkconfig fdfs_trackerd on
 
storage配置
sed -i 's#/usr/local/bin/#/usr/bin/#g' /etc/init.d/fdfs_storaged
mkdir -p /data/fastdfs/base
mkdir -p /data/fastdfs/data
 
cd /etc/fdfs/
cp storage.conf.sample storage.conf
vim storage.conf
disabled=false                        #启用配置文件
group_name=group1                     #组名,根据实际情况修改
port=23000                            #设置 storage 的端口号
base_path=/data/fastdfs/base          #设置 storage 的日志目录(需预先创建)
store_path_count=1                    #存储路径个数,需要和 store_path 个数匹配
store_path0=/data/fastdfs/       #存储路径
tracker_server=172.16.0.160:22122      #tracker 服务器的 IP 地址和端口号
http.server_port=8888                 #设置stor	age上启动的http服务的端口号,如安装的nginx的端口号
/etc/init.d/fdfs_storaged start

客户端文件配置

[root@localhost fdfs]# cp client.conf.sample client.conf
[root@img01 fdfs]# grep -Ev '^$|^#' /etc/fdfs/client.conf
connect_timeout=30
network_timeout=60
base_path=/data/fastdfs/fdfs_client      # 日志路径
tracker_server=172.16.0.160:22122         # 追踪服务器的IP,有多个服务器可以另一行
log_level=info
use_connection_pool = false
connection_pool_max_idle_time = 3600
load_fdfs_parameters_from_tracker=false
use_storage_id = false
storage_ids_filename = storage_ids.conf
http.tracker_server_port=80

FastDFS自带的压力测试
测试工具的源码在安装包的test目录下面:

[root@fastdfs_2 FastDFS]# cd test/
[root@fastdfs_2 test]# make
[root@fastdfs_2 test]# make install

安装完之后,当前目录多了几个可执行文件:

./combine_result 查看联合几个进程执行的结果;
 
./gen_files  生成测试文件;
 
./test_delete 测试删除文件
 
./test_download 测试下载文件;
 
./test_upload 测试上传文件;
接着就可以执行 ./gen_files 来生成测试文件了。
 
[root@fastdfs_2 test]# ./gen_files
然后执行 /test_upload.sh 脚本测试多个文件上传,可以更改里面的变量,默认是10个执行进程:
 
[root@fastdfs_2 test]# ./test_upload.sh
 
执行完之后,当前目录多了一个存放测试数据 的目录 upload,进程还在后台跑的,说不定等下屏幕会输出每个经常运行的时间结果。
 
所以,这个过程可以等几分钟,然后进入upload 目录查看测试结果:
 
[root@fastdfs_2 test]# cd upload/
 
[root@fastdfs_2 upload]# ../combine_result 10
 
后面的10 就是 10个进程的结果,进程数可以看upload 目录下的数据。
total_count=34000, success_count=34000, success ratio: 100.00% time_used=121s, avg time used: 3ms, QPS=280.99
 
file_type total_count success_count time_used(s) avg(ms) QPS success_ratio
5K 26140 26140 117 4 223.42 100.00
50K 4890 4890 0 0 0.00 100.00
200K 2680 2680 0 0 0.00 100.00
1M 290 290 0 3 0.00 100.00
10M 0 0 0 0 0.00 0.00
100M 0 0 0 0 0.00 0.00
 
IO speed = 9984 KB
ip_addr  total_count success_count time_used(s) avg(ms) QPS success_ratio
172.16.0.161 34000 34000 119 3 285.71 100.00

测试结果说明:
其中QPS就是每秒的并发数,
第一行:总共上传的文件数、成功上传的文件数、上传文件的成功率、上传文件所花的时间、平均用时以及每秒查询数(请求数)。

中间:记录的是每种类型文件上传的个数。

最后一行:磁盘IO速度以及服务端ip,总共上传数、总共成功数、用时、平均用时、请求速率、成功率。

默认情况下,测试upload会循环10次,那样客户端生成的tcp连接为10个。

可以根据自身需求修改这个值。

vim test_upload.c

将常量PROCESS_COUNT 改为需要模拟的客户端tcp连接数,比如500。

修改完后,需要重新编译一次

make

make install

修改测试上传的脚本

vim test_upload.sh
将默认的10修改为需要模拟的数,比如100,不能超过之前配置的常量500。
 
执行脚本test_upload.sh 测试
sh ./test_upload.sh 
 
执行完成后,会提示每个进程的用时,在当前目录下会自动生成一个upload目录用于存储测试数据。
 
查看结果
cd upload
 
../combine_result 100
 
后面的参数100需要跟脚本test_upload.sh中配置的100一致。
total_count=13100, success_count=13100, success ratio: 100.00% time_used=7s, avg time used: 0ms, QPS=1871.43
 
file_type total_count success_count time_used(s) avg(ms) QPS success_ratio
5K 10000 10000 6 0 1666.67 100.00
50K 2000 2000 0 0 0.00 100.00
200K 1000 1000 0 0 0.00 100.00
1M 100 100 0 3 0.00 100.00
10M 0 0 0 0 0.00 0.00
100M 0 0 0 0 0.00 0.00
 
IO speed = 64628 KB
ip_addr  total_count success_count time_used(s) avg(ms) QPS success_ratio
172.16.0.161 13100 13100 8 0 1637.50 100.00

一样的,测试下载性能。

回到test目录,执行 ./test_download.sh 脚本开始测试下载,该脚本默认开出20个进程的,可以更改里面的变量来达到你要的结果。
[root@fastdfs_2 test]# cd ../

[root@fastdfs_2 test]# ./test_download.sh
执行完之后,进程已经在后台跑了,此时生成 download 目录来存放测试结果。不妨查看一下:
跑完之后,进入down目录查看结果:

[root@fastdfs_2 test]# cd download
 
[root@fastdfs_2 download]# ../combine_result 20
total_count=1200000, success_count=1200000, success ratio: 100.00% time_used=87s, avg time used: 0ms, QPS=13793.10
 
file_type total_count success_count time_used(s) avg(ms) QPS success_ratio
5K 917070 917070 42 0 21835.00 100.00
50K 182240 182240 9 0 20248.89 100.00
200K 91180 91180 5 0 18236.00 100.00
1M 9510 9510 1 0 9510.00 100.00
10M 0 0 0 0 0.00 0.00
100M 0 0 0 0 0.00 0.00
 
IO speed = 478983 KB
ip_addr  total_count success_count time_used(s) avg(ms) QPS success_ratio
172.16.0.161 1200000 1200000 58 0 20689.66 100.00
 
[root@maigao-0509test2 download]# ../combine_result 100
total_count=5253520, success_count=5253520, success ratio: 100.00% time_used=300s, avg time used: 0ms, QPS=17511.73
 
file_type total_count success_count time_used(s) avg(ms) QPS success_ratio
5K 4016303 4016303 206 0 19496.62 100.00
50K 796983 796983 41 0 19438.61 100.00
200K 398554 398554 21 0 18978.76 100.00
1M 41680 41680 3 0 13893.33 100.00
10M 0 0 0 0 0.00 0.00
100M 0 0 0 0 0.00 0.00
 
IO speed = 607739 KB
ip_addr  total_count success_count time_used(s) avg(ms) QPS success_ratio
172.16.0.161 5253520 5253520 273 0 19243.66 100.00
 
删除的测试方法一样
 ./test_delete.sh

nginx lua fastdfs动态缩略图
1.安装软件基础包

 yum install -y gcc gcc-c++ zlib zlib-devel openssl openssl-devel pcre pcre-devel gd-devel libpng libjpeg libpng-devel libjpeg-devel ghostscript libtiff libtiff-devel freetype freetype-devel readline-devel ncurses-devel
 
 
  2.下载相关软件,其中nginx-http-concat和echo-nginx-module模块非必须
git clone https://github.com/alibaba/nginx-http-concat.git
git clone https://github.com/simpl/ngx_devel_kit.git
git clone https://github.com/openresty/echo-nginx-module.git
git clone https://github.com/openresty/lua-nginx-module.git
git clone https://github.com/happyfish100/fastdfs-nginx-module
 
# 安装LuaJIT
cd /usr/local/src
wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz
tar -zxf LuaJIT-2.0.4.tar.gz
cd LuaJIT-2.0.4
make
make install
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0
ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
 
# 安装Lua
cd /usr/local/src
wget http://www.lua.org/ftp/lua-5.3.1.tar.gz 
tar -zxvpf lua-5.3.1.tar.gz
cd lua-5.3.1
make linux && make install
 
安装cjson
tar xvf lua-cjson-2.1.0.tar.gz
make
make install
 
# 安装GM
cd /usr/local/src
wget ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/1.3/GraphicsMagick-1.3.18.tar.gz
tar -zxvf GraphicsMagick-1.3.18.tar.gz
cd GraphicsMagick-1.3.18
./configure --prefix=/usr/local/GraphicsMagick-1.3.18 --enable-shared
make  && make install
ln -s /usr/local/GraphicsMagick-1.3.18 /usr/local/GraphicsMagick
 
 
 
# 安装nginx
cd /usr/local/src
wget http://nginx.org/download/nginx-1.10.2.tar.gz
tar -zxvf nginx-1.10.2.tar.gz
cd nginx-1.10.2
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_realip_module --with-http_sub_module --with-http_flv_module --with-http_dav_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_addition_module --add-module=../fastdfs-nginx-module/src --with-http_image_filter_module --with-pcre --add-module=../nginx-http-concat --add-module=../lua-nginx-module --add-module=../ngx_devel_kit --add-module=../echo-nginx-module --with-ld-opt=-Wl,-rpath,$LUAJIT_LIB
 
make
make install
 
ln -s /usr/local/nginx-1.10.2 /usr/local/nginx
 
复制文件:cp /tmp/fastdfs/conf/http.conf /etc/fdfs
复制文件:cp /tmp/fastdfs/conf/mime.types /etc/fdfs

修改一下配置
复制 Nginx 模块的配置文件:cp /tmp/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
编辑 Nginx 模块的配置文件:vim /etc/fdfs/mod_fastdfs.conf,编辑内容看下面中文注释
如果在已经启动 Nginx 的情况下修改下面内容记得要重启 Nginx。
connect_timeout=2
network_timeout=30
# 下面这个路径是保存 log 的地方,需要我们改下,指向我们一个存在的目录
# 创建目录:mkdir -p /opt/fastdfs/fastdfs-nginx-module/data-and-log

base_path=/tmp
load_fdfs_parameters_from_tracker=true
storage_sync_file_max_delay = 86400
use_storage_id = false
storage_ids_filename = storage_ids.conf
# 指定 tracker 服务器的 IP 和端口
tracker_server=192.168.1.114:22122
storage_server_port=23000
group_name=group1
# 因为我们访问图片的地址是:http://192.168.1.114/group1/M00/00/00/wKgBclb0aqWAbVNrAAAjn7_h9gM813_big.jpg
# 该地址前面是带有 /group1/M00,所以我们这里要使用 true,不然访问不到(原值是 false)
url_have_group_name = true
store_path_count=1
# 图片实际存放路径,如果有多个,这里可以有多行:
# store_path0=/opt/fastdfs/storage/images-data0
# store_path1=/opt/fastdfs/storage/images-data1
# store_path2=/opt/fastdfs/storage/images-data2
store_path0=/data/fastdfs/data
log_level=info
log_filename=
response_mode=proxy
if_alias_prefix=
flv_support = true
flv_extension = flv
group_count = 0

编辑 Nginx 配置文件

   server {
        listen 80;
        server_name  114.80.9.171;
        root  /data/httpd/web;
        index index.php index.html;
        #location / {
        #    default_type text/html;
        #    content_by_lua '
        #        ngx.say("<p>hello, world1</p>")
        #        ';
        #}
 
        location ~ .*\.php.*
        {
            include php_fcgi.conf;
            include pathinfo.conf;
        }
 
 
        location /hello {
            default_type text/html;
            echo "hello, world2";
        }
 
        location /upload {
            if ($request_method = 'OPTIONS') {
                add_header Access-Control-Allow-Origin *;
                add_header Access-Control-Allow-Credentials true;
                add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
                add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
                return 200;
            }
 
            default_type text/html;
            #lua_code_cache off;
            content_by_lua_file conf/lua/upload.lua;
        }
 
        location /www/M00 {
	            #alias /data/fastdfs/data/data;
 
            #set $image_root "/usr/local/openresty/nginx/proxy_tmp/images";
            set $image_root "/data/fastdfs/data/data";
            set $image_local "/data/httpd/web/www/M00";
            if ($uri ~ "/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/(.*)") {
                set $image_dir "$image_root/$3/$4/";
                set $image_local_dir "$image_local/$3/$4/";
                set $image_name "$5";
                set $file "$image_local_dir$image_name";
            }
 
            if (!-f $file) {
                # 关闭lua代码缓存,方便调试lua脚本
                #lua_code_cache off;
                content_by_lua_file "conf/lua/fastdfs.lua";
            }
 
            #ngx_fastdfs_module;
        }
    }
最后编辑:
作者:saunix
大型互联网公司linux系统运维攻城狮,专门担当消防员