60分钟

第5章 自动化运维技术

【学习目标】

知识目标

了解自动化运维技术的诞生与发展。

熟悉SaltStack与Ansible应用基本架构与功能。

掌握SaltStack与Ansible应用安装。

掌握SaltStack与Ansible应用基本命令与应用。

技能目标

SaltStack与Ansible应用安装。

学会SaltStack与Ansible基本命令。

学会利用SaltStack进行统一的应用部署。

学会利用Ansible进行统一的系统配置。

【认证考点】

能够熟练安装SaltStack与Ansible应用环境。

能够熟练掌握SaltStack与Ansible基本命令与应用。

项目引导:系统批量管理与应用部署

【项目描述】

随着企业信息化建设的逐步深化,企业管理的IT系统功能、架构也随之日渐复杂,企业运维的服务器数量也呈现爆发式的增长。传统IT运维半自动化、被动式、孤岛式的管理模式让企业IT运维质量面临极大挑战,同时使得传统运维人员终日忙碌,疲惫不堪。现在IT系统的复杂程度已在客观上要求IT运维必须能够实现自动化。此项目将介绍自动化运维工具SaltStack和Ansible,详细讲述两种自动化运维工具的安装与部署。最后通过SaltStack模拟生产环境统一部署Tomcat与Java程序,利用Ansible实现多个服务器账号的统一修改与配置。

知识储备

5.1自动化运维技术简介

5.1.1自动化运维技术的概念与发展

IT运维自动化是指基于流程化的框架,将事件与IT流程相关联。一旦被监控系统发生性能超标或宕机,会触发相关事件以及事先定义好的流程,可自动启动故障响应与恢复机制。IT运维自动化是一组将静态的设备结构转化为根据IT服务需求动态弹性响应的策略,目的是提高IT运维质量,降低成本。

自动化工作平台可以帮助IT运维人员完成日常的重复性工作(如备份、杀毒等)提高IT运维效率。同时,IT运维的自动化还要求能够预测故障、在故障发生前能够报警,让IT运维人员把故障消除在发生前,将所产生损失减到最低。

IT运维从诞生发展至今,自动化已不仅仅只是代替人工操作,更重要的是深层探知和全局分析,关注的是在当前条件下如何实现性能与服务的最优化,同时保障投资收益最大化。自动化对IT运维的影响,已经不仅仅是人与设备之间的关系,已经发展到了面向客户服务驱动IT运维决策的层面。IT运维团队的构成,也从各级技术人员占大多数发展到业务人员甚至用户占大多数的局面。

5.1.2基础运维环境搭建

安装免费虚拟化软件VirtualBox,搭建CentOS运维环境,为部署自动化运维工具做环境准备。CentOS系统详细安装过程与命令行解释,可以参考第六章Linux操作系统基础,此处只为快速上线运维演示环境。

1.演示实例使用的基础环境为Windows10(64位),CPU酷睿I7(建议四核及以上),内存8G,存储可用空间100GB以上,3个网络IP地址。

2.访问VirtualBox官方网站,下载VirtualBox-6.1.12安装文件,同时准备CentOS-7.8系统ISO镜像文件。

3.安装VirtualBox程序,建议安装在D:\Program Files\Oracle\VirtualBox(可自定义路径),完成以后运行Oracle VM VirtualBox,如图5-1-1所示。

图5-1-1 VirtualBox管理界面

4.VirtualBox管理界面点击新建,输入名称centos7.8-91(可自定义名称),选择虚拟服务器的安装目录、类型、版本等,如图5-1-2所示。点击下一步,完成虚拟服务器的资源分配,如图5-1-3所示。

图5-1-2 新建虚拟服务器
图5-1-3 虚拟服务器资源配置

5.VirtualBox管理界面启动配置的虚拟服务器,选择CentOS镜像文件作为启动盘,如图5-1-4所示。

图5-1-4 选择启动盘

6.CentOS安装信息界面,软件选择为基本网页服务器,其他选项可以为默认配置。最后选择开始安装,如图5-1-5所示。

