我不再进行太多手动系统管理。我将基础架构视为可编程实体,并通过使用可自动执行配置管理,EC2节点维护等工具的系统来配置系统,将其视为此类实体。我的工具箱中的工具:
- Ruby(我最喜欢的脚本/工具语言)
- Git(版本控制)
- Opscode的Chef(用Ruby编写)(1)
- Capistrano(临时大规模维护)
- Amazon的EC2 API工具,用于实例和图像维护。
- Rightscale的AWS gem(用于EC2的Ruby绑定)
(1)-披露,我为Opscode工作。其他工具(如Reduction Lab的Puppet)填补了这一空白。
当我按照特定功能所需的方式构建节点时,我确实将AMI捆绑在一起。例如,如果要构建Rails应用服务器,则将安装所有必备软件包,以节省构建时间。
当所有其他方法均失败时,我将使用SSH登录系统。我做了很多年的手动系统管理,这真是老土了。
您是否正在使用某种形式的Windowing系统和等效的远程桌面来访问该框,还是全部使用命令行?
我不会在服务器上安装任何GUI,除非一个软件包具有依赖关系并且可以自动安装一个软件包。
在Linux世界中有与此等效的东西吗?(传输文件)
我通常会执行两种类型的文件传输/文件维护。
对于平台原生的软件包,我使用标准的软件包管理工具,例如APT或YUM。对于源代码安装(something.tar.gz),我通常通过wget下载。
配置文件通常是由Chef管理的ERB模板。
我使用SSH和SCP / SFTP手动传输文件。
您是在机器上直接进行配置更改/脚本调整吗?还是在本地框上设置了某些内容以远程编辑这些文件?还是只是简单地远程编辑它们,然后在每次保存时传输它们?
我将与管理系统有关的所有内容保留在软件控制存储库中。这是在一个或多个系统上更新配置时的典型工作流程。我从本地工作站开始。
- 从主Git存储库中提取其他人的更改。
- 在本地编辑文件(例如,更新配置文件)。
- 提交更改,推动掌握。
- 在Chef服务器(通过SSH登录)上,获取我刚刚提交的最新更改。
- 将配置部署到Chef服务器上的适当位置(为此,我使用Rake)。
- Chef客户端每隔一段时间运行一次,因此它们将每30分钟提取一次更改。如果我立即需要某些东西,可以手动运行Chef-client。
- 验证更改!
您如何在EC2和本地环境之间来回移动文件?FTP?通过VPN的某种映射驱动器?
我在EC2节点上使用的文件可能存储在几个位置。
- 厨师服务器。配置模板主要是一些小软件包。
- GitHub。我们将代码(开源项目)存储在GitHub上。EC2节点可以轻松地做到这一点(例如检查某事物的最新版本)。
- Amazon S3存储桶。有些东西存储在存储桶中。
我在EC2中做了很多工作,主要是测试环境和变更。由于工具和工作流程的影响,我将更多的时间花在了我真正关心的事情上,而不是花在处理单个文件和思考特定配置上。