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

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

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

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

要求:

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

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

共收到 30 条回复

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

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就行了, 很方便.

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