一、实验环境
三台centos7.3
角色集合:Nginx httpd MySQL
ansible:
172.17.250.200
Nginx:
172.17.250.201
172.17.250.211
httpd:
172.17.250.222
MySQL:
172.17.250.111
二、下载安装ansible
修改配置文件定义主机组
vim /etc/ansible/hosts
[webservers]
172.17.250.201
172.17.250.211
[MySQL]
172.17.250.111
[httpd]
172.17.250.222
三、免密登录
虽然ansible支持其他主机认证方式,但是我们最常用的的还是基于秘钥的认证:
1、首先生成秘钥
ssh-keygen -t rsa -P ‘’
2、然后向主机分发秘钥:
ssh-copy-id root@ # @后面跟主机名或者IP地址
四、ansible自动安装Nginx
1、在roles目录下生成对应的目录结构
mkdir -pv ./{nginx,mysql,httpd}/{files,templates,vars,tasks,handlers,meta,default}
2、准备Nginx的配置文件模板 后缀必须是.j2
cp /etc/nginx/nginnx.conf /temp/nginx.conf.j2
vim /temp/nginx.conf.j2
3、在各自files目录下存放用于安装的rpm包以Nginx为例。如果被安装的服务器可以链接yum仓库 这里可以不写,在tasks文件下的main.yml不用写cp段
nginx-1.10.2-1.el7.ngx.x86_64.rpm
4、定义/tasks/main.yml的配置文件
- name: cp
copy: src=nginx-1.10.2-1.el7.ngx.x86_64.rpm dest=/tmp/nginx-1.10.2- 1.el7.ngx.x86_64.rpm ## 如果使用yum源安装不需要这一字段
- name: install
yum: name=/tmp/nginx-1.10.2-1.el7.ngx.x86_64.rpm state=latest ## 如果使用yum 源安装红色字段直接写服务名
- name: conf
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf ## 模板需要写绝对路径
tags: nginxconf
notify: new conf to reload ## 模板发生改变会触发动作
- name: start service
service: name=nginx state=started enabled=true
5、修改变量文件
vim vars/main.yml 添加变量
nginx_port: "8888" ## 模板中使用的变量
6、定义handlers文件
vim handlers/main.ym
- name: new conf to reload
service: name=nginx state=restarted ##触发的动作
7、定义/etc/ansible/nginx.yml的playbook文件
- hosts: webservers ## 与ansable hosts 文件中定义的主机组名相同
remote_user: root
roles:
- nginx
同理配置其他role,同一角色的主机放在一个主机组8 运行
roles就是通过分别将变量(vars)、文件(file)、任务(tasks)、模块(modules)及处理器(handlers)放置于单独的目录中,并可以便捷地include它们的一种机制。
files/:存储由copy或script等模块调用的文件;
tasks/:此目录中至少应该有一个名为main.yml的文件,用于定义各task;其它的文件需要由main.yml进行“包含”调用;
handlers/:此目录中至少应该有一个名为main.yml的文件,用于定义各handler;其它的文件需要由main.yml进行“包含”调用;
vars/:此目录中至少应该有一个名为main.yml的文件,用于定义各variable;其它的文件需要由main.yml进行“包含”调用;
templates/:存储由template模块调用的模板文本;
meta/:此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的文件需要由main.yml进行“包含”调用;
default/:此目录中至少应该有一个名为main.yml的文件,用于设定默认变量;