Merge branch 'master' into 15531-logincluster-migrate
[arvados.git] / doc / install / configure-azure-blob-storage.html.textile.liquid
1 ---
2 layout: default
3 navsection: installguide
4 title: Configure Azure Blob storage
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 Keepstore can store data in one or more Azure Storage containers.
13
14 h2. Set up VMs and Storage Accounts
15
16 Before starting the configuration of individual keepstore servers is good to have an idea of the keepstores servers' final layout. One key decision is the amount of servers and type of VM to run. Azure may change over time the bandwith capacity of each type. After conducting some empirical saturation tests, the conclusion was that the bandwith is proportional to the amount of cores with some exceptions. As a rule of thumb, is better to invest resources in more cores instead of memory or IOps.
17
18 Another decision is how many VMs should be running keepstore. For example there could be 8 VMs with one core each or one machine with 8 cores. Or anything in between. Assuming is the same cost for Cloud resources, there is always the benefit of distributing the risk of faulty VMs. The recommendation is to start with 2 VMs and expand in pairs. Having a minimum of 2 cores each. The total amount of VMs will be a function of the budget and the pipeline traffic to avoid saturation during periods of high usage. Standard D v3 family is a balanced choice, making Standard_D2_v3 the 2-core option
19
20 There are many options for storage accounts. You can read details from Azure on their documentation "https://docs.microsoft.com/en-us/azure/storage/common/storage-introduction":https://docs.microsoft.com/en-us/azure/storage/common/storage-introduction. The type of storage and access tier will be a function of the budget and desired responsiveness. A balanced option is to have General-purpose Standard Storage account and use Blob storage, hot access tiers.
21
22 Keepstore can be configure to reflect the level of underlaying redundancy the storage will have. This is call data replication option. For example LRS (Locally Redundant Storage) saves 3 copies of the data. There desired redundancy can be chosen at the keepstore layer or at the Storage Accunt layer. The decision where the redundancy will be done and the type of Storage Account data replication (LRS, ZRS, GRS and RA-GRS) has trade-offs. Please read more on "https://docs.microsoft.com/en-us/azure/storage/common/storage-redundancy":https://docs.microsoft.com/en-us/azure/storage/common/storage-redundancy and decide what is best for your needs.
23
24 h2. Create a storage container
25
26 Using the Azure web portal or command line tool, create or choose a storage account with a suitable redundancy profile and availability region. Use the storage account keys to create a new container.
27
28 <notextile>
29 <pre><code>~$ <span class="userinput">azure config mode arm</span>
30 ~$ <span class="userinput">azure login</span>
31 ~$ <span class="userinput">azure group create exampleGroupName eastus</span>
32 ~$ <span class="userinput">azure storage account create --type LRS --location eastus --resource-group exampleGroupName exampleStorageAccountName</span>
33 ~$ <span class="userinput">azure storage account keys list --resource-group exampleGroupName exampleStorageAccountName</span>
34 info:    Executing command storage account keys list
35 + Getting storage account keys
36 data:    Primary: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz==
37 data:    Secondary: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy==
38 info:    storage account keys list command OK
39 ~$ <span class="userinput">AZURE_STORAGE_ACCOUNT="exampleStorageAccountName" \
40 AZURE_STORAGE_ACCESS_KEY="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz==" \
41 azure storage container create exampleContainerName</span>
42 </code></pre>
43 </notextile>
44
45 Note that Keepstore services may be configured to use multiple Azure Storage accounts and multiple containers within a storage account.
46
47 h2. Configure keepstore
48
49 Volumes are configured in the @Volumes@ section of the cluster configuration file.
50
51 {% include 'assign_volume_uuid' %}
52
53 <notextile><pre><code>Clusters:
54   <span class="userinput">uuid_prefix</span>:
55     Volumes:
56       <span class="userinput">uuid_prefix</span>-nyw5e-<span class="userinput">000000000000000</span>:
57         AccessViaHosts:
58           # This section determines which keepstore servers access the
59           # volume. In this example, keep0 has read/write access, and
60           # keep1 has read-only access.
61           #
62           # If the AccessViaHosts section is empty or omitted, all
63           # keepstore servers will have read/write access to the
64           # volume.
65           "http://<span class="userinput">keep0.uuid_prefix.example.com</span>:25107/": {}
66           "http://<span class="userinput">keep1.uuid_prefix.example.com</span>:25107/": {ReadOnly: true}
67
68         Driver: Azure
69         DriverParameters:
70           # Storage account name and secret key, used for
71           # authentication.
72           StorageAccountName: exampleStorageAccountName
73           StorageAccountKey: zzzzzzzzzzzzzzzzzzzzzzzzzz
74
75           # The cloud environment to use,
76           # e.g. "core.chinacloudapi.cn". Defaults to
77           # "core.windows.net" if blank or omitted.
78           StorageBaseURL: ""
79
80           # Storage container name.
81           ContainerName: exampleContainerName
82
83           # Time to wait for an upstream response before failing the
84           # request.
85           RequestTimeout: 10m
86
87           # Time to wait before retrying a failed "list blobs" Azure
88           # API call.
89           ListBlobsRetryDelay: 10s
90
91           # Maximum attempts at a "list blobs" Azure API call before
92           # giving up.
93           ListBlobsMaxAttempts: 12
94
95           # If non-zero, use multiple concurrent requests (each
96           # requesting MaxGetBytes bytes) when retrieving data. If
97           # zero or omitted, get the entire blob with one request.
98           #
99           # Normally this is zero but if you find that 4 small
100           # requests complete faster than a single large request, for
101           # example, you might set this to 16777216 (64 MiB รท 4).
102           MaxGetBytes: 0
103
104           # Time to wait for an unexpectedly empty blob to become
105           # non-empty. Azure's create-and-write operation is not
106           # atomic. The default value typically allows concurrent GET
107           # and PUT requests to succeed despite the race window.
108           WriteRaceInterval: 15s
109
110           # Time to wait between GET attempts while waiting for
111           # WriteRaceInterval to expire.
112           WriteRacePollTime: 1s
113
114         # How much replication is provided by the underlying storage
115         # container.  This is used to inform replication decisions at
116         # the Keep layer.
117         Replication: 3
118
119         # If true, do not accept write or trash operations, even if
120         # AccessViaHosts.*.ReadOnly is false.
121         #
122         # If false or omitted, enable write access (subject to
123         # AccessViaHosts.*.ReadOnly, where applicable).
124         ReadOnly: false
125
126         # Storage classes to associate with this volume.  See "Storage
127         # classes" in the "Admin" section of doc.arvados.org.
128         StorageClasses: null
129 </code></pre></notextile>