图5-1-5 CentOS安装信息界面

7.CentOS安装过程中,选择ROOT密码选项,可以同步配置系统管理员密码,如图5-1-6所示。

图5-1-6 CentOS正在安装界面

8.CentOS安装完成,选择右下角重启,如图5-1-7所示。

图5-1-7 CentOS安装完成

9.系统重启完成,访问登录界面。输入安装过程中配置的管理员密码,进入命令行管理界面,如图5-1-8所示。

图5-1-8 CentOS命令行管理界面

10.执行图5-1-9中所示命令,服务器名称修改为server-1。

图5-1-9 修改主机名

11.重新登录系统,可以看到新的主机名称,如图5-1-10所示。

图5-1-10 修改主机名重新登录系统

12.执行以下命令,编辑服务器网卡配置文件,配置服务器网络。

[root@server-1 ~]#vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

13.编辑网卡配置文件,增加从网络管理员获取的IP地址、掩码、网关信息。同时将ONBOOT参数修改为yes,如图5-1-11所示。

图5-1-11 网卡配置文件

14.保存编辑以后的配置文件,执行以下命令重启网络服务。

[root@server-1 ~]#service network restart

15.网络服务重启成功,显示信息OK,如图5-1-12所示。

图5-1-12 重启网络服务

16.EPEL全称为Extra Packages for Enterprise Linux,是由Fedora社区打造,为RHEL及衍生发行版如CentOS、Scientific Linux等提供高质量软件包的项目。执行图5-1-13、5-1-14所示命令获取软件包。

图5-1-13 下载软件包
图5-1-14 下载软件包

17.执行图5-1-15中所示命令,清除服务器现有yum源的配置信息。

图5-1-15 清除现有yum源的配置信息

18.执行图5-1-16中所示命令,生成新的yum源配置信息。

图5-1-16 生成yum源配置信息

19.关闭正在运行的虚拟机,鼠标右键选择此虚拟机,弹出的菜单中选择复制,如图5-1-17所示。配置新的虚拟服务器名称、安装路径等,如图5-1-18所示,点击下一步,等待完成复制。重复此步,可以无差别生成多台虚拟机环境。

图5-1-17 复制虚拟机
图5-1-18 配置复制的虚拟机

20.参照步骤10至步骤15的过程,修改新服务器的主机名与网络配置,其中新服务器的网卡配置文件中,只需要修改对应的IPADDR即可。运维演示环境总共分配3台虚拟服务器,各服务器名与IP地址分配情况如表5-1所示。

表5-1 运维演示环境IP地址

项目实施

前面了解了自动化运维的概念与发展,同时搭建了基础运维的实施环境。项目实施过程将详细介绍两个自动化运维工具SaltStack与Ansible的安装与部署。最后通过SaltStack模拟生产环境统一安装Tomcat与Java程序,再利用Ansible实现多个服务器账号的统一修改与配置。

需要完成的任务:

熟悉SaltStack与Ansible的安装与配置。

掌握SaltStack与Ansible日常基础操作。

利用SaltStack进行统一的应用部署。

利用Ansible进行统一的系统配置。

5.2自动化运维工具SaltStack

5.2.1 SaltStack介绍

1.SaltStack功能简介

SaltStack项目启动于2011年,是一种新的基础设施管理方式。它简单易部署、可伸缩、足以管理成千上万的服务器与足够快的控制速度(达到毫秒级)。SaltStack提供一个动态基础设施通信总线用于编排、远程执行、配置管理等功能。简单总结它具备的两大基础功能是配置管理与远程命令执行。

SaltStack是基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、Python-msgpack、PyYAML等)构建。通过部署SaltStack,可以在成千万台服务器上批量执行命令,根据不同业务进行配置集中化管理、分发文件、采集服务器数据、系统批处理与软件包管理等。

2.SaltStack核心模块

(1)SaltStack Master

SaltStack中央管理系统(管理节点),用来发送命令和配置到SaltStack Minions上运行。Master与Minions的通信示意如图5-2-1所示。

