简介

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务

Ansible的特点有:
1、不需要在部署机器上安装客户端
2、没有服务端,使用时直接执行命令即可
3、基于模块工作,可以使用任意语言对模块进行开发
4、使用yaml语言来定制编排剧本
5、可实现多级指挥
6、支持sudo
7、支持邮件、日志等多种功能

准备两台centos7主机

配置IP地址和hostname,关闭防火墙和selinux,服务器时间同步
修改/etc/hosts配置文件进行hostname和IP地址映射

hostname ip
master 192.168.29.132
node 192.168.29.133

配合ssh的免密登陆

master结点

[root@master ~]ssh-keygen #创建公钥和私钥
[root@master ~]ssh-copy-id root@node #发送公钥node

noder结点

[root@node ~]ssh-keygen #创建公钥和私钥
[root@node ~]ssh-copy-id root@master #发送公钥到master

测试验证
master结点和node结点均进行操作

[root@master ~]ssh root@master
[root@master ~]ssh root@node
[root@node ~]ssh root@master
[root@node ~]ssh root@node

安装ansible

在master结点安装ansible

[root@master ~]#yum install epel-release #安装epel源
[root@master ~]#yum makecache
[root@master ~]#yum install ansible

启动服务

[root@master ~]#systemctl start ansible
[root@master ~]#systemctl enable ansible

配置ansible

配置主机组信息

[root@master ~]vi /etc/ansible/hosts
#添加主机组的信息
[webserver]
node

创建项目文件夹

lamp/
├── httpd
│   ├── files
│   │   ├── httpd.conf
│   │   └── index.php
│   ├── handlers
│   │   └── main.yaml
│   ├── tasks
│   │   └── main.yaml
│   ├── templates
│   └── vars
│       └── main.yaml
├── mysql
│   ├── files
│   │   └── create.sh
│   ├── handlers
│   │   └── main.yaml
│   ├── tasks
│   │   └── main.yaml
│   ├── templates
│   └── vars
│       └── main.yaml
├── php
│   ├── files
│   ├── handlers
│   │   └── main.yaml
│   ├── tasks
│   │   └── main.yaml
│   ├── templates
│   └── vars
│       └── main.yaml
└── site.yaml

说明:
file:存储所需要的配置文件、脚本文件
vars:存储所需要变量文件夹
templates:模板文件夹
handlers:关键字notify所调用任务的文件夹
tasks:主函数文件夹

编写httpd角色main.yaml文件

[root@master httpd]# vi tasks/main.yaml 
#编写文件
#注意对齐和空格,不允许用tab键
---
#安装httpd
- name: install httpd
  yum: name={{ item }} state=latest
  with_items:
  - httpd
  - httpd-devel
#复制index文件到远程目录
- name: copy index.php
  copy: src=index.php dest=/var/www/html/index.php
#复制httpd配置文件到远程目录
- name: copy httpd.conf
  copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf
  #复制完成后重启httpd,会调用handler中的main.yaml
  notify: restart httpd
#启动httpd并设置开机自启动
- name: start httpd
  service: name=httpd state=started enabled=yes

编写httpd角色handler

[root@master httpd]# vi handlers/main.yaml

---
- name: restart httpd
  service: name=httpd state=restarted

编写需要传到部署机器的index.php文件

[root@master httpd]# vi files/index.php

编写mysql角色main.yaml文件

[root@master mysql]# vi tasks/main.yaml 
---
- name: install mysql
  yum: name=mysql,mysql-server state=latest

- name: start mysql
  service: name=mysqld state=started enabled=yes
#调用mysql设置和建库脚本
- name: script
  script: create.sh
[root@master lamp]# cd mysql/

编写mysql角色建库脚本

[root@master mysql]# vi files/create.sh
#!/bin/bash
mysqladmin password "your_password"
mysql -u root --password="your_password" -e  "create database if not exists mydb default charset=utf8"

编写php角色main.yaml文件

[root@master php]# vi tasks/main.yaml
---
- name: install php
  yum: name=php,php-gd,php-ldap,php-odbc,php-pear,php-xml,php-xmlrpc,php-mbstring,php-snmp,php-soap,curl,libcurl-devel,php-bcmath state=present
  notify: restart httpd

编辑playbook文件

[root@master lamp]# vi site.yaml
---
- hosts: webserver
  remote_user: root
  roles:
  - httpd
  - mysql
  - php

执行playbook文件

[root@master lamp]# ansible-playbook site.yaml

测试验证

可以查看node结点httpd,mysql,php安装情况以及通过浏览器访问node结点