码迷,mamicode.com
首页 > 其他好文 > 详细

阿里云服务器自动化运维小试

时间:2017-01-03 19:10:35      阅读:629      评论:0      收藏:0      [点我收藏+]

标签:scribe   sum   top   document   sof   com   工具   lan   help   

想运行一个比较大的任务,需要很强的CPU和内存,自己老笔记本跑不动。在阿里云上租一个Ubuntu服务器,但是希望任务结束后服务器实例自动删除,要不半夜时分任务跑完了,第二天早上再回收...... 心疼 :)

做了些尝试,初步达成目的,记录如下,有些踩过的坑供借鉴。

环境

  • 管理服务器:已经有了一个云服务器(Ubuntu),1 CPU 2G RAM 免费半年的那种,根本不能跑我的任务,但是可以用做控制台。我下面的操作都是在这台机器上发出的。
  • 工作服务器:真正干活的云服务器(4核CPU, 16G RAM, 80G HD) 是手工申请的。应该可以自动申请(aliyuncli ecs CreateInstance),但这不是我的需求重点,我关心的是自动stop, delete. 以后也许有机会把创建也自动化。
  • OSS 网盘: 90+G 的数据存在 OSS上,需要从工作服务器上读取,处理后的结果也会保存在这里,因为工作服务器会被销毁。

步骤

  1. 在管理服务器上安装 Aliyun 命令行工具 和 SDK。基本安装比较简单,按照文档做就可以,但是特别注意,在Ubuntu下最后要手工把安装包copy到系统位置,否则aliyuncli 找不到可用命令。这是我折腾几个小时,提交工单后得到答案
  2. 在管理服务器上安装,测试 ossfs。目的是把oss 上的大文件mount 成为工作服务器上的某个目录。
    1. ossfs 挂载命令是 ossfs bucket_name /mnt_point -ourl=http://oss_region.
    2. 这里要注意url,我开始总是mount不上, 第一不能包括bucket name; 第二,对于在VPC中的云服务器,url 需要特殊写法,比如vpc100-oss-cn-hangzhou.aliyuncs.com,内网的url 是不通的,外网的也不稳定。详细的region 列表在这里
    3. 另外,我遇到过多次ossfs 命令 hang在那里不返回,其实开另外一个ssh窗口发现命令已经成功,可以访问挂载的内容,但ossfs 就是不返回。可以在ossfs 命令最后加上 -f -d 看调试输出。
    4. 因为我的oss有很大空间,我试过 ossfs 一个bucket 到 /tmp。但是一旦这么做,在/tmp做一点操作就会hang住,gunzip, df -h, lsof, 甚至ls /tmp 都不行,说明oss 不适合频繁密集读写。(想挂载/tmp 因为gunzip 会占用大量 /tmp空间,直到把系统盘40G撑满了,这个时候du 查不到,df -h 发现空间没了,lsof |grep deleted 发现都在 /tmp 下面,没有释放)。 
  3. 最后使用了两个 shell 脚本完成了任务。第一个脚本总控(provision 工作服务器,最后kill it),第二个脚本发送到工作服务器,在上面运行做那个费力的任务。
    1. 控制脚本。
    2. 整个脚本只需要输入一次远程服务器密码,scp 的几个文件是给ossfs 用的
# local shell
export ESC_ID=i-xxxxxxxxx
export set ESC_NAME=ali_ecs

cat /root/.ssh/id_rsa.pub | ssh root@$ESC_NAME mkdir -p .ssh; cat >> .ssh/authorized_keys
# config for osscmd
# scp /root/.osscredentials root@$ESC_NAME:/root
# config for ossfs
scp /etc/passwd-ossfs root@$ESC_NAME:/etc

# worker shell
scp /root/remoteAction.sh root@$ESC_NAME:/root echo $(hostname) echo ------------------------- ssh root@$ESC_NAME chmod +x /root/remoteAction.sh; /root/remoteAction.sh echo ------------------------- aliyuncli ecs StopInstance --InstanceId $ESC_ID sleep 30 aliyuncli ecs DeleteInstance --InstanceId $ESC_ID sleep 10 aliyuncli ecs DescribeInstanceAttribute --InstanceId $ESC_ID

 

worker shell. remoteAction.sh

apt-get update
cd /root

# ---------------------
# install osscmd
# wget -O osscmd.zip https://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/internal/oss/0.0.4/assets/sdk/OSS_Python_API_20160419.zip?spm=5176.doc32171.2.2.cRTWFj&file=OSS_Python_API_20160419.zip
# apt-get -y install unzip
# unzip osscmd.zip
# rm *.zip


# ---------------------
# install ossfs
wget -O ossfs.deb http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/32196/cn_zh/1481699531936/ossfs_1.80.0_ubuntu14.04_amd64.deb?spm=5176.doc32196.2.1.kxKrKX&file=ossfs_1.80.0_ubuntu14.04_amd64.deb

# -y assume yes
apt-get -y install gdebi-core

# -n --non-interactive
gdebi -n ossfs.deb

mkdir /mnt/gene
ossfs bob-backup /mnt/gene -ourl=http://vpc100-oss-cn-beijing.aliyuncs.com

# ---------------------
# run my big job 

cd /mnt/gene/bwa
sleep 1000 #my big job :)

总结

除了以上步骤,还有其他的自动化的方法值得尝试:

  • docker machine + ESC driver. 一旦做好镜像, commit之后就不用每次安装ossfs了,虽然安装也很快。但是在现有的云服务器上运行 curl下载docker machine 总超时,懒得折腾,先放下了。
  • Airflow, celery worker。 如果任务非常复杂,值得去尝试。
  • 我只有一台机器要管理,ansible 给适合多任意多台机器重复管理步骤,所以就没用。以后也许可以写playbook 代替shell 脚本完做这件事。

阿里云服务器自动化运维小试

标签:scribe   sum   top   document   sof   com   工具   lan   help   

原文地址:http://www.cnblogs.com/bob-dong/p/6245136.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!