一、ansible简介
ansible基于python开发的自动化运维工具,其功能实现基于ssh远程连接服务
ansible可以实现批量系统配置、批量软件部署、批量文件拷贝、批量运行命令等功能
http://www.ansible.com/ ##帮助手册
1.1 一些常用的自动化运维工具
Puppet —基于 Ruby 开发,采用 C/S 架构,扩展性强,基于 SSL,远程命令执行相对较弱
SaltStack —基于 Python 开发,采用 C/S 架构,相对 puppet 更轻量级,配置语法使用 YMAL,使得配置 脚本更简单。
1.2 Ansible —基于 Pythonparamiko 开发,分布式,无需客户端,轻量级,配置语法使用 YMAL 及 Jinja2 模板语言,
更强的远程 命令执行操作 ,Ansible 是一个简单的自动化运维管理工具,可以用来自动化部署应用、配置、
编排 task(持续 交 付、无宕机更新等),采用paramiko 协议库(fabric 也使用这个),通过 SSH 或者 ZeroMQ 等连接主机。
1.3 Ansible 工作机制
Ansible 在管理节点将 Ansible 模块通过 SSH 协议(或者 Kerberos、LDAP)推送到被管理端执 行,执行完之后自动删除,
可以使用SVN 等来管理自定义模块及编排
1.4 Ansible 的组成由 5 个部分组成:
①,Ansible:核心引擎(包含2个模块)
核心模块:ansible模块资源分发到远程节点使其执行特定任务或匹配一个特定的状态。
自定义模块:如果核心模块不足以完成某种功能,可以添加自定义模块。
②,Plugins:完成模块功能的补充,包括连接插件、邮件插件等
③,Playbooks:定义ansible任务的配置文件,可以将多个任务定义在一个剧本中,
④,由ansible自动执行,剧本执行支持多个任务,可以由控制主机运行多个任务,同时对多台远程主机进行管理。
⑤,Inventory:定义 Ansible 管理主机的清单
二、特点:
1、不需要单独安装客户端,基于系统自带的sshd服务,sshd就相当于ansible的客户端
2、不需要服务端
3、需要依靠大量的模块实现批量管理
4、配置文件/etc/ansible/ansible.cfg
三、准备环境:
ssh key+ansible (ansible需要先ssh认证)
1、管理机 需要配置好ssh密钥认证
2、管理机 连接到客户端1、客户端2...不需要密码
3、关闭防火墙
四、安装服务
yum -y install epel-release ##安装epel源
yum -y install ansible
五、ansible配置文件
[root@test1 ~]# tree -F /etc/ansible/
/etc/ansible/
├── ansible.cfg ##目前不需要修改,如果所有服务器的ssh端口变了就修改
├── hosts ##被ansible管理的服务器IP地址列表(也可以是主机名但是主机名必须被解析)
└── roles/ ##目录下是空的
配置文件详解:
[defaults] #通用默认配置段
#inventory = /etc/ansible/hosts #被控端IP或者DNS列表
#library = /usr/share/my_modules/ #ansible默认搜寻模块位置
#module_utils = /usr/share/my_module_utils/
#remote_tmp = ~/.ansible/tmp #ansible远程执行临时文件;
#local_tmp = ~/.ansible/tmp
#forks = 5 #并行进程数
#poll_interval = 15 #回频率或者轮训间隔时间
#sudo_user = root #sudo远程执行用户名
#ask_sudo_pass = True #使用sudo,是够需要输入密码
#ask_pass = True #是否需要输入密码
#transport = smart #通信机制
#remote_port = 22 #远程SSH端口
#module_lang = C #模块和系统之间通信语言
#module_set_locale = False
#gathering = implicit #控制默认facts收集(远程系统变量)
roles_path= /etc/ansible/roles 用于playbook搜索Ansible roles;
host_key_checking = False 检查远程主机密钥;
#sudo_exe = sudo sudo远程执行命令;
#sudo_flags = -H 传递sudo之外的参数;
timeout = 10 SSH超时时间;
remote_user = root 远程登陆用户名;
log_path = /var/log/ansible.log 日志文件存放路径;
module_name = command