我这儿有个 Rails 应用,目前用了好几台 Web 服务器 现在有个很苦恼的事情就是,如果需要改动一些配置文件(比如 Nginx, Rails 项目的配置文件,logrotate ...),就需要手动用 scp 发送到各个服务器里面
我在想,有没有一些辅助的软件可以帮助自动同步的(非 Rsync)
我知道,现在应该有很多这类软件,求推荐一个
这个领域叫配置管理,专门做运维的会比较熟悉。
CFEngine, Puppet 和 Chef 是比较流行的选择。不过这些工具都要求自己搭建中央服务器,然后所有受控的机器主动去 pull。不符合 lz 期望的 push 架构 (如果我对 通过ssh同步
的揣测正确的话)。
Puppet 和 Chef 也可以不用这种架构 (puppet apply
和 chef-solo
),不过看上去似乎不是"地道"的用法。
当然现在市面上也有 push 架构的 CM 工具出现:http://palletops.com/ http://www.nico.schottelius.org/software/cdist/
我是还没太明白你到底是要自动化同步 (例如一个脚本的方式,无干预) ,还是希望通过一个图形界面,来手动同步,当然要方便。
不过这两种需求,Beyond Compare 3 都可以很好的满足,如果是前者,BC 有自己的一套自动化同步脚本语言,你可以自己写脚本,然后通过 bc 命令运行脚本就自动开始同步。如果是后者,不需要脚本,但是你可以事先定义好一系列文件夹的同步过程,其中每一个过程叫做一个 Session, 其实就是一个 目录/目录
的图形化比较界面,很漂亮也很直观,支持所有的策略,你可以过滤掉所有你不想看到的文件。你甚至可以指定它同步本地的文件 1.txt 到 远程的 2.txt, 只要你指定这两个文件在比较两侧同一行对齐就是了。其他什么时间策略,修改文件策略都可以针对 Session 来设定。
最后,定义好所有的 Session, 然后你可以保存这些 Session 到一个 WorkSpace. 下次你需要同步时,指定加载这个 Workspace, 它会加载所有的 Session, 然后每一个 Session 下只需要点一下鼠标就 OK 了。
对了,BC3 是通过 ftp 协议来实现的,不过支持 SSH 以及代理。包括配置各种参数什么的。
还有就是,BC3 只有 Windows 版本和 Linux 版本.... 哈哈。
我刚刚又帮你查了下,在 Beyond Compare 3 出来之前,苹果下有个比较软件,当时堪称世界上最好的,叫做 Araxis Merge. 也是个老牌文件比较同步软件,据说功能很强大,应该也可以实现你想要的功能。不过我从没用过。还有就是这个软件死贵死贵,差不多注册个 license, 得几千块吧。
我发现大家对于文件比较,目录同步,三方合并 之类的主题很少讨论,难道大家都用 diff +patch ?
通过 SSH 批量操作的话,未必一定要上 Puppet / Chef
基于 Python 的 Ansible 更适合用来通过 SSH 批量操作,只是比较小众。
做 Ops / DevOps 的 Puppet / Chef / cfengine(Configuration Management)是必备技能;-)
我来讲解与一下分布式同步的优点: 1)脱离 CPU+OS 2)可以通过脱离利用一些资源(数值。计算 + 云。计算<逻辑运算>) 3)通过一定人为定制系统将其兼容化(协议识别)
chef 编译安装某些软件好慢。 刚开始学用 chef,还是拷贝现成的 cookbook 容易些。在调试过程中,看看代码,逐渐掌握如果写 recipe。
我觉得 chef 并不能完全满足需求。我就有遇到过类似问题,例如: 1.几个 rails 程序都用到 thinking-sphinx,必须在同一台服务器中指定不同的端口。那么下次再增加一个程序的时候,如何自动指定下一端口? 2.多个 app 用 redis 作为 cache 的时候,希望能指定不同的 redis db。增加一个新 app 的时候,如何得到一个新的命名空间?
我认为有必要做一个 app 集中管理这些配置文件。并且能和 capistrano,chef 结合。
#25 楼 @yakjuly 很多 cookbook 确实只能弄单实例,部署很少会在一台机器部署一堆东西吧。chef 中可以通过配置和模板配合。
配置可以是个数组,每个实例对应一个数组成员,foreach 一下就好。最好在加个 definition,方便调用。比如 monit
就是个典型的需要多实例的:https://github.com/apsoto/monit/blob/master/definitions/monitrc.rb