热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于java:进击的-Ansible二如何快速搞定生产环境-Ansible-项目布局

Tips:与前文《进击的Ansible(一):Ansible疾速入门》一样,本文应用的Ansible版本2.5.4,我的项目演示环境MacOS。因为Ansible我的项目开发沉闷版本更新快,很多API接口不向后兼容,所以对照本文实际时请确保所用版本统一。

Tips:与前文 《进击的 Ansible(一):Ansible 疾速入门》 一样,本文应用的 Ansible 版本 2.5.4,我的项目演示环境 MacOS。因为 Ansible 我的项目开发沉闷版本更新快,很多 API 接口不向后兼容,所以对照本文实际时请确保所用版本统一。

学完前文《进击的 Ansible(一):Ansible 疾速入门》后,用来公布单体我的项目入不敷出。然而理论生产环境中一个服务往往有多个组件,比方部署大数据服务时,经常须要部署一个“大数据全家桶”:Hadoop、 Zookeeper、 Hive、 Mysql、 Flink 等。这时仅靠前文中的常识就有点顾此失彼了,繁多的 yaml 文件和其余配置文件依赖关系简单,如果不能正确地划分目录组织我的项目构造,对于前期保护十分不利。所以明天的文章着重解决一下这个问题:如何迷信正确地划分 Ansible 利用的目录构造?

把 Ansible 视为一种编程语言
首先要建立这样一个观点:“把 Ansible 视为一种编程语言”。咱们能够将 Ansible 了解为专门用来治理自动化公布的 DSL,它的根本语法规定约等于 yaml 语言规定,诸如 synchronize、pip、template 等。同时 Ansible 模块可等价为语言的内置函数或内置包,也就是编写 playbook 就是在写 Ansible 这门语言的代码块。如此,只有咱们沿着编程语言的思路去了解 Ansible,很多纳闷会迎刃而解:比方 Ansible 反对变量,模块 when 就是编程语言的流程管制语句 if, 模块 loop 或 with_* 就是编程语言中的循环迭代语句 for 或 while。

应用编程语言进行我的项目开发的过程中,咱们是如何升高我的项目复杂度的?当然是进行“模块化”。不同的性能封装到不同的包或文件中,这样形成一个业务性能的最小单位咱们称之为“模块”。在我的项目的入口文件中,咱们通过 import (Python、Golang 等语言中应用此关键字) 或 require (Node.js 等语言应用此关键字)等关键字把须要的模块载入进来,而后就能够进行业务逻辑上的编排。https://zhuanlan.zhihu.com/p/…
https://zhuanlan.zhihu.com/p/…
https://zhuanlan.zhihu.com/p/…
https://zhuanlan.zhihu.com/p/…
https://zhuanlan.zhihu.com/p/…
https://zhuanlan.zhihu.com/p/…
https://zhuanlan.zhihu.com/p/…
https://zhuanlan.zhihu.com/p/…
https://zhuanlan.zhihu.com/p/…
https://zhuanlan.zhihu.com/p/…

这样做的长处不言而喻,一个模块是一个业务性能的具体实现,当前期有批改的需要时只须要批改相干的模块即可,这正是 SOLID 准则中的 “SRP” (繁多职责准则) 所提倡的。此外,模块化还反对像“搭积木”一样依据业务需要灵便地组织业务流程,这样就能最大限度地复用以后模块,这也合乎编程准则中的 “DRY” (Don’t Repeat Yourself)。

因而在咱们将 Ansible 视为一门编程语言(DSL)的当初,咱们能够发现在 Ansible 文档中用 Roles 示意“模块”这个概念,用 import_tasks、include_tasks 等示意 import 这个概念。这里说一个题外话,不晓得有没有人感觉 Ansible 中创造的“playbook”、“roles” 等直译成“剧本”、“角色”的概念让人摸不着头脑?

至关重要的概念:Roles
当初咱们建立了“Roles = 模块”的概念。咱们在看一下文档中对 Roles 的定义,丰盛一下细节:

Roles let you automatically load related vars, files, tasks, handlers, and other Ansible artifacts based on a known file structure. After you group your content in roles, you can easily reuse them and share them with other users.

