Merge branch 'master' into 9956-keepstore-config
[arvados.git] / doc / install / crunch2-slurm / install-dispatch.html.textile.liquid
1 ---
2 layout: default
3 navsection: installguide
4 title: Install the SLURM dispatcher
5
6 ...
7
8 The SLURM dispatcher can run on any node that can submit requests to both the Arvados API server and the SLURM controller.  It is not resource-intensive, so you can run it on the API server node.
9
10 h2. Install the dispatcher
11
12 First, "add the appropriate package repository for your distribution":{{ site.baseurl }}/install/install-manual-prerequisites.html#repos.
13
14 On Red Hat-based systems:
15
16 <notextile>
17 <pre><code>~$ <span class="userinput">sudo yum install crunch-dispatch-slurm</span>
18 ~$ <span class="userinput">sudo systemctl enable crunch-dispatch-slurm</span>
19 </code></pre>
20 </notextile>
21
22 On Debian-based systems:
23
24 <notextile>
25 <pre><code>~$ <span class="userinput">sudo apt-get install crunch-dispatch-slurm</span>
26 </code></pre>
27 </notextile>
28
29 h2. Create a dispatcher token
30
31 Create a privileged Arvados API token for use by the dispatcher. If you have multiple dispatch processes, you should give each one a different token.  *On the API server*, run:
32
33 <notextile>
34 <pre><code>apiserver:~$ <span class="userinput">cd /var/www/arvados-api/current</span>
35 apiserver:/var/www/arvados-api/current$ <span class="userinput">sudo -u <b>webserver-user</b> RAILS_ENV=production bundle exec script/create_superuser_token.rb</span>
36 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
37 </code></pre>
38 </notextile>
39
40 h2. Configure the dispatcher
41
42 Set up crunch-dispatch-slurm's configuration directory:
43
44 <notextile>
45 <pre><code>~$ <span class="userinput">sudo mkdir -p /etc/arvados</span>
46 ~$ <span class="userinput">sudo install -d -o -root -g <b>crunch</b> -m 0750 /etc/arvados/crunch-dispatch-slurm</span>
47 </code></pre>
48 </notextile>
49
50 Edit @/etc/arvados/crunch-dispatch-slurm/crunch-dispatch-slurm.yml@ to authenticate to your Arvados API server, using the token you generated in the previous step.  Follow this YAML format:
51
52 <notextile>
53 <pre><code class="userinput">Client:
54   APIHost: <b>zzzzz.arvadosapi.com</b>
55   AuthToken: <b>zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz</b>
56 </code></pre>
57 </notextile>
58
59 This is the only configuration required by crunch-dispatch-slurm.  The subsections below describe optional configuration flags you can set inside the main configuration object.
60
61 h3. Client::KeepServiceURIs
62
63 Override Keep service discovery with a predefined list of Keep URIs. This can be useful if the compute nodes run a local keepstore that should handle all Keep traffic. Example:
64
65 <notextile>
66 <pre><code class="userinput">Client:
67   APIHost: <b>zzzzz.arvadosapi.com</b>
68   AuthToken: <b>zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz</b>
69   KeepServiceURIs:
70   - <b>http://127.0.0.1:25107</b>
71 </code></pre>
72 </notextile>
73
74 h3. PollPeriod
75
76 crunch-dispatch-slurm polls the API server periodically for new containers to run.  The @PollPeriod@ option controls how often this poll happens.  Set this to a string of numbers suffixed with one of the time units @ns@, @us@, @ms@, @s@, @m@, or @h@.  For example:
77
78 <notextile>
79 <pre><code class="userinput">Client:
80   APIHost: <b>zzzzz.arvadosapi.com</b>
81   AuthToken: <b>zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz</b>
82 PollPeriod: <b>3m30s</b>
83 </code></pre>
84 </notextile>
85
86 h3. SbatchArguments
87
88 When crunch-dispatch-slurm invokes @sbatch@, you can add switches to the command by specifying @SbatchArguments@.  You can use this to send the jobs to specific cluster partitions or add resource requests.  Set @SbatchArguments@ to an array of strings.  For example:
89
90 <notextile>
91 <pre><code class="userinput">Client:
92   APIHost: <b>zzzzz.arvadosapi.com</b>
93   AuthToken: <b>zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz</b>
94 SbatchArguments:
95 - <b>"--partition=PartitionName"</b>
96 </code></pre>
97 </notextile>
98
99 h3. CrunchRunCommand: Dispatch to SLURM cgroups
100
101 If your SLURM cluster uses the @task/cgroup@ TaskPlugin, you can configure Crunch's Docker containers to be dispatched inside SLURM's cgroups.  This provides consistent enforcement of resource constraints.  To do this, use a crunch-dispatch-slurm configuration like the following:
102
103 <notextile>
104 <pre><code class="userinput">Client:
105   APIHost: <b>zzzzz.arvadosapi.com</b>
106   AuthToken: <b>zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz</b>
107 CrunchRunCommand:
108 - <b>crunch-run</b>
109 - <b>"-cgroup-parent-subsystem=memory"</b>
110 </code></pre>
111 </notextile>
112
113 The choice of subsystem ("memory" in this example) must correspond to one of the resource types enabled in SLURM's @cgroup.conf@. Limits for other resource types will also be respected.  The specified subsystem is singled out only to let Crunch determine the name of the cgroup provided by SLURM.
114
115 {% include 'notebox_begin' %}
116
117 Some versions of Docker (at least 1.9), when run under systemd, require the cgroup parent to be specified as a systemd slice.  This causes an error when specifying a cgroup parent created outside systemd, such as those created by SLURM.
118
119 You can work around this issue by disabling the Docker daemon's systemd integration.  This makes it more difficult to manage Docker services with systemd, but Crunch does not require that functionality, and it will be able to use SLURM's cgroups as container parents.  To do this, "configure the Docker daemon on all compute nodes":install-compute-node.html#configure_docker_daemon to run with the option @--exec-opt native.cgroupdriver=cgroupfs@.
120
121 {% include 'notebox_end' %}
122
123 h2. Restart the dispatcher
124
125 {% include 'notebox_begin' %}
126
127 The crunch-dispatch-slurm package includes configuration files for systemd.  If you're using a different init system, you'll need to configure a service to start and stop a @crunch-dispatch-slurm@ process as desired.  The process should run from a directory where the @crunch@ user has write permission on all compute nodes, such as its home directory or @/tmp@.  You do not need to specify any additional switches or environment variables.
128
129 {% include 'notebox_end' %}
130
131 Restart the dispatcher to run with your new configuration:
132
133 <notextile>
134 <pre><code>~$ <span class="userinput">sudo systemctl restart crunch-dispatch-slurm</span>
135 </code></pre>
136 </notextile>