================================ Configuring Federated Gateways ================================ .. versionadded:: 0.67 Dumpling In Ceph version 0.67 Dumpling and beyond, you may configure each :term:`Ceph Object Gateway` to participate in a federated architecture, with multiple regions, and with multiple zones for a region. - **Region**: A region represents a *logical* geographic area and contains one or more zones. A cluster with multiple regions must specify a master region. - **Zone**: A zone is a *logical* grouping of one or more Ceph Object Gateway instance(s). A region has a master zone that processes client requests. .. important:: Only write objects to the master zone in a region. You may read objects from secondary zones. Currently, the Gateway does not prevent you from writing to a secondary zone, but **DON'T DO IT**. Background ========== When you deploy a :term:`Ceph Object Store` service that spans geographical locales, configuring Ceph Object Gateway regions and metadata synchronization agents enables the service to maintain a global namespace, even though Ceph Object Gateway instances run in different geographic locales and potentially on different Ceph Storage Clusters. When you separate one or more Ceph Object Gateway instances within a region into separate logical containers to maintain an extra copy (or copies) of the data, configuring Ceph Object Gateway zones and data synchronization agents enables the service to maintain one or more copy(ies) of the master zone's data. Extra copies of the data are important for failover, backup and disaster recovery. You may deploy a single Ceph Storage Cluster with a federated architecture if you have low latency network connections (this isn't recommended). You may also deploy one Ceph Storage Cluster per region with a separate set of pools for each zone (typical). You may also deploy a separate Ceph Storage Cluster for each zone if your requirements and resources warrant this level of redundancy. About this Guide ================ In the following sections, we will demonstrate how to configure a federated cluster in two logical steps: - **Configure a Master Region:** This section of the guide describes how to set up a region with multiple zones, and how to synchronize data between the master zone and the secondary zone(s) within the master region. - **Configure a Secondary Region:** This section of the guide describes how to repeat the section on setting up a master region and multiple zones so that you have two regions with intra-zone synchronization in each region. Finally, you will learn how to set up a metadata synchronization agent so that you can maintain a global namespace for the regions in your cluster. Configure a Master Region ========================= This section provides an exemplary procedure for setting up a region, and two zones within the region. The cluster will comprise two gateway daemon instances--one per zone. This region will serve as the master region. Naming for the Master Region ---------------------------- Before configuring the cluster, defining region, zone and instance names will help you manage your cluster. Let's assume the region represents the United States, and we refer to it by its standard abbreviation. - United States: ``us`` Let's assume the zones represent the Eastern and Western United States. For continuity, our naming convention will use ``{region name}-{zone name}`` format, but you can use any naming convention you prefer. - United States, East Region: ``us-east`` - United States, West Region: ``us-west`` Finally, let's assume that zones may have more than one Ceph Object Gateway instance per zone. For continuity, our naming convention will use ``{region name}-{zone name}-{instance}`` format, but you can use any naming convention you prefer. - United States Region, Master Zone, Instance 1: ``us-east-1`` - United States Region, Secondary Zone, Instance 1: ``us-west-1`` Create Pools ------------ You may have a Ceph Storage Cluster for the entire region or a Ceph Storage Cluster for each zone. For continuity, our naming convention will use ``{region name}-{zone name}`` format prepended to the pool name, but you can use any naming convention you prefer. For example: - ``.us-east.rgw.root`` - ``.us-east.rgw.control`` - ``.us-east.rgw.gc`` - ``.us-east.rgw.buckets`` - ``.us-east.rgw.buckets.index`` - ``.us-east.rgw.buckets.extra`` - ``.us-east.log`` - ``.us-east.intent-log`` - ``.us-east.usage`` - ``.us-east.users`` - ``.us-east.users.email`` - ``.us-east.users.swift`` - ``.us-east.users.uid`` | - ``.us-west.rgw.root`` - ``.us-west.rgw.control`` - ``.us-west.rgw.gc`` - ``.us-west.rgw.buckets`` - ``.us-west.rgw.buckets.index`` - ``.us-west.rgw.buckets.extra`` - ``.us-west.log`` - ``.us-west.intent-log`` - ``.us-west.usage`` - ``.us-west.users`` - ``.us-west.users.email`` - ``.us-west.users.swift`` - ``.us-west.users.uid`` See `Configuration Reference - Pools`_ for details on the default pools for gateways. See `Pools`_ for details on creating pools. Execute the following to create a pool:: ceph osd pool create {poolname} {pg-num} {pgp-num} {replicated | erasure} [{erasure-code-profile}] {ruleset-name} {ruleset-number} .. tip:: When adding a large number of pools, it may take some time for your cluster to return to a ``active + clean`` state. .. topic:: CRUSH Maps When deploying a Ceph Storage Cluster for the entire region, consider using a CRUSH rule for the zone such that you do NOT have overlapping failure domains. See `CRUSH Map`_ for details. Ceph supports multiple CRUSH hierarchies and CRUSH rulesets, enabling great flexibility in the way you configure your gateway. Pools such as ``rgw.buckets.index`` may benefit from a modestly sized pool of SSDs for fast performance. Backing storage may benefit from the increased economy of erasure-coded storage, and/or the improved performance from cache tiering. When you have completed this step, execute the following to ensure that you have created all of the foregoing pools:: rados lspools Create a Keyring ---------------- Each instance must have a user name and key to communicate with a Ceph Storage Cluster. In the following steps, we use an admin node to create a keyring. Then, we create a client user name and key for each instance. Next, we add the keys to the Ceph Storage Cluster(s). Finally, we distribute the key ring to each node containing an instance. #. Create a keyring. :: sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.radosgw.keyring sudo chmod +r /etc/ceph/ceph.client.radosgw.keyring #. Generate a Ceph Object Gateway user name and key for each instance. :: sudo ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.radosgw.us-east-1 --gen-key sudo ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.radosgw.us-west-1 --gen-key #. Add capabilities to each key. See `Configuration Reference - Pools`_ for details on the effect of write permissions for the monitor and creating pools. :: sudo ceph-authtool -n client.radosgw.us-east-1 --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring sudo ceph-authtool -n client.radosgw.us-west-1 --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring #. Once you have created a keyring and key to enable the Ceph Object Gateway with access to the Ceph Storage Cluster, add each key as an entry to your Ceph Storage Cluster(s). For example:: sudo ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.us-east-1 -i /etc/ceph/ceph.client.radosgw.keyring sudo ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.us-west-1 -i /etc/ceph/ceph.client.radosgw.keyring .. note:: When you use this procedure to configure the secondary region, replace ``us-`` with ``eu-``. You will have a total of four users **after** you create the master region and the secondary region. Install Apache/FastCGI ---------------------- For each :term:`Ceph Node` that runs a :term:`Ceph Object Gateway` daemon instance, you must install Apache, FastCGI, the Ceph Object Gateway daemon (``radosgw``) and the Ceph Object Gateway Sync Agent (``radosgw-agent``). See `Install Ceph Object Gateway`_ for details. Create Data Directories ----------------------- Create data directories for each daemon instance on their respective hosts. :: ssh {us-east-1} sudo mkdir -p /var/lib/ceph/radosgw/ceph-radosgw.us-east-1 ssh {us-west-1} sudo mkdir -p /var/lib/ceph/radosgw/ceph-radosgw.us-west-1 .. note:: When you use this procedure to configure the secondary region, replace ``us-`` with ``eu-``. You will have a total of four data directories **after** you create the master region and the secondary region. Create a Gateway Configuration ------------------------------ For each instance, create an Ceph Object Gateway configuration file under the ``/etc/apache2/sites-available`` directory on the host(s) where you installed the Ceph Object Gateway daemon(s). See below for an exemplary embodiment of a gateway configuration as discussed in the following text. .. literalinclude:: rgw.conf :language: ini #. Replace the ``/{path}/{socket-name}`` entry with path to the socket and the socket name. For example, ``/var/run/ceph/client.radosgw.us-east-1.sock``. Ensure that you use the same path and socket name in your ``ceph.conf`` entry. #. Replace the ``{fqdn}`` entry with the fully-qualified domain name of the server. #. Replace the ``{email.address}`` entry with the email address for the server administrator. #. Add a ``ServerAlias`` if you wish to use S3-style subdomains (of course you do). #. Save the configuration to a file (e.g., ``rgw-us-east.conf``). Repeat the process for the secondary zone (e.g., ``rgw-us-west.conf``). .. note:: When you use this procedure to configure the secondary region, replace ``us-`` with ``eu-``. You will have a total of four gateway configuration files on the respective nodes **after** you create the master region and the secondary region. Finally, if you enabled SSL, make sure that you set the port to your SSL port (usually 443) and your configuration file includes the following:: SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache.crt SSLCertificateKeyFile /etc/apache2/ssl/apache.key SetEnv SERVER_PORT_SECURE 443 Enable the Configuration ------------------------ For each instance, enable the gateway configuration and disable the default site. #. Enable the site for the gateway configuration. :: sudo a2ensite {rgw-conf-filename} #. Disable the default site. :: sudo a2dissite default .. note:: Failure to disable the default site can lead to problems. Add a FastCGI Script -------------------- FastCGI requires a script for each Ceph Object Gateway instance to enable the S3-compatible interface. To create the script, execute the following procedures. #. Go to the ``/var/www`` directory. :: cd /var/www #. Open an editor with the file name ``s3gw.fcgi``. **Note:** The configuration file specifies this filename. :: sudo vim s3gw.fcgi #. Add a shell script with ``exec`` and the path to the gateway binary, the path to the Ceph configuration file, and the user name (``-n``; the same user name created in step 2 of `Create a Keyring`_. Copy the following into the editor. :: #!/bin/sh exec /usr/bin/radosgw -c /etc/ceph/ceph.conf -n client.radosgw.{ID} For example:: #!/bin/sh exec /usr/bin/radosgw -c /etc/ceph/ceph.conf -n client.radosgw.us-east-1 #. Save the file. #. Change the permissions on the file so that it is executable. :: sudo chmod +x s3gw.fcgi Repeat the process for the secondary zone. .. note:: When you use this procedure to configure the secondary region, replace ``us-`` with ``eu-``. You will have a total of four FastCGI scripts **after** you create the master region and the secondary region. Add Instances to Ceph Config File --------------------------------- On an admin node, add an entry for each instance in the Ceph configuration file for your Ceph Storage Cluster(s). For example:: [global] rgw region root pool = .us.rgw.root # Deprecated in Jewel rgw zonegroup root pool = .us.rgw.root # From Jewel [client.radosgw.us-east-1] rgw region = us rgw zone = us-east rgw zone root pool = .us-east.rgw.root keyring = /etc/ceph/ceph.client.radosgw.keyring rgw dns name = {hostname} rgw socket path = /var/run/ceph/$name.sock host = {host-name} [client.radosgw.us-west-1] rgw region = us rgw zone = us-west rgw zone root pool = .us-west.rgw.root keyring = /etc/ceph/ceph.client.radosgw.keyring rgw dns name = {hostname} rgw socket path = /var/run/ceph/$name.sock host = {host-name} Then, update each :term:`Ceph Node` with the updated Ceph configuration file. For example:: ceph-deploy --overwrite-conf config push {node1} {node2} {nodex} .. note:: When you use this procedure to configure the secondary region, replace ``us`` with ``eu`` for the name, region, pools and zones. You will have a total of four entries **after** you create the master region and the secondary region. Create a Region --------------- #. Configure a region infile called ``us.json`` for the ``us`` region. Copy the contents of the following example to a text editor. Set ``is_master`` to ``true``. Replace ``{fqdn}`` with the fully-qualified domain name of the endpoint. It will specify a master zone as ``us-east`` and list it in the ``zones`` list along with the ``us-west`` zone. See `Configuration Reference - Regions`_ for details.:: { "name": "us", "api_name": "us", "is_master": "true", "endpoints": [ "http:\/\/{fqdn}:80\/"], "master_zone": "us-east", "zones": [ { "name": "us-east", "endpoints": [ "http:\/\/{fqdn}:80\/"], "log_meta": "true", "log_data": "true"}, { "name": "us-west", "endpoints": [ "http:\/\/{fqdn}:80\/"], "log_meta": "true", "log_data": "true"}], "placement_targets": [ { "name": "default-placement", "tags": [] } ], "default_placement": "default-placement"} #. Create the ``us`` region using the ``us.json`` infile you just created. :: radosgw-admin region set --infile us.json --name client.radosgw.us-east-1 #. Delete the default region (if it exists). :: rados -p .us.rgw.root rm region_info.default #. Set the ``us`` region as the default region. :: radosgw-admin region default --rgw-region=us --name client.radosgw.us-east-1 Only one region can be the default region for a cluster. #. Update the region map. :: radosgw-admin regionmap update --name client.radosgw.us-east-1 If you use different Ceph Storage Cluster instances for regions, you should repeat steps 2, 4 and 5 in by executing them with ``--name client.radosgw-us-west-1``. You may also export the region map from the initial gateway instance and import it followed by updating the region map. .. note:: When you use this procedure to configure the secondary region, replace ``us`` with ``eu``. You will have a total of two regions **after** you create the master region and the secondary region. Create Zones ------------ #. Configure a zone infile called ``us-east.json`` for the ``us-east`` zone. Copy the contents of the following example to a text editor. This configuration uses pool names prepended with the region name and zone name. See `Configuration Reference - Pools`_ for additional details on gateway pools. See `Configuration Reference - Zones`_ for additional details on zones. :: { "domain_root": ".us-east.domain.rgw", "control_pool": ".us-east.rgw.control", "gc_pool": ".us-east.rgw.gc", "log_pool": ".us-east.log", "intent_log_pool": ".us-east.intent-log", "usage_log_pool": ".us-east.usage", "user_keys_pool": ".us-east.users", "user_email_pool": ".us-east.users.email", "user_swift_pool": ".us-east.users.swift", "user_uid_pool": ".us-east.users.uid", "system_key": { "access_key": "", "secret_key": ""}, "placement_pools": [ { "key": "default-placement", "val": { "index_pool": ".us-east.rgw.buckets.index", "data_pool": ".us-east.rgw.buckets"} } ] } #. Add the ``us-east`` zone using the ``us-east.json`` infile you just created in both the east and west pools by specifying their respective user names (i.e., ``--name``). :: radosgw-admin zone set --rgw-zone=us-east --infile us-east.json --name client.radosgw.us-east-1 radosgw-admin zone set --rgw-zone=us-east --infile us-east.json --name client.radosgw.us-west-1 Repeat step 1 to create a zone infile for ``us-west``. Then add the zone using the ``us-west.json`` infile in both the east and west pools by specifying their respective user names (i.e., ``--name``). :: radosgw-admin zone set --rgw-zone=us-west --infile us-west.json --name client.radosgw.us-east-1 radosgw-admin zone set --rgw-zone=us-west --infile us-west.json --name client.radosgw.us-west-1 #. Delete the default zone (if it exists). :: rados -p .us-east.rgw.root rm zone_info.default rados -p .us-west.rgw.root rm zone_info.default #. Update the region map. :: radosgw-admin regionmap update --name client.radosgw.us-east-1 .. note:: When you use this procedure to configure the secondary region, replace ``us-`` with ``eu-``. You will have a total of four zones **after** you create the master zone and the secondary zone in each region. Create Zone Users ----------------- Ceph Object Gateway stores zone users in the zone pools. So you must create zone users after configuring the zones. Copy the ``access_key`` and ``secret_key`` fields for each user so you can update your zone configuration once you complete this step. :: radosgw-admin user create --uid="us-east" --display-name="Region-US Zone-East" --name client.radosgw.us-east-1 --system radosgw-admin user create --uid="us-west" --display-name="Region-US Zone-West" --name client.radosgw.us-west-1 --system .. note:: When you use this procedure to configure the secondary region, replace ``us-`` with ``eu-``. You will have a total of four zone users **after** you create the master region and the secondary region and their zones. These users are different from the users created in `Create a Keyring`_. Update Zone Configurations -------------------------- You must update the zone configuration with zone users so that the synchronization agents can authenticate with the zones. #. Open your ``us-east.json`` zone configuration file and paste the contents of the ``access_key`` and ``secret_key`` fields from the step of creating zone users into the ``system_key`` field of your zone configuration infile. :: { "domain_root": ".us-east.domain.rgw", "control_pool": ".us-east.rgw.control", "gc_pool": ".us-east.rgw.gc", "log_pool": ".us-east.log", "intent_log_pool": ".us-east.intent-log", "usage_log_pool": ".us-east.usage", "user_keys_pool": ".us-east.users", "user_email_pool": ".us-east.users.email", "user_swift_pool": ".us-east.users.swift", "user_uid_pool": ".us-east.users.uid", "system_key": { "access_key": "{paste-access_key-here}", "secret_key": "{paste-secret_key-here}" }, "placement_pools": [ { "key": "default-placement", "val": { "index_pool": ".us-east.rgw.buckets.index", "data_pool": ".us-east.rgw.buckets"} } ] } #. Save the ``us-east.json`` file. Then, update your zone configuration. :: radosgw-admin zone set --rgw-zone=us-east --infile us-east.json --name client.radosgw.us-east-1 radosgw-admin zone set --rgw-zone=us-east --infile us-east.json --name client.radosgw.us-west-1 #. Repeat step 1 to update the zone infile for ``us-west``. Then, update your zone configuration. :: radosgw-admin zone set --rgw-zone=us-west --infile us-west.json --name client.radosgw.us-east-1 radosgw-admin zone set --rgw-zone=us-west --infile us-west.json --name client.radosgw.us-west-1 .. note:: When you use this procedure to configure the secondary region, replace ``us-`` with ``eu-``. You will have a total of four zones **after** you create the master zone and the secondary zone in each region. Restart Services ---------------- Once you have redeployed your Ceph configuration files, we recommend restarting your Ceph Storage Cluster(s) and Apache instances. For Ubuntu, use the following on each :term:`Ceph Node`:: sudo restart ceph-all For Red Hat/CentOS, use the following:: sudo /etc/init.d/ceph restart To ensure that all components have reloaded their configurations, for each gateway instance we recommend restarting the ``apache2`` service. For example:: sudo service apache2 restart Start Gateway Instances ----------------------- Start up the ``radosgw`` service. :: sudo /etc/init.d/radosgw start If you are running multiple instances on the same host, you must specify the user name. :: sudo /etc/init.d/radosgw start --name client.radosgw.us-east-1 Open a browser and check the endpoints for each zone. A simple HTTP request to the domain name should return the following: .. code-block:: xml anonymous Configure a Secondary Region ============================ This section provides an exemplary procedure for setting up a cluster with multiple regions. Configuring a cluster that spans regions requires maintaining a global namespace, so that there are no namespace clashes among object names stored across in different regions. This section extends the procedure in `Configure a Master Region`_, but changes the region name and modifies a few procedures. See the following sections for details. Naming for the Secondary Region ------------------------------- Before configuring the cluster, defining region, zone and instance names will help you manage your cluster. Let's assume the region represents the European Union, and we refer to it by its standard abbreviation. - European Union: ``eu`` Let's assume the zones represent the Eastern and Western European Union. For continuity, our naming convention will use ``{region name}-{zone name}`` format, but you can use any naming convention you prefer. - European Union, East Region: ``eu-east`` - European Union, West Region: ``eu-west`` Finally, let's assume that zones may have more than one Ceph Object Gateway instance per zone. For continuity, our naming convention will use ``{region name}-{zone name}-{instance}`` format, but you can use any naming convention you prefer. - European Union Region, Master Zone, Instance 1: ``eu-east-1`` - European Union Region, Secondary Zone, Instance 1: ``eu-west-1`` Configuring a Secondary Region ------------------------------ Repeat the exemplary procedure of `Configure a Master Region`_ with the following differences: #. Use `Naming for the Secondary Region`_ in lieu of `Naming for the Master Region`_. #. `Create Pools`_ using ``eu`` instead of ``us``. #. `Create a Keyring`_ and the corresponding keys using ``eu`` instead of ``us``. You may use the same keyring if you desire, but ensure that you create the keys on the Ceph Storage Cluster for that region (or region and zone). #. `Install Apache/FastCGI`_. #. `Create Data Directories`_ using ``eu`` instead of ``us``. #. `Create a Gateway Configuration`_ using ``eu`` instead of ``us`` for the socket names. #. `Enable the Configuration`_. #. `Add a FastCGI Script`_ using ``eu`` instead of ``us`` for the user names. #. `Add Instances to Ceph Config File`_ using ``eu`` instead of ``us`` for the pool names. #. `Create a Region`_ using ``eu`` instead of ``us``. Set ``is_master`` to ``false``. For consistency, create the master region in the secondary region too. :: radosgw-admin region set --infile us.json --name client.radosgw.eu-east-1 #. `Create Zones`_ using ``eu`` instead of ``us``. Ensure that you update the user name (i.e., ``--name``) so that you create the zones in the correct cluster. #. `Update Zone Configurations`_ using ``eu`` instead of ``us``. #. Create zones from master region in the secondary region. :: radosgw-admin zone set --rgw-zone=us-east --infile us-east.json --name client.radosgw.eu-east-1 radosgw-admin zone set --rgw-zone=us-east --infile us-east.json --name client.radosgw.eu-west-1 radosgw-admin zone set --rgw-zone=us-west --infile us-west.json --name client.radosgw.eu-east-1 radosgw-admin zone set --rgw-zone=us-west --infile us-west.json --name client.radosgw.eu-west-1 #. Create zones from secondary region in the master region. :: radosgw-admin zone set --rgw-zone=eu-east --infile eu-east.json --name client.radosgw.us-east-1 radosgw-admin zone set --rgw-zone=eu-east --infile eu-east.json --name client.radosgw.us-west-1 radosgw-admin zone set --rgw-zone=eu-west --infile eu-west.json --name client.radosgw.us-east-1 radosgw-admin zone set --rgw-zone=eu-west --infile eu-west.json --name client.radosgw.us-west-1 #. `Restart Services`_. #. `Start Gateway Instances`_. Multi-Site Data Replication =========================== The data synchronization agent replicates the data of a master zone to a secondary zone. The master zone of a region is the source for the secondary zone of the region and it gets selected automatically. .. image:: ../images/zone-sync.png To configure the synchronization agent, retrieve the access key and secret for the source and destination, and the destination URL and port. You may use ``radosgw-admin zone list`` to get a list of zone names. You may use ``radosgw-admin zone get`` to identify the key and secret for the zone. You may refer to the gateway configuration file you created under `Create a Gateway Configuration`_ to identify the port number. You only need the hostname and port for a single instance (assuming all gateway instances in a region/zone access the same Ceph Storage Cluster). Specify these values in a configuration file (e.g., ``cluster-data-sync.conf``), and include a ``log_file`` name. For example: .. code-block:: ini src_access_key: {source-access-key} src_secret_key: {source-secret-key} destination: https://zone-name.fqdn.com:port dest_access_key: {destination-access-key} dest_secret_key: {destination-secret-key} log_file: {log.filename} A concrete example may look like this: .. code-block:: ini src_access_key: DG8RE354EFPZBICHIAF0 src_secret_key: i3U0HiRP8CXaBWrcF8bbh6CbsxGYuPPwRkixfFSb destination: https://us-west.storage.net:80 dest_access_key: U60RFI6B08F32T2PD30G dest_secret_key: W3HuUor7Gl1Ee93pA2pq2wFk1JMQ7hTrSDecYExl log_file: /var/log/radosgw/radosgw-sync-us-east-west.log To activate the data synchronization agent, open a terminal and execute the following:: radosgw-agent -c region-data-sync.conf When the synchronization agent is running, you should see output indicating that the agent is synchronizing shards of data. :: INFO:radosgw_agent.sync:Starting incremental sync INFO:radosgw_agent.worker:17910 is processing shard number 0 INFO:radosgw_agent.worker:shard 0 has 0 entries after '' INFO:radosgw_agent.worker:finished processing shard 0 INFO:radosgw_agent.worker:17910 is processing shard number 1 INFO:radosgw_agent.sync:1/64 shards processed INFO:radosgw_agent.worker:shard 1 has 0 entries after '' INFO:radosgw_agent.worker:finished processing shard 1 INFO:radosgw_agent.sync:2/64 shards processed ... .. note:: You must have an agent for each source-destination pair. Inter-Region Metadata Replication ================================= The data synchronization agent replicates the metadata of master zone in the master region to a master zone in a secondary region. Metadata consists of gateway users and buckets, but not the objects within the buckets--ensuring a unified namespace across the cluster. The master zone of the master region is the source for the master zone of the secondary region and it gets selected automatically. .. image:: ../images/region-sync.png :align: center Follow the same steps in `Multi-Site Data Replication`_ by specifying the master zone of the master region as the source zone and the master zone of the secondary region as the secondary zone. When activating the ``radosgw-agent``, specify ``--metadata-only`` so that it only copies metadata. For example:: radosgw-agent -c inter-region-data-sync.conf --metadata-only Once you have completed the foregoing procedure, you should have a cluster consisting of a master region (``us``) and a secondary region (``eu``) where there is a unified namespace between the two regions. .. _CRUSH Map: ../../rados/operations/crush-map .. _Install Ceph Object Gateway: ../../install/install-ceph-gateway .. _Ceph configuration file: ../../rados/configuration/ceph-conf .. _Configuration Reference - Pools: ../config-ref#pools .. _Configuration Reference - Regions: ../config-ref#regions .. _Configuration Reference - Zones: ../config-ref#zones .. _Pools: ../../rados/operations/pools .. _Simple Configuration: ../config-fcgi