【问题标题】:How to run InfluxDB on Heroku?如何在 Heroku 上运行 InfluxDB?
【发布时间】:2015-04-24 15:03:18
【问题描述】:

有可能吗?如果有,怎么做?我希望能够从我现有的 Heroku 基础设施访问它。

我需要Procfile 吗?据我了解,它只是一个用 Go 编写的独立二进制文件!所以部署它应该不难,我只是好奇如何部署它,因为我认为我不了解 Heroku 部署的来龙去脉。

【问题讨论】:

    标签: heroku deployment influxdb


    【解决方案1】:

    Heroku Dynos 应该用于部署像 InfluxDB 这样的数据库应用程序。

    Dynos 是临时服务器。数据不会在测功机重新启动之间保留,并且不能与其他测功机共享。实际上,任何部署在测功机上的数据库应用程序基本上都是无用的。这就是为什么 Heroku 上的数据库(例如 Postgres)都是附加组件的原因。 InfluxDB 应该设置在不同的平台(如 AWS EC2 或 VPS)上,因为 Heroku 插件不可用。


    也就是说,可能将 InfluxDB 部署到 Heroku 测功机。

    要开始使用,了解“蛞蝓”的概念很重要。 Slugs 是容器(类似于 Docker 镜像),它包含在 Heroku 的基础架构上运行程序所需的一切。要部署 InfluxDB,需要创建 InfluxDB slug。* 有两种方法可以为 Go 库创建 slug:

    1. here.** 所述,直接从 Go 可执行文件创建 slug。**
    2. 使用 Heroku Go buildpack 从源代码构建 slug(解释如下)。

    要使用 buildpack 从源代码构建 slug,首先克隆 InfluxDB Github 存储库。然后在 repo 的根目录添加一个 Procfile,它告诉 Heroku 在 dyno 启动时要运行的命令。

    echo 'web: ./influxd' > Procfile
    

    Go buildpack 要求目录中包含所有依赖项。使用 godep 依赖工具将所有依赖供应到目录中。

    go get github.com/tools/godep
    godep save
    

    接下来,将上面所做的更改提交到 git repo。

    git add -A .
    git commit -m dependencies
    

    最后,创建一个新应用并告诉它使用 Go buildpack 进行编译。

    heroku create -b https://github.com/kr/heroku-buildpack-go.git
    git push heroku master
    heroku open    // Open the newly created InfluxDB instance in the browser.
    

    Heroku 将显示一个错误页面。 将显示一个错误,因为 Heroku 的“web”进程类型要求应用程序在 $PORT 环境变量描述的端口上侦听传入请求,否则它会杀死测功机。 InfluxDB 的 API 和管理面板分别在 80868083 端口上运行。

    不幸的是,InfluxDB 不允许从环境变量中设置这些端口,只能通过配置文件 (/etc/config.toml)。在 InfluxDB 启动之前执行的一个小 bash 脚本可以在 InfluxDB 启动之前在配置文件中设置正确的端口。

    另一个问题,Heroku 每个测功机只公开一个端口,因此 API 和管理面板不能同时暴露在互联网上。智能反向代理可以使用 Heroku 的 X-Forwarded-Port request header 解决该问题。

    底线,不要使用 Heroku dynos 来运行 InfluxDB。


    * 这意味着在部署到 Heroku 时会失去独立 Go 可执行文件的好处,因为它需要为 Heroku 的堆栈重新编译。

    ** 直接从 InfluxDB 可执行文件创建 slug 不起作用,因为没有内置方法可以监听 Heroku 在 $PORT 环境变量中提供的正确端口。

    【讨论】:

      【解决方案2】:

      当使用自定义 buildpack 时,我喜欢认为 Heroku 节点上的任何事情都是可能的,但是使用 Heroku 托管时有一些注意事项:

      • 操作,例如备份、监控(是否需要安装额外的服务、打开额外的端口等等——Heroku 可能会妨碍到这里)
      • 性能,考虑到dyno size
      • 如果您需要更大的测功机,成本就会成为问题。当您走 IaaS 路线时,您将获得更多的收益。
      • 测功机的其他“功能”,例如磁盘短暂性

      我强烈推荐hosted InfluxDB 或在 VPS 上自行开发,所有这些您都可以将现有的基于 Heroku 的应用程序指向。然后,这将有助于使这些实例尽可能靠近(即同一区域,或尽可能位于同一位置),假设数据库和应用堆栈之间需要低延迟。

      【讨论】:

      • 是的,但是有很多查询,性能会怎样?没什么好,我想,除非 VPS 恰好与亚马逊上的 heroku 位于同一个集群上。我错了吗?
      • 一些测试就足够了。例如。同一地区的数字海洋水滴与不同地区的亚马逊实例相比如何。除此之外,dyno size 可能是一个考虑因素,例如您认为您的 InfluxDB 实例需要多少 RAM?如果答案超出您的想象,我会选择 Amazon 实例(与您的 Heroku 实例在同一区域),纯粹是为了节省成本。我将更新答案以反映这些额外的注意事项。
      猜你喜欢
      • 2012-09-11
      • 2017-03-10
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 2017-03-25
      • 2012-11-22
      • 2015-09-21
      相关资源
      最近更新 更多