Marathon provides a
REST API for
starting, stopping, and scaling applications. Marathon is written in Scala and
can run in highly-available mode by running multiple copies. The
state of running tasks gets stored in the Mesos state abstraction.
Marathon is a meta framework: you can start other Mesos frameworks such as
Chronos or Storm with it to ensure they survive machine failures.
It can launch anything that can be launched in a standard shell. In fact, you
can even start other Marathon instances via Marathon.
Using Marathon versions 0.7.0+ and Mesos 0.20.0+, you can deploy, run and scale Docker containers with ease.
Documentation for installing and configuring the full Mesosphere stack including Mesos and Marathon is
available on the Mesosphere website.
- HA -- run any number of Marathon schedulers, but only one gets elected as
leader; if you access a non-leader, your request gets proxied to the
- Constraints - e.g., only one instance of an application per rack, node, etc.
- Service Discovery & Load Balancing via HAProxy or the events API (see below).
- Health Checks: check your application's health via HTTP or TCP checks.
- Event Subscription lets you supply an HTTP endpoint to receive notifications, for example to integrate with an external load balancer.
- Web UI
- JSON/REST API for easy integration and scriptability
- Basic Auth and SSL
- Metrics: available at
/metricsin JSON format
Setting Up And Running Marathon
Marathon requires Mesos installed on the same machine in order to use a shared library. Instructions on how to install prepackaged releases of Mesos are available in the Marathon docs.
Instructions on how to install prepackaged releases are available in the Marathon docs. Alternatively, you can build Marathon from source.
Building from Source
To build Marathon from source, check out this repo and use sbt to build a JAR:
git clone https://github.com/mesosphere/marathon.git cd marathon sbt assembly
./bin/build-distributionto package Marathon as an
Running in Development Mode
Mesos local mode allows you to run Marathon without launching a full Mesos
cluster. It is meant for experimentation and not recommended for production
use. Note that you still need to run ZooKeeper for storing state. The following
command launches Marathon on Mesos in local mode. Point your web browser to
http://localhost:8080 to see the Marathon UI.
./bin/start --master local --zk zk://localhost:2181/marathon
For more information on how to run Marathon in production and configuration
options, see the Marathon docs.
The Marathon Wiki Page
contains documentation on simplifying local development and testing of Marathon
including how to run a Mesos environment inside a preconfigured virtual machine running on Vagrant and a list of recipes for launching applications that test specific Marathon
Running the development Docker
docker build -t marathon-tip .
docker run marathon-tip --master local --zk zk://localhost:2181/marathon
If you want to inspect the contents of the Docker:
docker run -i -t --entrypoint=/bin/bash marathon-tip -s
Marathon documentation is available on the Marathon GitHub pages site.
We heartily welcome external contributions to Marathon's documentation. Documentation should be committed to the
master branch and published to our GitHub pages site using the instructions in docs/README.md.
- marathonctl A handy CLI tool for controlling Marathon
Running Chronos with the Ruby Marathon Client:
marathon -M http://foo.bar:8080 start -i chronos -u https://s3.amazonaws.com/mesosphere-binaries-public/chronos/chronos.tgz \ -C "./chronos/bin/demo ./chronos/config/nomail.yml \ ./chronos/target/chronos-1.0-SNAPSHOT.jar" -c 1.0 -m 1024
- Scala client, developed at Guidewire
- Java client by Mohit Soni
- Python client, developed at The Factory
- Python client, developed at Wizcorp
- Go client by Rohith Jayawardene
- Go client by Jean-Baptiste Dalido
- Node client by Silas Sewell
- Clojure client by Halit Olali
Companies using Marathon
Marathon is managing applications on more than 100,000 nodes at these companies, and many more:
- Branding Brand
- DHL Parcel
- The Factory
- Human API
Not in the list? Open a pull request and add yourself!
If you have questions, please post on the
Marathon Framework Group
email list. You can find Marathon support in the
#marathon channel, and Mesos
support in the
#mesos channel, on freenode (IRC). The team at
Mesosphere is also happy to answer any questions.