zxj123

zxj123

0个粉丝

92

问答

0

专栏

0

资料

zxj123  发布于  2012-12-24 14:10:01
采纳率 0%
92个问答
3396

linux管理员必备技巧

设想:公司 A 有一个名为 ginger 的存储服务器,并通过名为 beckham 的客户端节点装载 NFS。公司 A 确定他们需要从 ginger 得到更多的带宽,因为有大量的节点需要 NFS 装载 ginger 的共享文件系统。

实现此操作的最常用和最便宜的方式是将两个吉比特以太网 NIC 组合在一起。这是最便宜的,因为您通常会有一个额外的可用 NIC 和一个额外的端口。

所以采取此这个方法。不过现在的问题是:到底需要多少带宽?

吉比特以太网理论上的限制是 128MBit/s。这个数字从何而来?看看这些计算:

1Gb = 1024Mb;1024Mb/8 = 128MB;"b" = "bits,"、"B" = "bytes"

但实际看到的是什么呢,有什么好的测量方法呢?我推荐一个工具 iperf。可以按照以下方法获得 iperf:

wget http://dast.nlanr.net/Projects/Iperf2.0/iperf-2.0.2.tar.gz

需要在 ginger 和 beckham 均可见的共享文件系统上安装此工具,或者在两个节点上编译并安装。我将在两个节点均可见的 bob 用户的主目录中编译它:

tar zxvf iperf*gz cd iperf-2.0.2 ./configure -prefix=/home/bob/perf make make install

在 ginger 上,运行:

/home/bob/perf/bin/iperf -s -f M

这台机器将用作服务器并以 MBit/s 为单位输出执行速度。

在 beckham 节点上,运行:

/home/bob/perf/bin/iperf -c ginger -P 4 -f M -w 256k -t 60

两个屏幕上的结果都指示了速度是多少。在使用吉比特适配器的普通服务器上,可能会看到速度约为 112MBit/s。这是 TCP 堆栈和物理电缆中的常用带宽。通过以端到端的方式连接两台服务器,每台服务器使用两个联结的以太网卡,我获得了约 220MBit/s 的带宽。

事实上,在联结的网络上看到的 NFS 约为 150-160MBit/s。这仍然表示带宽可以达到预期效果。如果看到更小的值,则应该检查是否有问题。

我最近碰到一种情况,即通过连接驱动程序连接两个使用了不同驱动程序的 NIC。这导致性能非常低,带宽约为 20MBit/s,比不连接以太网卡时的带宽还小!

Linux 系统管理员通过使用权威的命令行脚本会变得更高效。这包括巧妙使用循环和知道如何使用 awk、grep 和 sed 等的实用程序解析数据。通常这可以减少击键次数,降低用户出错率。

例如,假设需要为即将安装的 Linux 集群生成一个新的 /etc/hosts 文件。一般的做法是在 vi 或文本编辑器中添加 IP 地址。不过,可以通过使用现有 /etc/hosts 文件并将以下内容追加到此文件来实现。在命令行上运行:

P=1; for i in $(seq -w 200); do echo "192.168.99.$P n$i"; P=$(expr $P + 1);

done >>/etc/hosts

200 个主机名(n001 到 n200)将由 IP 地址(192.168.99.1 到 192.168.99.200)来创建。手动填充这样的文件有可能会创建重复的 IP 地址或主机名,因此这是使用内置命令行消除用户错误的好例子。请注意,这是在 bash shell(大多数 Linux 发行版的默认值)内完成的。

再举一个例子,假设要检查 Linux 集群中的各个计算节点中的内存大小是否一样。通常,拥有一个发行版或类似的 shell 是最好的。但是为了演示,以下使用 SSH。

假设 SSH 设置为不使用密码验证。然后运行:

for num in $(seq -w 200); do ssh n$num free -tm | grep Mem | awk '{print $2}';

done | sort | uniq

这样的命令行相当简洁。(如果在其中放入正则表达式情况会更糟)。让我们对它进行细分,详细讨论各部分。

首先从 001 循环到 200。使用 seq 命令的 -w 选项在前面填充 0。然后替换 num 变量,创建通过 SSH 连接的主机。有了目标主机后,向它发出命令。本例中是:

