Archive for November, 2007

rpcbind

November 26th, 2007

rpcbind

周末切换了一台文件服务器到FreeBSD。打开服务后,发现rpcbind占用非常多的CPU,非常不明白为什么他一直在哪儿rpcbind。
9110 root 1 103 0 4812K
1336K CPU3 2 800:43 48.34% rpcbind
9201 root 1 -8 0 2512K 920K CPU1 2 399:10
17.97% nfsd
9202 root 1 4 0 2512K 920K CPU2 2 155:34 6.40% nfsd

重启rpcbind,没用,刚起来没1分钟,CPU占用就又上去了。然后tcpdump抓一下udp的包
chifeng# tcpdump -i bce0 udp port 111 > tcpdump.log
然后看看那个机器发的包较多。
chifeng# awk ‘{print $3}’ tcpdump.log | sort | uniq -c | sort -nr | more
找到大概3,4台机器,跟rpcbind进程通讯的量非常大,登录过去看看,看一下状态。
3210 root      15   0     0    0    0 S 11.4  0.0  19:07.30 rpciod 
client这儿有这个进程在不停的跟主机的rpcbind联系。
[root@]# kill -9 3210
[root@]# kill -9 3210
[root@]# kill -9 3210
[root@]# kill -9 3210
死活杀不掉,难道是个僵尸进程。reboot一下之后,client哪儿正常,并且rpciod进程也自动消失,最终再在主机上抓包看,重复这般操作。在对client几度折腾之后,rpcbind占用高的问题解决,看来是客户端的rpciod进程导致的这个问题。

ZFS测试

November 23rd, 2007

ZFS

折腾了一周多时间,粗略的测试了FreeBSD7.0下的ZFS+NFS,几点体会。

0,打开ZFS的时候会报这样一句话:”WARNING: ZFS is considered to be an experimental feature in FreeBSD.” ,我要提醒,多读一遍。:)

1,直接使用下载的FreeBSD7.0 CD安装系统,配置好ZFS+NFS,然后拿3个NFS client和2个local的iozone来跑,会导系统不稳定,异常发生,一段时间后系统panic。抛出这个panic信息后,系统死掉。
“panic: kmem_malloc(114688): kmem_map too small: 417947648 total allocated cpuid=1″

2,重启后,升级src到beta3,然后重新配置kernel,继续像1那样的环境测试,结果也跟1差不多,仍然是不稳定+panic。

3,delphij老大给了一个patch,打上后重新make world&kernel,然后类似1、2那样的环境继续测试,跑了大概1天多点的时间,表现比原来好些,系统没有panic,但是仍然有异常。NFS服务非常不稳定,报如下信息。
nfs server 172.168.1.204:/tank/nfs: not responding
nfs server 172.168.1.204:/tank/nfs: not responding
nfs server 172.168.1.204:/tank/nfs: not responding
nfs server 172.168.1.204:/tank/nfs: is alive again
nfs server 172.168.1.204:/tank/nfs: not responding
nfs server 172.168.1.204:/tank/nfs: is alive again
nfs server 172.168.1.204:/tank/nfs: not responding

4,ZFS打开压缩和不打开压缩,性能相差非常明显,不过我这儿的前提是CPU性能足够好。压缩推荐使用lzjb,效果比较好。建议一定要打开压缩。

5,IO表现不行,或者是因为我的硬盘少的原因(只有3块,做的raidz1),zpool iostat看到的最大IO是124M,应该已经很高了,多数时候只10-20M左右,磕死老大跟我说的是能到100M左右。

6,网卡流量没跑起来,最高跑到几十兆,就不提了。看看我另外一台生产服务器(FreeBSD6.2)上的流量,就知道偶为啥不提了,:D。
if_bce0-day.png

结论: 鉴于稳定性和性能上的考虑,暂时不考虑在生产服务器上采用ZFS,等到7.0 Release出来之后再测试测试再说。

大小不同的硬盘做ZFS分区

November 16th, 2007

比如我的3块SAS硬盘,2块300G的,1块73G的。创建了一个raidz分区后,总空间大小132G,很明显他把两块300G的也当73G来使了。

