网络质量指标及测试工具iperf

服务器上架以,首要的是进行操作系统安装,然后进行联通性测试和网络质量测试。我们曾经有过教训,一个服务器上的业务一直不正常,技术人员排查了好久,在应用和系统上一直没有找到问题,最后发现是一根质量低劣的成品网络线,造成网络质量极差从而引起系统无法正常工作。

网络质量的指标,主要有以下几个:

  • 带宽(throughput),网络的吞吐率,端到端之间可以传输的最大速率。比如服务器之间的千兆网络带宽是1000Mbps,或者用户adsl上网速率是 2Mbps。
  • 延时(latency),数据包从本地传输到对端之间需要的时间,一般是来回的时间。如果延时过大,就会觉得网络慢,特别是一些交互性强的应用。比如延时超过300ms,通过ssh就会明显感到服务器响应比较慢,跟不上键盘输入的速度。延时一方面和两地之间的传输距离有关,比如中美之间通过海底光缆传输半个地球,来回距离加起来最起码4万公里,光速是30万公里每秒,所以理论延时最起码是130ms,再加上光缆需要转接和绕路,以及其他损耗,所以中美之间网络延时最好的时候也在170ms左右。延时另外一个原因是网络带宽的占用率,如果占用率高,则延时也高,比如天朝的特色,电信和网通之间,互相掐架,互联带宽很小,网络瓶颈,造成互相之间延时很高。很多时候,同一个城市的网通到电信,比到美国去绕一圈还要慢。延时的其他原因,是cpu处理跟不上等。
  • 丢包(loss),由于线路带宽占用过高,数据包从一端到另外一端传输的途中,会产生丢失。丢包率是网络的一个重要指标,一旦产生丢包,说明网络带宽不足,系统会自动重传,导致继续劣化,所以丢包率超过10%以后,网络质量会迅速劣化。
  • 抖动(jitter),如果延时不稳定,忽快忽慢,网络就存在抖动。抖动这个指标,在VOIP,视频会议等场合,是一个非常重要的指标,如果产生抖动,往往声音和图像也会抖动,无法听清楚或者看清楚。
各种应用,对上述指标的敏感性不一,比如http等应用,往往只对带宽和延时敏感,而游戏类应用,对延时、丢包、带宽敏感,及时语音和视频对上述几个指标都比较敏感。

普通用户测试网络质量的工具,通常的有:

1、ping

谁最常用的一个测试网络质量的一个工具,在各种操作系统、网络设备中一般都自带该工具。ping可以测试网络的延时、丢包率,优点是使用方便,不用安装。

ping的缺陷也比较明显:

  • 测试的时候,仅仅发送很小的负载icmp包,无法测试真实负载下的网络质量,比如单位里的网络平时是正常的,但是开一个迅雷下载,就很糟糕了。
  • 测试的指标单一,对于带宽、抖动无法测试

2、下载工具,可以测试带宽

这里介绍一个优秀的网络质量测试工具iperf,这个工具在我们的 asterisk 网络电话项目中,立下了汗马功劳。iperf 可以测试真实载荷下的网络质量,可以测试端到端的网络质量,可以测试一定吞吐率下的丢包、抖动。

iperf 在 linux 下和windows下都有二进制包。安装方法:

  • centos 下,需要使用EPEL 的软件包
CentOS 6:
rpm -i http://mirrors.ustc.edu.cn/fedora/epel/6/i386/epel-release-6-7.noarch.rpm

CentOS 5:
rpm -i http://mirrors.sohu.com/fedora-epel/5/i386/epel-release-5-4.noarch.rpm

yum -y install iperf
  • debian/ubuntu下
aptitude install iperf
  • windows 下
iperf 使用 C/S 模式进行测试,使用方法:
  • 一般的网络传输,使用 tcp 测试(普通网络应用),测试传输带宽:
服务器上运行:
iperf -s
客户端上运行:
iperf  -c 172.17.0.5  -d -i 1 -t 10
  • 语音服务器应该使用 udp 方式 (-u 选项),主要用于voip,视频会议,一些游戏:

服务器上运行:
iperf -s -u

客户端上测试在8Mbps带宽情况下的网络质量:
iperf -u -c 172.17.0.5 -b 8M -i 1 -w 1M -t 10

客户端起20个进程,每个进程 100k带宽,测试网络质量
iperf -u -c 172.17.0.5 -b 100k -i 1 -w 1M -t 30 -P20

