<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    聶永的博客

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

    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 閱讀(3126) 評論(0)  編輯  收藏 所屬分類: 壓測

    公告

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

    新浪微博,歡迎關注:

    導航

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

    統計

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费毛片在线看不用播放器| 日日躁狠狠躁狠狠爱免费视频| 免费福利电影在线观看| 国产精品亚洲视频| 国产激情久久久久影院老熟女免费 | 亚洲色大成网站www永久| 波多野结衣免费一区视频| 亚洲精品二区国产综合野狼| 中文字幕乱理片免费完整的| 国产AV无码专区亚洲AV男同| 久久精品视频免费播放| 久久精品国产亚洲AV无码偷窥| 国产电影午夜成年免费视频| 丁香婷婷亚洲六月综合色| 免费毛片在线视频| 五月天国产成人AV免费观看| 黑人精品videos亚洲人| 中文字幕在线免费| 亚洲人成人伊人成综合网无码| 免费一级成人毛片| 国产免费无码一区二区| 亚洲国产av高清无码| 国产成人免费片在线视频观看| 亚欧乱色国产精品免费视频| 亚洲日本中文字幕区| 日韩高清在线免费观看| 一区二区三区免费视频网站| 亚洲美女免费视频| 国产一级大片免费看| 中文字幕无码免费久久| 亚洲人成网亚洲欧洲无码| 国产av无码专区亚洲av果冻传媒| 99精品视频免费观看| 美国毛片亚洲社区在线观看| 亚洲精品无码午夜福利中文字幕| 一级女人18毛片免费| 国产免费人成视频尤勿视频| 亚洲国产精品无码久久久| 亚洲精品成人久久久| 97国产免费全部免费观看| 一区二区三区免费看|