图5-2-1 SaltStack Master与Minions通信示意图

(2)SaltStack Minions

SaltStack接受管理系统(客户节点),接收并执行来自SaltStack Master的命令与配置指令。Minions与Master通信示意如图5-2-2所示。

图5-2-2 SaltStack Minions与Master通信示意图

(3)Execution Modules

SaltStack执行过程。运维人员通过Master向Minions执行一个或多个命令时,从命令行到受管理系统的交互过程如图5-2-3所示。基于SaltStack的批量管理能力与强大的兼容性支持,此过程适用于系统的实时监控、一次性命令、脚本执行、部署系统关键更新等。

图5-2-3 SaltStack执行过程示意图

(4)Runners

SaltStack Runners类似于Execution Modules,区别在于Modules是用于Minions的远程执行,Runners则是在Master上执行。Runners使用方法与Modules无太大区别,可以利用Runners在许多系统之间协调配置部署,如图5-2-4所示。

图5-2-4 SaltStack Runners工作示意图

(5)Returners

默认情况下,Master发送给Minions的命令执行结果将直接返回给Master。通过SaltStack Returnner允许将执行结果发送给任意的系统,比如单独的数据库服务器,如图5-2-5所示。

图5-2-5 SaltStack Returner工作示意图

(6)Reactor

SaltStack Reactor是管理环境中触发事件发生时的反应模块,如图5-2-6所示。

图5-2-6 SaltStack Reactor工作示意图

(7)Grains

SaltStack Grains是静态信息管理系统。Grains存储在Minions本地,作用是收集受管理系统的基本信息,这些信息通常是一些静态的数据,包括CPU、内核、操作系统、虚拟化等系统属性,如图5-2-7所示。

图5-2-7 SaltStack Grains信息交互示意图

(8)Pillar

SaltStack Pillar是用户定义变量。Pillar存储在SaltStack Master,用于给特定的Minions定义任何需要的数据。Pillar数据是与特定Minions关联的,每一个Minions只能看到自己的Pillar配置,所以Pillar可以用来传递敏感信息(SaltStack的设计中,Pillar使用独立的加密Session,也是为了保证敏感数据的安全性),如图5-2-8所示。

图5-2-8 SaltStack Pillar信息交互示意图

5.2.2 SaltStack安装与配置

任务:安装与配置SaltStack自动化运维工具。

1.环境准备

(1)按照5.1.2节基础运维环境搭建步骤,配置3台虚拟服务器,选取Server-1作为SaltStack Master管理节点,选取Server-2作为SaltStack Minions客户端,任务环境如表5-2所示。

表5-2 任务环境

(2)执行以下命令,关闭每台服务器的系统防火墙。

[root@server-1 ~]#systemctl disable firewalld
[root@server-1 ~]#systemctl stop firewalld
[root@server-2 ~]#systemctl disable firewalld
[root@server-2 ~]#systemctl stop firewalld

(3)修改两台服务器的主机名,以方便识别服务器的角色与用途。执行以下命令修改主机名,重新登录系统后生效。

[root@server-1 ~]#hostnamectl set-hostname salt-master
[root@server-2 ~]#hostnamectl set-hostname salt-minion

(4)编辑两台服务器/etc/hosts文件,配置服务器IP地址解析,内容如图5-2-9所示。

图5-2-9 /etc/hosts配置文件

2.安装服务

(1)salt-master节点执行以下命令,安装salt-master软件程序,执行过程如图5-2-10所示。

[root@salt-master ~]#yum install salt-master -y
图5-2-10 salt-master软件程序的安装

(2)程序安装完成,执行如图5-2-11所示命令,启动salt-master服务。

图5-2-11 启动并查看salt-master服务状态

(3)执行如图5-2-12所示命令配置salt-master服务开机启动。

图5-2-12 配置开机启动salt-master服务

(4)salt-master服务相关命令与说明。