chifeng# zpool create tank raidz1 da1 da2 da3
chifeng# df -ht zfs
Filesystem      Size    Used   Avail Capacity  Mounted on
tank            132G      0B    132G     0%    /tank

创建一个mirror出来,看看大小。:P
chifeng# zpool create tank mirror da1 da2
chifeng# df -ht zfs
Filesystem    Size    Used   Avail Capacity  Mounted on
tank          274G      0B    274G     0%    /tank
chifeng# zpool create tank mirror da1 da3
chifeng# df -ht zfs
Filesystem    Size    Used   Avail Capacity  Mounted on
tank           67G      0B     67G     0%    /tank

贴此blog只为证明不同大小硬盘在一起做raid的效果,仅此而已,呵呵

感冒好了

November 13th, 2007

感冒

或者是周末着凉了,周一上班觉得头晕的要命,还非常瞌睡,似乎是感冒了…..:-( 下班后去坐344,由于人非常多,挤啊挤!挤的浑身都是汗,秋裤都湿透了,貌似夏天也没出汗这么厉害过,晚上睡了一觉,今天觉得精神了很多,好像是感冒好了。。。哈哈!!
以后大家感冒了就去挤公交车吧,并且至少得找一像344路这么猛的,好歹也算一治感冒的土方,并且在我身上有效!:-P

ZFS文档

November 12th, 2007

qingran老弟发的ZFS相关文档,相当全。另外强烈推荐一个ZFS视频看看,哈哈
http://youtube.com/watch?v=o3TGM0T1CvE

ZFS介绍:
Sun 
ZFS Learning Center

http://www.opensolaris.org/os/community/zfs/whatis/
http://www.opensolaris.org/os/community/zfs/
http://www.sun.com/2004-0914/feature/
http://en.wikipedia.org/wiki/ZFS
http://blog.ccw.com.cn/article-htm-itemid-13017-type-blog.html

ZFS development on FreeBSD:
Porting
ZFS file system to FreeBSD – paper

Porting
ZFS file system to FreeBSD – slides

ZFS
in the FreeBSD base announce


ZFS howto on FreeBSD:

ZFS – Quick start
guide

Root on ZFS configuration
Tuning Guide for ZFS

Live demos of ZFS on FreeBSD:
zpool
add/replace example

ZFS
compression example

ZFS
self-healing example

ZFS
snapshot example

UFS
on ZVOL example

scp

November 9th, 2007

scp
-r      Recursively copy entire directories.

scp的-r参数是递归拷贝目录下的所有文件,偶向来对所有命令的-r参数都特别钟爱。今天在做一个scp拷贝的时候,源目录中有一个symbolic link是链接到自己的父目录的,即产生递归的symlink了。而scp处理不了这个问题,拷贝时便产生了递归现象,重复重复再重复的去拷贝这个目录到本地。终端上报了这个warning
Too many levels of symbolic links
似乎还不算傻。不过结果本来1G多点的数据,一会儿功夫拷贝出来了69G,差点没把硬盘给塞满,还好我发现的早,及时给kill -9掉。似乎05年的时候也碰到过这个问题,不过当时没在意,这次得记录一下。

解决办法: 通过nfs挂过来,用cp则没有这个问题,用rsync应该也无此问题。

教训: 偶再也不喜欢scp的-r参数了。

世上最强的uptime

November 8th, 2007

amd02:~ # uptime
  1:29am  up 347980 days 8351333:501079563,  9 users,  load average: 2.00, 2.00, 1.91

一台机器的uptime由于一个哥们改date的时候多写了一位出了问题,造成如此大的数值,在用ntpdate恢复本机date后,uptime却回不来了,找了一下,没有找到办法修改uptime,看来只有通过reboot来解决了。

查了一下,该机器对应的uptime包为coreutils-5.2.1-23.5

配置FreeBSD的automount

November 6th, 2007

折腾了2小时,才把FreeBSD的automount跑起来。:-(

打开amd
在FreeBSD下,automount进程叫amd(/etc/rc.d/amd),参数直接写在amd_flags了,也可以写到/etc/amd.conf中
amd_enable=”YES”
amd_flags=”-a /mnt/.amd_mnt -c 10 -w 5 -l syslog /home /etc/amd.map”

配置amd
由于我要挂的是home目录,而FreeBSD的/home目录又是软link到/usr/home的,所以提前要处理一下。
#unlink /home
#mkdir /home
编辑/etc/amd.map文件
*               type:=nfs;rhost:=192.168.1.142;rfs:=/export/home/;sublink:=${key}
这样,当你在访问本机的/home/chifeng/目录的时候,就会自动的把192.168.1.142上面对应的/export/home/chifeng/挂过来作为我的根目录。但是实际上/home/chifeng只是amd进程对/mnt/.amd_mnt/192.168.1.142/export/home/chifeng/做的一个软链接,真正的挂载点是后者。

启动amd
#/etc/rc.d/amd start

更强大的配置可以用/etc/amd.conf,man一下amd.conf和amd吧。我就看了半天!

自动化部署<0>

November 2nd, 2007

自动化部署<0>

打算记录一下近些时间折腾的自动化部署相关的东西,从这儿开始吧。

关键字:
PXE,DHCP,TFTP,NFS/HTTP/FTP

搞自动化部署,得先弄明白这几个关键字的含义,才能继续做。我的理解是:

PXE: Preboot Execution Environment
远程启动技术,说白了就是让系统通过网卡来启动的一个协议,需要网卡支持PXE,目前基本上很难找到不支持的。

DHCP:Dynamic Host Configuration Protocol
经常都用的,动态分配IP地址的协议。

TFTP:Trivial File Transfer Protocol
简单文件传输协议,比ftp简单的多,基本上只支持上传和下载。

NFS/HTTP/FTP
就不废话了。

关于写一个munin插件iostat的记录

November 1st, 2007

仅记录一下过程

0,用上了munin之后,发觉在FreeBSD下不能统计到iostat状态,便发了mail到munin-users@lists.sourceforge.net,Nicolai老大给了一个用在NetBSD下的脚本,我改了一下,可以用了,但是发现一个问题,就是iostat在FreeBSD下默认第一行输出的是一个从开机到现在的平均io值,而不是一个当前值,这不符合munin统计的要求。折腾了半天,仍然没有能够找到一个合适的命令来得到当前的iostat值。最后写了个脚本把这个拿到,放到一个临时文件,然后再通过另外一个脚本来得到这个值,看似可以了。便作罢。

1,过了2天,看到Pierre说他写了一个脚本来统计FreeBSD下的iostat,便好奇的看了一眼,发觉也是统计的系统uptime时间的平均值,便回了封邮件进行反驳。最终看起来仍然得到的不是当前值。

2,前天正好skype:delphij老大,顺便聊了这个问题,他建议我发个PR试试,发了个PR:http://www.freebsd.org/cgi/query-pr.cgi?pr=117664

3,又等了一天,Peter和John分别给我回信解释这个情况,并建议我类似bsdsar那样来做,就跟我一开始的做法差不多。呵呵,基本明白了iostat为什么要这么做,又学到了一招。

附一下邮件内容如下:
Peter
————————————————————————
This is generic, rather than amd64-specific.

I believe you misunderstand iostat.  There is no “current value” as
you desire.  There are a variety of system counters that get updated
when various events occur and iostat reports the change in those
counters over the specified interval.  The only way to determine the
system activity, averaged over two seconds, is to sample the counters,
wait two seconds, sample the counters again and reports the differences.

I suggest you start a thread on (eg) freebsd-questions explaining what
you are trying to achieve and someone there may be able to assist.

In the meantime, you might like to investigate the sysutils/bsdsar port.

John
————————————————————————
There isn’t a ‘current value’ for iostat to dump.  The kernel just keeps
running counts and iostat simulates a current value by saving the values each
time and computing a delta for each line after the first.  However, for the
first line there is no saved value so it cannot compute a delta.  Probably
you need to write your own plugin that saves the previous values and computes
deltas when queried similar to how iostat behaves.