Ansible部署Redis需四步:安装程序、分发配置文件(支持Jinja2变量)、启用并启动服务、设置开机自启;通过yum/apt、template、service等模块实现幂等性自动化,无需Ansible自身驻留后台。

Ansible 不是守护进程(daemon)本身,也不依赖守护进程运行。它采用“按需拉起、执行完即退出”的无状态模式,每次任务都通过 SSH 临时建立连接、传输模块、执行、回收,全程不驻留后台进程。因此,用 Ansible 部署守护进程(如 Nginx、Redis、Prometheus 等),关键在于正确配置服务定义、启动方式和开机自启策略,而非让 Ansible 自身变成守护进程。
守护进程部署的核心逻辑
部署一个守护进程,本质是四件事:安装程序、写好配置文件、启用并启动服务、确保开机自启。Ansible 通过组合多个模块完成这些步骤,且天然支持幂等性——重复运行不会导致服务重复启动或配置被覆盖。
-
安装:用
yum(RHEL/CentOS)、apt(Debian/Ubuntu)或pip模块安装二进制或包 -
配置:用
copy或template模块分发配置文件(支持 Jinja2 变量注入) -
管理服务:用
service或systemd模块控制启停、启用开机自启 -
校验:用
command+register或uri模块检查端口、进程或健康接口
典型守护进程部署示例(以 Redis 为例)
以下 playbook 片段可在任意 Linux 主机上批量部署 Redis 服务:
- name: 部署 Redis 服务
hosts: redis_servers
become: true
tasks:
- name: 安装 Redis
yum:
name: redis
state: present
<pre class="brush:php;toolbar:false;">- name: 分发自定义 redis.conf
template:
src: templates/redis.conf.j2
dest: /etc/redis.conf
owner: redis
group: redis
mode: '0644'
- name: 替换 systemd 服务文件(如需定制)
copy:
src: files/redis.service
dest: /usr/lib/systemd/system/redis.service
mode: '0644'
when: ansible_facts['distribution'] == "CentOS"
- name: 启用并启动 Redis
service:
name: redis
enabled: true
state: started
- name: 开放 Redis 端口(如使用 firewalld)
firewalld:
port: "6379/tcp"
permanent: true
state: enabled
注意:template 模块配合 .j2 文件可动态生成配置,比如根据主机角色设置 bind 地址或 requirepass;service 模块自动适配不同发行版的 init 系统(systemd/sysvinit)。
避免常见陷阱
部署守护进程时,容易忽略几个关键细节:
-
权限与用户:Redis/Nginx 等默认不以 root 运行,需确保配置文件属主、日志目录权限、服务运行用户(如
redis、nginx)已提前创建 -
SELinux 上下文:在启用 SELinux 的系统(如 RHEL/CentOS)中,复制配置或日志路径后可能需要
copy模块的setype参数或执行restorecon -
服务依赖顺序:若守护进程依赖其他服务(如数据库、NTP),应在 playbook 中明确
handlers或用wait_for模块等待依赖就绪 -
配置热重载:部分服务(如 Nginx)支持
nginx -s reload,可用command模块触发,但需判断配置语法是否有效(先nginx -t)
生产环境建议做法
面向多环境、多版本的守护进程部署,推荐结构化组织:
- 将每个守护进程封装为独立 Role(如
roles/redis),含tasks/、templates/、defaults/、vars/ - 通过
group_vars/或host_vars/控制不同集群的参数(如redis_port: 6380) - 用
tags区分阶段(install、config、start),便于调试或跳过已成功步骤 - 结合
check_mode: yes先做模拟运行,确认变更范围再真实执行
不复杂但容易忽略。











