切割玛瑙的工具

engraver的Python项目详细描述


#雕刻机是管理和部署onyx集群的命令行工具。

-一个完整的应用程序模板,预装了最佳实践和设计习惯用法
-向云环境自动提供群集
-默认情况下锁定网络安全
-默认情况下配置高可用性
-容器化,公共服务的预配置映像
-添加服务时自动调整安全组
-将流记录到开发人员计算机
-将多租户作为一级概念
-无缝地向上/向下扩展

$pip安装雕刻器
```


= 2.7.8BR/> - Java 8
-[雷宁恩](http://LeungEn.Org/)-[abe](http://DOCS.ANISO/CONTION/CONTION/IMPION安装。通过PIP的最新版本)BR/> -[DOCK](http://DOCS.DOCK.COM/引擎/安装)-BR/> -[AWS帐户](http://AWS.Amazon .com)/ BR/HOB-[ DokKube ]帐户](https://hub.docker.com/)

与spark和hadoop等其他平台不同,onyx没有为应用程序部署嵌入功能。省略部署的设计决策是有意的,因为它允许应用程序作者选择如何和何时部署应用程序代码,而不是被迫选择预定的策略。

在集群的生产环境中运行onyx。雕刻器是一个统一部署代码的工具,为了使在云中运行onyx更容易,它会做出一些自以为是的决定。雕刻器本身是一个基于python的包装ansible的工具。我们设计雕刻机是为了在不了解Ansible的情况下开始使用Onyx,但我们鼓励您在使用Ansible的过程中学习Ansible,以便根据您的需要定制您的Onyx部署。

如果您对配置管理的了解足够多,可以对设置提出异议,那么您就属于开发人员的一类,他们的级别足够高,不需要雕刻师。对于其他人来说,我们将雕刻机作为生产的跳板,并作为可用于严重部署的工具。


p align="center">;
<;img width="60%" src="https://rawgit.com/onyx platform/engraver/master/doc/images/lifecycle.svg">;
<;/p>;

\concepts

这是我们在engraver中使用的所有概念的词汇表。每一个术语都有简要的解释。有关更深入的讨论,请参见文档的其他部分。

这里有一个快速的视觉效果:

<;p align="center">;
<;img width="70%" src="https://rawgit.com/onyx platform/englerter/master/doc/images/concepts.svg">;
<;/p>;

机器是由机器配置文件构造的,当它们处于活动状态时运行服务。集群是雕刻机中部署隔离的最高级别。


例如,一个机器配置文件将指定它的操作系统将运行什么映像,它将运行在哪个数据中心,以及需要什么类型的机器。它还将声明它需要一定数量的这些计算机—可能是3台。


服务实例是动物园管理员和卡夫卡。服务通常需要在容器中运行,但这不是一个严格的要求。


开始服务。供应是等幂的。如果您多次设置,则雕刻器将尝试使群集达到由计算机配置文件指定的所需状态。


通过雕刻器运行部署命令将清理和uberjar应用程序,创建docker映像,将映像上载到dockhub,并在运行"onyx"服务的所有计算机上将其拉下来。每台机器上都将启动一个容器,并且onyx将开始运行。


当我们"提交"或"杀死"一份工作时,我们特别指的是onyx工作。由于onyx将部署的概念从作业提交中分离出来,我们可以灵活地对onyx应用程序进行滚动部署更新,同时作业继续在集群上运行。


雕刻机主要负责在执行命令时在后台生成ansible文件。雕刻机解释用户命令并将其映射到可翻译的yaml文件。当准备对集群进行更改时,雕刻家会转过身来调用引擎盖下的ansible。雕刻师允许用户完全访问ansible,他们知道自己在做什么,并希望获得更多的权力。您甚至可以将参数直接传递给ansible,以获得使用"--ansible"开关支持它的命令。


ansible是将虚拟机部署到云中并将其配置为运行用户应用程序的极好工具。但是,对于开发团队来说,仍然有相当多的工作要做,而这些工作不能仅仅通过ansible来快速解决,例如锁定安全性、附加持久卷和配置集群服务以实现高可用性。雕刻机的目标是解决常见的开发操作任务,而ansible基于yaml的协议是一种手到擒来的方式。

我们的目标是自动生成*尽可能少的文件*,从而最大限度地减少由于跨团队将文件签入版本控制而可能发生的冲突次数。


.yml`
-`ansible/deployment.yml`
-`ansible/cluster-remove.yml`
-`ansible/machine-remove.yml`
-`ansible/job-submit.yml`
-`ansible/job-kill.yml`
-`.engler/clusters/*`

