This commit is contained in:
parent
8225fa2e4b
commit
c4c4b7dedc
5 changed files with 32 additions and 35 deletions
|
@ -2,4 +2,4 @@
|
||||||
|
|
||||||
A cookbook, when you cook, is a collection of recipes.
|
A cookbook, when you cook, is a collection of recipes.
|
||||||
Similarly, Garage's cookbook contains a collection of recipes that are known to works well!
|
Similarly, Garage's cookbook contains a collection of recipes that are known to works well!
|
||||||
This chapter could also be referred as "Tutorials" or "Best practises".
|
This chapter could also be referred as "Tutorials" or "Best practices".
|
||||||
|
|
|
@ -8,7 +8,7 @@ Fear not! For Garage is fully equipped to handle drive failures, in most common
|
||||||
|
|
||||||
With nodes dispersed in 3 datacenters or more, here are the guarantees Garage provides with the default replication strategy (3 copies of all data, which is the recommended value):
|
With nodes dispersed in 3 datacenters or more, here are the guarantees Garage provides with the default replication strategy (3 copies of all data, which is the recommended value):
|
||||||
|
|
||||||
- The cluster remains fully functionnal as long as the machines that fail are in only one datacenter. This includes a whole datacenter going down due to power/Internet outage.
|
- The cluster remains fully functional as long as the machines that fail are in only one datacenter. This includes a whole datacenter going down due to power/Internet outage.
|
||||||
- No data is lost as long as the machines that fail are in at most two datacenters.
|
- No data is lost as long as the machines that fail are in at most two datacenters.
|
||||||
|
|
||||||
Of course this only works if your Garage nodes are correctly configured to be aware of the datacenter in which they are located.
|
Of course this only works if your Garage nodes are correctly configured to be aware of the datacenter in which they are located.
|
||||||
|
|
|
@ -7,14 +7,14 @@ We did not test other architecture/operating system but, as long as your archite
|
||||||
## From Docker
|
## From Docker
|
||||||
|
|
||||||
Our docker image is currently named `lxpz/garage_amd64` and is stored on the [Docker Hub](https://hub.docker.com/r/lxpz/garage_amd64/tags?page=1&ordering=last_updated).
|
Our docker image is currently named `lxpz/garage_amd64` and is stored on the [Docker Hub](https://hub.docker.com/r/lxpz/garage_amd64/tags?page=1&ordering=last_updated).
|
||||||
We encourage you to use a fixed tag (eg. `v0.1.1d`) and not the `latest` tag.
|
We encourage you to use a fixed tag (eg. `v0.2.1`) and not the `latest` tag.
|
||||||
For this example, we will use the latest published version at the time of the writing which is `v0.1.1d` but it's up to you
|
For this example, we will use the latest published version at the time of the writing which is `v0.2.1` but it's up to you
|
||||||
to check [the most recent versions on the Docker Hub](https://hub.docker.com/r/lxpz/garage_amd64/tags?page=1&ordering=last_updated).
|
to check [the most recent versions on the Docker Hub](https://hub.docker.com/r/lxpz/garage_amd64/tags?page=1&ordering=last_updated).
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
```
|
```
|
||||||
sudo docker pull lxpz/garage_amd64:v0.1.1d
|
sudo docker pull lxpz/garage_amd64:v0.2.1
|
||||||
```
|
```
|
||||||
|
|
||||||
## From source
|
## From source
|
||||||
|
|
|
@ -40,22 +40,18 @@ garagectl key new --name nextcloud-app-key
|
||||||
|
|
||||||
You will have the following output (this one is fake, `key_id` and `secret_key` were generated with the openssl CLI tool):
|
You will have the following output (this one is fake, `key_id` and `secret_key` were generated with the openssl CLI tool):
|
||||||
|
|
||||||
```javascript
|
```
|
||||||
Key {
|
Key name: nextcloud-app-key
|
||||||
key_id: "GK3515373e4c851ebaad366558",
|
Key ID: GK3515373e4c851ebaad366558
|
||||||
secret_key: "7d37d093435a41f2aab8f13c19ba067d9776c90215f56614adad6ece597dbb34",
|
Secret key: 7d37d093435a41f2aab8f13c19ba067d9776c90215f56614adad6ece597dbb34
|
||||||
name: "nextcloud-app-key",
|
Authorized buckets:
|
||||||
name_timestamp: 1603280506694,
|
|
||||||
deleted: false,
|
|
||||||
authorized_buckets: []
|
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Check that everything works as intended (be careful, info works only with your key identifier and not with its friendly name!):
|
Check that everything works as intended:
|
||||||
|
|
||||||
```
|
```
|
||||||
garagectl key list
|
garagectl key list
|
||||||
garagectl key info GK3515373e4c851ebaad366558
|
garagectl key info nextcloud-app-key
|
||||||
```
|
```
|
||||||
|
|
||||||
## Allow a key to access a bucket
|
## Allow a key to access a bucket
|
||||||
|
@ -67,7 +63,7 @@ garagectl bucket allow \
|
||||||
--read \
|
--read \
|
||||||
--write
|
--write
|
||||||
nextcloud-bucket \
|
nextcloud-bucket \
|
||||||
--key GK3515373e4c851ebaad366558
|
--key nextcloud-app-key
|
||||||
```
|
```
|
||||||
|
|
||||||
You can check at any times allowed keys on your bucket with:
|
You can check at any times allowed keys on your bucket with:
|
||||||
|
|
|
@ -11,20 +11,20 @@ As this part is not relevant for a test cluster, you can use this one-liner to c
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
garagectl status | grep UNCONFIGURED | grep -Po '^[0-9a-f]+' | while read id; do
|
garagectl status | grep UNCONFIGURED | grep -Po '^[0-9a-f]+' | while read id; do
|
||||||
garagectl node configure -d dc1 -n 10 $id
|
garagectl node configure -d dc1 -c 1 $id
|
||||||
done
|
done
|
||||||
```
|
```
|
||||||
|
|
||||||
## Real-world cluster
|
## Real-world cluster
|
||||||
|
|
||||||
For our example, we will suppose we have the following infrastructure (Tokens, Identifier and Datacenter are specific values to garage described in the following):
|
For our example, we will suppose we have the following infrastructure (Capacity, Identifier and Datacenter are specific values to garage described in the following):
|
||||||
|
|
||||||
| Location | Name | Disk Space | `Tokens` | `Identifier` | `Datacenter` |
|
| Location | Name | Disk Space | `Capacity` | `Identifier` | `Datacenter` |
|
||||||
|----------|---------|------------|----------|--------------|--------------|
|
|----------|---------|------------|------------|--------------|--------------|
|
||||||
| Paris | Mercury | 1 To | `100` | `8781c5` | `par1` |
|
| Paris | Mercury | 1 To | `2` | `8781c5` | `par1` |
|
||||||
| Paris | Venus | 2 To | `200` | `2a638e` | `par1` |
|
| Paris | Venus | 2 To | `4` | `2a638e` | `par1` |
|
||||||
| London | Earth | 2 To | `200` | `68143d` | `lon1` |
|
| London | Earth | 2 To | `4` | `68143d` | `lon1` |
|
||||||
| Brussels | Mars | 1.5 To | `150` | `212f75` | `bru1` |
|
| Brussels | Mars | 1.5 To | `3` | `212f75` | `bru1` |
|
||||||
|
|
||||||
### Identifier
|
### Identifier
|
||||||
|
|
||||||
|
@ -45,14 +45,15 @@ garagectl status
|
||||||
|
|
||||||
It will display the IP address associated with each node; from the IP address you will be able to recognize the node.
|
It will display the IP address associated with each node; from the IP address you will be able to recognize the node.
|
||||||
|
|
||||||
### Tokens
|
### Capacity
|
||||||
|
|
||||||
Garage reasons on an arbitrary metric about disk storage that is named "tokens".
|
Garage reasons on an arbitrary metric about disk storage that is named the *capacity* of a node.
|
||||||
The number of tokens must be proportional to the disk space dedicated to the node.
|
The capacity configured in Garage must be proportional to the disk space dedicated to the node.
|
||||||
Additionaly, ideally the number of tokens must be in the order of magnitude of 100
|
Additionaly, the capacity values used in Garage should be as small as possible, with
|
||||||
to provide a good trade-off between data load balancing and performances (*this sentence must be verified, it may be wrong*).
|
1 ideally representing the size of your smallest server.
|
||||||
|
|
||||||
Here we chose 1 token = 10 Go but you are free to select the value that best fit your needs.
|
Here we chose that 1 unit of capacity = 0.5 To, so that we can express servers of size
|
||||||
|
1 To and 2 To, as wel as the intermediate size 1.5 To.
|
||||||
|
|
||||||
### Datacenter
|
### Datacenter
|
||||||
|
|
||||||
|
@ -65,8 +66,8 @@ Behind the scene, garage will try to store the same data on different sites to p
|
||||||
Given the information above, we will configure our cluster as follow:
|
Given the information above, we will configure our cluster as follow:
|
||||||
|
|
||||||
```
|
```
|
||||||
garagectl node configure --datacenter par1 -n 100 -t mercury 8781c5
|
garagectl node configure --datacenter par1 -c 2 -t mercury 8781c5
|
||||||
garagectl node configure --datacenter par1 -n 200 -t venus 2a638e
|
garagectl node configure --datacenter par1 -c 4 -t venus 2a638e
|
||||||
garagectl node configure --datacenter lon1 -n 200 -t earth 68143d
|
garagectl node configure --datacenter lon1 -c 4 -t earth 68143d
|
||||||
garagectl node configure --datacenter bru1 -n 150 -t mars 212f75
|
garagectl node configure --datacenter bru1 -c 3 -t mars 212f75
|
||||||
```
|
```
|
||||||
|
|
Loading…
Reference in a new issue