2020-04-03 18:16:34 -04:00
---
2022-05-12 19:29:40 +02:00
title : Object Store Multisite
2020-04-03 18:16:34 -04:00
---
2021-02-17 19:59:30 -07:00
Multisite is a feature of Ceph that allows object stores to replicate their data over multiple Ceph clusters.
2020-04-03 18:16:34 -04:00
Multisite also allows object stores to be independent and isolated from other object stores in a cluster.
When a ceph-object-store is created without the `zone` section; a realm, zone group, and zone is created with the same name as the ceph-object-store.
Since it is the only ceph-object-store in the realm, the data in the ceph-object-store remain independent and isolated from others on the same cluster.
2020-07-23 16:34:52 -04:00
When a ceph-object-store is created with the `zone` section, the ceph-object-store will join a custom created zone, zone group, and realm each with a different names than its own.
2020-04-03 18:16:34 -04:00
This allows the ceph-object-store to replicate its data over multiple Ceph clusters.
2022-02-21 11:38:08 +05:30
To review core multisite concepts please read the
2022-05-12 19:29:40 +02:00
[ceph-multisite design overview ](https://github.com/rook/rook/blob/master/design/ceph/object/ceph-multisite-overview.md ).
2020-04-03 18:16:34 -04:00
2022-05-12 19:29:40 +02:00
### Prerequisites
2020-04-03 18:16:34 -04:00
2022-05-12 19:29:40 +02:00
This guide assumes a Rook cluster as explained in the [Quickstart ](../../Getting-Started/quickstart.md ).
2020-04-03 18:16:34 -04:00
2022-05-12 19:29:40 +02:00
## Creating Object Multisite
2020-04-03 18:16:34 -04:00
If an admin wants to set up multisite on a Rook Ceph cluster, the admin should create:
2022-05-12 19:29:40 +02:00
1. A [realm ](../../CRDs/Object-Storage/ceph-object-multisite-crd.md#object-realm-settings )
1. A [zonegroup ](../../CRDs/Object-Storage/ceph-object-multisite-crd.md#object-zone-group-settings )
1. A [zone ](../../CRDs/Object-Storage/ceph-object-multisite-crd.md#object-zone-settings )
2022-02-21 11:38:08 +05:30
1. A ceph object store with the `zone` section
2020-04-03 18:16:34 -04:00
2022-05-12 19:29:40 +02:00
object-multisite.yaml in the [examples ](https://github.com/rook/rook/blob/master/deploy/examples/ ) directory can be used to create the multisite CRDs.
2021-09-22 10:37:07 +02:00
2020-04-03 18:16:34 -04:00
```console
kubectl create -f object-multisite.yaml
```
2021-02-17 19:59:30 -07:00
The first zone group created in a realm is the master zone group. The first zone created in a zone group is the master zone.
2020-07-23 16:34:52 -04:00
2022-02-21 11:38:08 +05:30
When a non-master zone or non-master zone group is created, the zone group or zone is not in the Ceph Radosgw Multisite [Period ](https://docs.ceph.com/docs/en/latest/radosgw/multisite/ ) until an object-store is created in that zone (and zone group).
2020-04-03 18:16:34 -04:00
2020-07-13 01:25:52 -04:00
The zone will create the pools for the object-store(s) that are in the zone to use.
2020-07-14 17:27:46 -04:00
When one of the multisite CRs (realm, zone group, zone) is deleted the underlying ceph realm/zone group/zone is not deleted, neither are the pools created by the zone. See the "Multisite Cleanup" section for more information.
2020-04-03 18:16:34 -04:00
2022-05-12 19:29:40 +02:00
For more information on the multisite CRDs please read [ceph-object-multisite-crd ](../../CRDs/Object-Storage/ceph-object-multisite-crd.md ).
2020-04-03 18:16:34 -04:00
2022-05-12 19:29:40 +02:00
## Pulling a Realm
2020-07-14 17:27:46 -04:00
2021-02-17 19:59:30 -07:00
If an admin wants to sync data from another cluster, the admin needs to pull a realm on a Rook Ceph cluster from another Rook Ceph (or Ceph) cluster.
2020-07-14 17:27:46 -04:00
To begin doing this, the admin needs 2 pieces of information:
2020-07-23 16:34:52 -04:00
1. An endpoint from the realm being pulled from
1. The access key and the system key of the system user from the realm being pulled from.
2020-07-14 17:27:46 -04:00
2022-05-12 19:29:40 +02:00
### Getting the Pull Endpoint
2020-07-14 17:27:46 -04:00
2021-02-17 19:59:30 -07:00
To pull a Ceph realm from a remote Ceph cluster, an `endpoint` must be added to the CephObjectRealm's `pull` section in the `spec` . This endpoint must be from the master zone in the master zone group of that realm.
2020-07-14 17:27:46 -04:00
2020-11-06 09:46:09 +01:00
If an admin does not know of an endpoint that fits this criteria, the admin can find such an endpoint on the remote Ceph cluster (via the tool box if it is a Rook Ceph Cluster) by running:
2020-07-23 16:34:52 -04:00
2022-05-12 19:29:40 +02:00
```console
2021-02-18 18:24:22 +05:30
$ radosgw-admin zonegroup get --rgw-realm= $REALM_NAME --rgw-zonegroup= $MASTER_ZONEGROUP_NAME
2022-05-12 19:29:40 +02:00
{
...
"endpoints": [http://10.17.159.77:80],
...
}
2020-07-14 17:27:46 -04:00
```
A list of endpoints in the master zone group in the master zone is in the `endpoints` section of the JSON output of the `zonegoup get` command.
This endpoint must also be resolvable from the new Rook Ceph cluster. To test this run the `curl` command on the endpoint:
2022-05-12 19:29:40 +02:00
```console
2021-02-18 18:24:22 +05:30
$ curl -L http://10.17.159.77:80
2022-05-12 19:29:40 +02:00
<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>
2020-07-14 17:27:46 -04:00
```
Finally add the endpoint to the `pull` section of the CephObjectRealm's spec. The CephObjectRealm should have the same name as the CephObjectRealm/Ceph realm it is pulling from.
2021-02-18 18:24:22 +05:30
```yaml
2020-07-14 17:27:46 -04:00
apiVersion : ceph.rook.io/v1
kind : CephObjectRealm
metadata :
name : realm-a
namespace : rook-ceph
spec :
pull :
endpoint : http://10.17.159.77:80
```
2022-05-12 19:29:40 +02:00
### Getting Realm Access Key and Secret Key
2020-07-14 17:27:46 -04:00
2020-07-23 16:34:52 -04:00
The access key and secret key of the system user are keys that allow other Ceph clusters to pull the realm of the system user.
2020-07-14 17:27:46 -04:00
2022-05-12 19:29:40 +02:00
#### Getting the Realm Access Key and Secret Key from the Rook Ceph Cluster
2020-07-14 17:27:46 -04:00
2020-07-23 16:34:52 -04:00
When an admin creates a ceph-object-realm a system user automatically gets created for the realm with an access key and a secret key.
2020-07-14 17:27:46 -04:00
2020-07-23 16:34:52 -04:00
This system user has the name "$REALM_NAME-system-user". For the example realm, the uid for the system user is "realm-a-system-user".
These keys for the user are exported as a kubernetes [secret ](https://kubernetes.io/docs/concepts/configuration/secret/ ) called "$REALM_NAME-keys" (ex: realm-a-keys).
2020-07-14 17:27:46 -04:00
To get these keys from the cluster the realm was originally created on, run:
2022-05-12 19:29:40 +02:00
2020-07-14 17:27:46 -04:00
```console
2022-05-12 19:29:40 +02:00
kubectl -n $ORIGINAL_CLUSTER_NAMESPACE get secrets realm-a-keys -o yaml > realm-a-keys.yaml
2020-07-14 17:27:46 -04:00
```
2022-05-12 19:29:40 +02:00
2020-07-14 17:27:46 -04:00
Edit the `realm-a-keys.yaml` file, and change the `namespace` with the namespace that the new Rook Ceph cluster exists in.
Then create a kubernetes secret on the pulling Rook Ceph cluster with the same secrets yaml file.
2022-05-12 19:29:40 +02:00
2020-07-14 17:27:46 -04:00
```console
kubectl create -f realm-a-keys.yaml
```
2022-05-12 19:29:40 +02:00
#### Getting the Realm Access Key and Secret Key from a Non Rook Ceph Cluster
2020-07-14 17:27:46 -04:00
The access key and the secret key of the system user can be found in the output of running the following command on a non-rook ceph cluster:
2022-05-12 19:29:40 +02:00
```console
2020-07-23 16:34:52 -04:00
radosgw-admin user info --uid="realm-a-system-user"
```
2022-05-12 19:29:40 +02:00
```json
{
...
"keys" : [
{
"user" : "realm-a-system-user"
"access_key" : "aSw4blZIKV9nKEU5VC0="
"secret_key" : "JSlDXFt5TlgjSV9QOE9XUndrLiI5JEo9YDBsJg==" ,
}
],
...
}
```
2020-07-14 17:27:46 -04:00
2021-02-17 19:59:30 -07:00
Then base64 encode the each of the keys and create a `.yaml` file for the Kubernetes secret from the following template.
2020-07-23 16:34:52 -04:00
Only the `access-key` , `secret-key` , and `namespace` sections need to be replaced.
2022-05-12 19:29:40 +02:00
2021-02-18 18:24:22 +05:30
```yaml
2020-07-14 17:27:46 -04:00
apiVersion : v1
data :
access-key : YVN3NGJsWklLVjluS0VVNVZDMD0=
secret-key : SlNsRFhGdDVUbGdqU1Y5UU9FOVhVbmRyTGlJNUpFbzlZREJzSmc9PQ==
kind : Secret
metadata :
name : realm-a-keys
namespace : $NEW_ROOK_CLUSTER_NAMESPACE
type : kubernetes.io/rook
```
Finally, create a kubernetes secret on the pulling Rook Ceph cluster with the new secrets yaml file.
2022-05-12 19:29:40 +02:00
2020-07-14 17:27:46 -04:00
```console
kubectl create -f realm-a-keys.yaml
```
2022-05-12 19:29:40 +02:00
#### Pulling a Realm on a New Rook Ceph Cluster
2020-07-14 17:27:46 -04:00
Once the admin knows the endpoint and the secret for the keys has been created, the admin should create:
2022-05-12 19:29:40 +02:00
1. A [CephObjectRealm ](../../CRDs/Object-Storage/ceph-object-multisite-crd.md#object-realm-settings ) matching to the realm on the other Ceph cluster, with an endpoint as described above.
2022-06-21 19:59:31 -04:00
1. A [CephObjectZoneGroup ](../../CRDs/Object-Storage/ceph-object-multisite-crd.md#object-zone-group-settings ) matching the master zone group name or the master CephObjectZoneGroup from the cluster the realm was pulled from.
2022-05-12 19:29:40 +02:00
1. A [CephObjectZone ](../../CRDs/Object-Storage/ceph-object-multisite-crd.md#object-zone-settings ) referring to the CephObjectZoneGroup created above.
2022-02-21 11:38:08 +05:30
1. A CephObjectStore referring to the new CephObjectZone resource.
2020-07-14 17:27:46 -04:00
2022-05-12 19:29:40 +02:00
object-multisite-pull-realm.yaml (with changes) in the [examples ](https://github.com/rook/rook/blob/master/deploy/examples/ ) directory can be used to create the multisite CRDs.
2021-09-22 10:37:07 +02:00
2020-07-14 17:27:46 -04:00
```console
kubectl create -f object-multisite-pull-realm.yaml
```
2022-05-12 19:29:40 +02:00
## Multisite Cleanup
2020-04-03 18:16:34 -04:00
2020-07-23 16:34:52 -04:00
Multisite configuration must be cleaned up by hand. Deleting a realm/zone group/zone CR will not delete the underlying Ceph realm, zone group, zone, or the pools associated with a zone.
2022-05-12 19:29:40 +02:00
### Realm Deletion
2020-04-03 18:16:34 -04:00
Changes made to the resource's configuration or deletion of the resource are not reflected on the Ceph cluster.
When the ceph-object-realm resource is deleted or modified, the realm is not deleted from the Ceph cluster. Realm deletion must be done via the toolbox.
2022-05-12 19:29:40 +02:00
#### Deleting a Realm
2020-04-03 18:16:34 -04:00
2021-02-17 19:59:30 -07:00
The Rook toolbox can modify the Ceph Multisite state via the radosgw-admin command.
2020-04-03 18:16:34 -04:00
The following command, run via the toolbox, deletes the realm.
```console
2020-09-27 16:17:22 +07:00
radosgw-admin realm delete --rgw-realm=realm-a
2020-04-03 18:16:34 -04:00
```
2022-05-12 19:29:40 +02:00
### Zone Group Deletion
2020-04-03 18:16:34 -04:00
Changes made to the resource's configuration or deletion of the resource are not reflected on the Ceph cluster.
When the ceph-object-zone group resource is deleted or modified, the zone group is not deleted from the Ceph cluster. Zone Group deletion must be done through the toolbox.
2022-05-12 19:29:40 +02:00
#### Deleting a Zone Group
2020-04-03 18:16:34 -04:00
2021-02-17 19:59:30 -07:00
The Rook toolbox can modify the Ceph Multisite state via the radosgw-admin command.
2020-04-03 18:16:34 -04:00
The following command, run via the toolbox, deletes the zone group.
```console
radosgw-admin zonegroup delete --rgw-realm=realm-a --rgw-zonegroup=zone-group-a
2020-09-27 16:17:22 +07:00
radosgw-admin period update --commit --rgw-realm=realm-a --rgw-zonegroup=zone-group-a
2020-04-03 18:16:34 -04:00
```
2022-05-12 19:29:40 +02:00
### Deleting and Reconfiguring the Ceph Object Zone
2020-04-03 18:16:34 -04:00
Changes made to the resource's configuration or deletion of the resource are not reflected on the Ceph cluster.
When the ceph-object-zone resource is deleted or modified, the zone is not deleted from the Ceph cluster. Zone deletion must be done through the toolbox.
2022-05-12 19:29:40 +02:00
#### Changing the Master Zone
2020-04-03 18:16:34 -04:00
The Rook toolbox can change the master zone in a zone group.
```console
radosgw-admin zone modify --rgw-realm=realm-a --rgw-zonegroup=zone-group-a --rgw-zone=zone-a --master
radosgw-admin zonegroup modify --rgw-realm=realm-a --rgw-zonegroup=zone-group-a --master
radosgw-admin period update --commit --rgw-realm=realm-a --rgw-zonegroup=zone-group-a --rgw-zone=zone-a
```
2022-05-12 19:29:40 +02:00
#### Deleting Zone
2020-04-03 18:16:34 -04:00
The Rook toolbox can modify the Ceph Multisite state via the radosgw-admin command.
There are two scenarios possible when deleting a zone.
The following commands, run via the toolbox, deletes the zone if there is only one zone in the zone group.
```console
2020-09-27 16:17:22 +07:00
radosgw-admin zone delete --rgw-realm=realm-a --rgw-zonegroup=zone-group-a --rgw-zone=zone-a
radosgw-admin period update --commit --rgw-realm=realm-a --rgw-zonegroup=zone-group-a --rgw-zone=zone-a
2020-04-03 18:16:34 -04:00
```
In the other scenario, there are more than one zones in a zone group.
Care must be taken when changing which zone is the master zone.
2021-02-17 19:59:30 -07:00
Please read the following [documentation ](https://docs.ceph.com/docs/master/radosgw/multisite/#changing-the-metadata-master-zone ) before running the below commands:
2020-04-03 18:16:34 -04:00
The following commands, run via toolboxes, remove the zone from the zone group first, then delete the zone.
```console
2020-09-27 16:17:22 +07:00
radosgw-admin zonegroup rm --rgw-realm=realm-a --rgw-zonegroup=zone-group-a --rgw-zone=zone-a
radosgw-admin period update --commit --rgw-realm=realm-a --rgw-zonegroup=zone-group-a --rgw-zone=zone-a
radosgw-admin zone delete --rgw-realm=realm-a --rgw-zonegroup=zone-group-a --rgw-zone=zone-a
radosgw-admin period update --commit --rgw-realm=realm-a --rgw-zonegroup=zone-group-a --rgw-zone=zone-a
2020-04-03 18:16:34 -04:00
```
2020-07-13 01:25:52 -04:00
When a zone is deleted, the pools for that zone are not deleted.
2022-05-12 19:29:40 +02:00
#### Deleting Pools for a Zone
2020-07-13 01:25:52 -04:00
The Rook toolbox can delete pools. Deleting pools should be done with caution.
2020-07-23 16:34:52 -04:00
The following [documentation ](https://docs.ceph.com/docs/master/rados/operations/pools/ ) on pools should be read before deleting any pools.
2020-07-13 01:25:52 -04:00
When a zone is created the following pools are created for each zone:
2022-05-12 19:29:40 +02:00
```console
2020-07-13 01:25:52 -04:00
$ ZONE_NAME.rgw.control
$ ZONE_NAME.rgw.meta
$ ZONE_NAME.rgw.log
$ ZONE_NAME.rgw.buckets.index
$ ZONE_NAME.rgw.buckets.non-ec
$ ZONE_NAME.rgw.buckets.data
```
2022-05-12 19:29:40 +02:00
2020-07-13 01:25:52 -04:00
Here is an example command to delete the .rgw.buckets.data pool for zone-a.
```console
ceph osd pool rm zone-a.rgw.buckets.data zone-a.rgw.buckets.data --yes-i-really-really-mean-it
```
2020-07-14 17:27:46 -04:00
2020-07-23 16:34:52 -04:00
In this command the pool name **must** be mentioned twice for the pool to be removed.
2020-07-14 17:27:46 -04:00
2022-05-12 19:29:40 +02:00
#### Removing an Object Store from a Zone
2020-07-14 17:27:46 -04:00
When an object-store (created in a zone) is deleted, the endpoint for that object store is removed from that zone, via
2022-05-12 19:29:40 +02:00
2020-07-14 17:27:46 -04:00
```console
kubectl delete -f object-store.yaml
```
2020-11-06 09:46:09 +01:00
Removing object store(s) from the master zone of the master zone group should be done with caution. When all of these object-stores are deleted the period cannot be updated and that realm cannot be pulled.