6.2.客户端和服务器端(翻译)

6.2.客户端和服务器端

  用例始于客户端(Tsung集群)和服务器端的定义。

6.2.1.基本的设置

  非分布式负载的基本设置如下:

<clients>
  <client host="localhost" use_controller_vm="true"/>
</clients>
<servers>
  <server host="192.168.1.1" port="80" type="tcp"></server>
</servers>

  这样的形式意味着客户端方面,相同的host和相同Erlang虚拟机作为压力机,在其上进行加载。服务器端是集群的入口。可以添加多个服务器,默认每台服务器的权重是1,并且每个session根据权重随机的选择服务器。也可以像以下列举,设置每台服务器的权重(权重可以是一个 integer或一个 float

<servers>
  <server host="server1" port="80" type="tcp" weight="4"></server>
  <server host="server2" port="80" type="tcp" weight="1"></server>
</servers>

(1.5.0之前的老版本,没有权重的选择并且在选择服务器上用的是负载均衡的算法)

  类型可以是tcp, ssl, udp、websocket 。具体:1、IPv6用tcp6, ssl6 或 udp6;2、1.4.2或1.4.2以上版本有效;3、websocket 需要到1.5.0及以上版本支持。还有一种特别的传输类型,那就是BOSH。非加密传输使用bosh ,加密连接使用bosh_ssl 。

6.2.2.高级的设置

  接下来的例子较复杂,使用一些特性来描述更高级的分布式测试。

<clients>
  <client host="louxor" weight="1" maxusers="800">
    <ip value="10.9.195.12"></ip>
    <ip value="10.9.195.13"></ip>
  </client>
  <client host="memphis" weight="3" maxusers="600" cpu="2"/>
</clients>
<servers>
  <server host="10.9.195.1" port="8080" type="tcp"></server>
</servers>

  几个虚拟IP用来模拟更多设备。在一个服务器集群交互中,这种使用多客户端IP来做负载平衡是非常有用的。在1.1.1版本后,IP不再是强制的,如果没有详细说明,会使用默认IP。在1.4.0版本后,可以使用<ip scan="true" value="eth0"/> 扫描给定接口的所有IP别名(eth0仅在本例子中用)。

  在本例子中,带有更高的权重和2个cpu的第二个设备,使用了Tsung的集群。2个Erlang设备将利用CPU的数量。

注意:对于Tsung客户端来说,即便一台Erlang虚拟机可以管理多个cpu(erlang SMP),但是基准显示使用一台虚拟机的单个cpu(SMP disabled)更有效。最好是使用SMP Erlang的控制节点。因此cpu应该与你的核心节点数相等。如果你愿意使用erlang SMP,就在开始tsung时,添加-s选项(并且不要在配置文件中设置cpu)。

  负载默认被统一的分配给所有cpu(默认每个客户端一个cpu)。考虑到客户端设备的速度,使用权重参数。例如,一个真实的客户端的权重系数为1,并且另一个客户端的权重系数为2,第二个客户端执行用户数是第一个客户端的2倍(比例是1/3 和 2/3)。在上面的例子中,第二客户端有2个CPU且权重系数是3,也就是每颗CPU占1.5的权重。

6.2.2.1最大用户数

  maxusers 这个参数,用于单独进程(许多操作系统默认是1024)打开的socket通道最大数量限制,且select 调用系统缺乏可扩展性。当用户数比限制的数大,新Erlang虚拟机将开始创造新的用户们。默认的maxusers 800。目前利用有效的内核轮询,可以使用非常大值的maxusers (比如30000 ),但不存在性能问题(记得要用ulimit -n,命令提搞操作系统的限制。详细细节参考 Why do i have error_connect_emfile errors?

注意:如果Tsung使用主机分配sessions到从机的主从结构。session包含多请求,从机将按照它们请求的顺序依次执行。

6.2.3.带着任务调度程序运行Tsung

  Tsung能够从任务调度程序中获取客户端节点列表。它通常设置batch的属性来操作PBS/torque, LSF and OAR。如下:

<client type="batch" batch="torque" maxusers="30000">

  如果需要通过任务调度程序扫描给定节点IP别名,使用scan_intf,如下:

<client type="batch" batch="torque" scan_intf='eth0' maxusers="30000">


原文:http://tsung.erlang-projects.org/user_manual/conf-client-server.html

posted on 2017-05-12 16:16  湛雍  阅读(501)  评论(0)    收藏  举报