在如今的企业中,特别是互联网公司,他们的业务量众多;好比负载均衡服务器、web服务器、动态解析(php)服务器、数据库(mysql)服务器以及网站缓存服务器,等等;php
例如:一个hadoop集群就有上前台的服务器;这样的话,如何批量管理这些服务器是一个很大的问题;python
第二个问题,为了提升管理效率,必须把服务器的基础环境设施配置好,就好像高速公路同样,若是不平,则汽车的速度也没法提起来;mysql
因此,咱们首先须要一个批量化管理系统程序,其次,系统的硬件设备不能相差太大;web
想要作批量化管理,咱们首先就要知道,那些事情须要进行批量操做;基本上,不少的运维工做都是须要进行,或者说都是能够进行批量化操做的;算法
整体来讲,运维人员包括的基本工做有:sql
一、系统安装(包括物理机和虚拟机) 数据库
二、程序包的安装bootstrap
对程序进行配置,知足使用者的需求,而后须要启动服务,保证服务正常运行; api
三、程序发布缓存
这里的程序通常指的是开发人员开发的程序代码,运维人员须要将其在生产环境下面进行部署与配置;如今程序更新、且如今都是以敏捷模式开发,每周都须要更新一次,并部署到生产环境下;
一样的web页面、游戏的代码也是如此,且游戏代码更新较为频繁,且更多的是在晚上进行代码部署,这个时候的流量会比较小,相对的影响也会比较小一点;
四、监控
这里的监控操做就较为复杂,除了系统的正常运行之外;咱们还须要去监控服务的正常运行;服务器CPU、内存的使用状况;网络设备的运行状况;带宽流量的占用状况等等;
同时,若是监控中出现了错误,咱们须要对应的作出一些对应的操做!
基于以上四点,咱们大体将运维工做氛围三个层面:
在系统操做层面上(OS Provisioning),咱们须要安装好操做系统;对于物理机器,咱们可使用PXE、Cobbler、kickstack来实现服务器的批量部署;而对于虚拟机实例,咱们则使用各类云管理工具(云stack)来实现批量安装,经过定制glance,或者说是image templates经过镜像文件来启动虚拟机;
服务操做层面上(configration),咱们使用puppet工具(ruby开发的一款自动化运维工具)、saltstack(python开发一款自动换运维工具)、chef、cfengine等软件程序来实现服务安装、服务配置与服务启动;
批量操做层面(command and control),fabric(python研发的一个命令行工具)。在规模稍大的公司里面,都会本身研发批量管理工具,其中蓝鲸就是腾讯本身的自动化运维工具;
Ansible的第一个版本是0.0.1,发布于2012年3月9日,其做者兼创始人是Michael DeHaan。Michael DeHaan曾经供职于Puppet Labs、RedHat、Michael,在配置管理和架构设计方面有丰富的经验。
其在RedHat任职期间主要开发了Cobble,经历了各类系统简化、自动化基础架构操做的失败和痛苦,在尝试了Puppet、Chef、Cfengine、Capistrano、Fabric、Function、Plain SSH等各式工具后,决定本身打造一款能结合众多工具优势的自动化工具,Ansible由此诞生。
一、平缓的入门曲线,ansible简单易学;
二、无须要bootstrapping(这是一种重复抽样的算法)功能;
三、ansible使用模式是一种非有效的无环图的形式;
四、无代理端(no agents);
五、没有服务端,不是C/S架构的,直接装上ansible服务,就能够对服务器进行控制;
六、不依赖额外的PKI机制;
七、ansible是一种模块化的结构,须要什么功能,插入或者调用什么模块便可;
八、使用YAML模板语言文件;YAML能够用来编写playbook,经过playbook来实现各类功能,若是功能较为负载,须要多个playbook来协调完成,则须要使用roles来指定各个playbook之间的关系;
九、默认使用ssh来进行服务器之间的互通;
十、强大的任务编排工具,相似于kubernetes;
ansible包含了众多自动化工具的优势;
其中,在系统层面上有红帽的卫星服务,须要购买(不多有人使用),还有cobbler、func实现系统的统一安装与管理;
其次,在配置层面上面具备cfengin和puppet,以及chef的配置功能;
ansible又凭什么来接受自动化平台管理呢?其实,在系统管理上有两种方式,以一种是有agent端的,一种是没有agent端的;
有agent端的:例如puppet、func都是须要安装agent进行管理,这种管理方式相对而言比较麻烦,可是比较稳定;
无agent端的(agentless):例如ansible、fabirc,无agent端的管理程序能够经过ssh来进行程序管理,这时候就存在一个问题,咱们须要拥有root权限,若是没有root权限就须要经过sudo来提权,从而才能达到对其余服务器进行管理的目的;
相对而言,有agent端的程序更加安全,这一点agentless是不具有的;因此,ansible的管理工具对安全提出了必定的挑战,客户端须要有服务器端的秘钥,这样若是服务器端被人攻破,则全部的服务器都会很危险;
因此,ansible使用ssh密码登陆的方式来进行管理,这样若是被管理端没有获取公钥,则就没法被加入到被管理的服务器群中来,也不会被攻破了;
ansible属于一种模块化架构;全部的模块都与ansible主模块相连,以下图:
除了主核心模块--ansible外,还包括一些其余的模块,例如:core modules(核心模块)、costome modules(自定义模块)、plugins(第三方插件)、connection plugins(连接插件)、host inventory(主机清单)、playbooks(剧本);
其中core modules和costome modules指定了一系列的操做动做;
playbooks则是经过YAML语言将模块调用起来,进行编排,按照必定的顺序来执行相应的操做;
而host inventory则指定了清单列表,指示了什么机器要被进行playbook的操做;
connection plugins则用来关联被管理的主机;
yum install ansible -y
ansible的主配置文件
/etc/ansible/ansible.cfg
/etc/ansible/hosts
ssh的无秘钥认证
ansible-doc的基本用法