金鱼哥RHCA回忆录:DO447构建高级作业工作流--使用事实缓存提高性能

举报
金鱼哥 发表于 2022/07/11 10:56:37 2022/07/11
【摘要】 第十二章 构建高级作业工作流--使用事实缓存提高性能

🎹 个人简介:大家好,我是 金鱼哥,CSDN运维领域新星创作者,华为云·云享专家
📚个人资质:CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL😜
💬格言:努力不一定成功,但要想成功就必须努力🔥

🎈支持我:可点赞👍、可收藏⭐️、可留言📝


📜10.1.1 事实缓存

Ansible事实是Ansible在托管主机上自动发现的变量。事实包含特定于主机的信息,可以像剧本、条件中使用的常规变量一样使用。循环,或依赖于从托管主机收集的值的任何其他语句。

通常情况下,每个剧本都会在第一个任务之前自动运行setup模块,以便从每个与剧本的主机模式匹配的托管主机中收集事实。这确保了剧本拥有当前的事实,但也会产生一些负面后果。

运行setup模块来为每个剧本收集事实会产生明显的性能后果,特别是在托管主机的大量清单上。如果你在剧本中没有使用任何事实,你可以加快执行的一种方法是关闭自动事实搜集。你可以通过设置gather_facts: no来做到这点。请注意,如果你在剧中使用事实,你可能无法做到这一点。

剧本还可以通过使用魔法变量hostvars引用另一个主机的事实。例如,在托管主机服务器上运行的任务可以通过引用变量hostvars ['serverb'] ['ansible_facts'] ['default_ipv4'] ['address ']来访问事实ansible_facts['default_ipv4'] ['address ']的值。然而,这只有在这部剧或同一剧本中更早的一部剧已经从服务器上搜集到事实时才有效。

您可以使用事实缓存来解决这两个问题。一个剧本可以为目录中的所有主机收集事实,并缓存这些事实,以便后续剧本可以在不收集事实或手动运行setup模块的情况下使用它们。


📑在Ansible Tower中启用事实缓存

Red Hat Ansible Tower 3.2及以后版本包括了对事实缓存的集成支持和事实缓存的数据库。您需要在全局级别上管理事实缓存的超时。事实缓存控制由作业模板决定。

Ansible Tower中有一个全局设置,用于控制每个主机的事实何时过期。在web界面左侧导航栏中选择“Settings”,显示“config Tower”窗格,然后单击“JOBS”。设置Per-Host Ansible Fact Cache Timeout可以控制收集到的Ansible事实在缓存中的有效时间。这是以秒为单位的。

默认值设置为0,意味着存储在缓存中的信息始终有效。但是,如果不定期检查事实以更新缓存,则可能会由于托管主机上的更改而导致事实过时。
在这里插入图片描述

为了优化事实缓存,设置gather_facts: no在剧本中禁用自动事实收集。您还需要为任何使用包含这些剧本的剧本的Ansible Tower作业模板启用Use Fact Cache。然后,剧本依赖于事实缓存中的信息来使用事实。

您还需要定期运行一个play来填充事实缓存,以保持缓存的事实是最新的。在Ansible Tower中做这件事的一个好方法是建立一个剧本,收集事实作为一个计划的工作(在本课程的其他地方讨论)。那份工作可以使用常规的剧本,核实事实,或者你可以建立一个最小的剧本来收集事实,例如下面的例子:

- name: Refresh fact cache
  hosts: all
  gather_facts: yes

因为没有任务或角色部分,所以这个剧本唯一要做的事情就是收集事实。


📑注意:

您不需要同时为所有主机收集事实。为更小的主机集收集事实以分散负载可能是有意义的。重要的是要确保在所有主机过期或失效之前查明它们的事实。

下面的过程展示了如何在Ansible Tower接口中启用事实缓存:

  1. 在左侧导航栏单击“模板”。

  2. 选择适当的作业模板并单击其名称以编辑设置。

  3. 在页面的OPTIONS部分,选择Use Fact Cache旁边的复选框。
    在这里插入图片描述

  4. 单击“保存”,保存修改后的作业模板配置。

现在,无论何时运行基于启用了Use Fact Cache选项的模板的新作业,作业都将使用事实缓存。如果Ansible Playbook也将gather_facts变量设置为yes,则作业将采集事实,检索它们,并将它们存储在事实缓存中。


📑注意:

当一个作业启动时,Ansible Tower将每个托管主机的所有ansible_facts从运行作业注入到memcache中。完成这项工作后,Ansible Tower从memcache中检索特定主机的所有记录,然后在事实缓存数据库中保存更新时间晚于缓存副本的每个事实。


📜10.1.2 课本练习

[student@workstation ~]$ lab project-facts start

📑1. 以admin帐号和redhat密码登录Ansible Tower web。


📑2. 更改My webservers DEV项目,使其自动触发SCM更新。

在这里插入图片描述


📑3. 使用DEV webservers setup作业模板启动一个作业。

(这个模板是通过setup命令设置的。)

这项工作将会失败。查看作业的输出屏幕,并尝试确定失败的原因。
在这里插入图片描述


📑4. 更新代码。

[student@workstation ~]$ cd ~/git-repos
[student@workstation git-repos]$ cd my_webservers_DEV
[student@workstation my_webservers_DEV]$ git pull
[student@workstation my_webservers_DEV]$ vim apache-setup.yml 
---
- hosts: all
  name: Install the web server and start it
  become: yes
  gather_facts: yes

[student@workstation my_webservers_DEV]$ git add --all
[student@workstation my_webservers_DEV]$ git commit -m "Enabling facts gathering"
[student@workstation my_webservers_DEV]$ git push

📑5. 使用已编辑的作业模板启动作业。

在Ansible Tower的web Ul中,编辑DEV webservers setup作业模板来启用USE FACT CACHE选项。

因为修改后的剧本包含了gather_facts: yes,它将收集Ansible事实。因为作业模板有USE FACT CACHE集,收集到的事实将存储在事实缓存中以备将来使用
在这里插入图片描述
在这里插入图片描述


📑6. 改回原代码。

[student@workstation my_webservers_DEV]$ vim apache-setup.yml
---
- hosts: all
  name: Install the web server and start it
  become: yes
  gather_facts: no

[student@workstation my_webservers_DEV]$ git add --all
[student@workstation my_webservers_DEV]$ git commit -m "Disabling facts gathering"
[student@workstation my_webservers_DEV]$ git push

📑7. 使用DEV webservers setup作业模板启动另一个作业。

回到Ansible Tower的web UI。

作为Developers团队的一员,使用DEV webservers setup作业模板启动一个作业。

即使事实收集被关闭,作业仍然成功,因为剧本中变量使用的事实可以使用事实缓存。这项工作也应该运行得更快,因为它不需要查清事实。
在这里插入图片描述
在这里插入图片描述


📑8. 验证Ansible事实已经存储在Ansible Tower事实缓存中。

在这里插入图片描述


💡总结

RHCA认证需要经历5门的学习与考试,还是需要花不少时间去学习与备考的,好好加油,可以噶🤪。

以上就是【金鱼哥】对 第十二章 构建高级作业工作流–使用事实缓存提高性能 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。

💾红帽认证专栏系列:
RHCSA专栏:戏说 RHCSA 认证
RHCE专栏:戏说 RHCE 认证
此文章收录在RHCA专栏:RHCA 回忆录

如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。

如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。