Bring etcd support for bucket DNS federation

- Supports centralized `config.json`
- Supports centralized `bucket` service records
  for client lookups
- implement a new proxy forwarder
This commit is contained in:
Harshavardhana
2018-02-02 18:18:52 -08:00
committed by kannappanr
parent 7872c192ec
commit 853ea371ce
144 changed files with 77684 additions and 81 deletions

View File

@@ -0,0 +1,11 @@
. {
etcd churchofminio.com {
endpoint http://localhost:2379 http://localhost:4001
upstream /etc/resolv.conf
}
debug
prometheus
cache 160 churchofminio.com
loadbalance
proxy . /etc/resolv.conf
}

View File

@@ -0,0 +1,48 @@
# Federation
There are primarily two types of federation
- Bucket lookup from DNS
- Bucket is shared across many clusters
This document will explain in detail about how to configure Minio supporting `Bucket lookup`
## Federation (Bucket Lookup)
Bucket lookup federation requires two dependencies
- etcd (for config, bucket SRV records)
- coredns (for DNS management based on populated bucket SRV records)
## Architecture
![bucket-lookup](./bucket-lookup.png)
### Run Multiple Clusters
> cluster1
```
export MINIO_ETCD_ENDPOINTS="http://remote-etcd1:2379,http://remote-etcd2:4001"
export MINIO_DOMAIN=domain.com
export MINIO_DOMAIN_IP=44.35.2.1
minio server http://rack{1...4}.host{1...4}.domain.com/mnt/export{1...32}
```
> cluster2
```
export MINIO_ETCD_ENDPOINTS="http://remote-etcd1:2379,http://remote-etcd2:4001"
export MINIO_DOMAIN=domain.com
export MINIO_DOMAIN_IP=44.35.2.2
minio server http://rack{5...8}.host{5...8}.domain.com/mnt/export{1...32}
```
In this configuration you can see `MINIO_ETCD_ENDPOINTS` points to the etcd backend which manages Minio's
`config.json` and bucket SRV records. `MINIO_DOMAIN` indicates the domain suffix for the bucket which
will be used to resolve bucket from DNS. For example if you have a bucket such as `mybucket`, the
client can use now `mybucket.domain.com` to directly resolve to the right cluster. `MINIO_DOMAIN_IP`
points to the public IP address where each cluster might be accessible, this is unique per each cluster.
NOTE: `mybucket` only exists on one cluster either `cluster1` or `cluster2` this is truly random and
is decided by how `domain.com` gets resolved, if there is a round-robin DNS on `domain.com` then
it is truly random which cluster might provision the bucket. This control is not provided to the
client yet, but can be done based on the `region` parameter as supported by `AWS S3` specification.

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB