-
Notifications
You must be signed in to change notification settings - Fork 10
Deploylib
#Deploylib Deploylib is a scala tool for setting up and interacting with a cluster of compute nodes, either privately owned or on Amazon EC2. It is also integrates with Mesos, the cluster management platform, so it is capable of launching and managing Mesos masters, slaves, and Mesos applications. In particular, there is a framework for running and managing Java or Scala services (jars) and web services (wars via Jetty).
Install SCADS (see the "How to install and build SCADS" section of the wiki Home).
In addition to the prerequisites, you must set the following environment variables:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- AWS_KEY_NAME
- AWS_KEY_PATH
- EC2_PRIVATE_KEY
- EC2_CERT
Once these variables are set different regions can be accessed by using the following objects (USEast1, USWest1, EUWest1, APNortheast1, APSoutheast1).
Your ssh keypair can be imported into EC2 using <region>.importKeyPair
.
The following ports need to be open in the default security group: 22, 2181, 5050, 8080, 8081, 9000. This can be done automatically by calling <region>/openPorts
.
The deploylib console can be started for any SCADS subproject by using running bin/sbt <subproject>/deploy-console
. The deploy-console contains a pointer to all the jars needed to execute the current project on a remote machine.
Deploylib is preconfigured to control both machines on EC2 and machines on the rcluster. Commands on sets of machines can be run in parallel by prepending function names with the letter p (ex: pmap, pforeach, pflatMap). For example:
scala> import deploylib.rcluster._
import deploylib.rcluster._
scala> (r2 !? "hostname").trim
res3: java.lang.String = r2
scala> val inst = EC2West.runInstance
scala> inst.publicDnsName
scala> USWest1.activeInstances.pmap(_ !? "date").map(_.trim)
res2: List[java.lang.String] = List(Sun Sep 25 03:57:27 UTC 2011, Sun Sep 25 03:57:27 UTC 2011, Sun Sep 25 03:57:27 UTC 2011, Sun Sep 25 03:57:28 UTC 2011, Sun Sep 25 03:57:28 UTC 2011)
More commands can be found in the scalaDoc for RClusterNode and EC2Instance
You can use deploy lib to start and manage a Mesos cluster running on EC2. To familiarize yourself with Mesos, check out the Mesos homepage.
Create a cluster object by running new mesos.Cluster(<region>)
, where region is either EC2East
or EC2West
. Here are a some of the most important functions you'll be using on a mesos cluster:
-
cluster.setup()
- start ec2 instances, if they aren't running, and setup services for the mesos-master, zookeeper, and at least one mesos slave. Optionally specifynumSlaves
to start more than one. -
cluster.restart[Masters|Slaves|ZooKeepers]()
- restart mesos services. -
cluster.addSlaves(num)
- Add slaves to a running mesos cluster. -
cluster.stopAllInstances
- stop all ec2 instances
More commands can be found in the scalaDoc for mesos.Cluster.
To start a scads storage node on EC2:
import org.apache.zookeeper.CreateMode
val engineTask = ScalaEngineTask(cluster.zooKeeperRoot.getOrCreate("/home/marmbrus/scads").createChild("testCluster", mode=CreateMode.PERSISTENT_SEQUENTIAL).canonicalAddress).toJvmTask
serviceScheduler !? RunExperimentRequest(engineTask :: Nil)