天天看點

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/

繼續閱讀