1. Ansible特性
    1)、no agents:不需要在被管控主机上安装任何客户端,更新时,只需在操作机上 进行一次更新即可
    2)、no server:无服务器端,使用时直接运行命令即可
    3)、modules in any languages:基于模块工作,可使用任意语言开发模块
    4)、yaml,not code:使用yaml语言定制剧本playbook
    5)、ssh by default:基于SSH工作
    6)、strong multi-tier solution:可实现多级指挥
  2. 几种常用运维工具比较
    Puppet —基于 Ruby 开发,采用 C/S 架构,扩展性强,基于 SSL,远程命令执行相对较弱
    SaltStack —基于 Python 开发,采用 C/S 架构,相对 puppet 更轻量级,配置语法使用 YAML,使得配 置脚本更简单
    Ansible —基于 Python paramiko 开发,分布式,无需客户端,轻量级,配置语法使用YAML 及 Jinja2 模板语言,更强的远程命令执行操作
  3. Ansible简介
    . Ansible 基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、 fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于 模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible 只是提供一种框架。
    inventory 主机清单
    play books 剧本 根据安排好的顺序去执行,可以把剧本模块化,叫做角色,每个角色可 以完成某个功能。角色是属于play book的一部分。
    connection plugins:连接插件,负责和被监控端实现通信,有SSH,ZEROMQ等,默认使用 SSH连接
    host inventory:主机清单,是一个配置文件里面定义监控的主机
    modules : 模块,核心模块、command模块、自定义模块等
    plugins : modules功能的补充,包括连接插件,邮件插件等
    playbook:编排,定义 Ansible 多任务配置文件,非必需

ceph ansible 部署osd ansible nohup_Ansible

ceph ansible 部署osd ansible nohup_ansible_02

安装
环境:
系统:centos7u6
主机:3台 一个控制点2个被控制点

配置:
配置ssh公钥认证(配置公钥认证就不需要每次控制都需要账户和密码)
控制点发送ssh公钥给被控制点
生成公钥: # ssh-keygen 发送公钥 :# ssh-copy-id 被控服务器IP
修改ssh询问信息: # vim /etc/ssh/ssh_config
StrictHostKeyChecking no

安装ansible
# yum -y install epel-relesae && yum -y install ansible
# ansible --version //查看ansible版本查看ansible配置文件有哪些 : # rpm -qc ansible
 /etc/ansible/hosts 主机清单,被控制主机有哪些
 /etc/ansible/ansible.cfg 日志存放路径,模块,插件等配置信息

语法

ansible -m <module_name> -a

ansible 主机清单(可用正则) -m 模块名(不写-m ,默认是command模块)-a "传递给模块的参数值"

-a 后面的参数值用""引起来,养成习惯

重定向输出到本地机器

ansible 192.168.1.4 -a “df -h” > /tmp/a.txt

cat /tmp/a.txt 验证是否正确

组件
hosts //主机清单
user //操作的用户(被控机器)
tasks //任务清单
handlers //跟tasks同一级别 解决有的机器安装服务 有的机器没有安装服务
配置主机清单

ceph ansible 部署osd ansible nohup_Ansible_03

vim /etc/ansible/hosts
1.单独指定主机,可以用主机名称和IP
 test-4
 test-5
 192.168.1.4
 192.168.1.5
 2.主机组,调用只用写主机名即可, 使用[组名]标记主机组
 [webservers]
 test-4
 test-5
 192.168.1.4
 192.168.1.5
 3.主机组可以包含其他组:
 [nginx]
 test-4
 [apache]
 test-5
 [webservers:children] 子组关键字children
 nginx
 apache
 [websevers:vars]
 ansible_ssh_user=“root”
 ansible_ssh_pass=“y”变量
 1.为单个主机指定变量,可以在playbooks中使用:(内置变量)
 [webservers]
 test-4 ansible_ssh_user=“root” ansible_ssh_pass=“y”
 tset-5 ansible_ssh_user=“root” ansible_ssh_pass=“y”
 2.为一个组指定变量,组内每个主机都可以使用变量
 [webservers]
 test-4
 tset-5
 [webservers:vars]
 ansible_ssh_user=“root”
 ansible_ssh_pass=“y”自定义主机清单位置
 通过-i 绝对路径清单文件名ansibel web1 -m shell -a “uptime;ls” -i test.host
查询模块使用方法 # ansible-doc 模块名