运维 多台服务器同步配置文件

huacnlee · 2012年08月21日 · 最后由 wxianfeng 回复于 2013年01月06日 · 12849 次阅读

我这儿有个 Rails 应用,目前用了好几台 Web 服务器 现在有个很苦恼的事情就是,如果需要改动一些配置文件(比如 Nginx, Rails 项目的配置文件,logrotate ...),就需要手动用 scp 发送到各个服务器里面

我在想,有没有一些辅助的软件可以帮助自动同步的(非 Rsync)

要求:

  • 各个服务器直接通过 ssh 同步
  • 可指定任意目录的任意文件,甚至目录进行同步
  • 可指定某些特别的文件只同步到某几个服务器
  • 自动同步
  • 能在同步以后调用 shell 执行某些命令

我知道,现在应该有很多这类软件,求推荐一个

Puppet is what you want

#1 楼 @hooopo puppet 不用 ssh 的吧

#2 楼 @bhuztez 使用的基于 SSL 的加密链接

这个领域叫配置管理,专门做运维的会比较熟悉。

CFEngine, Puppet 和 Chef 是比较流行的选择。不过这些工具都要求自己搭建中央服务器,然后所有受控的机器主动去 pull。不符合 lz 期望的 push 架构 (如果我对 通过ssh同步 的揣测正确的话)。

Puppet 和 Chef 也可以不用这种架构 (puppet applychef-solo),不过看上去似乎不是"地道"的用法。

当然现在市面上也有 push 架构的 CM 工具出现:http://palletops.com/ http://www.nico.schottelius.org/software/cdist/

有 ops 专区么?我们一起研究一下 chef 吧.. 这些工具我都评估过了。

感觉 chef 最好。

@Saito 新增了一个运维节点

我试试看 chef

  1. 登录改为用 key 登录。
  2. 写个 bash

@huacnlee 不就是同步嘛,文件系统直接就支持,绝对是好东西。 AFS http://www.openafs.org

我也推荐 Chef,自己也是最近开始接触。

#5 楼 @Saito Chef 有 Web 管理界面么?

#11 楼 @huacnlee 官方有的。本地的 chef-server 我没用过。我现在还处在 chef-solo 的阶段。

你这个需求是 chef-server 的需求。

我是还没太明白你到底是要自动化同步 (例如一个脚本的方式,无干预) ,还是希望通过一个图形界面,来手动同步,当然要方便。

不过这两种需求,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 ?

这个星期正好写了篇用 Chef 来配置服务器的 Blog,可供楼主参考

http://easyread.ly/blogs/chef

匿名 #16 2012年09月01日

capistrano ?

17 楼 已删除

通过 SSH 批量操作的话,未必一定要上 Puppet / Chef

基于 Python 的 Ansible 更适合用来通过 SSH 批量操作,只是比较小众。

做 Ops / DevOps 的 Puppet / Chef / cfengine(Configuration Management)是必备技能;-)

#4 楼 @5long cdist 看起来不错,学习一下;-)

看来大家对分布式服务同步都有体会!

我来讲解与一下分布式同步的优点: 1)脱离 CPU+OS 2)可以通过脱离利用一些资源(数值。计算 + 云。计算<逻辑运算>) 3)通过一定人为定制系统将其兼容化(协议识别)

来个山寨版的:所有服务器上装 dropbox :)

推荐chef啊,这个实在是太方便了

chef 对 ruby 程序员还是最贴心的

chef 编译安装某些软件好慢。 刚开始学用 chef,还是拷贝现成的 cookbook 容易些。在调试过程中,看看代码,逐渐掌握如果写 recipe。

我觉得 chef 并不能完全满足需求。我就有遇到过类似问题,例如: 1.几个 rails 程序都用到 thinking-sphinx,必须在同一台服务器中指定不同的端口。那么下次再增加一个程序的时候,如何自动指定下一端口? 2.多个 app 用 redis 作为 cache 的时候,希望能指定不同的 redis db。增加一个新 app 的时候,如何得到一个新的命名空间?

我认为有必要做一个 app 集中管理这些配置文件。并且能和 capistrano,chef 结合。

fabfile.org python 的,

我觉得 puppet,chef 用起来不爽,不如 fabfile 灵活。

rsync?

这个主要以前来做双机备份的,不知道能满足你不

加上 cron 来定时同步

#25 楼 @yakjuly 很多 cookbook 确实只能弄单实例,部署很少会在一台机器部署一堆东西吧。chef 中可以通过配置和模板配合。

配置可以是个数组,每个实例对应一个数组成员,foreach 一下就好。最好在加个 definition,方便调用。比如 monit 就是个典型的需要多实例的:https://github.com/apsoto/monit/blob/master/definitions/monitrc.rb

好像是可以做成 基于 git 的。然后 其它的服务器,pull 一下就行了。

我们也有几台服务器 配置文件都是放在 git 中的,这边 push 别地 pull 就行了,很方便。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号