Project

General

Profile

Using Keep with Azure Storage » History » Version 2

Tom Clegg, 10/01/2015 08:36 PM

1 1 Tom Clegg
h1. Using Keep with Azure Storage (BETA)
2
3
Starting at #7241 keepstore can use Azure Storage containers as storage devices. Each data block is stored as a "Block Blob".
4
5
Features:
6
* You can configure multiple Azure volumes
7
* You can mix Azure and POSIX volumes
8
* It is safe to share Azure volumes between multiple keepstore processes/hosts
9
* Azure volumes can be marked readonly
10
11
Missing features:
12
* The @-serialize@ flag is not supported
13
* There is no way to control the way the data is organized (named) in the container. The name of each blob is the hash of the corresponding data, e.g., @73feffa4b7f6bb68e44cf984c85f6e88@.
14
15
h2. Setup
16
17
Outline:
18
# Install the azure CLI tool.
19
# Set credentials.
20
@azure login@
21
# Set cli tool mode.
22
@azure config mode arm@
23
# Create a resource group (unless you're going to use an existing one, of course).
24
@azure group create examplegroupname eastus@
25
# Create a storage account (ditto). The @--type@ argument determines storage replication policy; see "docs":https://azure.microsoft.com/en-us/documentation/articles/storage-introduction/#replication-for-durability-and-high-availability
26
@azure storage account create --type LRS --location eastus --resource-group examplegroupname exampleaccountname@
27
# Get storage account keys:
28
@azure storage account keys list --resource-group examplegroupname exampleaccountname@
29
(This will give you a base64-encoded key looking something like @t3wfMAZ4/YBso7Jr5dtaR7gdrSJmdqzIv1iLofr/2xkZLqLwjj3iwV1YNYbjPUhewXYpp6KxmJUH9L3cfLALtw==@)
30
# Create a container:
31
@AZURE_STORAGE_ACCOUNT=exampleaccountname \@
32
@AZURE_STORAGE_ACCESS_KEY="t3wfMAZ4/YBso7Jr5dtaR7gdrSJmdqzIv1iLofr/2xkZLqLwjj3iwV1YNYbjPUhewXYpp6KxmJUH9L3cfLALtw==" \@
33
@azure storage container create examplecontainername@
34
35
h2. Configuring keepstore
36
37
Store the account key in a file with suitable permissions. (A trailing newline will be ignored, but don't put any other characters in there.)
38
39
<pre>
40
cd /etc/sv/keepstore
41
(umask 077; vi exampleaccountname.key)
42
</pre>
43
44 2 Tom Clegg
Update your run script. If you are already running with some local volumes, your run script might have this:
45 1 Tom Clegg
46
<pre>
47
keepstore \
48
 -volume /data/disk0 -volume /data/disk1
49
</pre>
50
51
If you want to change your local volumes to be readonly, and use the azure container to write new data, you'd change it to this:
52
53
<pre>
54
keepstore \
55
 -readonly \
56
 -volume /data/disk0 -volume /data/disk1 \
57
 -readonly=false \
58 2 Tom Clegg
 -azure-storage-account-key-file ./exampleaccountname.key \
59 1 Tom Clegg
 -azure-storage-account-name exampleaccountname \
60
 -azure-storage-container-volume examplecontainername
61
</pre>
62 2 Tom Clegg
63
If you have multiple containers and some of them are in different accounts, you might have something like this:
64
65
<pre>
66
keepstore \
67
 -readonly \
68
 -volume /data/disk0 -volume /data/disk1 \
69
 -readonly=false \
70
 -azure-storage-account-key-file ./firstaccount.key \
71
 -azure-storage-account-name firstaccount \
72
 -azure-storage-container-volume containerA \
73
 -azure-storage-container-volume containerB \
74
 -azure-storage-container-volume containerC \
75
 -azure-storage-account-key-file ./secondaccount.key \
76
 -azure-storage-account-name secondaccount \
77
 -azure-storage-container-volume containerX \
78
 -azure-storage-container-volume containerY \
79
 -azure-storage-container-volume containerZ
80
</pre>
81
82
When invoked this way, keepstore uses the "firstaccount" credentials to connect to containerA/B/C and use the "secondaccount' credentials to connect to containerX/Y/Z.