Ansible自动化运维工具


随着移动互联网物联网互联网+、大数据、云计算等大规模的应用,以及人们日常生活中的互联网化、互联网也逐渐地普及千家万户。互联网的发展不仅影响我们的生活,同时也影响了整个经济体。在体验互联网带来便利的同时,人们也不再满足于“可以用”,而“用的简单和方便”称为人们生活的标准。在国家政策、需求、利益的趋势下,互联网的发展 速度可想而知。众所周知,智能的背后意味着复杂、意味着运维工程师的工作量加大,这一现象在互联网的发展中体现的淋漓尽致!在互联网迅速发展的同时,运维这个工作岗位也从默默无闻的后台逐步走向公众的视野,被更多人所知晓。早期的互联网公司中服务器数量有十台、几十台的规模已经非常庞大,运维工程师同时操作十几乃至二十台机器,勉强可以完成。但是如何保证每个人的操作都完全一致呢?又如何保证所有的操作都能准确无误?今天的互联网公司,像淘宝、京东、腾讯等这样的大企业,拥有几十台甚至上百台机器早已不是什么稀奇的事,再沿用传统的办法逐台维护已然不现实。在这样的背景下,运维自动化应运而生!运维自动化工具有很多,不过现在使用最广泛的就是——Ansible。这篇博文主要介绍的内容有:理论部分初学者向来都是不愿了解的,大部分都是“我知道怎么配置,就行了!”、“等用到的时候再上网上查资料”。不过,真正能够掌握一个工具,最重要的就是了解它的工作原理,及相关的配置!如果不了解它的工作原理,如果某一天服务出现异常情况,哪些不明白其工作原理的人,就是“两眼一抹黑”,排错也不知道从何下手。所以,大家就知道了解并掌握工具背后的工作原理是多么重要了!Ansible是近年越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为的失误。Ansible通过本身集成的非常丰富的模块实现各种管理任务,其自带模块超多上千个。更为重要的是,它的操作非常简单,即使新手也比较容易上手,但它提供的功能确实非常丰富,在运维领域,它几乎可以做任何事。Ansible自2012年发布以来,很快在全球流行。其特点表现如下:Ansible没有客户端,所以不需要在被管理主机添加代理程序,通过SSH完成底层通信,而SSH在Linux的发行版本中默认已经安装并启用。而在Windows系统下,则依赖于PowerShell,Ansible要求管理端必须是Linux系统,在管理节点通过应用模块将指令发送到被管理主机上,并在执行完毕后自动删除产生的临时文件。根据Ansible使用霍城中的不同橘色,可将其分为以下三部分:
如图所示:Ansible使用者可以采用多种方式和Ansible交互,图中展示了四种方式:Ansible工具集包含Inventory、Modules、Plugins和API。其中:具体表现如下:Ansible的作用对象不仅仅是Linux和非Linux操作系统的主机,也可以作用于各类PUBLIC/PRIVATE、商业和非商业设备的网络设施。使用者使用Ansible或Ansible-Playbooks时,在服务器终端输入Ansible的Ad-Hoc命令集或Playbooks后,Ansible会遵循预选安排的规则将Playbooks逐步拆解为Play,再将Play组织成Ansible可以识别的任务,随后调用任务涉及的所有模块和插件,根据Inventory中定义的主机列表通过SSH将任务集以临时文件或命令的形式传输到远程客户端执行并返回执行结果,如果是临时文件则执行完毕后自动删除!Ansible的安装部署非常简单,以RPM安装为例,其依赖软件只有Python和SSH,且系统默认均已安装。Ansible的管理端只能是Linux,如Redhat、Debian、Centos。本次实验以CentOS Linux release 7.3.1611 为例:实验环境可以从互联网上直接下载所需软件包,本篇博客提供安装Ansible自动化运维工具所需的依赖软件包,网盘链接:链接:https://pan.baidu.com/s/1l47WxsEpq99lYmxsVTUQMg
提取码:axmg
如果使用本人提供的网盘链接,自己建立yum配置文件,挂载光盘这些就不说了啊,毕竟太基础了!使用互联网直接安装即可(实验环境建议防火墙和SELinux都关闭)!Ansible通过SSH对设备进行管理,而SSH包含两种认证方式:一种是通过密码认证,另一种是通过密钥对验证。密码验证必须和系统交互;而密钥对验证则是免交互式登录。如果希望通过Ansible自动管理设备,应该配置为免交互式登录被管理设备。如果对SSH免交互式登录不太了解的朋友可以参考博文:Linux远程访问及控制 里面有详细的介绍,这里就不详细介绍了!至此,已经完成Ansible的部署,接下来就可以通过Ansible对设备进行管理了。Inventory是Ansible管理主机信息的配置文件,相当于系统Hosts文件的功能,默认存放在/etc/ansible/hosts。在hosts文件中,通过分组来组织设备,Ansible通过Inventory来定义主机和分组,通过在ansible命令中使用选项-i或–inventory-file来指定Inventory。比如:如果使用默认的Inventory文件(/etc/ansible/hosts),也可以不指定Inventory文件,比如:Ansible通过设备列表以分组的方式添加到/etc/ansible/hosts文件来实现对设备的管理,所以在正式管理之前,首先要编写好hosts文件。hosts文件中,以[ ]包含的部分代表组名,设备列表支持主机名和IP地址。默认情况下,通过访问22端口(SSH)来管理设备。若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口标明,以行为单位分隔配置。另外,hosts文件还支持通配符。如下:可以将一个主机同时归置在不同的组中。配置完成之后,可以针对hosts定义的组进行远程管理,也可以针对组中的某一个或多个主机操作。比如:
(1)只对web组中192.168.1.2主机操作,通过–limit参数限定主机的变更:(2)只对192.168.1.2主机操作。通过IP限定主机的变更:(3)针对192.168.1.0网段主机操作,这就需要使用到通配符来限定主机的变更了:Ansible的维护命令大多数是以ansible开头,在终端输入ansible后连续按两次Tab键,会补全所有跟ansible相关的命令,比如:这里只简单介绍几个常用的命令:ansible是生产环境中使用非常频繁的命令之一,主要在以下场景使用:非固化需求是指临时性的维护,如查看web服务器组磁盘使用情况、复制一个文件到其他机器等。类似这些没有规律的、临时需要做的任务,我们成为非固化需求,临时一次性操作,语法如下:可用的选项,如图:
(1)检查所有主机是否存活,命令如下:(2)列出web组所有的主机列表,命令如下:(3)批量显示web组中的磁盘使用空间,命令如下:web关键字需要提前在/etc/ansible/hosts文件中定义组。Ansible的返回结果非常友好,一般会用三种颜色来表示执行结果:Ansible-doc用来查询ansible模块文档的说明,类似于man命令,针对每个模块都有详细的用法说明及应用案例介绍,语法如下:常用的命令:Ansible-playbook是日常应用中使用频率最高的命令,类似于Linux中的sh或source命令,用来执行系列任务。其工作机制:通过读取预先编写好的playbook文件实现集中处理任务。Ansible-playbook命令后跟yml格式的playbook文件,pla开发云主机域名ybook文件存放了要执行的任务代码,命令使用方式如:Ansible-console是Ansible为用户提供的一款交互式工具,类似于Windows的cmd或者是Linux中shell。用户可以在ansible-console虚拟出来的终端上像shell一样使用Ansible内置的各种命令,这为习惯于使用shell交互式方式的用户提供了良好的使用体验。在终端输入ansible-console命令后,显示如下:Ansible所支持的模块有很多这里简单介绍几个常用的,如下:command模块在远程主机执行命令,但是不支持管道、重定向等shell的特性。常用的参数如下:示例:shell模块在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令。和command模块的区别是它支持shell特性:如管道、重定向等示例:copy模块用于复制指定主机文件到远程主机的指定位置。常见的参数有:示例:hostname模块用于管理远程主机上的主机名。常用的参数:示例:yum模块基于yum机制,对远程主机管理程序包。常用的参数有:示例:service模块主要是用来管理远程主机上的服务的模块。常见的参数有:示例:user模块主要用于管理远程主机上的用户账号。常见的参数有:示例:常用的模块就介绍这么多!playbook配置文件使用YAML语法,具有简洁明了、结构清晰等特点。playbook配置文件类似于Shell脚本,是一个YAML格式的文件,用于保存针对特定需求的任务列表。前面提到的ansible命令虽然可以完成各种任务,但是当配置一下复杂任务时,逐条输入命令就显得效率低下。更有效的方式是在playbook配置文件中放置所有的任务代码,利用ansible-playbook命令执行该文件,可以实现自动化运维。YAML文件的扩展名通常识.yaml或.yml。YAML语法与其他高级语言类似,语法非常严格(建议手打,不要复制,否则可能会出错误的),其结构通过缩进来展示,通过“-”来代表项;“:”用来分隔键和值;整个文件以“—”开头并以“…”结尾,如下所示:所有的“-”和“:”后面均有空格,而且注意缩进和对齐,如图:
playbook的核心元素包含一下内容,如图:
playbook文件定义的任务需要通过ansible-playbook命令进行调用并执行。常用的参数如图:
示例:远程主机查看效果:通常情况先进行测试测试没有问题,再执行任务!需要触发才能执行的任务,当之前定义在tasks中的任务执行成功后,若希望在此基础上触发其他的任务,这时就需要定义handlers。handlers具有以下特点:示例:将多种不同的tasks的文件集中存储在某个目录下,则该目录就是角色,角色一般存放在/etc/ansible/roles/目录下,可通过ansible的配置文件来调整默认的角色目录,/etc/ansible/roles/目录下有很多子目录,其中每一个子目录对应一个角色,每个角色也有自己的目录结构,如图:
/etc/ansible/roles/为角色的集合,该目录下由自定义的各个子目录,如图:
图中目录中,tasks、handlers、vars、meta、default至少包含一个main.yml文件,该目录下也可以有其他.yml文件,但是需要在main.yml文件中用include指令将其他.yml文件包含起来。有了角色然后,可以直接在yaml文件(playbook配置文件中调用角色)。如下:可以只调用一个角色,也可调用多个角色。当定义了角色然后用ansible-playbook playbook文件名即可!此时ansible会到角色集合的目录(/etc/ansible/roles)去找相应的目录mariadb,然后依次执行mariadb目录下的所有代码。要求在远程主机上安装mariadb数据库,安装完成之后,新建数据库,并允许test用户对其拥有所有的权限。具体操作如下:
远程主机及ansible管理端均已配置完成yum仓库。ansible主机安装mariadb数据库,生成mariadb数据库的配置文件。远程安装mariadb数据库已经完成!其实跟安装mariadb数据库差不多!客户端验证:关于自动化运维工具Ansible就简单介绍这些。———————— 本文至此结束,感谢阅读 ————————

相关推荐: nginx lua如何取后端redis key为数组

概念Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:)开发的,第一个公开版本0.1.0发布于2004年…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 04/12 09:19
Next 04/12 09:19