自动生成以下文件,和*可以手工编辑:

-`ansible/<;cluster_id>;\u post.yml`
-`ansible/group_vars/<;cluster_id>;.yml`
-`ansible/vars/cluster_vars/test/machine_profiles/<;profile_id>;.yml`

雕刻器扫描生成的文件并为集群的规格建立内存表示。这些文件依次传递给ansible以创建所需的集群。


配置文件是特定机器在云中配置时的外观规范,以及我们需要多少。在下图中,右侧表示3个不同的配置文件("规范"部分)。左侧表示配置文件设置时这些配置文件的显示。

<;p align="center">;
<;img width="70%" src="https://rawgit.com/onyx platform/engrater/master/doc/images/profiles.svg">;
<;/p&gt;

此示例显示总共*10台正在运行的计算机:
-6台属于onyx配置文件
-1台属于监视配置文件
-3台属于摄取配置文件

本例中的机器运行zookeeper、bookkeeper和onyx。默认情况下,雕刻机预配置为高可用。也就是说,将有6个节点作为单个ZooKeeper群集运行。

如果同一服务在两个不同的配置文件中运行,*该服务的所有*实例将作为单个单元运行。如果不需要,可以将服务部署在两个不同的雕刻器集群中以实现完全隔离。


\服务可以通过将"service_dependencies"键添加到其"defaults/main.yml"ansible角色来表示依赖关系。这个键的值应该是一系列服务。例如,onyx服务声明以下依赖项:

```
服务依赖项:
-动物园管理员
-簿记员
```

这将强制动物园管理员和簿记员在机器上配置onyx之前先配置服务。

如何运行自己的资源调配行动手册?
-a:编辑"ansible/<;cluster\id>;\u post.yml"文件并创建ansible剧本。在"雕刻器群集设置"命令中运行"ansible/<;cluster id>;.yml"后,将调用此行动手册。

----

-q:如何强制按特定顺序启动服务?
-a:编辑"ansible/roles/<;service>;/defaults/main.yml"文件并添加"service_dependencies"键,其值为服务名称数组。配置文件的服务将按拓扑排序的顺序启动。

---------

-q:配置后如何更改计算机配置文件?
-a:创建一个新的配置文件("雕刻机-新"),并删除旧的配置文件("雕刻机-删除")。机器外形就像牛一样。

运行:

```
$reverter init hello world——示例应用程序初学者
```

`init'命令将调用leiningen并创建新的onyx应用程序模板。它将从onyxplatform github帐户克隆一些其他存储库。额外的克隆用于在云环境中建立集群。我们用--example app'开关运行这个命令。我们目前有一个预配置的项目,将用于演示。

我们为这个应用程序构建的工作流在将消息路由到输出流之前接受消息并应用一些基本的字符串转换。研究源文件夹并运行测试,以便本地、内存中执行onyx作业。


在本指南中,我们将使用aws:对于"ssh remote user"提示,使用"ubuntu"。这是我们将用于集群上ssh连接的用户。默认情况下,雕刻机集群中的计算机运行一个ubuntu linux发行版。


雕刻机让你有尽可能多的集群,你想。让我们在aws中创建一个名为"dev"的集群:

````
$engler cluster new--provider aws--cluster-id dev
``

运行此命令将生成一些文件,但它在aws中实际上还不能支持任何内容。我们可以用:

````
$雕刻器群集描述
+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————|dev aws us-east-1 us-east-1a
+—————————————————————————————————————————————————————————————————————————————————————————您可以在命令行上配置这两个文件,并切换到"cluster new"命令。


计算机配置文件是一组服务,这些服务将运行*配置该配置文件的每台计算机*,以及需要多少台计算机。机器配置文件比简单的服务级别更高,因为它允许您在一台机器上表达多个同址服务。

里面有什么?

```
$雕刻机描述--群集ID dev|默认的c4.large动物园管理员、簿记员、玛瑙3
+—————————————————————————————————————————————————————————————————————————————————————我们的示例使用kafka作为输入和输出流,因此我们需要修改默认配置文件或创建一个新配置文件。在本教程中,我们只需编辑修改默认配置文件。