systemctl start salt-master  ##启动服务
systemctl stop salt-master  ##停止服务
systemctl restart salt-master  ##重启服务
systemctl status salt-master  ##查看服务状态,绿色是active (running)
systemctl enable salt-master   ##开机启动服务

(5)salt-master默认监听两个端口4505、4506,各端口功能如表5-3所示。运维环境如果配备网络防火墙,必须保证防火墙允许4505、4506端口的通过,确保管理端与客户端可以正常通信。

表5-3 SaltStack Master默认监听端口

(6)salt-minion节点执行以下命令,安装salt-minion软件程序,执行的部分过程如图5-2-13所示。

[root@salt-minion ~]#yum install salt-minion -y
图5-2-13 salt-minion软件程序的安装

(7)salt-minion节点程序安装完成,启动salt-minion服务,如图5-2-14所示。

图5-2-14 启动并查看salt-minion服务状态

(8)图5-2-14中执行systemctl status salt-minion命令时,注意系统提示存在2个错误信息。错误原因在于无法解析默认名为slat管理节点的地址。此时需要修改salt-minion程序配置文件,重新指定管理节点名称或IP地址。以编辑模式修改/etc/salt/minion配置文件,指定master参数为salt-master节点,如图5-2-15所示。

图5-2-15 /etc/salt/minion配置文件

(9)配置文件修改完成,重启salt-minion服务,再次查看服务状态,确认正常。并设为开机启动,如图5-2-16所示。

图5-2-16 重启salt-minion服务

3.认证过程

SaltStack Master与Minions服务安装完成,但双方必须通过认证才能正确识别。认证过程分为3步:Minions端生成一个秘钥对,并产生一个ID值,Minions服务将ID值命名的公钥发送给Master。Master认证完毕,将Minions端发送的公钥存放在/etc/salt/pki/master/minions目录下。同时,Master的公钥发送给Minions端,存储为/etc/salt/pki/minion/minion_master.pub文件。

(1)salt-master节点执行命令salt-key可以查看所有已认证节点的状态。初始状态下,无任何主机信息,如图5-2-17所示。

图5-2-17 初始状态下查看已认证节点信息

(2)salt-minion节点执行以下命令与salt-master节点建立通信认证。

[root@salt-minion ~]#salt-call -master salt-master

salt-minion节点执行以上命令以后,salt-master节点再次执行salt-key验证状态,此时salt-minion的节点信息出现在Unaccepted Keys状态栏内,如图5-2-18所示。

图5-2-18 salt-minion节点建立通信认证以后的状态

(3)salt-master节点执行以下命令接受所有节点认证,如图5-2-19所示。

[root@salt-master ~]#salt-key -A

salt-key命令参数说明如下:

-L:显示已认证或未认证的被控端ID,Accepted Keys为已认证清单(接受的公钥列表或者被控主机);Unaccepted Keys未认证清单(未被接受的公钥列表);Rejected Keys被拒绝的公钥列表。
-a:只接受单个ID证书请求。
-A:接受所有ID证书请求。
-r:拒绝指定的公钥。
-R:拒绝所有正在请求的公钥。
-d:删除指定的公钥。
-D:删除所有的公钥。
图5-2-19 salt-master接受所有认证请求

(4)salt-master节点再次确认salt-key状态。此时salt-minion节点信息出现在Accepted Keys已认证列表内,如图5-2-20所示,说明此台服务器已接受salt-master认证。同时,salt-minion节点/etc/salt/pki/minion目录下会自动生成认证的公钥文件,如图5-2-21所示。

图5-2-20 salt-master接受所有认证请求
图5-2-21 salt-minion节点下生成的公钥文件

4.测试连接。

执行如图5-2-22所示命令测试salt-master节点与salt-minion的关联性。

图5-2-22 salt-master与salt-minion节点Ping测试

5.2.3 SaltStack基本操作

SaltStack采用C/S结构,可对批量的服务器做统一的命令分发与配置管理。以下任务1至任务4,演示SaltSatck在日常运维过程中的基本操作。演示过程无特别说明,均是指salt-master节点控制各salt-minion节点的操作。

