
服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器,集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行。
集群是一组独立的计算机(节点)的集合体,节点间通过高性能的互连网络连接;各节点除了可以作为一个单一的计算资源供交互式用户使用外,还可以协同工作并表现为一个单一的、集中的计算资源供并行计算任务使用。
1.1. 集群系统基本信息
1.2. 集群计算资源列表

2.1 PBS 简介
PBS (Protable Batch System) 是一种常用的作业管理系统,其他类似的还有 LSF 和 SLURM。
目前有两个版本:OpenPBS(开源)和PBSPro(商业)。TORQUE:基于PBS项目的开源软件,可以认为是开源的OpenPBS的改进版。主要包括:
2.2 PBS --- Torque 安装配置步骤 (来自博客)
该部分来自于博客,只为加深对PBS的理解
1、在 master(管理结点上)解压安装包
[root@master tmp]# tar zxvf torque-2.3.0.tar.gz
2、进入到解压后的文件夹
配置: ./configure--with-default-server=master
编译: make
安装: make install
[root@master torque-2.3.0]# ./configure--with-default-server=master
[root@master torque-2.3.0]# make
[root@master torque-2.3.0]# make install
- 生成后面安装计算节时需要的5个脚本文件, 作为在其它机器上安装用的安装包,运行完后会生成几个torque-package-*.sh文件
[root@master torque-2.3.0]# make packages
- 初始化配置
[root@master torque-2.3.0]# sudo ./torque.setup wangwei #设置wangwei用户为管理用户
- 设置计算节点
配置 /var/spool/torque/server_priv/nodes 文件(如果没有就手动添加),指定哪些节点作为计算节点,若管理节点不参与计算则去掉ww-master
ww-master np=8
ww-slave1 np=8
ww-slave2 np=8
- 这里需要说明一下,Torque主要是由三个主要部件组成
pbs_server PBS服务守护进程,负责接收作业提交,位于服务节点上
pbs_sched PBS调度守护进程,负责调度作业,位于服务节点上
pbs_mom PBS MOM守护进程, 负责监控本机并执行作业,位于所有计算节点上
# sudo pbs_server //在服务器节点执行
# sudo pbs_sched //在服务器节点执行
# sudo pbs_mom //在计算节点执行
# sudo trqauthd
主要步骤大概就这么多,不过一般也不需要自己去配置和安装。
以上所有代码均来自别人的博客
linux下,源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install)
./configure的作用是检测系统配置,生成makefile文件,以便你可以用make和make install来编译和安装程序。
./configure --prefix --with;其中--prefix指的是安装路径,--with指的是安装本文件所依赖的库文件
如果不指定prefix,则可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc。其它的资源文件放在/usr /local/share./configure是源代码安装的第一步,主要的作用是对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系,但并不是所有的tar包都是源代码的包,
你先ls,看有没有configure或者makefile文件。
如果有configure,就./configure,有很多参数,看楼下的吧。如果系统环境合适,就会生成makefile,否则会报错。
如果有makefile,就直接make,然后make install。
2.3 常用PBS命令
查看节点状态
pbsnodes (查看所有节点)
pbsnodes -l free (查看空闲节点)
pbsnodes 某节点 (查看某节点状态)
节点切换
ssh 某节点 (转到某节点)
退出节点
exit (离开节点)
查看任务运行状态
qstat (列出所有作业运行状态)
主要会包括以下几个方面信息:
- Job ID 任务ID号
- Name 任务脚本名称
- User 用户名
- Time Use 任务运行时间
- S State 任务状态
* B 只用于任务向量,表示任务向量已经开始执行
* E 任务在运行后退出
* H 任务被服务器或用户或者管理员阻塞
* Q 任务正在排队中,等待被调度运行
* R 任务正在运行
* S 任务被服务器挂起,由于一个更高优先级的任务需要当前任务的资源
* T 任务被转移到其它执行节点了
* U 由于服务器繁忙,任务被挂起
* W 任务在等待它所请求的执行时间的到来(qsub -a)
* X 只用于子任务,表示子任务完成
* C 表示程序正在被关闭,一般是程序运行错误,报错
Queue 任务执行所在队列
qstat -q (列出队列使用信息)
qstat -n (列出队列中使用的节点)
qstat -f jobid (查看jobid任务的详细信息)
提交任务到集群
qsub 文件名.pbs/.sh (提交任务)
echo "script.py" | qsub -l q batch1 -l nodes=1:ppn=2 (直接在终端设置PBS资源命令,并在此资源下提交可执行脚本)
任务挂起,释放,重新加载
qhold:挂起作业
qrls:释放挂起的作业
qrerun:重新运行作业
任务更改
qmove:将作业移动到另一个队列
qalter: 更改作业资源属性
修改pbs队列:
将任务号为JOBID的任务,转移到Batch5 队列继续排队
qalter <JOBID> -W queue=Batch5
改变cpu数量:
qalter -l nodes=1:ppn=10 <JOBID>
qalter pbs
删除任务
qdel jobid (取消任务)
2.4 qsub 提交任务
2.4.1 通过终端提交任务
echo "python script.py -i inputdir -o outdir " | qsub -q Batch1 -l nodes=1:ppn=1 -l mem=40gb -N jobname
执行script.py 脚本, 通过pbs投递任务, 任务提交到Batch1队列,所需资源为,1个节点,节点使用1个cpu, 40GB物理内存,该任务命名jobname
2.4.2 PBS通过sh脚本执行命令
例如 run.sh
#参数解析
#指定节点数目 ppn指每个节点运行的cpu数量(4个小节点,每个48个CPU)
#PBS -l nodes=1:ppn=16
#指定合并到标准输出文件中
#PBS -j oe
#设置程序运行的最大时间192小时
#PBS -l walltime=192:00:00
#指定qsub的所有环境变量都传递到批处理作业中
#PBS -V
#输出文件
#PBS -o /public/home/tang/chaim/back_info/$jobname.out
#错误输出文件
#PBS -e /public/home/tang/chaim/back_info/$jobname.err
cd PBS_O_OUTDIR
# 程序执行命令
python script.py -i inputdir -o outdir
# 执行脚本
qsub run.sh
# 制定命令开始运行的时间
qusb -a 070000 run.s #7天后运行程序,此时是处于W状态(等待状态)
qsub -a 2400 run.s #24h后运行程序
2.4.3 通过交互式的方式执行任务
[#11#Rd01@login ~]$
$qsub -I -q Batch1 -l nodes=1:ppn=1 -l mem=80gb -N jobname
qsub: waiting for job 1230615.admin to start
qsub: job 1230615.admin ready
[#1#Rd01@comput4 ~]$
$
2.5 PBS常用环境变量
Ref
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除