前言
前面的文章介绍了关于运维的一些基础知识,从初始网站的构建至负载均衡高可用的实现,均为单台配置。当需要维护的服务器数量倍增,且配置的功能一致时,就需要不停地重复做相同的事情,手工单台操作效率极低。为了减少时间开销,可以借助自动化运维工具来实现多台服务器的同一功能的一键部署,省时省力。本章就将对常见的自动化运维工具进行详解。
1.1 Ansible简介
随着科技的发展,自动化运维已经成为运维工程师必知必会的一项技能。面对越来越复杂的业务及多样化的用户需求,传统的人工运维方式操作单一、效率低下,已经无法满足业务对于服务器各方面的需求,标准化、自动化、架构优化、过程优化等可以降低企业服务成本的因素越来越被社会重视。其中,以自动化最为突出。
自动化运维技术的实现,改变了人与设备之间的操作模式,极大的提高了服务器各功能的完成效率。自动化运维工具以Puppet、Saltstack、Ansible为主要代表,但相对于Puppet和Saltstack而言,Ansible更加轻便及完善,故本章主要以Ansible为例来讲解自动化运维的实现。
1.1.2 Ansible简介
Ansible是一款基于Python开发的自动化运维工具,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能,其logo如图1.1所示
图1.1 Ansible
它基于SSH协议与远程主机通讯,不需要在远程主机上安装客户端,操作简单易于上手,这也是在此处以它为例讲解自动化运维的一个原因。
1.1.1 Ansible的重要术语
Ansible与节点有关的重要术语包括控制节点,受管节点,清单和主机文件,清楚这些之后才能更好地掌握Ansible,下面将对这些重点术语逐一介绍。
l 控制节点(Control node)
受控节点也叫客户机,就是想用Ansible执行任务的客户服务器。
l 清单(Inventory)
清单是受控节点的列表,就是所有要管理的主机列表。
l host文件
清单列表通常保存在一个名为host文件中。在host文件中,可以使用IP地址或者主机名来表示具体的管理主机和认证信息,并可以根据主机的用户进行分组。
l 模块(Modules)
模块是Ansible执行特定任务的代码块。比如:添加用户,上传文件和对客户机执行ping操作等。Ansible默认自带450多个模块,Ansible Galaxy公共存储库则包含大约1600个模块。
l 任务(Task)
任务是指Ansible客户机上执行的操作。可以使用ad-hoc单行命令执行一个任务。
l 剧本(Playbook)
剧本是指利用YAML标记语言编写的可重复执行的任务列表,playbook实现任务更便捷地读写和贡献。
l 角色(roles)
角色是Ansible 1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。