7995: Add keep-balance to install guide.
[arvados.git] / doc / install / install-keep-balance.html.textile.liquid
1 ---
2 layout: default
3 navsection: installguide
4 title: Install Keep-balance
5 ...
6
7 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).
8
9
10 h2. Install keep-balance
11
12 Keep-balance can be installed anywhere with access to Keep services. Typically it runs on the same host as keepproxy.
13
14 On Debian-based systems:
15
16 <notextile>
17 <pre><code>~$ <span class="userinput">sudo apt-get install keep-balance</span>
18 </code></pre>
19 </notextile>
20
21 On Red Hat-based systems:
22
23 <notextile>
24 <pre><code>~$ <span class="userinput">sudo yum install keep-balance</span>
25 </code></pre>
26 </notextile>
27
28 Verify that @keep-balance@ is functional:
29
30 <notextile>
31 <pre><code>~$ <span class="userinput">keep-balance -h</span>
32 ...
33 Usage: keep-balance [options]
34
35 Options:
36   -commit-pulls
37         send pull requests (make more replicas of blocks that are underreplicated or are not in optimal rendezvous probe order)
38   -commit-trash
39         send trash requests (delete unreferenced old blocks, and excess replicas of overreplicated blocks)
40 ...
41 </code></pre>
42 </notextile>
43
44 h3. Create a keep-balance token
45
46 Create a privileged Arvados API token for use by keep-balance. *On the API server*, run:
47
48 <notextile>
49 <pre><code>apiserver:~$ <span class="userinput">cd /var/www/arvados-api/current</span>
50 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>
51 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
52 </code></pre>
53 </notextile>
54
55 h3. Create a configuration file
56
57 Create @/etc/arvados/keep-balance/keep-balance.yml@ using the token you generated in the previous step.  Follow this YAML format:
58
59 <notextile>
60 <pre><code>Client:
61   APIHost: <span class="userinput">uuid_prefix.your.domain</span>:443
62   AuthToken: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
63 KeepServiceTypes:
64   - disk
65 RunPeriod: 10m
66 CollectionBatchSize: 100000
67 CollectionBuffers: 1000
68 </code></pre>
69 </notextile>
70
71 If your API server's SSL certificate is not signed by a recognized CA, add the @Insecure@ option to the @Client@ section:
72
73 <notextile>
74 <pre><code>Client:
75   <span class="userinput">Insecure: true</span>
76   APIHost: ...
77 </code></pre>
78 </notextile>
79
80 h3. Start the service (option 1: systemd)
81
82 If your system does not use systemd, skip this section and follow the "runit instructions":#runit instead.
83
84 If your system uses systemd, the keep-balance service should already be set up. Start it and check its status:
85
86 <notextile>
87 <pre><code>~$ <span class="userinput">sudo systemctl restart keep-balance</span>
88 ~$ <span class="userinput">sudo systemctl status keep-balance</span>
89 &#x25cf; keep-balance.service - Arvados Keep Balance
90    Loaded: loaded (/lib/systemd/system/keep-balance.service; enabled)
91    Active: active (running) since Sat 2017-02-14 18:46:01 UTC; 3 days ago
92      Docs: https://doc.arvados.org/
93  Main PID: 541 (keep-balance)
94    CGroup: /system.slice/keep-balance.service
95            └─541 /usr/bin/keep-balance -commit-pulls -commit-trash
96
97 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
98 Feb 14 18:56:01 zzzzz.arvadosapi.com keep-balance[541]: 2017/02/14 18:56:01 Run: start
99 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"
100 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
101 </code></pre>
102 </notextile>
103
104 h3(#runit). Start the service (option 2: runit)
105
106 Install runit to supervise the keep-balance daemon.  {% include 'install_runit' %}
107
108 Create a supervised service.
109
110 <notextile>
111 <pre><code>~$ <span class="userinput">sudo mkdir /etc/service/keep-balance</span>
112 ~$ <span class="userinput">cd /etc/service/keep-balance</span>
113 ~$ <span class="userinput">sudo mkdir log log/main</span>
114 ~$ <span class="userinput">printf '#!/bin/sh\nexec keep-balance -commit-pulls -commit-trash 2>&1\n' | sudo tee run</span>
115 ~$ <span class="userinput">printf '#!/bin/sh\nexec svlogd main\n' | sudo tee log/run</span>
116 ~$ <span class="userinput">sudo chmod +x run log/run</span>
117 ~$ <span class="userinput">sudo sv exit .</span>
118 ~$ <span class="userinput">cd -</span>
119 </code></pre>
120 </notextile>
121
122 Use @sv stat@ and check the log file to verify the service is running.
123
124 <notextile>
125 <pre><code>~$ <span class="userinput">sudo sv stat /etc/service/keep-balance</span>
126 run: /etc/service/keep-balance: (pid 12520) 2s; run: log: (pid 12519) 2s
127 ~$ <span class="userinput">tail /etc/service/keep-balance/log/main/current</span>
128 2017/02/14 18:46:01 starting up: will scan every 10m0s and on SIGUSR1
129 2017/02/14 18:56:01 Run: start
130 2017/02/14 18:56:01 skipping zzzzz-bi6l4-rbtrws2jxul6i4t with service type "proxy"
131 2017/02/14 18:56:01 clearing existing trash lists, in case the new rendezvous order differs from previous run
132 </code></pre>
133 </notextile>
134
135 h2. Enable delete operations on keepstore volumes
136
137 Ensure your keepstore services have the "delete" operation enabled. Otherwise, even when unneeded data is identified by keep-balance, it will never be deleted from the underlying storage devices.
138
139 Either use the @EnableDelete@ flag in your YAML configuration file @/etc/arvados/keepstore/keepstore.yml@:
140
141 <notextile>
142 <pre><code>...
143 BlobSigningKeyFile: /etc/keepstore/blob-signing.key
144 <span class="userinput">EnableDelete: true</span>
145 Listen: :25107
146 ...
147 </code></pre>
148 </notextile>
149
150 Or use the @-never-delete=false@ command line flag in your run script:
151
152 <notextile>
153 <pre><code>keepstore <span class="userinput">-never-delete=false</span> -volume=...
154 </code></pre>
155 </notextile>