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)名稱一般需要遵循兩種格式:
- 一般名稱(也稱之為短名稱)形式,不包含“.”字符,比如
erl -name tsun_node
- 完全限定域名形式
- 域名形式,比如
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 request
: https://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ō)明啟用步驟一下:
- tsung.xml文件配置從機(jī)hostip屬性,或host屬性,填寫(xiě)正確IP
- 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è)