2015-02-23 31 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給出的正確端口。