Ansible模块——管理100台Linux的最佳实践
使用 Ansible 管理 100 台 Linux 服务器时,推荐遵循以下 最佳实践,以提升可维护性、可扩展性和安全性。以下内容结合实战经验进行总结,适用于中大型环境(如 100 台服务器):
一、基础架构设计
1. 分组与分层
使用 inventory 文件分组管理主机(建议使用 YAML 格式的 inventory,更清晰):
[webservers]
web01 ansible_host=192.168.1.10
web02 ansible_host=192.168.1.11
[dbservers]
db01 ansible_host=192.168.1.20
[prod:children]
webservers
dbservers
或 inventory.yaml:
all:
children:
webservers:
hosts:
web01:
ansible_host: 192.168.1.10
web02:
ansible_host: 192.168.1.11
dbservers:
hosts:
db01:
ansible_host: 192.168.1.20
建议: 按“业务线”、“环境(prod/dev/test)”、“服务类型”进行分组。
二、目录结构规范
(遵循官方推荐)
ansible-project/
├── inventories/
│ └── prod/
│ ├── hosts.yaml
│ └── group_vars/
│ └── all.yaml
├── roles/
│ └── nginx/
│ ├── tasks/
│ ├── templates/
│ └── vars/
├── playbooks/
│ └── deploy_nginx.yaml
├── files/
├── ansible.cfg
└── requirements.yml
使用 roles 实现模块化、重用性强的 Playbook 管理方式。
三 连接优化和性能提升
1. 配置连接参数(ansible.cfg)
[defaults]
forks = 50
timeout = 30
inventory = ./inventories/prod/hosts.yaml
remote_user = ansible
host_key_checking = False
retry_files_enabled = False
log_path = ./ansible.log
[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=60s
forks:并发数设置为 20~50,视服务器负载能力。
pipelining:提升执行效率。
ControlPersist:复用 SSH 连接,减少频繁握手。
四、变量管理规范
使用 group_vars/ 和 host_vars/ 管理配置变量。
all.yaml 中放通用配置,按需覆盖。
# group_vars/webservers.yaml
nginx_port: 80
nginx_user: www-data
五 使用 Roles 实现可复用
模块化部署
建议使用 ansible-galaxy init 创建角色目录结构。例如:
ansible-galaxy init roles/nginx
每个角色专注于一个功能,例如:
nginx
mysql
firewalld
user_manage
六、使用 Tags 精准执行任务
- name: install nginx
apt:
name: nginx
state: present
tags: install
使用时:
ansible-playbook site.yaml --tags "install"
七、使用 Vault 加密敏感信息
ansible-vault encrypt group_vars/prod/db.yaml
然后通过 --ask-vault-pass 或 --vault-password-file 解密。
八、自动化与审计
1. 启用日志记录
ansible.cfg:
log_path = ./logs/ansible.log
2. 定期巡检脚本(自动执行)
利用 crontab 或 CI/CD(如 GitLab CI)定期运行:
ansible-playbook check_system_status.yaml
九、版本控制与协作
使用 Git 管理 Playbook 和 Inventory
使用分支区分测试/生产环境
合并请求流程控制配置变更
十、安全与合规
使用最小权限原则配置 SSH 用户
使用 become 进行权限提升,不直接用 root
定期清理旧的 SSH 密钥和权限