Linux · 2 分钟阅读
Ansible 实战:部署 LAMP + Keepalived
2026 年视角:Keepalived 仍是双机热备的省心方案;MariaDB 已基本替代 MySQL 默认;LAMP 渐渐被 LNMP 替代,但作为教学项目够用。
目标架构
| 主机 | IP | 角色 |
|---|---|---|
| A | 192.168.50.66 | Ansible 控制节点 + Keepalived Master |
| B | 192.168.50.110 | Keepalived Backup |
| C | 192.168.50.111 | Web 1 |
| D | 192.168.50.112 | Web 2 |
| E | 192.168.50.113 | Database |
准备工作
# 控制节点
yum install -y ansible-core 2.13
# 目录结构
mkdir -p ansible-bbs/{inventory,group_vars,roles}
cd ansible-bbs
Inventory
# inventory/hosts.yml
all:
children:
lb:
hosts:
192.168.50.66:
192.168.50.110:
web:
hosts:
192.168.50.111:
192.168.50.112:
db:
hosts:
192.168.50.113:
公共配置
# group_vars/all.yml
ansible_user: root
ansible_ssh_private_key_file: ~/.ssh/id_rsa
http_port: 80
部署 Playbook
# site.yml
---
- name: 部署负载均衡
hosts: lb
become: true
tasks:
- name: 安装 keepalived 和 nginx
ansible.builtin.yum:
name:
- keepalived
- nginx
state: present
- name: 部署 Web
hosts: web
become: true
tasks:
- name: 安装 Web 三件套
ansible.builtin.yum:
name:
- httpd
- php
- php-mysqlnd
state: present
- name: 部署数据库
hosts: db
become: true
tasks:
- name: 安装 MariaDB
ansible.builtin.yum:
name: mariadb-server
state: present
跑起来:
ansible-playbook -i inventory/hosts.yml site.yml
几点工程实践
- 业务用 Role 组织,别把所有 task 塞一个 file
- Inventory 用 YAML(
inventory/hosts.yml),别用 INI - 变量走
group_vars/,环境差异靠 inventory 目录切:inventory/prod/,inventory/staging/ - 用
--check+--diff预演;生产用--limit灰度