聶永的博客

          記錄工作/學(xué)習(xí)的點(diǎn)點(diǎn)滴滴。

          Tsung筆記之IP直連支持篇

          前言

          前面說(shuō)到設(shè)計(jì)一個(gè)小型的C/S類型遠(yuǎn)程終端套件以替換SSH,并且已經(jīng)應(yīng)用到線上。這個(gè)問(wèn)題,其實(shí)不是Tsung自身的問(wèn)題,是外部連接依賴問(wèn)題。

          Tsung在啟動(dòng)分布式壓測(cè)時(shí),主節(jié)點(diǎn)tsung_controller要連接的從機(jī)必須要填寫(xiě)主機(jī)名,主機(jī)名沒(méi)有內(nèi)網(wǎng)DNS服務(wù)器支持解析的情況下(我所經(jīng)歷互聯(lián)網(wǎng)公司很少有提供支持的),只好費(fèi)勁在/etc/hosts文件中填寫(xiě)主機(jī)名稱和IP地址的映射關(guān)系,頗為麻煩,尤其是要添加一批新的壓測(cè)從機(jī)或從機(jī)變動(dòng)頻率較大時(shí)。

          那么如何解決這些問(wèn)題呢,讓tsung在復(fù)雜的機(jī)房?jī)?nèi)網(wǎng)環(huán)境下,完全基于IP進(jìn)行直連,這將是本文所討論的內(nèi)容。

          預(yù)備知識(shí)

          完全限定域名

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

          一種用于指定計(jì)算機(jī)在域?qū)哟谓Y(jié)構(gòu)中確切位置的明確域名。
          一臺(tái)特定計(jì)算機(jī)或主機(jī)的完整 Internet 域名。FQDN 包括兩部分:主機(jī)名和域名。例如 mycomputer.mydomain.com。
          一種包含主機(jī)名和域名(包括頂級(jí)域)的 URL。例如,www.symantec.com 是完全限定域名。其中 www 是主機(jī),symantec 是二級(jí)域,.com 是頂級(jí)域。FQDN 總是以主機(jī)名開(kāi)始且以頂級(jí)域名結(jié)束,因此 www.sesa.symantec.com 也是一個(gè) FQDN。

          若機(jī)器主機(jī)名為內(nèi)網(wǎng)域名形式,并且支持DNS解析,方便其它服務(wù)器可通過(guò)該主機(jī)名直接找到對(duì)應(yīng)IP地址,能夠 ping -c 3 機(jī)器域名 通,那么機(jī)器之間能夠容易找到對(duì)方。

          服務(wù)器hostname的命名,若不是域名形式,簡(jiǎn)短名稱形式,比如“yk_mobile_dianxin_001”,一般內(nèi)網(wǎng)的DNS服務(wù)器不支持解析,機(jī)器之間需要互相在/etc/hosts文件建立彼此IP地址映射關(guān)系才能夠互相感知對(duì)方。

          Erlang節(jié)點(diǎn)名稱的規(guī)則

          因?yàn)門sung使用Erlang編寫(xiě),Erlang關(guān)于節(jié)點(diǎn)啟動(dòng)名稱規(guī)定,也是Tsung需要面對(duì)的問(wèn)題。

          Erlang節(jié)點(diǎn)名稱一般需要遵循兩種格式:

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

          Tsung處理方式:

          • 若非特別指定,一般默認(rèn)為短名稱形式
          • 啟動(dòng)時(shí)可以通過(guò)-F參數(shù)指定使用完全限定域名形式

          獲得IP地址

          主機(jī)名稱無(wú)論是完全限定域名形式,還是簡(jiǎn)單的短名稱形式,當(dāng)別的主機(jī)需要通過(guò)主機(jī)名訪問(wèn)時(shí),系統(tǒng)層面需要通過(guò)DNS系統(tǒng)解析成IP地址才能夠進(jìn)行網(wǎng)絡(luò)連接。當(dāng)內(nèi)網(wǎng)DNS能夠解析出來(lái)IP來(lái),沒(méi)有什么擔(dān)心的;(短名稱)解析不出來(lái)時(shí),多半會(huì)通過(guò)寫(xiě)入到系統(tǒng)的 /etc/hosts 文件中,這樣也能夠解析成功。

          一般機(jī)房?jī)?nèi)網(wǎng)環(huán)境,主機(jī)名稱大都是短名稱形式,若需分布式,每一個(gè)主機(jī)之間都要能夠互相聯(lián)通,最經(jīng)濟(jì)做法就是直接使用IP地址,可避免寫(xiě)入大量映射到 hosts 文件中,也會(huì)避免一些隱患。

          主節(jié)點(diǎn)啟動(dòng)增加IP支持

          默認(rèn)情況下,Tsung Master主節(jié)點(diǎn)名稱類似于tsung_controller@主機(jī)名

          • 節(jié)點(diǎn)名稱前綴默認(rèn)為:tsung_controller (除非在tsung啟動(dòng)時(shí)通過(guò)-i指定前綴)
          • 一般主機(jī)名都是字符串形式(hostname命令可設(shè)置主機(jī)名)
          • 可將主機(jī)名稱設(shè)置為本機(jī)IP,但不符合人類認(rèn)知慣性

          既然Tsung主節(jié)點(diǎn)默認(rèn)對(duì)IP節(jié)點(diǎn)名稱支持不夠,改造一下tsung/tsung.sh.in腳本。

          Tsung啟動(dòng)時(shí)-F參數(shù)為指定使用完全限定域名(FQDN)形式,不支持?jǐn)y帶參數(shù)。若要直接傳遞IP地址,類似于:

          -F Your_IP

          修改tsung.sh.in,可以傳遞IP地址,手動(dòng)組裝節(jié)點(diǎn)名稱:

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

          修改不復(fù)雜,更多細(xì)節(jié)請(qǐng)參考:https://github.com/weibomobile/tsung/blob/master/tsung.sh.in

          啟動(dòng)Tsung時(shí),指定本地IP:

          tsung -F 10.10.10.10 -f tsung.xml start
          

          tsung_controller目前節(jié)點(diǎn)名稱已經(jīng)變?yōu)椋?/p>

          -name tsung_controller@10.10.10.10

          嗯,目標(biāo)達(dá)成。

          從節(jié)點(diǎn)主機(jī)增加IP配置

          給出一個(gè)節(jié)點(diǎn)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想訪問(wèn)client50,需要提前建立client50與IP地址的映射關(guān)系:

          echo "10.10.10.50 client50" >> /etc/hosts
          

          host屬性默認(rèn)情況下只能填寫(xiě)長(zhǎng)短名稱,無(wú)法填寫(xiě)IP地址,為了兼容已有規(guī)則,修改tsung-1.0.dtd文件為client元素新增一個(gè)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文件,增加處理邏輯,只有當(dāng)主節(jié)點(diǎn)主機(jī)名為IP時(shí)才會(huì)取hostip作為主機(jī)名:

          {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
          

          嗯,現(xiàn)在可以這樣配置從節(jié)點(diǎn)了,不用擔(dān)心Tsung啟動(dòng)時(shí)是否附加-F參數(shù)了:

          <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>
          

          其實(shí),只要你確定只使用主節(jié)點(diǎn)主機(jī)名為IP地址,可以直接設(shè)置host屬性值為IP值,可忽略hostip屬性,但這以犧牲兼容性為代價(jià)的。

          <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大量映射寫(xiě)入,還是推薦全部IP形式,這種形式適合Tsung分布式集群所依賴服務(wù)器的快速租賃模型。

          源碼地址

          針對(duì)Tsung最新代碼增加的IP直連特性所有修改,已經(jīng)放在github上:

          https://github.com/weibomobile/tsung

          并且已經(jīng)遞交pull requesthttps://github.com/processone/tsung/pull/189

          比較有意思的是,有這樣一條評(píng)論:

          ?

          針對(duì)Tsung 1.6.0修改版

          最近一次發(fā)行版是tsung 1.6.0,這個(gè)版本比較穩(wěn)定,我實(shí)際壓測(cè)所使用的就是在此版本上增加IP直連支持(如上所述),已經(jīng)被單獨(dú)放入到github上:

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

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

          小結(jié)

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

          1. tsung.xml文件配置從機(jī)hostip屬性,或host屬性,填寫(xiě)正確IP
          2. tsung啟動(dòng)時(shí),指定本機(jī)可用IP地址:tsung -F Your_Available_IP -f tsung.xml ... start

          IP直連,再配合前面所寫(xiě)SSH替換方案,可以讓Tsung分布式集群在復(fù)雜網(wǎng)絡(luò)機(jī)房?jī)?nèi)網(wǎng)環(huán)境下適應(yīng)性向前邁了一大步。

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

          posted on 2016-07-28 08:37 nieyong 閱讀(3125) 評(píng)論(0)  編輯  收藏 所屬分類: 壓測(cè)

          公告

          所有文章皆為原創(chuàng),若轉(zhuǎn)載請(qǐng)標(biāo)明出處,謝謝~

          新浪微博,歡迎關(guān)注:

          導(dǎo)航

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

          統(tǒng)計(jì)

          常用鏈接

          留言簿(58)

          隨筆分類(130)

          隨筆檔案(151)

          個(gè)人收藏

          最新隨筆

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 扎赉特旗| 叶城县| 菏泽市| 鞍山市| 澳门| 滨海县| 梨树县| 合山市| 宁国市| 成都市| 苗栗县| 唐海县| 漾濞| 肃宁县| 南宫市| 旅游| 五寨县| 花莲市| 咸阳市| 台江县| 思茅市| 滕州市| 广宗县| 农安县| 灵武市| 资中县| 林甸县| 偏关县| 苍溪县| 武川县| 罗甸县| 烟台市| 渭南市| 垦利县| 赫章县| 包头市| 新沂市| 衡东县| 化州市| 旬阳县| 甘德县|