“角色容许您基于已知的文件构造主动加载相干的变量、文件、工作、处理程序和其余Ansible工件。在将内容按角色分组后,能够轻松地重用它们并与其余用户共享它们。”

直白来讲就是 Roles 是对变量、文件、工作等的封装,目标是为了模块重用。

如何应用 Roles?

在软件设计范式的最佳实际中有一条叫做 “约定大于配置”,简略来讲就是“软件中做了一些前提性假如,这些假如就是软件开发者与软件用户的约定。作为软件用户你恪守这些约定即可,不再须要(或不反对)对这些约定进行配置。”—— 肯定水平上能够了解为软件中的默认配置。

Ansible 在应用 Roles 时同样存在 “约定大于配置” 的状况,并且这些约定是硬性的(即不反对在配置文件中自定义)。

首先,Role 的目录构造是固定的。

An Ansible role has a defined directory structure with eight main standard directories. You must include at least one of these directories in each role. You can omit any directories the role does not use.

Ansible 角色有一个定义好的目录构造,其中有八个次要的规范目录。该已规定好的目录构造,示例如下:

├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars

└── main.yml

By default Ansible will look in each directory within a role for a main.yml file for relevant content.

这八个目录的作用是:

tasks/main.yml:搁置 role 执行工作时用到的文件。

handlers/main.yml:处理程序,能够在 role 外部或内部应用

library/my_module.py:模块,能够在 role 中应用(无关更多信息,请参见在rroles 中嵌入模块和插件)。

defaults/main.yml:role 的默认变量(无关更多信息,请参阅应用变量)。这些变量具备所有可用变量中最低的优先级,并且能够被任何其余变量(包含库存变量)轻松笼罩。

vars/main.yml:role 中的其余变量。(与 Ansible 模块中的 vars 作用统一,只不过这里的 vars 示意目录。)

files/main.yml:role 部署时用到的文件。

templates/main.yml:role 部署时用到的模板。与 Ansible 模块中的 templates 作用统一,只不过这里的 templates 示意目录。)

meta/main.yml:role 应用到的元数据。

在每个角色中必须蕴含至多一个这样的目录,当然咱们能够省略角色不应用的任何目录,然而每个目录下的 main.yml 文件是该目录的入口文件,Ansible 读取时会默认查找该文件。所以这个 main.yml 文件不能省略。

其次,存储和查找 roles。

上文咱们曾经理解到了一个 role 的外部目录构造,然而这远远不能满足理论生产的需要。在文章的开始局部咱们也以一个大数据我的项目为例,往往须要部署 Flink、Hadoop 等多个组件。这每一个组件都能够看做是一个 role。那么 Ansible 是如何查找 roles 的呢?

默认状况下,有 2 种形式:

在 Ansible 的公布我的项目中,创立一个叫做 roles 的目录。

默认状况下,Ansible 会主动查找 /etc/ansible/roles 目录下的 role。

举个例子,咱们要应用 Ansible 创立一个公布大数据“全家桶”的我的项目 bigdata,该我的项目下要蕴含 Flink、Mysql、Hive 这 3 个 role。那么 bigdata 这个我的项目的目录构造大抵如下:

➜ bigdata tree -L 3
.
└── roles

├── flink
│   ├── defaults
│   ├── files
│   ├── handlers
│   ├── meta
│   ├── tasks
│   ├── templates
│   ├── tests
│   └── vars
├── hive
│   ├── defaults
│   ├── files
│   ├── handlers
│   ├── meta
│   ├── tasks
│   ├── templates
│   ├── tests
│   └── vars
└── mysql
    ├── defaults
    ├── files
    ├── handlers
    ├── meta
    ├── tasks
    ├── templates
    ├── tests
    └── vars

很显著能够看到 roles 下的 Flink、hive、Mysql 的子目录构造就是上文中提到的八大目录。

ansible-galaxy
疾速创立 Role

从上文可知,每创立一个 role 都必须至多含有八大目录之一。所以 Ansible 中已内置了一个命令行工具 ansible-galaxy 疾速创立 role 的八大目录,加重咱们的工作量。

假如该 role 名称是 flink,用如下命令生成相干目录:

