Replace incorrect/misleading use of constraints with best practices doc.
authorBill Farner <wfarner@apache.org>
Fri, 11 Sep 2015 18:00:30 +0000 (11:00 -0700)
committerBill Farner <wfarner@apache.org>
Fri, 11 Sep 2015 18:00:44 +0000 (11:00 -0700)
Reviewed at https://reviews.apache.org/r/38302/

docs/deploying-aurora-scheduler.md
examples/vagrant/upstart/mesos-slave.conf
src/test/sh/org/apache/aurora/e2e/http/http_example.aurora
src/test/sh/org/apache/aurora/e2e/http/http_example_updated.aurora

index 73f7b19..8db0e61 100644 (file)
@@ -21,6 +21,8 @@ machines.  This guide helps you get the scheduler set up and troubleshoot some c
     - [Dedicated attribute](#dedicated-attribute)
       - [Syntax](#syntax)
       - [Example](#example)
+- [Best practices](#best-practices)
+  - [Diversity](#diversity)
 - [Common problems](#common-problems)
   - [Replicated log not initialized](#replicated-log-not-initialized)
     - [Symptoms](#symptoms)
@@ -28,9 +30,6 @@ machines.  This guide helps you get the scheduler set up and troubleshoot some c
   - [Scheduler not registered](#scheduler-not-registered)
     - [Symptoms](#symptoms-1)
     - [Solution](#solution-1)
-  - [Tasks are stuck in PENDING forever](#tasks-are-stuck-in-pending-forever)
-    - [Symptoms](#symptoms-2)
-    - [Solution](#solution-2)
 - [Changing Scheduler Quorum Size](#changing-scheduler-quorum-size)
     - [Preparation](#preparation)
     - [Adding New Schedulers](#adding-new-schedulers)
@@ -220,7 +219,7 @@ enforce this.
 ##### Example
 Consider the following slave command line:
 
-    mesos-slave --attributes="host:$HOST;rack:$RACK;dedicated:db_team/redis" ...
+    mesos-slave --attributes="dedicated:db_team/redis" ...
 
 And this job configuration:
 
@@ -237,6 +236,19 @@ The job configuration is indicating that it should only be scheduled on slaves w
 `dedicated:db_team/redis`.  Additionally, Aurora will prevent any tasks that do _not_ have that
 constraint from running on those slaves.
 
+## Best practices
+### Diversity
+Data centers are often organized with hierarchical failure domains.  Common failure domains
+include hosts, racks, rows, and PDUs.  If you have this information available, it is wise to tag
+the mesos-slave with them as
+[attributes](https://mesos.apache.org/documentation/attributes-resources/).
+
+When it comes time to schedule jobs, Aurora will automatically spread them across the failure
+domains as specified in the
+[job configuration](configuration-reference.md#specifying-scheduling-constraints).
+
+Note: in virtualized environments like EC2, the only attribute that usually makes sense for this
+purpose is `host`.
 
 ## Common problems
 So you've started your first cluster and are running into some issues? We've collected some common
@@ -278,19 +290,6 @@ is the same as the one on the scheduler:
 
     -mesos_master_address=zk://$ZK_HOST:2181/mesos/master
 
-### Tasks are stuck in `PENDING` forever
-
-#### Symptoms
-The scheduler is registered, and [receiving offers](monitoring.md#scheduler_resource_offers),
-but tasks are perpetually shown as `PENDING - Constraint not satisfied: host`.
-
-#### Solution
-Check that your slaves are configured with `host` and `rack` attributes.  Aurora requires that
-slaves are tagged with these two common failure domains to ensure that it can safely place tasks
-such that jobs are resilient to failure.
-
-See our [vagrant example](examples/vagrant/upstart/mesos-slave.conf) for details.
-
 ## Changing Scheduler Quorum Size
 Special care needs to be taken when changing the size of the Aurora scheduler quorum.
 Since Aurora uses a Mesos replicated log, similar steps need to be followed as when
index 9af680e..1ef059b 100644 (file)
@@ -26,7 +26,6 @@ env ZK_HOST=192.168.33.7
 exec /usr/sbin/mesos-slave --master=zk://$ZK_HOST:2181/mesos/master \
   --ip=$MY_HOST \
   --hostname=$MY_HOST \
-  --attributes="host:$MY_HOST;rack:a" \
   --resources="cpus:4;mem:1024;disk:20000" \
   --work_dir="/var/lib/mesos" \
   --containerizers=docker,mesos \
index d7bf108..dc55109 100644 (file)
@@ -43,10 +43,6 @@ job = Service(
   role = getpass.getuser(),
   environment = 'test',
   contact = '{{role}}@localhost',
-  # Since there is only one slave in devcluster allow all instances to run there.
-  constraints = {
-    'host': 'limit:2',
-  },
   announce = Announcer(),
 )
 
index c973966..f098de9 100644 (file)
@@ -25,11 +25,10 @@ stage_server = Process(
   cmdline = '{{cmd}}'
 )
 
-test_task = Task(
+test_task = SequentialTask(
   name = 'http_example',
   resources = Resources(cpu=0.5, ram=34*MB, disk=64*MB),
-  processes = [stage_server, run_server],
-  constraints = order(stage_server, run_server))
+  processes = [stage_server, run_server])
 
 update_config = UpdateConfig(watch_secs=10, batch_size=3)
 health_check_config = HealthCheckConfig(initial_interval_secs=5, interval_secs=1)
@@ -43,10 +42,6 @@ job = Service(
   role = getpass.getuser(),
   environment = 'test',
   contact = '{{role}}@localhost',
-  # Since there is only one slave in devcluster allow all instances to run there.
-  constraints = {
-    'host': 'limit:4',
-  },
   announce = Announcer(),
 )