tsung笔记之ip直连支持篇 -凯发k8网页登录

记录工作/学习的点点滴滴。

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 总是以主机名开始且以顶级域名结束,因此 也是一个 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
    ;;

修改不复杂,更多细节请参考:

启动tsung时,指定本地ip:

tsung -f 10.10.10.10 -f tsung.xml start

tsung_controller目前节点名称已经变为:

-name tsung_controller@10.10.10.10

嗯,目标达成。

从节点主机增加ip配置

给出一个节点client50配置:


    
    

tsung master想访问client50,需要提前建立client50与ip地址的映射关系:

echo "10.10.10.50 client50" >> /etc/hosts

host属性默认情况下只能填写长短名称,无法填写ip地址,为了兼容已有规则,修改tsung-1.0.dtd文件为client元素新增一个hostip属性:


修改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参数了:


    
    

其实,只要你确定只使用主节点主机名为ip地址,可以直接设置host属性值为ip值,可忽略hostip属性,但这以牺牲兼容性为代价的。


    
    

为了减少/etc/hosts大量映射写入,还是推荐全部ip形式,这种形式适合tsung分布式集群所依赖服务器的快速租赁模型。

源码地址

针对tsung最新代码增加的ip直连特性所有修改,已经放在github上:

并且已经递交pull request: 。

比较有意思的是,有这样一条评论:

针对tsung 1.6.0修改版

最近一次发行版是tsung 1.6.0,这个版本比较稳定,我实际压测所使用的就是在此版本上增加ip直连支持(如上所述),已经被单独放入到github上:

至于如何安装,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 阅读(2974) 评论(0)  编辑  收藏 所属分类: 压测

公告

所有文章皆为原创,若转载请标明出处,谢谢~

新浪微博,欢迎关注:

导航

2016年7月
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

统计

常用链接

留言簿(58)

随笔分类(129)

随笔档案(149)

个人收藏

最新随笔

搜索

最新评论

阅读排行榜

评论排行榜

网站地图