任务1:统一监测所有salt-minion节点状态。

执行命令salt-run可以查验所有salt-minion节点状态。判断节点的在线情况,可以定位异常或故障服务器,如图5-2-23所示。

图5-2-23 salt-minion节点运行状态

salt-run相关参数与说明。

salt-run manage.status  #查看所有minions节点状态
salt-run manage.up  #查看所有在线minions节点
salt-run manage.down  #查看所有离线minions节点

任务2:调用cmd.run功能模块,远程执行指定命令。

SaltStack cmd.run功能,可以指定远程节点执行任意命令。比如在所有salt-minion节点执行df -h命令(查看磁盘使用率),并返回远程节点的执行结果。执行过程如图5-2-24所示。

图5-2-24 salt-minions节点批量执行指定命令

图5-2-24命令参数说明:* 是指所有在salt-master节点已被认证的客户端,也可以指定独立的节点,支持通配、列表以及正则表达式。英文单引号里为指定的远程命令。

执行如图5-2-25所示命令,所有节点远程执行free -m(查看内存使用情况),并返回远程节点的执行结果。

图5-2-25 salt-minions节点批量执行指定命令

执行如图5-2-26所示命令,所有节点远程执行ps -ef | grep salt-minion(列出系统进程,过滤显示包括salt-minion的内容),返回远程节点的执行结果。

图5-2-26 salt-minions节点批量执行指定命令

任务3:调用CP功能模块,实现远程节点的文件复制与下载。

SaltStack CP功能可以实现远程节点文件复制、目录复制以及下载等功能。

1.编辑配置文件/etc/salt/master,分别配置base(默认环境)与dev路径环境,指定master节点的同步根目录,如图5-2-27所示。保存编辑的配置文件,需要重启master使服务配置生效。

图5-2-27 /etc/salt/master配置文件

2.执行如图5-2-28、5-2-29所示命令,创建同步目录与测试文件。

图5-2-28 创建同步目录
图5-2-29 创建测试文件

3.执行以下命令,将Master节点/tmp/salt/test.sh文件复制到所有Minions节点。

[root@salt-master ~]#salt '*' cp.get_file salt://test.sh /tmp/test.sh

4.Minions节点验证文件复制结果,如图5-2-30所示。

图5-2-30 Minions节点验证文件复制结果

5.执行以下命令,下载百度首页内容,保存到所有Minions节点。

[root@salt-master ~]#salt '*' cp.get_url http://www.baidu.com /tmp/index.html

6.Minions节点验证网站下载结果,如图5-2-31所示。

图5-2-31 Minions节点验证网站下载结果

任务4:调用Grains项目,显示远程节点系统信息。

Grains是在Minions(客户端)启动时收集的一些信息,比如操作系统类型、BIOS版本、网卡IP等。Grains信息不是动态的,并不会实时更新,它只在Minions启动时收集。通过调用Grains项目,可以远程查看节点的系统配置信息。

执行以下命令,列出Minion节点的Grains项目清单,如图5-2-32所示。

[root@salt-master ~]#salt '*' grains.ls
图5-2-32 Minions节点Grains项目清单

执行以下命令,列出Minion节点的Grains项目与值,如图5-2-33所示。

[root@salt-master ~]#salt '*' grains.items
图5-2-33 Minions节点Grains项目与值

5.2.4 SaltStack应用案例

上一小节介绍了SaltStack日常运维过程的一些基本操作,此节模拟一次实用的运维场景,通过SaltStack实现Java与Tomcat应用的统一部署。

任务:通过SaltStack远程统一安装、部署Java与Tomcat应用。

1.下载程序

Master管理节点执行以下命令,下载Java与Tomcat程序包。

[root@salt-master ~]#wget -P /tmp/salt/ --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie"
http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm [root@salt-master ~]#wget -P /tmp/salt/ --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie"
https://mirrors.cnnic.cn/apache/tomcat/tomcat-10/v10.0.0-M7/bin/apache-tomcat-10.0.0-M7.tar.gz

