安装新服务器时,我通常会忘记服务器实际运行所需的某些东西。我希望在首次启动服务器并让实时用户在服务器上运行之前进行某种自动预检,以发现缺少的功能。
假设我在负载均衡器后面使用 Tomcat 或 PHP 等平台运行一个应用服务器池。该服务通常需要以下几项:
- 已安装的软件(外部程序,如 wget 或 ImageMagick 等)
- 已安装的模块(例如 libcurl、mod_rewrite、Oracle 等)
- 配置文件(例如 tnsnames、php.ini 等)
- 挂载文件系统、某处的符号链接、某些目录的特定权限
- 特定网络端口必须能够从机器访问(例如 mysql 或 http 代理)
- 特定网络端口必须在机器上可访问(这必须从另一台机器进行测试,例如 rsync 或端口 8080)
- 必须启动具体进程
- cronjobs 必须存在
我认为可以为大多数这些条件编写单元测试并在安装后在每台机器上运行它们,但我更喜欢使用更具体的工具来完成这样的任务,也许使用一种特殊的类似 shell 的语言来编写测试(鉴于测试所有内容都需要不同的工具,这将涉及运行 perl 脚本、java 程序、检查文件、权限、confic 文件中的行等)。
我应该补充一点,我不想修复缺失的项目,我只是想检查是否必须向运营同事请求额外的更改。
答案1
我们采用的方法是使用 CFengine(但 Puppet 也同样适用)基于集中配置对各个节点进行配置。CFengine 将按正确顺序强制执行机器的正确配置并持续执行,例如,如果进程停止,则将重新启动。
所有节点上都有一个脚本可用来检查多项内容(中央存储上的文件是否可读、是否能够打开与 MySQL 集群的连接等)。负载均衡器会使用此脚本进行健康检查:只有通过所有检查,节点才会返回负载均衡器期望的值,并将其标记为“启动”并允许处理流量。
答案2
您需要先记录构建过程,然后才能编写脚本来测试新系统的“就绪性”。流程文档将为您提供要验证的检查列表以及每个服务器的一致构建。Cfengine 和 puppet 是自动化构建的好方法,但要使用它们,您需要列出需要配置的所有内容。