2013-10-04 7 views
6

Ich entwickle Topologien für Sturm (storm-project.net). Ich habe 2 Remote-Cluster: Inszenierung und Produktion.Bereitstellen von Topologien für verschiedene Remote-Cluster?

Ich habe zwei storm.yaml-Dateien auf dem Client (mein Laptop, auf dem ich Code schreibe), die auf die verschiedenen Remote-Cluster, production.storm.yaml und staging.storm.yaml verweisen.

Leider ist der einzige Weg, ich weiß, zwischen ihnen zu wechseln ist ein symbolischer Link zu ~/.storm/storm.yaml zu ändern, bevor Topologien der Ferne über das „Sturm jar“ Befehl bereitstellen. Dies ist fehleranfällig und erzeugt eine Abhängigkeit in der Projektquellstruktur zu etwas an einer ziemlich beliebigen Stelle in der Dateistruktur des Clients.

Es muss einen besseren Weg geben. "storm list --config staging.storm.yaml" gibt mir Informationen über den Staging-Cluster, aber ich kann kein vergleichbares Flag finden, um die conf-Datei mit "storm jar" zu setzen. Oder vielleicht gibt es eine Umgebungsvariable wie "STORM_HOME", die ich einstellen kann?

Antwort

2

Ich hatte auch das gleiche Problem. Was ich getan habe, war ein Makefile für die Bereitstellung meiner Storm-Topologien zu schreiben. Wo verschiedene Ziele unterschiedliche Symlinks erzeugen würden. Etwas wie:

export STORM_PATH=/opt/storm 
export PROJECT_PATH=/project/path 

compile: 
    cd $(PROJECT_PATH) 
    mvn compile 

package: 
    cd $(PROJECT_PATH) 
    mvn package 

deploy-staging: package 
    ln -s $(STORM_PATH)/conf/staging.storm.yaml $(STORM_PATH)/conf/storm.yaml 
    storm jar $(PROJECT_PATH)/target/project.jar my.project.Topology myTopology 

deploy-production: package 
    ln -s $(STORM_PATH)/conf/production.storm.yaml $(STORM_PATH)/conf/storm.yaml 
    storm jar $(PROJECT_PATH)/target/project.jar my.project.Topology myTopology 

So eine Topologie zur Produktion implementieren Sie gehen können:

make deploy-production 

und das gleiche mit Inszenierung. Sie werden sehen, dass die Topologie ebenfalls gepackt ist (wenn Sie Maven verwenden). Sie können auch die verschiedenen Yaml-Dateien als Teil Ihres Repositorys haben und die Symlinks einfach in Ihr Repository zeigen. Alternativ können Sie die Yaml-Dateien auf Ihren Bereitstellungscomputern haben und sie können für verschiedene Bereitstellungen unterschiedlich sein. Immer mit dem gleichen Namen.

8

Sie müssen keine separaten .yaml-Dateien verwalten. Sie können die nimbus.host-Konfiguration überschreiben, indem Sie die Befehlszeilenoption -c verwenden:

storm jar -c nimbus.host=nimbus.example.com my-storm-jar.jar com.example.MyTopology 
Verwandte Themen