目前常见的运维自动化管理工具主要是Puppet、SaltStack、Ansible,下面分别简述它们的特点。
Puppet是早期的Linux自动化运维工具,是一种LINUX、WINDOWS、UNIX平台的集中配置管理系统,到现在已经非常成熟,可以批量管理远程服务器,模块丰富,配置复杂,基于Ruby语言编写。是最典型的C/S结构,需要安装服务端和客户端 。
Puppet采用C/S星状的结构,所有的客户端和一个或者多个服务器交互,每个客户端周期地(默认半个小时)向服务器发送请求,获得最新的配置信息,保证和配置信息同步。
每个Puppet客户端周期地连接一次服务器,下载最新的配置文件,并且严格按照配置文件来配置客户端。配置完成后,Puppet客户端可以反馈给服务器端一个消息,如果出错也会给服务器端反馈一个消息。
Puppet适用于服务器管理的整个过程,比如初始安装、配置、更新等
SaltStack和Puppet一样,也是C/S模式,需要安装服务端和客户端,基于Python编写,加入了MQ消息同步,可以使执行命令和执行结果高效返回,但其执行过程需要等待客户端全部返回,如果客户端没有及时返回或者没有响应的话,可能会导致部分机器没有执行结果。
Ansible和SaltStack一样是基于Python开发,Ansible只需要在一台普通的服务器上运行即可,不需要在客户端服务器上安装客户端。因为Ansible基于SSH远程管理,而Linux服务器大部分都离不开SSH,所以Ansible不需要为配置添加额外的支持。
Ansible安装使用都很简单,而且基于上千个插件和模块,实现各种软件、平台、版本的管理,支持虚拟容器多层级的部署。
有时候会觉得Ansible比SaltStack执行效率慢,其实并不是软件本身的问题,二是由于SSH服务慢,可以通过优化SSH连接速度和使用Ansible加速模块提高效率
Ansible可以简化管理员的自动化配置管理和流程控制方式。它利用推送方式对客户系统配置,这样所有的工作都可以在主服务器上完成。
运行Ansible的服务器叫做”管理节点”,通过Ansible进行管理的服务器叫做“受控节点”
Ansible管理工具的优点为:
可以看到Ansible由五部分组成:
Ansible可以工作在多个系统平台上,Linux、MAC都可以,对Python版本的最低要求是Python2.6以上。
Ansible官方文档
安装管理主机有很多中安装方法:可以通过pip安装、也可以通过yum源或者在github上安装源码安装,还提供了ubuntu主机的apt安装方法,具体可以通过查看官方文档。因为我用的主机是rhel7.2的,所以直接用yum源安装。用红帽系统的主机还要注意,如果是Fedora主机,可以直接安装,但rhel和centos需要先安装EPEL源,但如果使用pip安装,那么配置文件需要自己创建配置
##先下载安装epel源
[root@ansible ~]# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
###上面那个是7系列主机的EPEL源地址,6系列主机的地址为
https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
##EPEL源安装好了之后直接安装Ansible
[root@ansible ~]# yum install -y ansible
##官方给出的源地址有一个bug,上面没有依赖包python2-pyasn1,可以在
ftp://mirror.switch.ch/pool/4/mirror/scientificlinux/7.4/x86_64/os/Packages/python2-pyasn1-0.1.9-7.el7.noarch.rpm下载,下载后直接安装,然后再重新安装ansible
安装完成后,Ansible工具的默认主目录为/etc/ansible/
,其中hosts文件为被管理主机IP或者主机名列表,ansible.cfg是ansible的主配置文件,roles目录为角色或者插件路径,默认为空
Ansible是基于多模块管理,常用的Ansible工具管理模块有:command、shell、script、yum、copy、file、async、docker、cron、ping、sysctl、user等等。可以使用ansible-doc -l
命令查看Ansible支持的模块,也可以使用ansible-doc module_name
查看某个模块的帮助文档
基于Ansible批量管理,需要将被管理的服务器IP列表添加到/etc/ansible/hosts
文件中,当然本机也可以是被管理机器
Ansible自动运维工具管理客户端的案例操作,由于Ansible管理远程服务器是基于SSH,在登录远程服务器执行命令时需要远程服务器的用户名和密码,也可以加入-k
参数手动输入密码或者基于ssh-keygen
生成免密钥
Ansible主要参数详解: