简介
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结点