free -m | grep Mem | awk '{print $2}'

这个命令的意思是:

使用 free 命令获取以兆字节为单位的内存大小。 获取这个命令的结果,并使用 grep 获取包含字符串 Mem 的行。 获取那一行并使用 awk 输出第二个字段,它是节点中的总内存。 在每个节点上执行这个操作。

在每个节点上执行命令后,200 个节点的整个输出就传送(|d)到 sort 命令,以对所有内存值进行排序。

最后,使用 uniq 命令消除重复项。这个命令会导致以下情况中的一种:

如果所有节点(n001 到 n200)拥有相同的内存大小,则只显示一个数字。这个数字就是每个操作系统看到的内存大小。 如果节点内存大小不同,将会看到几个内存大小的值。 最后,如果某个节点上的 SSH 出现故障,则会看到一些错误消息。 这个命令并不是完美无缺的。如果发现与预期不同的内存值,您就不知道是哪一个节点出了问题,或者有多少个节点。为此需要发出另一个命令。

这个技巧提供了一种查看某些内容的快速方式,而且如果发生错误,您可以立刻知道。其价值在于快速检查。

有些软件会向控制台输出错误消息,而控制台不一定会显示在 SHH 会话中。使用 vcs 设备可以进行检查。在 SSH 会话中,在远程服务器 # cat /dev/vcs1 上运行以下命令。这将显示第一个控制台中的内容。也可以使用 2、3 等查看其他虚拟终端。如果某个用户在远程系统上输入,您将看到他输入的内容。

在大多数数据场中,使用远程终端服务器、KVM 甚至 Serial Over LAN 是查看这类信息的最好方式;它也提供了带外查看功能的一些好处。使用 vcs 设备能够提供一种快速带内方法,这能节省去机房查看控制台的时间。

在 技巧 8 中,介绍了一个使用命令行获取有关系统中总内存信息的例子。在这个技巧中,我将介绍几个其他方法,用于从需要进行验证、故障诊断或给予远程支持的系统收集重要信息。

首先,收集关于处理器的信息。通过以下命令很容易实现:

cat /proc/cpuinfo 。

这个命令给出关于处理器的速度、数量和型号的信息。在许多情况下使用 grep 可以得到需要的值。

我经常做的检查是确定系统中处理器的数量。因此,如果我买了一台带双核处理器的四核服务器,我可以运行以下命令:

cat /proc/cpuinfo | grep processor | wc -l 。

然后我看到值应该是 8。如果不是,我会打电话给供应商,让他们给我派送另一台处理器。

我需要的另一条信息是磁盘信息。可以使用 df 命令获得。我总是添加 -h 标记,以便看到以十亿字节或兆字节为单位的输出。# df -h 还会显示磁盘的分区情况。

列表最后是查看系统固件的方式 —— 一个获取 BIOS 级别和 NIC 上的固件信息的方法。

要检查 BIOS 版本,可以运行 dmidecode 命令。遗憾的是,不能轻易使用 grep 获取信息,所以这不是一个很有效的方法。对于我的 Lenovo T61 laptop,输出如下:

dmidecode | less

... BIOS Information Vendor: LENOVO Version: 7LET52WW (1.22 ) Release Date: 08/27/2007 ...

这比重启机器并查看 POST 输出有效得多。

要检查以太网适配器的驱动程序和固件版本,请运行 ethtool:

ethtool -i eth0

driver: e1000 version: 7.3.20-k2-NAPI firmware-version: 0.3-0

我来回答
回答2个
时间排序
认可量排序

scherub

0个粉丝

0

问答

0

专栏

0

资料

scherub 2013-06-21 20:17:54
认可0
终于抢到沙发了

david

33个粉丝

368

问答

253

专栏

229

资料

david 2013-06-21 21:53:27
认可0
[quote]scherub 发表于 2013-6-21 20:17 [url=forum.php?mod=redirect&goto=findpost&pid=3224&ptid=1496][img]static/image/common/back.gif[/img][/url]
终于抢到沙发了[/quote]

额 这个不用抢吧 哈哈。
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区