测试结果包括带宽、抖动、丢包:

[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 3] 0.0-10.0 sec 1.25 MBytes 1.05 Mbits/sec 0.003 ms 0/ 893 (0%)

发表在 DEVOPS | 186条评论

puppet 的一个简单框架

服务器安装完了,下面是自动化部署和配置。

puppet是一个不错的自动化部署和配置的工具,网上有不少相关文档。但是可用的代码比较少,我们做了一个基本框架,可以管理用户帐号,ssh配置,sudo配置,postfix配置,ntp配置等等,可以作为 puppet 的一个起步。

https://github.com/pubyun/puppet

发表在 DEVOPS | 留下评论

amazon 的地址分配和域名规范

http://docs.amazonwebservices.com/AmazonEC2/dg/2007-01-19/instance-addressing.html

  • 每个实例有一个外网地址和内网地址
  • 每次启动,由dhcp动态分配
  • 亚马逊会提供域名,绑定在这两个IP上
  • 获取地址的方式:
curl http://169.254.169.254/latest/meta-data/local-ipv4

这也是openstack兼容的 metadata 获取地址的由来

发表在 OpenStack | 留下评论

chef 节点重命名

chef的节点(node)的名字,一旦设定,无法直接修改。重命名的方法是在chef server上删除该节点,然后重新创建。这个过程有点麻烦,希望以后chef进行改进。重命名的步骤如下:

  • 检查节点参数和运行菜单, 特别是要注意记录 run_list 和一些重要参数
% knife node edit c1-2.pubyun.com
{
  "normal": {
    "tags": [

    ],
    "sysctl": {
    },
    "postfix": {
      "relayhost": "[192.168.192.2]"
    }
  },
  "name": "c1-2.pubyun.com",
  "chef_environment": "_default",
  "run_list": [
    "role[ubuntu]"
  ]
}
  • 在chef server上删除 node 和 client
knife client delete c1-2.pubyun.com
knife node delete c1-2.pubyun.com
  • 在节点上删除 文件  /etc/chef/client.pem
  • 在节点上编辑文件  /etc/chef/client.rb,修改 node_name 变量
  • 在节点上重新运行 chef-client,这时节点命名生效,可以使用 knife node list 查看
  • 设置 run_list 和一些变量
knife node run_list add  c1-3.pubyun.com 'role[ubuntu]'
发表在 DEVOPS | 留下评论

机房布线问题

机房经常会发生网络线或者电源线被碰掉,引起事故的问题。

看看布线标准看,网络线和电源线应该扎在机箱上,就不会有这个问题了

 

 

发表在 DEVOPS | 留下评论

华为S9303多VLAN做DHCP relay

机房的核心交换机S9303上划分了多个VLAN,这些VLAN需要使用DHCP自动获取IP地址。

如何使用一个DHCP服务器给多个VLAN分配IP,网上有不少资料,但是有一些设置比较繁琐,比如需要做trunk到DHCP服务器,然后DHCP服务器的网卡,需要创建多个VLAN子网卡。经过测试,下面是一个方便简化的方法:

1、华为S9303上的设置

设置到DHCP服务器的接口,其中vlan100是dhcp所在vlan

interface Vlanif100
 description TO DHCP Server
 ip address 172.16.255.2 255.255.255.252

interface GigabitEthernet2/1/23
 description to DHCP Server
 port hybrid pvid vlan 100
 port hybrid untagged vlan 100

打开 DHCP relay

dhcp server group dhcp-srv
 dhcp-server 172.16.255.1 0

dhcp enable

然后在每一个需要做dhcp的vlan里加入:

interface Vlanif90
 description office
 ip address 192.168.29.1 255.255.255.0
 dhcp select relay
 dhcp relay server-select dhcp-srv

2、设置 dhcp 服务器

dhcp服务器采用ubuntu,单网卡,配置一个IP:

vi /etc/network/interfaces
auto eth0
iface eth0 inet static
    address 172.16.255.1
    netmask 255.255.255.252

dhcp的配置文件,注意

采用 shared-network 多个subnet共享一个network,所有需要获取地址的vlan,都要单独一个 subnet。这样交换机送过来的dhcp请求,就可以根据所在子网,获取到正确的IP地址。

注意:网卡所在地址段172.16.255.0,也必须配置一个 subnet,并且放在第一个,否则无法启动dhcpd

