目录
Playbook在web服务器上配置httpd,在数据库服务器上配置mariadb
一、Ansible简介
-
什么是Ansible
Ansible是2013年推出的一款IT自动化和DevOps软件,目前Redhat已签署Ansible收购协议。
Ansible是一个配置管理和配置工具,类似于Chef,Puppet或Salt。其是基于Python研发,糅合了很多老运维工具的优点实现了批量操作系统配置,批量程序的部署,批量运行命令等功能。
这是一款很简单也很容易入门的部署工具,它使用SSH连接到服务器并运行配置好的任务。服务器上不用安装任何多余的软件,只需要开启ssh,所有工作都交给client端的ansible负责。
-
Ansible的组成
- Ansible Playbooks:任务集,编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是json格式的YAML文件
- Inventory:Ansible管理主机的清单
- Modules:Ansible执行命令的功能模块,多数为内置的核心模块,也支持自定义
- Plugins:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,改功能不常用
- API:供第三方程序调用的应用程序编程接口
- Ansible:此处指的是组合nventory、Modules、Plugins、API的Ansible命令工具,其为核心执行工具
-
Ansible特性
- 基于python语言实现:
- – paramiko
- – PyYAML (半结构化语言)
- – jinja2
- 其模块支持JSON等标准输出格式,可采用任何编程语言重写
- Ansible有两种模式,ad-hoc和playbook模式
-
Ansible工作流程
上图展示了Ansible组建之间的调用关系,管理员通过使用Ad-Hoc或Ansible-playbooks时,在服务器终端输入Ansible的Ad-Hoc命令集或palybook后,Ansible会遵循预先编排的规则将Playbooks逐条拆解为Play,再将paly组织成Ansible可识别的任务(Task),随后调用任务涉及的所有模块(modules)和插件(plugins),根据Inventory中定义的主机列表通过SSH将任务集以临时文件或命令的形式传输到远程客户端执行并返回执行结果,如果是临时文件,则执行完毕后自动删除。
二、Ansible安装
-
软件依赖关系(管理主机)
- 要求有Python 2.6 或 Python 2.7环境
- ansible 使用了以下模块,都需要安装:
- paramiko
- PyYAML
- Jinja2
- httplib2
- six
-
软件依赖关系(被托管主机)
- Ansible默认通过 SSH 协议管理机器,被管理主机要开启 ssh 服务,允许 ansible 主机登陆
- 在托管节点上也需要安装 Python 2.5 或以上的版本
- 如果托管节点上开启了Selinux,需要安装libselinux-python
-
Ansible安装方法一: yum 扩展源安装(推荐)
- – http://mirror.centos.org/.../.../extras/
- – yum -y install ansible
- 安装完成以后验证
- – ansible --version
-
Ansible安装方法二:pip 方式安装
- ansible 源码下载
- – git clone git://github.com/ansible/ansible.git
- – yum install python-setuptools python-devel
- – python setup.py build
- – python setup.py install
- pip 方式安装
- – pip install ansible
-
Ansible安装方法三:源码安装
- – pip,需要配置扩展镜像软件包源 extras
- – git
- yum install epel-release
- yum install git python2-pip
- – pip安装依赖模块
- pip install paramiko PyYAML Jinja2 httplib2 six
三、Ansible模式之ad-hoc
-
什么是ad-hoc模式?
ad-hoc简而言之,就是"临时命令",一般用来做一些一次性的工作,比如说在多台机器上,查看某个进程是否启动,开一个服务。ad-hoc模式使用单个模块,支持批量执行单条命令。ad-hoc命令是一种可以快速输入的命令,而且不需要保存起来的命令,相当于bash中的一句shell。
-
Ansible配置文件查找顺序
- – 首先检测 ANSIBLE_CONFIG 变量定义的配置文件
- – 其次检查当前目录下的 ./ansible.cfg 文件
- – 再次检查当前用户家目录下 ~/ansible.cfg 文件
- – 最后检查默认配置文件 /etc/ansible/ansible.cfg
-
编辑hosts、ansible.cfg 配置文件
- 首先编辑 /etc/ansible/hosts 文件,写入主机的地址。
- 格式:
- [组名称]
- 主机名称或者ip地址,登录用户名,密码、端口等信息
- 测试
- – ansible [组名称] --list-hosts
-
inventory 参数说明
- – ansible_ssh_host //– 将要连接的主机名。
- – ansible_ssh_port //ssh端口号
- – ansible_ssh_user //默认的 ssh 用户名
- – ansible_ssh_pass //ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
- – ansible_sudo_pass //sudo 密码(建议使用 --ask-sudo-pass)
- – ansible_sudo_exe (new in version 1.8) //sudo 命令路径(适用于1.8及以上版本)
- – ansible_connection //不主机的连接类型,比如:local, ssh 或者paramiko。Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持ControlPersist, 来判断'ssh' 方式是否可行
- – ansible_ssh_private_key_file //ssh 使用的私钥文件。适用于有多个密钥,而你不想使用SSH 代理的情况
- – ansible_shell_type //目标系统的shell类型.默认情况下,命令的执行使用 'sh'语法,可设置为 'csh' 或 其他
- – ansible_python_interpreter //目标主机的 python 路径。适用的情况: 系统中有多个Python, 或者命令路径不是"/usr/bin/python"
-
自定义配置文件
- – 创建文件夹 myansible
- – 创建配置文件 ansible.cfg
- [defaults]
- inventory = myhost
- – 配置主机文件myhosts
- [nginx]
- [web]
- web[1:2]
- [web:vars]
- ansible_ssh_user="root"
- ansible_ssh_pass="pwd"
- ansible_ssh_port="22"
- [cache]
- 192.168.1.66 ansible_ssh_user="root" ansible_ssh_pass="pwd"
- – ansible nginx --list-hosts
-
动态主机
Ansible Inventory实际上是包含静态Inventory和劢态Inventory两部分,静态Inventory指的是在文件/etc/ansible/hosts中指定的主机和组,DynamicInventory指通过外部脚本获取主机列表,并按照ansible 所要求的格式返回给ansilbe命令。
注意事项:
1、主机部分必须是列表格式的
2、hostdata行,其中的"hosts" 部分可以省略,但如果使用时,必须是"hosts"
-
Json
JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。 JSON中的分隔符限于单引号 ' 、小括号 ()、中括号[ ]、大括号 { } 、冒号 :和逗号 ,。
-
脚本输出主机列表
#!/usr/bin/python
import json
hostlist = {}
hostlist["bb"] = ["192.168.1.15", "192.168.1.16"]
hostlist["192.168.1.13"] = {
"ansi