2015-02-23 60 views
5

是否有可能,如果是的话,如何?我希望能够从我现有的Heroku基础架构中实现。如何在Heroku上运行InfluxDB?

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

回答

1

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

  • OPS,例如备份,监控(它意味着在安装额外的服务,打开额外的端口,等等 - 的Heroku可能会在来这里的路上)
  • 性能,考虑dyno size
  • ,如果你需要较大的测功机,成本就成了一个问题。当你进入IaaS路线时,你会得到更多的回报。
  • 测功机的其他“特征”,例如,磁盘短暂

我强烈建议hosted InfluxDB或在VPS上旋转自己,所有这些都可以指向现有的基于Heroku的应用程序。然后,这将有助于尽可能地将这些实例尽可能靠近(即如果可能的话,也就是同一个区域或共同位置),并假定DB和应用程序堆栈之间需要低延迟。

+0

是的,但有很多疑问,性能会发生什么变化?我想,没有什么好的,除非VPS碰巧与亚马逊上的heroku同一个群集。我错了吗? – 2015-03-05 20:25:59

+0

一些测试就足够了。例如。同一地区的数字海洋液滴如何与不同地区的亚马逊实例进行比较。除此之外,[dyno size](https://devcenter.heroku.com/articles/dyno-size)可能是一个考虑因素,例如你认为你需要多少RAM用于InfluxDB实例?如果答案比您想象的要多,那么纯粹是为了节省成本,我会使用Amazon实例(与您的Heroku实例位于同一区域)。我会更新答案以反映这些额外的考虑。 – opyate 2015-03-06 15:41:58

4

Heroku Dynos应而不是用于部署数据库应用程序,如InfluxDB。

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


这就是说,它是可能到InfluxDB部署到Heroku的赛道。

要开始,了解“slu'”的概念非常重要。 S are是容器(类似于Docker镜像),它容纳了在Heroku的基础架构上运行程序所需的一切。要部署InfluxDB,一个InfluxDB蛞蝓需要创建*有两种方法来创建一个散热片实现围棋库:。

  1. 直接从围棋可执行文件创建一个蛞蝓描述here **
  2. 构建使用Heroku Go buildpack从源代码中获得(参见下文)。

要构建使用buildpack,第一个克隆的InfluxDB GitHub库从源蛞蝓。然后在repo的根目录添加一个Procfile,它告诉Heroku命令在dyno启动时运行。

echo 'web: ./influxd' > Procfile 

Go buildpack需要将所有依赖包括在目录中。使用godep依赖项工具将所有依赖关系供应到目录中。

go get github.com/tools/godep 
godep save 

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

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的时候,因为它需要重新编译为Heroku的堆栈一个独立的可执行围棋的好处都将丢失。

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