部署负载均衡数据管道

教程 - 在 DC/OS 上构建完整的负载均衡数据管道

IMPORTANT: Tutorials are intended to give you hands-on experience working with a limited set of DC/OS features with no implied or explicit warranty of any kind. None of the information provided--including sample scripts, commands, or applications--is officially supported by Mesosphere. You should not use this information in a production environment without independent testing and validation.

本教程演示如何在大约 15 分钟内在 DC/OS 上构建完整的负载均衡数据管道!

概述

在本教程中,您将安装和部署名为 Tweeter 的容器化 Ruby on Rails 应用程序。Tweeter 是类似于 Twitter 的应用程序,您可以使用该应用程序将 140 个字符的消息发布到互联网。然后,使用 Zeppelin 对由 Tweeter 创建的数据执行实时分析。

您将学习:

  • 如何安装 DC/OS 服务
  • 如何向 DC/OS Marathon 添加应用程序
  • 如何通过 Marathon-LB 将公共流量发送到私有应用程序
  • 如何发现您的应用程序
  • 如何扩展您的应用程序

本教程使用 DC/OS 为群集启动和部署这些微服务:

Cassandra

Cassandra 数据库用于后端以存储 Tweeter 应用程序数据。

Kafka

Kafka 发布订阅消息服务接收来自 Cassandra 的推文,并将它们发送到 Zeppelin 进行实时分析。

Marathon-LB

Marathon-LB 是一种基于 HAProxy 的负载均衡器,仅适用于 Marathon。当您需要外部路由或第 7 层负载均衡功能时,它非常有用。

Zeppelin

Zeppelin 是一款交互式分析笔记本,可在后端与 DC/OS Spark 配合使用,以实现交互式分析和可视化。因为 Spark 和 Zeppelin 可能会占用所有群集资源,所以必须为 Zeppelin 服务指定最大内核数。

Tweeter

Tweeter 将推文存储在 DC/OS Cassandra 服务中,实时将推文流式传输到 DC/OS Kafka 服务,并使用 DC/OS Spark 和 Zeppelin 服务执行实时分析。

在 DC/OS 群集上准备和部署 Tweeter

先决条件

安装 DC/OS 服务

在此步骤中,您可以从 DC/OS GUI Catalog 选项卡安装 Cassandra、Kafka、Marathon-LB 和 Zeppelin。您还可以使用 dcos package install]11 命令,从 DC/OS CLI 安装 DC/OS 软件包。

  1. 查找并单击 cassandra 软件包,单击 REVIEW & RUN,并通过再次单击 REVIEW & RUN,然后单击 RUN SERVICE,接受默认安装。Cassandra 启动最多 3 个节点。当模态警报提示时,单击 OPEN SERVICE

  2. 单击 Catalog 选项卡。查找并单击 kafka 软件包,单击 REVIEW & RUN按钮,然后再次单击该按钮,然后单击 RUN SERVICE。Kafka 最多启动 3 个代理。当模态警报提示时,单击 OPEN SERVICE

  3. 单击 Catalog 选项卡。查找并单击 marathon-lb 软件包,单击 REVIEW & RUN按钮,然后再次单击该按钮,然后单击 RUN SERVICE。当模态警报提示时,单击 OPEN SERVICE

    如果您在 Enterprise 群集上运行 Marathon-LB 时遇到问题,请尝试按照这些说明进行安装。根据您的 安全模式,Marathon-LB 可能需要服务身份认证才能访问 DC/OS。

  4. 单击 Catalog 选项卡。单击 zeppelin 软件包,然后单击 REVIEW & RUN 按钮。

    1. 单击左侧的 spark 选项卡,并将 cores_max 设置为 8
    2. 单击 REVIEW AND RUN,然后单击 RUN。单击 OPEN SERVICE
  5. 在 DC/OS 上部署您的微服务时,单击 Services(服务**)选项卡。当节点上线时,您将看到“运行状况”状态从“空闲”转为“运行状况不佳”,最后变为良好状态。这可能需要几分钟。

    显示所有服务的服务选项卡。

    图 1. 显示 Tweeter 服务的服务选项卡

部署容器化应用程序

