Chinaunix首页 | 论坛 | 博客
  • 博客访问: 73959
  • 博文数量: 24
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-23 14:19
文章分类
文章存档

2008年(24)

我的朋友

分类: LINUX

2008-05-06 15:41:28

Taobao监控系统之改进——文件传输
作者:拖雷  来自: 4月22日 |  标记 - 加标签
Author:拖雷 posted on Taobao.com
在早些的时候,也包括我的书《构建Oracle高可用环境》中的16章,关于监控体系的介绍中,所有的案例都是采用scp从被监控的客户端上拷贝文件到集中分析的Monitor上,类似这样的动作,如
scp $SOURCE_FILE $MONITOR:$TARGET_FILE
当客户端不多的情况下,这么做也是没有什么问题的,而且书写简单,一直在这么用。但是,当客户端的数量上去以后,在大量并发的情况下,有的时候就会出现这样的错误:
ssh_exchange_identification: Connection closed by remote host
lost connection
查看crontab的日志,也可以看到有部分crontab调度失败:
Cron Job with pid: 2859224 Successful
Cron Job with pid: 3154900 Failed
Cron

 Job with pid: 3027512 Successful
这是因为ssh对并发的支持不是太好,当很多客户端同时传送文件的时候,可能会有部分客户端传送失败,经过研究,决定用ftp取代scp来传送文件,改写为如下:
TARGET_TMP_FILE=$TARGET_FILE`date +%Y%m%d%H%M%S`
ftp -n << !
open $MONITOR
user user pass
binary
put $SOURCE_FILE $TARGET_TMP_FILE
rename $TARGET_TMP_FILE $TARGET_FILE
bye
!
修改以后通过观察,多客户端文件同时并发传输的问题解决,查看crontab的日志,再也没有出现过crontab调度的失败。
注意,这里是先put(上传),然后再rename,这么做的好处也就是解决另外一个并发问题,如ftp被启动多次传递同样一个文件,这个文件可能被多个进程附加,而不是覆盖。而采用可变的临时文件名称(临时文件名称带时间戳标记),等上传完成之后再改名,就可以避免这种情况的发生。
其实采用临时文件

的做法,在unix/linux中也很常见的,如执行crontab -e,就可以看到类似的提示
/tmp/crontab.XXXXXwxMJF” 0L, 0C
其实它也是在/tmp下面建立了自己的临时文件,用来解决并发问题。
阅读(1062) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~