SVN化的WEB目录更新方案以及管理服务器群的PSSH并行工具的使用
2012-07-09 16:31
561 查看
1,Foreword--前言
对于系统管理员来说,大量服务器上操作相同的命令是不可避免的,但是这种工作重复枯燥,而且容易出错,尤其在文件同步问题上,对于网站系统来讲,一般往往是多机互备的模式,文件需要大量的同步工作,同时要控制版本问题,及时做好备份,我们目前初步定了一个方案,版本控制采用SVN的方式,分发工具我们采用pssh
2,Description--SVN以及PSSH介绍
SVN就不多说了,大家网上搜索资料,很多,这里面主要介绍PSSH工具,pssh是一个简单的字符界面并发向多个服务器发送指令进行执行的工具。适合一次性向集群大量服务器发送相同指令(并观察输出)。
如果需要图形界面的话,需要采用 ClusterSSH,比较简陋。
官方的主页为:http://code.google.com/p/parallel-ssh/
PSSH是个命令集合,主要常用的这么几条:
3,Request--需求描述
我们网站经常需要更新一些内容,大多数以专题的形式存在,往常的操作,需要将本地文件配置好后,传到服务器上,那么对于一两台机器来说,还能接受操作的重复度,但是随着网站规模的扩大,那么急需一个并行处理的工具,我们采用了上面所说的PSSH工具。
4,Practice--步骤
4.1 SVN搭建
SVN搭建就不做过多的描述了,可以参见我以前写的一篇SVN文档。
CentOS下的搭建大同小异。
4.2 PSSH安装
下载PSSH安装包,地址:点击打开链接
4.3 测试安装
终端中,输入pssh查看是否有命令提示。
4.4 PSSH使用前的问题
PSSH是个自动执行工具,所以会有与远程主机交互的问题,所以要能无需密码访问远程主机。
这里面涉及公钥私钥的一些密码学的概念,有兴趣的可以自行搜索一下。
我们现在只是运用一下生成工具。
命令如下:
我们可以用ssh命令登录一下两台客户端,看一下是否需要输入密码,如果直接登录到系统里面,表明OK了。
4.5 基本的PSSH使用指南
这里附上一些有用的链接,1,老版本的官方手册:2,点击打开链接
截图一个,有不同需求的可以参见手册
同时提醒一下,PNUKE命令可是很强大的一个命令呢。
4.6 PSSH 命令格式
4.7 实际运用
4.7.1 SVN基线库导入
要用SVN就要有初始库,我们选择将现网的版本作为初始库。
命令:svn import http://192.168.100.1/svn/path/ -m "inital version" --username admin --password admin /web/doc/path/
注:-m参数不能丢,否则会报错,最后的路径是网站专题的存放路径。
初始导入的时候,遇到了些问题,参见后面的问题解决。
4.7.2 检测版本库是否正常
在客户端checkout一下,并更新,在实际的应用出现了不少问题,包括文件locked,无法提交等等问题,可以参见我上篇所写的文章。确认无误后进行下一步。
4.7.3 在客户端导出版本
正常情况下,应该采用svn update命令,但是作为初始版本导入版本库中,导入的文件不是工作副本,所以你是无法update的,所以需要检出,做好备份后,命令:svn co http://192.168.100.1/svn/path/ --username admin --password admin /web/doc/path/
这样保证了,WEB目录中是工作副本,以后直接update 就可以了。
4.7.4 工作PSSH脚本
我们目前用脚本的方式运作,内容如下(uptopics.sh):
4.8 结束
到此,基本上所有的配置过程就结束了,经过测试,此方案是实际可行并成功的,实际中的客户端远多于两台,大大减轻了文件同步和版本控制的难题。
有人提到用SVN HOOK的问题,确实如果你的SVN服务器在WEB服务器上,并且只有一台,那么可以,因为SVN HOOK方式是不支持远程的!
4.9 进一步
可以看到我们整个过程还是有人工介入的,起码SH脚本是要手工去执行的,能不能在自动话一些呢?这是我们下一步要解决的问题。
5.问题解决
在整个实施过程中,在SVN和PSSH 中遇到了很多问题,列举解决方法如下:
5.1 import 的时候出现“条目从本地编码转换到UTF8失败”
分析:这个问题网上的答案基本上都是不对的。
解决方法:往往原因是由于你的导入库中存在乱码文件名,所以应该进入提示的目录下,删除乱码文件,就可以了。
5.2 PSSH 执行提示ERROR CODE 1
分析:提示错误1,往往是命令本身的问题,即在客户端执行错误,或者无法执行;原因多种多样,比如用户权限,命令权限,有交互,需要用户输入等等,都可能导致CODE 1问题的出现。
解决方法:首先将要执行的命令放在客户端执行一遍,确认没有问题后,写入脚本,同时注意运行命令时候的用户,以及权限问题。
5.3 SVN CO 提示有同名目录
解决方法:这个问题是由于SVN CO的时候如果本地存在同名文件夹,报错,SVN不会覆盖,所以CO命令是无法写入脚本进行同步的,必须用UPDATE。
5.4 SVN UPDATE 提示“跳过 某某 路径”
分析:这个问题比较奇怪,有时候你在客户端执行的很好,但是写入脚本就提示这个问题,这个问题也是我们正式部署的时候遇到的比较头疼的问题,后来发现大致有两种情况:
a,这种情况比较容易解决,主要是你的SVN UPDATE命令中的更新路径是错的!!所以查不到工作副本,自然跳过了,这中解决方法就是找到正确的路径即可。
b,这种情况比较蛋疼,在客户端执行没有任何问题,放入脚本既有问题,看了处在脚本的问题上,但是经过多次实验,依然灭有解决。在网上搜索了一圈未找到解决方法,后来这篇文章提示了我,
原来的脚本是:
5.5 PSSH 执行报pssh Timed out, Killed by signal 9错误
分析:一看是看到这个错误,有点蒙,这是怎么回事?进程被杀了,命令好像没有执行完毕,后来在上面提及的官方文档中发现了问题的关键所在;
-t参数,这个参数是控制命令的运行时间的,正常情况下,如果省略这个参数,那么命令的默认超期时间是60S,所以如果你运行SVN CO这样的命令的话,很容易超出时间,加上-t参数就可了。
注意:PSSH命令有默认超期时间,但是PSCP是没有这个问题的。
对于系统管理员来说,大量服务器上操作相同的命令是不可避免的,但是这种工作重复枯燥,而且容易出错,尤其在文件同步问题上,对于网站系统来讲,一般往往是多机互备的模式,文件需要大量的同步工作,同时要控制版本问题,及时做好备份,我们目前初步定了一个方案,版本控制采用SVN的方式,分发工具我们采用pssh
2,Description--SVN以及PSSH介绍
SVN就不多说了,大家网上搜索资料,很多,这里面主要介绍PSSH工具,pssh是一个简单的字符界面并发向多个服务器发送指令进行执行的工具。适合一次性向集群大量服务器发送相同指令(并观察输出)。
如果需要图形界面的话,需要采用 ClusterSSH,比较简陋。
官方的主页为:http://code.google.com/p/parallel-ssh/
PSSH是个命令集合,主要常用的这么几条:
/usr/bin/pscp //把文件并行的复制到多个主机上 /usr/bin/pssh-askpass /usr/bin/pslurp //把文件并行的从多个远程主机复制到中心主机上 /usr/bin/pssh //在多个主机上并行的运行命令 /usr/bin/pnuke //并行的在多个远程主机上杀死进程 /usr/bin/prsync //通过rsync协议把文件高效的并行复制到各个主机上
3,Request--需求描述
我们网站经常需要更新一些内容,大多数以专题的形式存在,往常的操作,需要将本地文件配置好后,传到服务器上,那么对于一两台机器来说,还能接受操作的重复度,但是随着网站规模的扩大,那么急需一个并行处理的工具,我们采用了上面所说的PSSH工具。
测试环境: 两台客户机:192.168.100.2,192.168.100.3 一台服务器:192.168.100.1 部署SVN,PSSH 方案:在其中一台服务器上搭建SVN服务器,将本地机器和专题服务器都做为客户端。分别CHECKOUT版本到各个客户端,以后更新,在本地机器上做SVNADD,更新至SVN服务器,再用PSSH分发到各个前端服务器上。
4,Practice--步骤
4.1 SVN搭建
SVN搭建就不做过多的描述了,可以参见我以前写的一篇SVN文档。
CentOS下的搭建大同小异。
4.2 PSSH安装
下载PSSH安装包,地址:点击打开链接
解压后: tar -vxf pssh-version.tar.gz cd pssh-version python setup.py build python setup.py install注:需要python环境,因为是用python开发的。
4.3 测试安装
终端中,输入pssh查看是否有命令提示。
4.4 PSSH使用前的问题
PSSH是个自动执行工具,所以会有与远程主机交互的问题,所以要能无需密码访问远程主机。
这里面涉及公钥私钥的一些密码学的概念,有兴趣的可以自行搜索一下。
我们现在只是运用一下生成工具。
命令如下:
#ssh-keygen #ssh-copy-id -i /root/.ssh/id_rsa.pub root@ 192.168.100.2 #ssh-copy-id -i /root/.ssh/id_rsa.pub root@ 192.168.100.3执行完之后提示相关机器已经验证
我们可以用ssh命令登录一下两台客户端,看一下是否需要输入密码,如果直接登录到系统里面,表明OK了。
4.5 基本的PSSH使用指南
这里附上一些有用的链接,1,老版本的官方手册:2,点击打开链接
截图一个,有不同需求的可以参见手册
同时提醒一下,PNUKE命令可是很强大的一个命令呢。
4.6 PSSH 命令格式
pssh -h host.list -l root uptime 注释:-h ------hosts.list文件就是一个文本文件,输入客户端的IP地址就可以了,一个主机一行,不需要额外分隔符。 -l ----------- 这个是指定登录客户端的用户名称 uptime---------在客户端上执行的命令 成功的话一般会返回如下结果: [1] 15:27:43 [SUCCESS] 192.168.100.2 [1] 15:27:43 [SUCCESS] 192.168.100.3命令的返回状态你也会看到,同时,你可以指定-o参数将返回结果输出到某个文件中。
4.7 实际运用
4.7.1 SVN基线库导入
要用SVN就要有初始库,我们选择将现网的版本作为初始库。
命令:svn import http://192.168.100.1/svn/path/ -m "inital version" --username admin --password admin /web/doc/path/
注:-m参数不能丢,否则会报错,最后的路径是网站专题的存放路径。
初始导入的时候,遇到了些问题,参见后面的问题解决。
4.7.2 检测版本库是否正常
在客户端checkout一下,并更新,在实际的应用出现了不少问题,包括文件locked,无法提交等等问题,可以参见我上篇所写的文章。确认无误后进行下一步。
4.7.3 在客户端导出版本
正常情况下,应该采用svn update命令,但是作为初始版本导入版本库中,导入的文件不是工作副本,所以你是无法update的,所以需要检出,做好备份后,命令:svn co http://192.168.100.1/svn/path/ --username admin --password admin /web/doc/path/
这样保证了,WEB目录中是工作副本,以后直接update 就可以了。
4.7.4 工作PSSH脚本
我们目前用脚本的方式运作,内容如下(uptopics.sh):
pssh -h host.list -t 10000 -l root -P "svn update /web/path/ --username admin --password admin"host.list为客户端列表,内容为:
192.168.100.2 192.168.100.3这里面有-t参数,可以参加第五部分的错误解决。
4.8 结束
到此,基本上所有的配置过程就结束了,经过测试,此方案是实际可行并成功的,实际中的客户端远多于两台,大大减轻了文件同步和版本控制的难题。
有人提到用SVN HOOK的问题,确实如果你的SVN服务器在WEB服务器上,并且只有一台,那么可以,因为SVN HOOK方式是不支持远程的!
4.9 进一步
可以看到我们整个过程还是有人工介入的,起码SH脚本是要手工去执行的,能不能在自动话一些呢?这是我们下一步要解决的问题。
5.问题解决
在整个实施过程中,在SVN和PSSH 中遇到了很多问题,列举解决方法如下:
5.1 import 的时候出现“条目从本地编码转换到UTF8失败”
分析:这个问题网上的答案基本上都是不对的。
解决方法:往往原因是由于你的导入库中存在乱码文件名,所以应该进入提示的目录下,删除乱码文件,就可以了。
5.2 PSSH 执行提示ERROR CODE 1
分析:提示错误1,往往是命令本身的问题,即在客户端执行错误,或者无法执行;原因多种多样,比如用户权限,命令权限,有交互,需要用户输入等等,都可能导致CODE 1问题的出现。
解决方法:首先将要执行的命令放在客户端执行一遍,确认没有问题后,写入脚本,同时注意运行命令时候的用户,以及权限问题。
5.3 SVN CO 提示有同名目录
解决方法:这个问题是由于SVN CO的时候如果本地存在同名文件夹,报错,SVN不会覆盖,所以CO命令是无法写入脚本进行同步的,必须用UPDATE。
5.4 SVN UPDATE 提示“跳过 某某 路径”
分析:这个问题比较奇怪,有时候你在客户端执行的很好,但是写入脚本就提示这个问题,这个问题也是我们正式部署的时候遇到的比较头疼的问题,后来发现大致有两种情况:
a,这种情况比较容易解决,主要是你的SVN UPDATE命令中的更新路径是错的!!所以查不到工作副本,自然跳过了,这中解决方法就是找到正确的路径即可。
b,这种情况比较蛋疼,在客户端执行没有任何问题,放入脚本既有问题,看了处在脚本的问题上,但是经过多次实验,依然灭有解决。在网上搜索了一圈未找到解决方法,后来这篇文章提示了我,
原来的脚本是:
pssh -h host.list -t 10000 -l root -P svn update /web/path/ --username admin --password admin看到可能是由于命令中格式空格的问题,我修改未这样,并且注意了命令中空格的数量‘
pssh -h host.list -t 10000 -l root -P "svn update /web/path/ --username admin --password admin"再次执行就没有报错了,看了加上双引号,注意空格,尤其是运行有多个参数的命令时候,尤为要注意,多试一下,尤其是涉及文件路径的,往往容易出错,比较,有时候把路径放在命令最后,往往能解决一下意想不到的错误。
5.5 PSSH 执行报pssh Timed out, Killed by signal 9错误
分析:一看是看到这个错误,有点蒙,这是怎么回事?进程被杀了,命令好像没有执行完毕,后来在上面提及的官方文档中发现了问题的关键所在;
-t参数,这个参数是控制命令的运行时间的,正常情况下,如果省略这个参数,那么命令的默认超期时间是60S,所以如果你运行SVN CO这样的命令的话,很容易超出时间,加上-t参数就可了。
注意:PSSH命令有默认超期时间,但是PSCP是没有这个问题的。
相关文章推荐
- NATApp内网映射工具使用方法以及Tomcat自建本地web服务
- Windows RabbitMQ 镜像队列 (高可用性、一台宕机自动切换另一台) 使用 RabbitMQ 自带的Web 管理工具
- Web前端构建工具版本号管理方案思考
- 使用Jenkins启动maven作为项目构建管理工具的web项目
- 无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer、Windows服务器管理工具或NET START命令启动它的解决
- kubenetes中指定web服务器使用的数据库(集群配置管理方案--ConfigMap)
- 使用交互式shell脚本实现对DNS服务的管理以及启动
- 使用 ASMCMD 工具管理ASM目录及文件
- linux集群批量管理工具parallel-ssh(pssh)的安装与使用
- SVN 使用hooks 自动更新到远程的web目录下
- Windows Azure真实案例:GXS --开发者提升了灵活性,使用基于Web的供应链管理工具降低花费
- 使用SOAP开发java web服务--Axis开发方案
- 已禁用对分布式事务管理器(MSDTC)的网络访问。请使用组件服务管理工具启用 DTC 以便在 MSDTC 安全配置中进行网络访问。 与基础事务管理器的通信失败。 .net 代码里 写事务代码
- 在微软的官方网站上看到的--SQL Server 本机 Web服务的使用方案!
- 使用Jenkins启动maven作为项目构建管理工具的web项目
- 工具链无效。新 App 和 App 更新必须使用公共(正式)版 Xcode 6 或更高版本以及 iOS 8 SDK 或更高版本来构建。请勿提交 Beta 版软件构建的 App。
- 使用 ASMCMD 工具管理ASM目录及文件
- 使用TFS2010管理敏捷项目生命周期-系列指南3 工作项跟踪,以及用VS2010,excel和web方式使用的区别
- Web字体工具整理,网页图标字体以及使用方法整理
- Python Web中REST API使用示例——基于云平台+云服务打造自己的在线翻译工具