在此步骤中,您将容器化 Tweeter 应用程序部署到公共节点。

  1. 导航至 Tweeter GiThub 存储库并保存 /tweeter/tweeter.json Marathon 应用定义文件。

  2. HAPROXY_0_VHOST 定义添加到 tweeter.json 文件中,该定义具有公共代理 节点的公共 IP 地址。

    重要信息:您必须删除前面的“http://”和后面的“/”。

    ...
      ],
      "labels": {
        "HAPROXY_GROUP": "external",
        "HAPROXY_0_VHOST": "<public-agent-IP>"
      }
    ...
    

    在本示例中,DC/OS 群集正在 AWS 上运行:

    ...
      ],
      "labels": {
        "HAPROXY_GROUP": "external",
        "HAPROXY_0_VHOST": "52.34.136.22"
      }
    ...
    
  3. 导航至包含已修改 tweeter.json 文件的目录。将 Tweeter 安装及部署到您的 DC/OS 群集中。

    dcos marathon app add tweeter.json
    

    tweeter.json 中的 instances 参数指定应用程序实例的数量。使用以下命令为应用程序增容或减容:

    dcos marathon app update tweeter instances=<number_of_desired_instances>
    

    在本示例中,服务通过群集节点 node-0.cassandra.mesos:9042 与 Cassandra 进行通信,通过群集节点 broker-0.kafka.mesos:9557 与 Kafka 进行通信。由于 tweeter.json 应用定义文件中的 HAPROXY_0_VHOST 定义,流量通过 Marathon-LB 传输。

  4. 转到 Services 选项卡,验证您的应用程序是否正常运行。

    已部署的 Tweeter

    图 2. 已部署的 Tweeter

  5. 导航到公共代理 节点端点以查看 Tweeter UI 并发布一篇推文。在本例中,您将浏览器指向 52.34.136.22

    Tweeter

    图 3. “Hello world”推文

发布 10 万条推文

在此步骤中,您部署的应用程序自动发布来自 Shakespeare 的大量推文。应用程序将逐个发布超过 10 万条推文,因此当您刷新页面时,您会看到它们稳定地进入。

  1. 导航至 Tweeter GiThub 存储库并保存 tweeter/post-tweets.json Marathon 应用定义文件。

  2. 部署 post-tweets.json Marathon 应用定义文件。

    dcos marathon app add post-tweets.json
    
  3. post-tweets.json 运行后,刷新您的浏览器,查看传入的 Shakespeare 推文。

    Shakespeare 推文

    图 4. Shakespeare 推文

post-tweets 应用程序通过流式传输 VIP1.1.1.1:30000 进行工作。此地址在 post-tweets.json 应用定义的 cmd 参数中声明。

{
  "id": "/post-tweets",
  "cmd": "bin/tweet shakespeare-tweets.json http://1.1.1.1:30000",
...
}

Tweeter 应用程序使用安装在每个 DC/OS 节点上的服务发现和负载均衡器服务。此地址在 tweeter.json 定义 VIP_0 中定义。

...
{
  "containerPort": 3000,
  "hostPort": 0,
  "servicePort": 10000,
  "labels": {
    "VIP_0": "1.1.1.1:30000"
    }
}
...

如果您正在使用 DC/OS Enterprise 群集,单击 DC/OS GUI 中的 Networking -> Service Addresses 选项卡,然后选择 1.1.1.1:30000 虚拟网络,以查看正在执行的负载均衡:

扩展的 Tweeter

图 5. 扩展的推文

添加流分析

在最后一步中,您将对来自 Kafka 的推文流进行实时分析。

  1. 导航至 Tweeter GiThub 存储库并保存 tweeter/post-tweets.json Marathon 应用定义文件。

  2. 导航至 https://<master_ip>/service/zeppelin/ 中的 Zeppelin。您的管理节点 IP 地址是 DC/OS GUI 的 URL。

  3. 单击 Import Note 并导入 tweeter-analytics.json。Zeppelin 已预先配置,以在 DC/OS 群集上执行 Spark 作业,因此无需进一步配置或设置。请务必使用 https:// 而不是 http://

  4. 导航至 Notebook -> Tweeter Analytics

  5. 运行 Load Dependencies 步骤,将所需的库加载到 Zeppelin 中。

  6. 运行 Spark Streaming 步骤,其从 ZooKeeper 中读取推文流并将其放入可使用 SparkSQL 查询的临时表中。

  7. 运行 Top tweeter SQL 查询,其使用上一步中创建的表来计算每个用户的推文数。当新推文进入时,表会不断更新,因此重新运行查询会每次产生不同的结果。

Top Tweeters

图 6. Top Tweeters