<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.免费在线观看| 99久久免费看国产精品| 国产精品成人无码免费| 亚洲精品天堂在线观看| 噼里啪啦电影在线观看免费高清| 亚洲无线一二三四区| 成人在线免费看片| 最新亚洲精品国偷自产在线| 男女超爽刺激视频免费播放| 中文字幕无码精品亚洲资源网久久| 久久精品免费一区二区喷潮| 亚洲熟女乱色一区二区三区| 日韩免费一区二区三区| 免费无码专区毛片高潮喷水| 国产精品亚洲w码日韩中文| 水蜜桃视频在线观看免费播放高清 | 亚洲日韩一页精品发布| a级毛片免费观看视频| 亚洲高清视频在线观看| 国产成人午夜精品免费视频| 亚洲色大成网站www| 免费人成视频x8x8入口| 中文字幕免费在线看电影大全 | 在线91精品亚洲网站精品成人| 亚洲国产av一区二区三区| 久久免费香蕉视频| 亚洲经典在线观看| 日本一道综合久久aⅴ免费| 久青草国产免费观看| 久久久亚洲精品无码| 成年女人色毛片免费看| 少妇亚洲免费精品| 亚洲成人中文字幕| 精品国产免费观看| a毛片在线还看免费网站| 亚洲av永久无码嘿嘿嘿| 亚洲精品无码专区2| 免费观看黄色的网站| 国产精品手机在线亚洲| 亚洲人成网www| 国产成人免费片在线视频观看|