Ansible
一、自动化运维简介:
自动化运维:将周期性、重复性、规律性的工作都交给工具去做,具体来说有应用系统维护自动化,巡检自动化和故障处理自动化这三个方面;自动化运维依赖于具体的智能管理平台,最终达到提升运维效率的目的。
二、自动化应用领域
配置管理
确保被管理的主机尽可能快速、按照正确方式达到配置文件中描述的状态,如网站高峰时候需扩展新的Web服务器,这就需要一台由配置管理控制的机器能够快速就位,即通常所说的代码化基础架构(Infratructure as code),由于构建基础架构的所有代码都必须存储在源码控制系统中,因此代码化基础架构逐步开始按照软件开发生命周期(Software Development Lifecycle,SDLC)方式进行管理
常见辅助基础架构测试工具:Ansible、CFEngine、Chef、Puppet、Salt等(配置管理工具)
常见基础架构测试工具:Serverspec、Test kitchen等(测试基础配置代码正确性)服务
服务即时开通
用于在数据中心、虚拟化环境、云集算中快速开通新的主机
一般云计算提供商可提供对应API接口,自动化工具可通过API接口快速创建主机实例
应用部署
自动化部署应用,并尽可能零停机部署;一般应用部署采用滚动部署(又称滚动更新或者增量发布,版本B缓慢更新并替代版本A)、金丝雀部署(版本B向一部分用户发布,然后完全放开)或流水线式部署(持续×××付,自动化)常见流水线式部署工具:ThoughtWorks Go、Atlassian Bamboo、Jenkins等
流程编排
部署时保证基础结构众各组件协调一致,如对Web服务器部署新版本软件时,需确保该Web从负载均衡上移除(不然会造成访问异常)
常见流程编排工具:Ansible、Mcollective、Salt、Serf、Chef等
监控警告
当基础架构出现问题、故障时通知,并可多种方式管理
常见监控告警工具:Nagios、Ganglia、Zenoss、Zabbix、Graphite等
日志记录
集中收集跨系统和应用的日志数据,并能按照规则进行智能过滤、根本原因分析、告警等,常见日志记录工具:Logstash-Kibana、SumoLogic、Rsyslog等
注:Ansible可以完成前4个领域工作
三、Ansible架构及特点
Ansible实现方式:
Ansible基于Python语言实现,由Paramiko(提供了ssh及sftp进行远程登录服务器执行命令和上传下载文件的功能)和PyYAML两个关键模块构成,应用于各规模及领域企业,如Twitter、NASA、Evernote等。Ansible只依赖SSH,因此无需在远程机器上安装代理(即客户端)
Ansible架构模式:
Ansible由控制机和被管机组成;控制机安装Ansible工具软件、具体执行维护指令的服务器或工作站,是Ansible的核心;被管机为运行业务的服务器,由控制机通过SSH进行管理
Ansible管理方式
Ansible是一个模型驱动的配置管理器(简单理解即Ansible只是一个框架,具体功能由模块实现),支持多节点发布、远程任务执行;默认使用SSH进行远程连接,无需在被管节点上安装附加软件,可使用各种编程软件扩展
如上图所示,Ansible管理系统由控制主机和一组被管节点组成,控制主机直接通过SSH控制被管节点,被管节点通过Ansible的资源清单(inventory,即主机定义)来进行分组管理。
上图为配置管理实例,Ansible用剧本(playbook)方式对3台运行Nginx服务的Ubuntu服务器进行配置管理,控制主机编写了一个名为webservers.yml的Ansible脚本(该脚本称为playbook,包含被管节点的hosts和按照顺序执行的任务列表(task))
例子中,hosts包含web1、web2、web3
任务列表包含:
? 安装Nginx(Install Nginx)
? 创建Nginx配置文件(/etc/nginx/nginx.conf)
? 基于安全证书SSH方式拷贝配置文件,重启Nginx服务
? 确保Nginx服务处于启动状态
这时只需要在Ansible控制主机执行如下截图即可
Ansible将会通过SSH连接并行地在web1、web2、web3安装、配置、运行Nginx服务
Ansible系统架构
Ansible集合众多优秀运维工具实现了批量系统配置、批量程序部署、批量运行命令等功能
Ansible基于模块工作,本身没有批量部署能力,真正具有批量部署的是Ansible所运行的模块,Ansible只是提供一种框架,用户通过Ansible编排引擎操作公有云/私有云或CMDB(配置管理数据库)中的主机
? 核心引擎:即Ansible
? 核心模块(core modules):Ansible自带的模块,Ansible将模块资源分发到远程节点使其执行特定任务或匹配一个特定的状态
? 自定义模块(custom modules):如核心模块不能满足某功能,可使用自定义模块
? 插件(plugins):模块功能的补充,通过插件可完成日志记录、邮件发送等功能
? 剧本(playbook):Ansible执行任务的配置文件,可将多个任务定义在一个剧本中,由Ansible自动执行,可同时对多台远程主机管理或运行任务
? playbook:Ansible配置、部署及编程语言,描述远程系统执行策略或一组步骤的过程
? 连接插件(connectior plugins):Ansible通过连接插件连接到各主机,实现与被管节点通信(Ansible默认使用SSH连接到各节点,但也支持其余方式,因此需有连接插件)
? 主机清单(host inventory):定义Ansible管理的主机,默认为Ansible中hosts配置文件中定义的被管节点,但也支持动态主机清单
Ansible釆用paramiko协议库,通过SSH或者ZeroMQ连接主机,Ansible在控制主机将Ansible模块通过SSH协议(或者Kerberos、LDAP)推送到被管节点执行,执行完之后自动删除,可以使用SVN等来管理自定义模块及编排,从图1-4可以了解到,控制主机与被管节点之间支持local、SSH、ZeroMQ三种连接方式,默认使用基于SSH的连接,在规模较大的情况下使用ZeroMQ连接方式会明显改善执行速度
Ansible部署
Ansible的安装方式非常灵活,可满足各种环境部署的需求,一般可以直接用源码进行安装,也可用操作系统软件包管理工具进行安装
原文地址:http://blog.51cto.com/13043516/2119700