您应该看到以下内容:

```
profile-id:default
ec2-u-image-id:ami-d05e75b8
ec2-u-instance-u-type:c4.large
n-u-machine-instances:3
machine-u-services:
-zookeeper
-bookmeeper
-onyx
`````

在文件底部添加"`-kafka`",保存它。然后再次运行命令来描述集群。您将看到所反映的更改:

```
$雕刻机描述--群集ID dev
+————————————————————————————————————————————————————————————————————————————————————————————————|
+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————雕刻机准备好为"dev"集群提供默认配置文件的"3"台机器。每台机器都将运行onyx、动物园管理员、卡夫卡和簿记员。由于这些服务是由雕刻师自己提供的,我们已经预先配置好了它们是高可用的开箱即用。这些机器将是"c4.large"类型的ec2实例。

还有什么在运行吗?没有,但我们可以验证:

````
$engrater machines list--cluster id dev
>;提示:显示缓存内容。刷新状态:雕刻机缓存

>;未找到缓存内容。
````

oops!发生了什么事?雕刻器在"雕刻器"文件夹中本地缓存有关已设置群集的知识(缓存不应签入版本控制以避免合并冲突,默认情况下将其放入".gitignore"中)。某些命令会自动为您更新本地缓存。因为我们还没有运行这样的命令,我们需要自己更新缓存:

```
$雕刻机缓存--群集ID dev

…一些ansible输出…

>;已完成本地缓存的更新。显示群集:
+——+——+——+————+————+————————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————我们还没有任何机器,因为我们还没有供应。我们可以再次尝试列出:

````
$engraver machines list--cluster id dev
>;提示:显示缓存内容。刷新状态:雕刻机缓存后provision,'.engraver/clusters/dev.json'文件将包含有关启动的计算机的许多详细信息。


\provisioning

是时候在云中启动我们的集群了。运行以下命令来启动我们的3节点集群:

```
$engler cluster provision--cluster id dev
````

您将看到相当数量的ansible输出。如果遇到任何意外问题,可以在该行的末尾添加"-ansible='-vvv'",这将使ansible进入详细模式。在aws中设置时,ansible将:

-创建一个虚拟私有云(vpc)
-创建每个计算机配置文件所描述的ec2实例
-安装请求的服务


正在运行的设置是*idempontent*。您可以安全地再次运行它,它将根据您的规范更新现有的群集,而不是创建一个全新的群集。

配置完成后,我们可以检查已自动刷新的本地缓存:

````
$engler machines list--cluster id dev
>;提示:显示缓存内容。刷新状态:雕刻机缓存|
>+--+----+----+----+--+-------+



















1.0.1.1.1950.1.1.1.1.1.1.1.195.1.1.1.1.1.1.1.195。124;
3 I-141BE88F|默认值ec2-54-175-197-45.compute-1.amazonaws.com 172.0.1.197
+——+——+——+——+————+——+————+——————————————————————————————————————————————————————————————————————————————————onyx ansible角色确实作为配置的一部分运行,但尚未启动它的容器。onyx是一个*库*,因此作为用户级应用程序的一部分捆绑在一起。onyx容器将在应用程序部署阶段启动。

雕刻机可以自动流日志从码头集装箱到您的人民币。我们的机器配置文件要求3台机器都运行ZooKeeper,所以让我们看一看:

````
$engraver log s ec2-52-90-230-216.compute-1.amazonaws.com--cluster id dev--service zooKeeper
```