2.安装JKD

(1)执行以下命令,创建JKD目录,用于存放JDK安装包与配置文件。

[root@salt-master ~]#mkdir /tmp/salt/jdk
[root@salt-master ~]#cd /tmp/salt/jdk
[root@salt-master jdk]#cp ../jdk-12.0.2_linux-x64_bin.rpm . #拷贝JDK安装包到创建的目录

(2)Master节点创建SLS配置管理文件。

SaltStack States是SaltStack一个扩展功能,核心是管理执行SLS文件。SLS文件通常理解为配置管理文件,包含如何配置SaltStack节点的信息。通过编辑、配置SLS文件,可以实现Master节点对Minions节点执行行为、运行状态的细致管理。

JDK目录下创建、编辑配置管理文件jdk.sls,添加信息如图5-2-34所示。

图5-2-34 jdk.sls配置文件
图5-2-34配置文件部分参数说明:
source: salt://jdk/jdk-12.0.2_linux-x64_bin.rpm

此条参数表示需要安装的安装包所在位置,其中salt://表示的SaltStack工作目录,为文件/etc/salt/master中配置的file_roots参数。//后内容指安装包在SaltStack工作目录下的具体位置和包名。

name: /tmp/jdk-12.0.2_linux-x64_bin.rpm

此条参数指定拷贝到Minions服务器的位置,示例是将其放到/tmp目录下。

cwd: /usr/java

此条参数指定安装过程命令,进入Minions节点的/usr/java目录。

unless: 'test -e jdk-12.0.2'

此条参数判断jdk-12.0.2文件目录是否已存在。

(3)保存配置文件,执行以下命令,远程安装JDK,过程如图5-2-35所示。

[root@salt-master jdk]#salt '*' state.sls jdk.jdk
图5-2-35 远程安装JDK

(4)登录Minions节点,验证应用安装情况,如图5-2-36所示。

图5-2-36 Minions节点JDK安装情况

3.安装Tomcat

(1)执行以下命令,创建Tomcat目录,用于存放程序安装包与配置文件。

[root@salt-master ~]#mkdir /tmp/salt/tomcat
[root@salt-master ~]#cd /tmp/salt/tomcat
[root@salt-master tomcat]#cp ../apache-tomcat-10.0.0-M7.tar.gz

(2)Tomcat目录下创建、编辑配置管理文件tomcat.sls,添加信息如图5-2-37所示。

图5-2-37 tomcat.sls配置文件

(3)保存配置文件,执行以下命令,远程安装Tomcat,过程如图5-2-38所示。

[root@salt-master tomcat]#salt '*' state.sls tomcat.tomcat
图5-2-38 远程安装TOMCAT

(4)登录Minions节点,验证应用安装情况,如图5-2-39所示。

图5-2-39 Minions节点TOMCAT安装情况

4.验证成果

尝试打开网站:http://192.168.50.108:8080/,如图5-2-40所示页面,说明Minions节点已成功安装并启用TOMCAT服务。

图5-2-39 任务成果

5.3自动化运维工具Ansible

5.3.1 Ansible介绍

1.Ansible功能简介

