使用Ansible实现数据中心自动化的关键点。Ansible是一种开源自动化工具,可从中央控制节点集中配置服务器、安装软件或执行各种IT任务。它采用一对多、无客户端无代理机制,由控制节点通过SSH向远程客户端发送指令,完成任务(当然除了SSH也可以使用其他协议)。Ansible的主要用户是系统管理员,他们经常定期执行一些安装和配置应用程序的任务。但是,一些非特权用户也可以使用Ansible。例如,数据库管理员可以使用mysql用户通过Ansible创建数据库、添加数据库用户、定义访问权限等。让我们看一个简单的用例,其中系统管理员每天配置100台服务器,并且必须在每台机器上执行一系列Bash命令,然后才能将其交付给用户。这是一个简单的例子,但它应该证明在yaml文件中编写命令并在远程服务器上运行它们是非常容易的。并且如果运行环境不同,可以加上判断条件,表示某些命令只能在特定的服务器上运行(例如:只能在非Ubuntu或Debian的系统上运行yum命令)。Ansible的一个重要特性是使用playbook来描述计算机系统的最终状态,因此playbook可以在服务器上重复执行而不影响其最终状态(LCTT:idempotent)。如果任务已经执行(例如,“用户sysman已经存在”),Ansible将忽略它并继续执行后续任务。定义Task任务:是最小的工作单元,它可以是一个动作,例如“安装数据库服务”、“安装网络服务器”、“创建防火墙规则”或“将这个配置文件复制到那个服务器”。动作玩法:由任务组成,例如一个动作的内容是“为web服务设置数据库”,包括以下任务:1)安装数据库包;2)设置数据库管理员密码;3)创建数据库实例;4)为实例分配权限。Scriptplaybook:(LCTT译注:playbook原指美式橄榄球队的战术手册,也常被称为“playbook”,这里的约定是使用“playbook”的译名)由动作组成,一个playbook可能长这样this:“设置我的网站,包括后台数据库”,操作包括:1)设置数据库服务器;2)设置网络服务器。作用:用于保存和组织脚本,以便共享和重用。以前面的例子为例,如果你需要一个全新的web服务器,你可以用别人写过分享的角色来搭建。因为角色是高度可配置的(如果编写正确的话),它们可以很容易地根据部署需要重用。AnsibleGalaxyAnsibleGalaxy:这是一个在线仓库,用于存储社区成员上传的角色,供彼此共享。它与GitHub紧密集成,因此可以在Git存储库中组织这些角色,然后通过AnsibleGalaxies共享。这些定义以及它们之间的关系可以用下图来描述:请注意,上面的例子只是组织任务的一种方式,当然我们也可以将安装数据库和安装web服务器的脚本拆解放到不同的角色。AnsibleGalaxy上最常见的作用就是独立安装和配置各个应用服务,安装mysql和httpd可以参考这些例子。编写Playbook的技巧学习Ansible的最佳资源是其官方文档。另外,就像学习中的其他任何事物一样,搜索引擎是您最好的朋友。我建议您从安装应用程序或创建用户等简单任务开始。以下是一些有用的指南:测试时选择较少的服务器,以便您的操作可以更快地执行。如果它们在一台机器上成功执行,那么它们在其他机器上也没有问题。在实际运行之前始终进行试运行,以确保所有命令正确执行(要运行测试,请添加--check-mode参数)。尽可能多地进行测试,不要担心搞砸。任务描述了期望的状态,如果系统达到了期望的状态,任务就会被忽略。确保正确解析/etc/ansible/hosts中定义的主机名。由于使用SSH与远程主机通信,主控节点必须能够接受密钥,所以你面临以下选择:1)要么在正式发布前做好与远程主机的密钥交换工作使用;2)或者开始管理一个新的远程主机准备输入“Yes”,因为要接受对方的SSH密钥交换请求(LCTT译注:还有一个不太安全的选项,修改主控的ssh配置文件节点,将StrictHostKeyChecking设置为“no”)。虽然您可以在同一个剧本中组合不同Linux发行版的任务,但为每个发行版编写单独的剧本更清晰。总结一下Ansible是您在数据中心实现运维自动化的一个不错的选择,因为它:不需要客户端,所以比其他自动化工具更容易安装。在YAML文件中存储指令(尽管也支持JSON)比编写shell脚本更简单。开源,因此您也可以做出贡献,使其更加强大!您如何使用Ansible实现数据中心自动化?请在评论中分享您的经验。