ansible-galaxy init flink
应用 tree 命令看到 ansible-galaxy 生成的目录正是 role 所要求的规范的八个目录。

➜ tree flink
flink
├── README.md
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars

└── main.yml

ansible-galaxy init 其余几个实用的参数:

ansible-galaxy init -force role_name,默认状况下创立的 role 与当前工作目录下存在的文件重名的话,会抛出异样。应用 -force 选项会强制创立 role 目录,并对 role 目录下重名的目录或文件进行替换。

ansible-galaxy init –role-skeleton=/path/to/skeleton role_name,应用过 Maven 的同学应该晓得, Maven 反对以其余我的项目做骨架创立新我的项目。ansible-galaxy 同样反对该性能,以 /path/to/skeleton 门路下的 role 为骨架,把所有的文件都进行拷贝来创立新的 role。

Galaxy:role 在线分享社区

此外与 Docker Hub、Grafana Dashboards 相似,Ansible Galaxy 也有一个在线社区 Galaxy[https://galaxy.ansible.com/home],下面有开发者分享的各种曾经开发好的 roles。不便咱们搜寻现成的 role 下载,也能够上传本人开发的 role 到 Galaxy。

下载或上传 role 到 Galaxy 网站,同样须要应用命令行工具 ansible-galaxy。默认状况下 ansible-galaxy 调用的 Galaxy 服务端的地址是 https://galaxy.ansible.com, 能够通过 -server 选项或在 ansible.cfg 文件中重新配置 Galaxy 的地址。

下载 roles

下载 roles 的语法模板是:

$ ansible-galaxy install username.role_name
默认状况下 ansible-galaxy 会把 role 下载到环境变量 ANSIBLE_ROLES_PATH 中,ansible-galaxy 提供了参数 –role_path 指定 role 下载的地址。

ansible-galaxy 其余命令速览

ansible-galaxy search elasticsearch,查找 Galaxy 网站中的 role elasticsearch

ansible-galaxy info username.role_name,查看 username.role_name 的详细信息

ansible-galaxy list,查看已装置的 roles

ansible-galaxy remove username.role_name,卸载装置的 username.role_name

ansible-galaxy login,登录 Galaxy 网站

整体布局:Suit is best
如果你保持读完上述局部,那么你必定对于如何应用 role 了然于心,简略来讲就是以后 Ansible 利用下须要存在一个叫做 roles 的目录。接下来咱们聊聊 Ansible 利用下除了 roles 目录外,其余目录该如何布局呢?Ansible 最佳实际官网文档[https://docs.ansible.com/ansi…]中是这样倡议的:

Your usage of Ansible should fit your needs, however, not ours, so feel free to modify this approach and organize as you see fit.

One crucial way to organize your playbook content is Ansible’s “roles” organization feature, which is documented as part of the main playbooks page. You should take the time to read and understand the roles documentation which is available here: Roles.

Ansible 整体的目录构造没有一定之规,适宜你的以后需要就好。然而 Roles 这个概念至关重要。

良心的 Ansible 官网在 Github 上开了一个我的项目 ansible-examples[https://github.com/ansible/an…]专门用来收集优良的最佳实际。大家能够依据理论需要排汇借鉴,上面我分享一下我罕用的我的项目布局:

.
├── Makefile
├── README.md
├── deploy.retry
├── deploy.yml
├── files
│ ├── apache-maven-3.8.3-bin.tar.gz
│ ├── apache-zookeeper-3.7.0-bin.tar.gz
│ ├── flink-1.14.0-bin-scala_2.11.tgz
│ ├── hadoop-2.7.5.tar
│ ├── hadoop-3.3.1.tar.gz
│ ├── mysql-connector-java-8.0.26-1.el7.noarch.rpm
│ ├── mysql-connector-java-8.0.26.jar
│ └── openjdk-11.0.2_linux-x64_bin.tar.gz
├── inventories
│ └── hosts
└── roles

├── flink
├── hadoop
├── hadoop3
├── hive
├── java
├── linux
├── mvn
├── mysql
└── zookeeper

Makefile,用来封装 Ansible 的发布命令

deploy.ym,是执行 Ansible 命令时的入口文件

files,用来寄存 role 相干的部署包,个别体积较大,不会应用 git 进行版本治理。

inventories,用来治理部署机器。

roles,用来部署的组件。从下面的目录可知,以后次要是用来部署大数据相干的组件。


推荐阅读
  • HBase Java API 进阶:过滤器详解与应用实例
    本文详细探讨了HBase 1.2.6版本中Java API的高级应用,重点介绍了过滤器的使用方法和实际案例。首先,文章对几种常见的HBase过滤器进行了概述,包括列前缀过滤器(ColumnPrefixFilter)和时间戳过滤器(TimestampsFilter)。此外,还详细讲解了分页过滤器(PageFilter)的实现原理及其在大数据查询中的应用场景。通过具体的代码示例,读者可以更好地理解和掌握这些过滤器的使用技巧,从而提高数据处理的效率和灵活性。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • 【并发编程】全面解析 Java 内存模型,一篇文章带你彻底掌握
    本文深入解析了 Java 内存模型(JMM),从基础概念到高级特性进行全面讲解,帮助读者彻底掌握 JMM 的核心原理和应用技巧。通过详细分析内存可见性、原子性和有序性等问题,结合实际代码示例,使开发者能够更好地理解和优化多线程并发程序。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
  • Python错误重试让多少开发者头疼?高效解决方案出炉
    ### 优化后的摘要在处理 Python 开发中的错误重试问题时,许多开发者常常感到困扰。为了应对这一挑战,`tenacity` 库提供了一种高效的解决方案。首先,通过 `pip install tenacity` 安装该库。使用时,可以通过简单的规则配置重试策略。例如,可以设置多个重试条件,使用 `|`(或)和 `&`(与)操作符组合不同的参数,从而实现灵活的错误重试机制。此外,`tenacity` 还支持自定义等待时间、重试次数和异常处理,为开发者提供了强大的工具来提高代码的健壮性和可靠性。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 该大学网站采用PHP和MySQL技术,在校内可免费访问某些外部收费资料数据库。为了方便学生校外访问,建议通过学校账号登录实现免费访问。具体方案可包括利用学校服务器作为代理,结合身份验证机制,确保合法用户在校外也能享受免费资源。 ... [详细]
  • CSS3 @font-face 字体应用技术解析与实践
    在Web前端开发中,HTML教程和CSS3的结合使得网页设计更加多样化。长期以来,Web设计师受限于“web-safe”字体的选择。然而,CSS3中的`@font-face`规则允许从服务器端加载自定义字体,极大地丰富了网页的视觉效果。通过这一技术,设计师可以自由选择和使用各种字体,提升用户体验和页面美观度。本文将深入解析`@font-face`的实现原理,并提供实际应用案例,帮助开发者更好地掌握这一强大工具。 ... [详细]
  • 在搭建Hadoop集群以处理大规模数据存储和频繁读取需求的过程中,经常会遇到各种配置难题。本文总结了作者在实际部署中遇到的典型问题,并提供了详细的解决方案,帮助读者避免常见的配置陷阱。通过这些经验分享,希望读者能够更加顺利地完成Hadoop集群的搭建和配置。 ... [详细]
  • 字节跳动深圳研发中心安全业务团队正在火热招募人才! ... [详细]
  • 在Spring Boot项目中,通过YAML配置文件为静态变量设置值的方法与实践涉及以下几个步骤:首先,创建一个新的配置类。需要注意的是,自动生成的setter方法默认是非静态的,因此需要手动将其修改为静态方法,以确保静态变量能够正确初始化。此外,建议使用`@Value`注解或`@ConfigurationProperties`注解来注入配置属性,以提高代码的可读性和维护性。 ... [详细]
  • 在SpringBoot多模块Maven项目中,经常会遇到一个启动模块无法访问其他模块中的静态资源的问题。本文首先详细描述了该问题的具体表现,然后从配置文件入手,探讨了可能的原因,并提出了一种通过调整`application.yaml`配置来解决这一问题的有效方法。此外,还介绍了如何通过优化项目结构和使用Spring Boot的静态资源路径映射功能,进一步提高资源引用的灵活性和可靠性。 ... [详细]
author-avatar
yngbzl_165
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有