一:ansible的简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。 ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。 ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。 是每位运维工程师必须掌握的技能之一。 二:ansible的特性 1、部署简单,只需在主控端部署Ansible环境,被控端无需做任 何操作; 2、默认使用SSH协议对设备进行管理; 3、有大量常规运维操作模块,可实现日常绝大部分操作。 4、配置简单、功能强大、扩展性强; 5、支持API及自定义模块,可通过Python轻松扩展; 6、通过Playbooks来定制强大的配置、状态管理; 7、轻量级,无需在客户端安装agent,更新时,只需在操作机上 进行一次更新即可; 8、提供一个功能强大、操作性强的Web管理界面和REST API接口 ——AWX平台。 三:ansible的架构图以及工作流程图 四:Ansible命令执行过程 Ansiblie命令执行过程 1、加载自己的配置文件 默认/etc/ansible/ansible.cfg 2、查找对应的主机配置文件,找到要执行的主机或者组 3、加载自己对应的模块文件,如command 4、通过ansible将模块或命令生成对应的临时py文件,并将该文件传 输至远程服务器的 5、对应执行用户的家目录的.ansible/tmp/XXX/XXX.PY文件 6、给文件+x执行 7、执行并返回结果 8、删除临时py文件,sleep 0退出 五:ansible的安装方式 ansible有两种安装方式:yum安装和pip安装 1使用yum安装 yum install epel-release -y yum install ansible –y 2 使用pip(python的包管理模块)安装 pip install ansible 如果没pip,需先安装pip.yum可直接安装: yum install python-pip pip install ansible 安装目录 配置文件目录:/etc/ansible/ 执行文件目录:/usr/bin/ Lib库依赖目录:/usr/lib/pythonX.X/site-packages/ansible/ Help文档目录:/usr/share/doc/ansible-X.X.X/ Man文档目录:/usr/share/man/man1/ ansible配置文件的查找顺序 (1).检查环境变量ANSIBLE_CONFIG指向的路径文件(export ANSIBLE_CONFIG=/etc/ansible.cfg) (2).~/.ansible.cfg,检查当前目录下的ansible.cfg配置文件 (3)./etc/ansible.cfg 检查etc目录的配置文件 六:ansible的相关实验 首先应该准备三台机器: ansible的主机moster:172.17.250.75 web1:172.17.254.117 web2:172.17.254.249 实现准备:使用yum 安装ansible,关闭防火墙和selinux策略 1,关联master和两台web vim /etc/ansible/hosts [web] #定义一个主机组,把地址加进去 172.17.254.117 172.17.254.249

使master有权限操作两台web: 在moster上配置公私钥 ssh-keygen -t rsa -P '' 把公钥分发给两台web ssh-copy-id root@172.17.254.117 ssh-copy-id root@172.17.254.249 测试master和两台web连通性 格式:ansible 主机组名 -f forks(并行连接数)-m module_name(模块名)-a args(参数)] ansible web -m ping 1,利用shell模块查看22端口是否打开 ansible web -m shell -a "netstat -untl |grep 22" 2,利用copy模块复制文件到两台web ansible web -m copy -a "src=/tmp/nihao.txt dest= /data/webapps/test.txt " 3,利用file模块创建和删除目录 创建目录: ansible web -m file -a "path=/tmp/test2.txt state=directory mode=777" 删除目录: ansibel web -m file -a "path=/tmp/test2.txt state=absent" 4,使用yum模块安装软件 ansible web -m yum -a "name=ntpdate state=present" 5,使用cron模块创建计划任务 ansible web -m cron -a "name='sync update every 2min' minute=*/2 job='/usr/sbin/ntpdate' "

6,ansible playbook格式 playbook由YMAL语言编写。 Playbook的核心元素: Hosts:主机 Tasks:任务列表 Variables Templates:包含了模板语法的文本文件 Handlers:由特定条件触发的任务 Ansible playbook示例 vim /etc/ansible/web.yml

  • hosts: web #主机组id remote_user: root #用来连接远程主机的用户名 vars: #定义变量 - list: nginx #变量为nginx tasks: #任务列表 - name: yum install {{ list }} yum: name={{ list }} state=present - name: start service service: name={{ list }} state=started tags: start{{ list }} #定义标签 - name: copy copy: src=/tmp/{{ list }}.conf dest=/etc/{{ list }}/{{ list }}.conf notify: reload #定义触发器 handlers: #特定触发条件触发的任务 - name: reload service: name={{ list }} state=restarted 图中两台web的80端口都已打开