shared-network pubyun {
    #vlan 20
    next-server 172.16.112.2;
    filename "/pxelinux.0";

    # 必须有,否则无法启动
    subnet 172.16.255.0 netmask 255.255.255.0 {
        option routers 172.16.255.1;
        range 172.16.255.200 172.16.255.240;
    }
}

shared-network pubyun {
    #vlan 1000
    next-server 172.16.112.2;
    filename "/pxelinux.0";

    subnet 172.16.0.0 netmask 255.255.255.0 {
        option routers 172.16.0.1;
        range 172.16.0.200 172.16.0.240;
    }
}

shared-network pubyun {
    #vlan 1200
    next-server 172.16.112.2;
    filename "/pxelinux.0";

    subnet 172.16.96.0 netmask 255.255.255.0 {
        option routers 172.16.96.1;
        range 172.16.96.200 172.16.96.240;
    }
}
发表在 DEVOPS | 留下评论

ubuntu 下的 locale

查看所有安装的 locale:

locale -a

编辑配置文件,改为zh_CN.UTF-8

sudo nano /etc/default/locale
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN.zh"

如果没有zh_CN,则需要手工安装:

$cd /usr/share/locales
$sudo ./install-language-pack zh_CN
发表在 DEVOPS | 留下评论

openstack 的调度策略

https://www.ibm.com/developerworks/mydeveloperworks/blogs/e93514d3-c4f0-4aa0-8844-497f370090f5/entry/openstack_nova_scheduler_and_its_algorithm27?lang=en

这是IBM中国研究院的YongShengGong 写的一个分析文章,比较仔细。回头得仔细看一下。

发表在 OpenStack | 留下评论

OpenStack的EPEL 包中启动顺序的问题

目前,OpenStack 的软件包,已经进入EPEL 测试阶段。

发现/etc/init.d 下的启动顺序有问题,都采用了 20, 80的方式:

#!/bin/sh
#
# openstack-nova-api OpenStack Nova API Server
#
# chkconfig: – 20 80
# description: At the heart of the cloud framework is an API Server. \
# This API Server makes command and control of the \
# hypervisor, storage, and networking programmatically \
# available to users in realization of the definition \
# of cloud computing.

这样,启动OpenStack的服务,将比 mysql, rabbitMQ, libvirtd 等服务还要前,这样的启动次序经常导致OpenStack服务启动不成功。

已经发送了邮件给RedHat开发人员,Pádraig Brady确认将做修改。变成 98 02.

发表在 OpenStack | 留下评论

openstack日志信息的国际化(i18n)

目前 OpenStack 的日志信息,是采用国际化语言提示的,这样会有一些问题。我在邮件列表发了一个信息,建议采用英文提示信息,原因如下:

1、英文日志信息,更加便于用户共享和查找问题。我们可以方便地在搜索引擎检索错误信息,可以将日志信息发送到邮件列表供讨论。如果采用国际化的日志信息,不便于大家交流和共享。

2、如果采用国际化的提示信息,对于开发人员来说,维护会困难得多,修改一个提示信息,需要修改很多版本的语言资源文件,这个对于开源项目来说是一个不小的负担。

3、日志信息不像界面提示,对于管理员才可见,出了问题才会去查日志,所以英文不是障碍。更重要的是用日志来检索和共享。

Andrew Hutchings回了一个邮件,提到:

1、开发峰会已经涉及这个议题

http://etherpad.openstack.org/FolsomI18N

谈到邮件列表里曾经提到不要采用国际化日志信息,但是会议上说要(特别是中国的系统管理员)。是否需要一个投票?相比较apache的项目

> The information in there says “mailing list says no, feedback from
> session says yes (especially requested by operators in china) – need a
> vote? compare to apache projects…”

我们有500多人的OpenStack社区,可以发起一个讨论或者投票。

2、Oracle处理日志信息,采用的是问题编号,比如 ORA-01000,这样也便于共享或者检索。
但是这种方式,还是要维护国际化资源文件,对于开源项目,维护困难。

> I do also remember a suggestion of translated error messages and a
> common error code (such as NOV1234 I guess?) to use in places such as a
> Google search (such as MySQL does). You could then search for the
> translated error message or the code if you feel your language skills
> are good enough to get multi-lingual results.

发表在 OpenStack | 留下评论