Merge branch 'master' into 14259-pysdk-remote-block-copy
[arvados.git] / doc / install / install-keep-balance.html.textile.liquid
1 ---
2 layout: default
3 navsection: installguide
4 title: Install Keep-balance
5 ...
6 {% comment %}
7 Copyright (C) The Arvados Authors. All rights reserved.
8
9 SPDX-License-Identifier: CC-BY-SA-3.0
10 {% endcomment %}
11
12 Keep-balance deletes unreferenced and overreplicated blocks from Keep servers, makes additional copies of underreplicated blocks, and moves blocks into optimal locations as needed (e.g., after adding new servers).
13
14 {% include 'notebox_begin' %}
15
16 If you are installing keep-balance on an existing system with valuable data, you can run keep-balance in "dry run" mode first and review its logs as a precaution. To do this, edit your keep-balance startup script to use the flags @-commit-pulls=false -commit-trash=false@.
17
18 {% include 'notebox_end' %}
19
20 h2. Install keep-balance
21
22 Keep-balance can be installed anywhere with network access to Keep services. Typically it runs on the same host as keepproxy.
23
24 *A cluster should have only one keep-balance process running at a time.*
25
26 On Debian-based systems:
27
28 <notextile>
29 <pre><code>~$ <span class="userinput">sudo apt-get install keep-balance</span>
30 </code></pre>
31 </notextile>
32
33 On Red Hat-based systems:
34
35 <notextile>
36 <pre><code>~$ <span class="userinput">sudo yum install keep-balance</span>
37 </code></pre>
38 </notextile>
39
40 Verify that @keep-balance@ is functional:
41
42 <notextile>
43 <pre><code>~$ <span class="userinput">keep-balance -h</span>
44 ...
45 Usage: keep-balance [options]
46
47 Options:
48   -commit-pulls
49         send pull requests (make more replicas of blocks that are underreplicated or are not in optimal rendezvous probe order)
50   -commit-trash
51         send trash requests (delete unreferenced old blocks, and excess replicas of overreplicated blocks)
52 ...
53 </code></pre>
54 </notextile>
55
56 h3. Create a keep-balance token
57
58 Create an Arvados superuser token for use by keep-balance.
59
60 {% include 'create_superuser_token' %}
61
62 h3. Update keepstore configuration files
63
64 On each node that runs keepstore, save the token you generated in the previous step in a text file like @/etc/arvados/keepstore/system-auth-token.txt@ and then create or update @/etc/arvados/keepstore/keepstore.yml@ with the following key:
65
66 <notextile>
67 <pre><code>SystemAuthTokenFile: /etc/arvados/keepstore/system-auth-token.txt
68 </code></pre>
69 </notextile>
70
71 Restart all keepstore services to apply the updated configuration.
72
73 h3. Create a keep-balance configuration file
74
75 On the host running keep-balance, create @/etc/arvados/keep-balance/keep-balance.yml@ using the token you generated above.  Follow this YAML format:
76
77 <notextile>
78 <pre><code>Listen: :9005
79 Client:
80   APIHost: <span class="userinput">uuid_prefix.your.domain</span>:443
81   AuthToken: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
82 KeepServiceTypes:
83   - disk
84 Listen: :9005
85 ManagementToken: <span class="userinput">xyzzy</span>
86 RunPeriod: 10m
87 CollectionBatchSize: 100000
88 CollectionBuffers: 1000
89 </code></pre>
90 </notextile>
91
92 If your API server's SSL certificate is not signed by a recognized CA, add the @Insecure@ option to the @Client@ section:
93
94 <notextile>
95 <pre><code>Client:
96   <span class="userinput">Insecure: true</span>
97   APIHost: ...
98 </code></pre>
99 </notextile>
100
101 h3. Start the service (option 1: systemd)
102
103 If your system does not use systemd, skip this section and follow the "runit instructions":#runit instead.
104
105 If your system uses systemd, the keep-balance service should already be set up. Start it and check its status:
106
107 <notextile>
108 <pre><code>~$ <span class="userinput">sudo systemctl restart keep-balance</span>
109 ~$ <span class="userinput">sudo systemctl status keep-balance</span>
110 &#x25cf; keep-balance.service - Arvados Keep Balance
111    Loaded: loaded (/lib/systemd/system/keep-balance.service; enabled)
112    Active: active (running) since Sat 2017-02-14 18:46:01 UTC; 3 days ago
113      Docs: https://doc.arvados.org/
114  Main PID: 541 (keep-balance)
115    CGroup: /system.slice/keep-balance.service
116            └─541 /usr/bin/keep-balance -commit-pulls -commit-trash
117
118 Feb 14 18:46:01 zzzzz.arvadosapi.com keep-balance[541]: 2017/02/14 18:46:01 starting up: will scan every 10m0s and on SIGUSR1
119 Feb 14 18:56:01 zzzzz.arvadosapi.com keep-balance[541]: 2017/02/14 18:56:01 Run: start
120 Feb 14 18:56:01 zzzzz.arvadosapi.com keep-balance[541]: 2017/02/14 18:56:01 skipping zzzzz-bi6l4-rbtrws2jxul6i4t with service type "proxy"
121 Feb 14 18:56:01 zzzzz.arvadosapi.com keep-balance[541]: 2017/02/14 18:56:01 clearing existing trash lists, in case the new rendezvous order differs from previous run
122 </code></pre>
123 </notextile>
124
125 h3(#runit). Start the service (option 2: runit)
126
127 Install runit to supervise the keep-balance daemon.  {% include 'install_runit' %}
128
129 Create a supervised service.
130
131 <notextile>
132 <pre><code>~$ <span class="userinput">sudo mkdir /etc/service/keep-balance</span>
133 ~$ <span class="userinput">cd /etc/service/keep-balance</span>
134 ~$ <span class="userinput">sudo mkdir log log/main</span>
135 ~$ <span class="userinput">printf '#!/bin/sh\nexec keep-balance -commit-pulls -commit-trash 2>&1\n' | sudo tee run</span>
136 ~$ <span class="userinput">printf '#!/bin/sh\nexec svlogd main\n' | sudo tee log/run</span>
137 ~$ <span class="userinput">sudo chmod +x run log/run</span>
138 ~$ <span class="userinput">sudo sv exit .</span>
139 ~$ <span class="userinput">cd -</span>
140 </code></pre>
141 </notextile>
142
143 Use @sv stat@ and check the log file to verify the service is running.
144
145 <notextile>
146 <pre><code>~$ <span class="userinput">sudo sv stat /etc/service/keep-balance</span>
147 run: /etc/service/keep-balance: (pid 12520) 2s; run: log: (pid 12519) 2s
148 ~$ <span class="userinput">tail /etc/service/keep-balance/log/main/current</span>
149 2017/02/14 18:46:01 starting up: will scan every 10m0s and on SIGUSR1
150 2017/02/14 18:56:01 Run: start
151 2017/02/14 18:56:01 skipping zzzzz-bi6l4-rbtrws2jxul6i4t with service type "proxy"
152 2017/02/14 18:56:01 clearing existing trash lists, in case the new rendezvous order differs from previous run
153 </code></pre>
154 </notextile>
155
156 h2. Enable delete operations on keepstore volumes
157
158 Ensure your keepstore services have the "delete" operation enabled. If it is disabled (which is the default), unneeded blocks will be identified by keep-balance, but will never be deleted from the underlying storage devices.
159
160 Add the @-never-delete=false@ command line flag to your keepstore run script:
161
162 <notextile>
163 <pre><code>keepstore <span class="userinput">-never-delete=false</span> -volume=...
164 </code></pre>
165 </notextile>
166
167 {% comment %}
168 // To replace the above section when the keepstore page recommends YAML...
169
170 Use the @EnableDelete@ flag in your YAML configuration file @/etc/arvados/keepstore/keepstore.yml@:
171
172 <notextile>
173 <pre><code>...
174 BlobSigningKeyFile: /etc/keepstore/blob-signing.key
175 <span class="userinput">EnableDelete: true</span>
176 Listen: :25107
177 ...
178 </code></pre>
179 </notextile>
180 {% endcomment %}