天天看点

Portable Virtual Box+Kali Linux+Docker+WRK做压力测试

需求:在Windows下安装Linux虚拟机,并安装docker,在docker镜像中安装WRK并进行“压力测试”。主要考量是:(1)Windows下使用Linux,并进行前期的压测脚本编写;(2)需要在多台服务器上部署压力测试工具,而Docker具有一次创建到处运行的好处;(3)wrk感觉是非常好用的压力测试工具。

相关软件准备和安装:

1. 下载Portable-VirtualBox(http://www.vbox.me/)并安装virtualBox,做少量设置【virtualbox有很多坑,比如联网方式、远程登录、文件复制等】

         1.1 在BIOS中将CPU的虚拟化技术设置为打开(or Enabled),不同电脑方法有少量差异

         1.2 VirtualBox联网方式有多种,最简单的是NAT模式,如果需要远程登录可以设置端口转发规则

         1.3 如果在运行虚拟机过程中出现错误,可以在VirtualBox的“设置”中设置(如USB 2.0相关错误)

         1.4 我在折腾virtualbox过程中,遇到过一个莫名其妙的问题,后来怀疑是配置过桥接网卡联网方式,在主机本地连接上安装了VirtualBox的网桥软件,导致出现了无法启动虚拟机的问题。后来在本地连接中卸载之后,问题解决。

         【总体感觉VirtualBox不好用,但是折腾过之后,可能稍微好点儿吧,毕竟可以免安装移植】        

2. 下载Linux镜像(如ubuntu-16.04.5-server-amd64.iso),并在VirtualBox中安装该镜像(64位操作系统是必须的)\

         2.1 修改root密码:su passwd

         2.2 如果有没有安装必要软件,可以使用apt-get 来安装,安装之前需要执行apt-get update

         2.3 虚拟机的NAT模式无法实现主机和虚拟机之间的互联,可以配置“端口转发规则”,这样就可以在主机实现对虚拟机的ssh登录

Portable Virtual Box+Kali Linux+Docker+WRK做压力测试

        2.4 如果需要用scp从主机向虚拟机copy文件,可以用命令:scp -P 2222 upload_file [email protected]:/home/..

3. 我后来用的是kali-linux-2018.4-vbox-amd64.ova这个镜像

        3.1 采用NAT方式上网,按照第2步配置端口转发规则:本机2222,子系统22

        3.2 在Linux上开启ssh服务:service ssh start

        3.3 在Linux上设置允许root远程登录:vim /etc/ssh/sshd_config,找到#PermitRootLogin no改为PermitRootLogin yes

        3.4 在Linux上设置ssh服务开启启动:systemctl enable ssh

        3.5 这样可以通过本地命令行工具(如Cmder)远程访问虚拟机如:ssh [email protected] -p 2222

        3.6 也可以通过scp命令来回复制文件:scp -P 2222 upload_file [email protected]:/home/..

       3.7 VirtualBox的确有很多很多坑,当我把所有都搞定的时候,关掉重新启动的时候又出现了无法启动的问题。找了半天,做了N多配置,后来把前期桥接连接配置的“本地连接2”删除、又把“本地连接”中的VirtualBox bridge network卸载了,重启计算机,解决了。很崩溃。总之桥接很麻烦,以后就打算用NAT模式了,和系统的耦合性较小,也方便移植。

4. 在虚拟机中安装Docker

       4.1 官方提供的Docker安装方法是:运行以下命令准备安装脚本

               apt-get install curl

               curl -fsSL get.docker.com -o get-docker.sh 

               sh get-docker.sh --mirror Aliyun

       4.2 但在我用的Kali Linux版本中不支持上述安装步骤。我用了apt-get update \ apt-get install -y docker.io

       4.3 安装好之后,就可以进行docker的所有操作了,如docker build/docker run /docker ps / docker rm / docker rmi等

5. 创建包含wrk的Docker镜像并运行

       5.1 下载/编译wrk:运行git clone https://github.com/wg/wrk.git && cd wrk && make

       5.2 编译完的wrk文件夹下,生成了一个wrk文件,可以直接运行(拷贝到path路径下可以作为内置命令),内置了Lua和OpenSSL

       5.3 创建文件夹(如image_wrk),将wrk拷贝到改文件夹下

       5.4 创建services文件(touch services),并编辑,确保docker容器认识这两个协议

             http    80/tcp  www

             https   443/tcp

       5.5 创建Dockerfile,并编辑如下【具体内容可以根据需求进行调整】

             FROM ubuntu:16.04 #基于ubuntu:16.04这个镜像构建自己的景象

             COPY ./wrk /usr/bin/ #从Dockerfile上下文环境中拷贝wrk

             COPY ./services /etc/  #拷贝services文件到docker镜像/etc/文件夹下

             RUN chmod 777 /usr/bin/wrk #修改wrk的权限

             ENTRYPOINT [ "wrk","-t4", "-c10","-d30s", "https://www.baidu.com/"; ] #设置容器启动时的程序入口,参数自己设置

       5.6 基于上述Dockerfile创建docker镜像【docker build -t wrk:baidu .】(build命令中"."代表Dockerfile所在目录),docker images可以查看已经存在的镜像。可以用docker rmi wrk:baidu删除镜像

       5.7 基于已创建的镜像运行容器【docker run wrk:baidu】

       5.8 可以用docker ps查看正在运行的容器,可以用docker kill dockerid杀死容器

       5.9 可以用docker save -o xxx.tar image_tag来保存镜像到本地

       5.10 可以用docker load < xxx.tar将镜像导入到docker仓库中

       5.11 可以用docker pull和push进行远程镜像拉去和上传

   6. 定制方向

      wrk提供了-s指定lua脚本的功能,在lua脚本中可以定制wrk的请求包信息,如果有更复杂的需求,可以进一步研究。

【参考文献】

[1] https://blog.csdn.net/bskfnvjtlyzmv867/article/details/81044217

[2] https://zhidao.baidu.com/question/1050358201705339019.html

[3] http://www.cnblogs.com/ycyzharry/p/8372168.html

[4] http://www.vbox.me/