日志内容将流式传输到本地终端。您可以使用特定于操作系统的密钥组合中止它。请注意,日志流仅适用于在其ansible playbook的默认值文件中声明"<;service name>;"u container_name`var"的服务。


我们将使用Docker和DockerHub将应用程序部署为一个容器。确保您通过了dockerhub的身份验证:

```
$docker login
```

然后使用以下命令部署:

```
$雕刻器部署--通过DockerHub--群集ID开发--租赁ID消息处理器--DockerHub用户名<;您的用户名>;--n-peers 4
````

然后把它放到集群中运行"onyx"服务的任何机器上。它将在租用"消息处理器"下的每台计算机上启动"4"个对等机。这是第一次需要一段时间,所以你可能想喝杯咖啡。你的应用程序的DOCKER图像正在上传它的基础图像,包括Java,加上它自己的UBJAR。在你第一次推拉到DockerHub后,基本映像将同时缓存在DockerHub和集群上的计算机上—这将大大缩短此后的上载/下载时间。


通过检查日志来验证Onyx是否正在运行:

````
$Enturer日志ec2-52-90-230-216.compute-1.amazonaws.com--cluster id dev--服务onyx
```

现在,我们将提交作业来激发它们:

```
$reverter job submit--cluster id dev--tenance id message processor--job name sample
```

应该可以在日志中看到作业已开始的某些活动。

作业正在运行,但没有向输入流写入数据。为了便于使用,我们将在本教程中使用kafka控制台生产者和消费者脚本:

producer:


````
ssh到运行kafka
$ssh-i~/.ssh/your-key.pem ubuntu@ec2-52-90-230-216.compute-1.amazonaws.com

卡夫卡容器中的shell
$docker exec-it kafka/bin/bash

:/
$export jmx_port=10400

$bin/kafka-console-producer.sh——代理列表127.0.0.1:9092——主题输入流
``````


```````
$ssh-i~/.ssh/your-key.pem ubuntu@ec2-52-90-230-216.compute-1.amazonaws.com

container
$docker exec-it kafka/bin/bash

:/
$export jmx_port=10400

zookeeper_ip作为环境变量在此容器上可用
$bin/kafka-console-consumer.sh--zookeeper$zookeeper_ip--topic input stream
```

触发几个edn消息:

````
{:消息"hello world"}
{:消息"onyx正在运行!"}
{:message"这里有一条很长的消息触发一个不同的代码路径"}
````

可能太多了?让我们缩小1个节点:

````
$engraver machines scale--cluster id dev--profile id default 1
>;更新的本地ansible playbook。现在运行:雕刻器集群设置
```

我们已经更新了配置文件。让我们验证一下:

```
$雕刻机描述--群集ID dev
+————————————————————————————————————————————————————————————————————————————————————————————————|
+——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————更新了我们的位置规范。让我们通过运行provisioning来实现它:

```
$engler cluster provision--cluster id dev
```

我们可以看到,设置已将群集拆分为1台计算机:

````
$engrater machines list--cluster id dev
>;提示:显示缓存的内容。刷新状态:雕刻机缓存|
+———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————####拆卸

当您停止学习本教程时,您可以使用以下命令来拆卸所有内容:

`````
$engler cluster tear down--cluster id dev
`````

这将删除VPC中的所有EC2实例,然后完全删除VPC。谢谢你的演奏!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Hibernate集合保留对已删除实体的引用   java计算幂函数的基   java如果我必须在大量数据上实现二进制搜索,我应该使用什么样的数据类型?   Java正则表达式从HTML锚(<a>…</a>)标记获取文本   java如何在安卓中使用选定号码打开电话拨号器   java升级ColdFusion使用的JRE   java如何指定从中获取EJB的服务器?   为Java RealVector的用法分类   java为什么@Transactional和@Rollback不起作用?   如何在JavaSwing中在contentpane(JPanel)上打印图像   java如何在不使用callsystem的情况下获得虚拟内存页大小?   java无法通过Servlet连接到SQL Server,但可以在本地连接到它   java不能做我的系统。出来println(Item.toString());?   java Oracle域号将加倍发布   java当谓词发生变化时,如何更新彩色荧光笔(swingx)   java在对象上共享数据的最佳设计是什么?   java使用TransferManager将大文件上传到AmazonS3存储桶的最佳方法