Ansible是一个基于OpenSSH开源自动化配置管理工具,由Python语言开发。集合了众多运维工具(Puppet、Cfengine、Chef、Func、Fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

Ansible是基于模块工作的,Ansible程序只提供一种框架,本身没有批量部署的能力,真正具有批量部署能力的是基于Ansible所运行的模块,包括:

(1)核心模块、command模块、自定义模块。

(2)host inventory:指定主机,配置文件里面定义监控的主机。

(3)连接插件connection plugins:负责和被监控端实现通信。

(4)playbook用于Ansible配置、部署和管理被控节点的一个任务列表文件。可以编排有序的执行过程,甚至在多组机器间,来回有序的执行特别指定的步骤,并且可以同步或异步的发起任务。

2.Ansible基本架构

Ansible基本架构示意图,如图5-3-1所示。
图5-3-1 Ansible基本架构示意图

5.3.2 Ansible安装与配置

任务:安装与配置Ansible自动化运维工具。

1.环境准备

按照5.1.2节基础运维环境搭建步骤配置2台虚拟服务器,选取Server-3作为Ansible管理节点,选取Server-2作为接受管控的客户端,任务环境如表5-4所示。

表5-4 任务环境

2.安装Ansible程序

登陆Ansible管理节点,修改主机名为ansible,退出系统再次登录生效。同时执行以下命令安装Ansible程序,过程如图5-3-2所示。

[root@ansible ~]#yum install ansible -y
图5-3-2 Ansible安装过程

提示:Ansible使用SSH运行处理。因此,安装完成以后不需要启动其他服务,即可以直接使用Ansible命令。

3.Ansible配置

(1)编辑服务器/etc/hosts文件,配置各服务器IP地址解析,如图5-3-3所示。

图5-3-3 /etc/hosts配置文件

(2)Ansible是基于SSH秘钥认证通信,因此需要在管理节点执行如图5-3-4所示命令,生成通信秘钥对。

图5-3-4 Ansible管理节点生成秘钥对

(3)执行如图5-3-5所示命令,复制管理节点的公钥至所有接受管控的节点,此时需要输入远程节点的账号口令。

图5-3-5 复制公钥至接受管控的主机

(4)Ansible常用配置文件说明。

/etc/ansible/ansible.cfg:Ansible主配置文件,配置Ansible的基本工作特性。

/etc/ansible/roles:存放角色的目录。角色(roles)是Ansible从1.2版本开始引入的新特性,用于层次化、结构化地组织playbook。roles能够根据层次型结构自动加载变量文件、tasks以及handlers等。通常用于基于主机构建服务的场景,也可以用于构建守护进程等场景。

/etc/ansible/hosts:定义Ansible管控主机列表的配置文件。

编辑/etc/ansible/hosts文件,添加如图5-3-6所示内容。

图5-3-6 /etc/ansible/hosts配置文件

/etc/ansible/hosts配置文件中的websrvs与dbsrvs表示定义的主机名,可以使用主机名、域名、IP地址分别表示,但使用前两者时,需要服务器能够正确解析对应的IP地址。保存配置文件以后,可以直接使用websrvs与dbsrvs名称控制指定的客户端。

5.3.3 Ansible基本操作

以下通过任务1至任务4,演示Ansible在日常运维过程中的基本操作。

任务1:Ansible统一执行Ping命令,测试各节点网络连通性。

执行如图5-3-7所示命令,测试所有管控节点的网络连通性,判断节点网络情况或在线状态。

图5-3-7 Ansible Ping测试运行情况

图5-3-7命令中的参数*表示通配符,指匹配所有的客户端。同时也可以使用?表示匹配单个字符,还可以使用5.3.2节Ansible安装与配置中定义的websrvs与dbsrvs名称指定特定的客户端。如图5-3-8所示为指定客户端的各种方式与执行结果。

图5-3-8 Ansible Ping测试运行情况

任务2:Ansible实现远程节点统一文件分发(复制)。

1.Ansible管理节点创建测试文件,执行命令如下。

[root@ansible ~]#cd /tmp
[root@ansible tmp]#echo “This is Ansible test file.” > Ansible.test

2.执行如图5-3-9所示命令,分发(复制)测试文件至所有客户端。

图5-3-9 复制文件至客户端

3.访问客户端节点,验证文件的分发情况,如图5-3-10所示。

图5-3-10 客户端文件验证

任务3:Ansible控制远程节点执行指定命令,远程安装应用程序。

1.Ansible控制远程节点执行Shell命令,指定节点安装FTP程序。执行命令如下,双引号部分为指定的Shell命令,如图5-3-11所示执行过程。

[root@ansible ~]#ansible websrvs -m shell -a "yum install ftp -y"
图5-3-11 远程节点执行指定的Shell命令

2.访问远程节点,验证程序安装情况,如图5-3-12所示。

图5-3-12 远程节点程序安装情况

任务4:Ansible控制远程节点执行指定脚本。

1.Ansible管理节点创建/tmp/script.sh测试脚本,编辑内容如图5-3-13所示。

图5-3-13 /tmp/script.sh测试脚本

提示:script.sh文件内容共3行,分别将服务器日期(date)、提示语(Tmprature file count:)以及/tmp目录文件的统计数量(ls -al /tmp | wc -l)逐行输出到服务器本地的/tmp/date.log文件。

2.执行如图5-3-14所示命令,控制远程节点执行指定脚本。

图5-3-14 控制远程节点执行指定脚本

3.访问远程节点,验证脚本执行情况,如图5-3-15所示。

图5-3-15 远程节点脚本执行情况

5.3.4 Ansible应用案例

任务:出于企业网络与信息安全的防护管理要求,运维工程师通常每隔3个月会修改所有服务器的用户密码。海量的服务器逐台操作,会花费大量人工在重复机械的事情上。利用Ansible的Playbook可以简单、轻松的完成该项任务。

1.Ansible管理节点编辑/tmp/playbook.yml文件,内容如图5-3-16所示。

图5-3-16 playbook.yml配置文件

参数说明:

hosts:用于指定要执行任务的主机,可以是一个或多个由冒号分隔的主机组。
gather_facts:除非明确说明不需要在远程主机上执行setup模块,否则默认自动执行。
tasks:任务模块。
name:任务的描述说明。
user:用于指定远程主机上执行任务的用户。
with_items:循环模块。

2.保存编辑的文件,执行如图5-3-17所示命令,运行Playbook任务。

图5-3-17 playbook任务执行情况

3.Playbook任务执行完成,即可尝试远程访问websrvs服务器。首先尝试原始密码登录,提示口令错误。再次尝试通过Playbook修改的指定密码,登录成功。过程如图5-3-18所示。

图5--3-18 webservs服务器登录测试

本章小结

本章介绍自动化运维技术在传统IT运维基础上的发展与革新,同时介绍目前市面上常用的两种自动化运维工具SaltStack与Ansible。通过介绍他们的安装、配置、架构、基本操作以及应用案例,了解自动化运维的过程与其基本原理。已经掌握编程基础的读者,可以继续阅读SaltStack与Ansible官方文档,了解SaltStack Pillar、Ansible Playbook等高级使用方式。IT运维人员通过对以上工具的自由组合以及创新性使用,可以实现更为复杂的功能以及系统管理的需求,同时释放IT运维人员繁琐的运维压力,提高运维质量。

本章习题

一、单项选择题

(1)Ansible 默认连接主机的端口是( )。

A.20 B.21 C.22 D.23

(2)关于Saltstack核心功能描述错误的是()。

A.Saltstack命令发送到远程系统是串行的

B.Saltstack使用安全加密的协议

C.Saltstack使用最小最快的网络载荷

D.Saltstack提供简单的编程接口

(3)SaltStack 采用的是()模式。

A.C/S B.B/S C.C/S与B/S混合模式 D.P2P

(4)以下关于SaltStack 描述错误的是()。

A.SaltStack是一种新的基础设施管理方式

B.SaltStack部署过程复杂,使用过程简单

C.SaltSatck扩展性良好

D.SaltSatck可以同时管理上万级服务器

(5)以下关于Ansible 描述错误的是()。

A.Ansible部署简单,只需要在管理端部署Ansible环境,被控端无需任何操作

B.Ansible默认使用SSH协议对设备进行管理

C.Ansible有大量常规运维操作模块,可实现日常绝大部分操作

D.Ansible不支持自定义模块,但可以通过API扩展功能

二、多项选择题

SaltStack master启动后默认监听( )和( )两个端口。

A.22 B.23 C.4505 D.4506

二、问答题

描述如何利用Ansible将管理节点的License文件分发到所有dbsrvs组的数据库服务器?