聶永的博客

          記錄工作/學習的點點滴滴。

          Tsung筆記之IP直連支持篇

          前言

          前面說到設計一個小型的C/S類型遠程終端套件以替換SSH,并且已經應用到線上。這個問題,其實不是Tsung自身的問題,是外部連接依賴問題。

          Tsung在啟動分布式壓測時,主節點tsung_controller要連接的從機必須要填寫主機名,主機名沒有內網DNS服務器支持解析的情況下(我所經歷互聯網公司很少有提供支持的),只好費勁在/etc/hosts文件中填寫主機名稱和IP地址的映射關系,頗為麻煩,尤其是要添加一批新的壓測從機或從機變動頻率較大時。

          那么如何解決這些問題呢,讓tsung在復雜的機房內網環境下,完全基于IP進行直連,這將是本文所討論的內容。

          預備知識

          完全限定域名

          完全限定域名,縮寫為FQDN (fully qualified domain name),賽門鐵克給出的中文定義

          一種用于指定計算機在域層次結構中確切位置的明確域名。
          一臺特定計算機或主機的完整 Internet 域名。FQDN 包括兩部分:主機名和域名。例如 mycomputer.mydomain.com。
          一種包含主機名和域名(包括頂級域)的 URL。例如,www.symantec.com 是完全限定域名。其中 www 是主機,symantec 是二級域,.com 是頂級域。FQDN 總是以主機名開始且以頂級域名結束,因此 www.sesa.symantec.com 也是一個 FQDN。

          若機器主機名為內網域名形式,并且支持DNS解析,方便其它服務器可通過該主機名直接找到對應IP地址,能夠 ping -c 3 機器域名 通,那么機器之間能夠容易找到對方。

          服務器hostname的命名,若不是域名形式,簡短名稱形式,比如“yk_mobile_dianxin_001”,一般內網的DNS服務器不支持解析,機器之間需要互相在/etc/hosts文件建立彼此IP地址映射關系才能夠互相感知對方。

          Erlang節點名稱的規則

          因為Tsung使用Erlang編寫,Erlang關于節點啟動名稱規定,也是Tsung需要面對的問題。

          Erlang節點名稱一般需要遵循兩種格式:

          1. 一般名稱(也稱之為短名稱)形式,不包含“.”字符,比如 erl -name tsun_node
          2. 完全限定域名形式
            • 域名形式,比如erl -name tsun_node.youdomain.com
            • IP形式,比如erl -name 10.10.10.103

          Tsung處理方式:

          • 若非特別指定,一般默認為短名稱形式
          • 啟動時可以通過-F參數指定使用完全限定域名形式

          獲得IP地址

          主機名稱無論是完全限定域名形式,還是簡單的短名稱形式,當別的主機需要通過主機名訪問時,系統層面需要通過DNS系統解析成IP地址才能夠進行網絡連接。當內網DNS能夠解析出來IP來,沒有什么擔心的;(短名稱)解析不出來時,多半會通過寫入到系統的 /etc/hosts 文件中,這樣也能夠解析成功。

          一般機房內網環境,主機名稱大都是短名稱形式,若需分布式,每一個主機之間都要能夠互相聯通,最經濟做法就是直接使用IP地址,可避免寫入大量映射到 hosts 文件中,也會避免一些隱患。

          主節點啟動增加IP支持

          默認情況下,Tsung Master主節點名稱類似于tsung_controller@主機名

          • 節點名稱前綴默認為:tsung_controller (除非在tsung啟動時通過-i指定前綴)
          • 一般主機名都是字符串形式(hostname命令可設置主機名)
          • 可將主機名稱設置為本機IP,但不符合人類認知慣性

          既然Tsung主節點默認對IP節點名稱支持不夠,改造一下tsung/tsung.sh.in腳本。

          Tsung啟動時-F參數為指定使用完全限定域名(FQDN)形式,不支持攜帶參數。若要直接傳遞IP地址,類似于:

          -F Your_IP

          修改tsung.sh.in,可以傳遞IP地址,手動組裝節點名稱:

          F) NAMETYPE="-name"
              SERVER_IP=$OPTARG
              if [ "$SERVER_IP" != "" ]; then
                  CONTROLLER_EXTENDS="@$SERVER_IP"
              fi
              ;;
          

          修改不復雜,更多細節請參考:https://github.com/weibomobile/tsung/blob/master/tsung.sh.in

          啟動Tsung時,指定本地IP:

          tsung -F 10.10.10.10 -f tsung.xml start
          

          tsung_controller目前節點名稱已經變為:

          -name tsung_controller@10.10.10.10

          嗯,目標達成。

          從節點主機增加IP配置

          給出一個節點client50配置:

          <client host="client50"  maxusers="100000" cpu="7" weight="4">
              <ip value="10.10.10.50"></ip>
              <ip value="10.10.10.51"></ip>
          </client>
          

          Tsung Master想訪問client50,需要提前建立client50與IP地址的映射關系:

          echo "10.10.10.50 client50" >> /etc/hosts
          

          host屬性默認情況下只能填寫長短名稱,無法填寫IP地址,為了兼容已有規則,修改tsung-1.0.dtd文件為client元素新增一個hostip屬性:

          <!ATTLIST client
               cpu      NMTOKEN "1"
               type     (machine | batch)  "machine"
               host     NMTOKEN #IMPLIED
               hostip   CDATA ""
               batch    (torque | pbs | lsf | oar) #IMPLIED
               scan_intf NMTOKEN #IMPLIED
               maxusers NMTOKEN "800"
               use_controller_vm (true | false) "false"
               weight   NMTOKEN "1">
          

          修改src/tsung_controller/ts_config.erl文件,增加處理邏輯,只有當主節點主機名為IP時才會取hostip作為主機名:

          {ok, MasterHostname} = ts_utils:node_to_hostname(node()),
          case {ts_utils:is_ip(MasterHostname), ts_utils:is_ip(Host), ts_utils:is_ip(HostIP)} of
             %% must be hostname and not ip:
              {false, true, _} ->
                  io:format(standard_error,"ERROR: client config: 'host' attribute must be a hostname, "++ "not an IP ! (was ~p)~n",[Host]),
                  exit({error, badhostname});
              {true, true, _} ->
                  %% add a new client for each CPU
                  lists:duplicate(CPU,#client{host     = Host,
                                              weight   = Weight/CPU,
                                              maxusers = MaxUsers});
              {true, _, true} ->
                  %% add a new client for each CPU
                  lists:duplicate(CPU,#client{host     = HostIP,
                                              weight   = Weight/CPU,
                                              maxusers = MaxUsers});
              {_, _, _} ->
                  %% add a new client for each CPU
                  lists:duplicate(CPU,#client{host     = Host,
                                              weight   = Weight/CPU,
                                              maxusers = MaxUsers})
          end
          

          嗯,現在可以這樣配置從節點了,不用擔心Tsung啟動時是否附加-F參數了:

          <client host="client50" hostip="10.10.10.50" maxusers="100000" cpu="7" weight="4">
              <ip value="10.10.10.50"></ip>
              <ip value="10.10.10.51"></ip>
          </client>
          

          其實,只要你確定只使用主節點主機名為IP地址,可以直接設置host屬性值為IP值,可忽略hostip屬性,但這以犧牲兼容性為代價的。

          <client host="10.10.10.50" maxusers="100000" cpu="7" weight="4">
              <ip value="10.10.10.50"></ip>
              <ip value="10.10.10.51"></ip>
          </client>
          

          為了減少/etc/hosts大量映射寫入,還是推薦全部IP形式,這種形式適合Tsung分布式集群所依賴服務器的快速租賃模型。

          源碼地址

          針對Tsung最新代碼增加的IP直連特性所有修改,已經放在github上:

          https://github.com/weibomobile/tsung

          并且已經遞交pull requesthttps://github.com/processone/tsung/pull/189

          比較有意思的是,有這樣一條評論:

          ?

          針對Tsung 1.6.0修改版

          最近一次發行版是tsung 1.6.0,這個版本比較穩定,我實際壓測所使用的就是在此版本上增加IP直連支持(如上所述),已經被單獨放入到github上:

          https://github.com/weibomobile/tsung-1.6.0

          至于如何安裝,git clone到本地,后面就是如何編譯tsung的步驟了,不再累述。

          小結

          若要讓IP直連特性生效,再次說明啟用步驟一下:

          1. tsung.xml文件配置從機hostip屬性,或host屬性,填寫正確IP
          2. tsung啟動時,指定本機可用IP地址:tsung -F Your_Available_IP -f tsung.xml ... start

          IP直連,再配合前面所寫SSH替換方案,可以讓Tsung分布式集群在復雜網絡機房內網環境下適應性向前邁了一大步。

          2016-08-06 更新此文,增加Tsung 1.6.0修改版描述

          posted on 2016-07-28 08:37 nieyong 閱讀(3134) 評論(0)  編輯  收藏 所屬分類: 壓測

          公告

          所有文章皆為原創,若轉載請標明出處,謝謝~

          新浪微博,歡迎關注:

          導航

          <2016年7月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          統計

          常用鏈接

          留言簿(58)

          隨筆分類(130)

          隨筆檔案(151)

          個人收藏

          最新隨筆

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 桐梓县| 磴口县| 志丹县| 临清市| 隆昌县| 大余县| 泗阳县| 汾西县| 建水县| 黑山县| 南溪县| 玉龙| 垣曲县| 阿荣旗| 铅山县| 樟树市| 永定县| 虞城县| 修武县| 休宁县| 尚义县| 凉城县| 南华县| 舞钢市| 黄浦区| 江都市| 吉木萨尔县| 阳新县| 大洼县| 安西县| 邻水| 文化| 马关县| 兰西县| 曲松县| 教育| 常德市| 张掖市| 永昌县| 昌黎县| 道真|