ansible 自动部署中间件服务的核心是将安装、配置、启停、验证四环节封装为可复用、幂等、环境隔离的流程,通过 role 组织逻辑、变量控制差异、模块保障可靠性,并结合 inventory 实现多环境差异化部署。

用 Ansible 自动部署中间件服务,核心是把「安装、配置、启停、验证」四个环节封装成可复用、幂等、环境隔离的自动化流程。不靠写一堆 shell 脚本硬凑,而是用角色(Role)组织逻辑,用变量控制差异,用模块保证可靠性。
明确中间件类型与部署粒度
中间件种类多(如 Nginx、Tomcat、Redis、MySQL、Kafka),每种部署逻辑不同。先确认两点:
- 是单机部署还是集群化? 单机用一个 Playbook + Role 就够;集群需拆分节点角色(如 Kafka 的 broker/zk/controller 分组)
- 是否需要版本管理与多实例? 比如同一台机器跑两个 Redis 实例(6379/6380),就得用变量区分端口、数据目录、服务名
用 Role 结构组织部署逻辑
以部署 Tomcat 为例,标准 roles/tomcat 目录应包含:
- tasks/main.yml:主流程(解压 → 创建用户 → 配置 server.xml → 设置 systemd 服务 → 启动)
- templates/server.xml.j2:Jinja2 模板,动态注入端口、JVM 参数、应用路径
- files/apache-tomcat-9.0.85.tar.gz:二进制包(或用 get_url 模块在线下载)
- handlers/main.yml:定义重启 Tomcat 的 handler,供配置变更后触发
-
defaults/main.yml:设默认值,如
tomcat_version: "9.0.85"、tomcat_port: 8080
这样,换一个版本只需改变量,不用动任务逻辑;换一个端口,模板自动渲染,服务文件也跟着更新。
关键操作必须幂等且可验证
中间件部署最怕“执行两次崩一次”。Ansible 天然支持幂等,但得用对方式:
-
别用 command/shell 做判断,改用模块原生能力:用
unarchive解压(自带 exists 检测)、用service管理状态(state: started不会重复启动)、用copy+checksum控制配置文件更新 -
加健康检查任务:部署完成后,用
uri模块访问http://localhost:8080/manager/status或tcp_connect测端口连通性,失败则中断流程 -
避免硬编码路径和用户:用变量定义安装目录(
/opt/tomcat/{{ tomcat_version }})和运行用户(tomcat_user: "tomcat"),配合user模块创建
结合 Inventory 实现环境差异化
生产、测试、预发环境的中间件参数往往不同。通过 inventory 分层管理:
- 在
inventories/production/group_vars/all.yml中设:tomcat_jvm_opts: "-Xms2g -Xmx4g" - 在
inventories/staging/group_vars/all.yml中设:tomcat_jvm_opts: "-Xms512m -Xmx1g" - Playbook 中直接引用
{{ tomcat_jvm_opts }},无需修改代码
再配合 ansible-playbook -i inventories/production site.yml 命令切换环境,真正实现“一份代码,多套环境”。











