Ceph RGW multisite异地容灾备份方案

1.前言

容灾 (Disaster Recovery),即容灾备份或灾备,是业务连续性系统的一个子集,用于保障 IT 系统在遭受自然灾害、人为操作失误或蓄意破坏后的数据还原和业务恢复.

Ceph RGW 多数据中心(multisite)功能旨在实现异地双活,提供了备份容灾的能力。并且具有多个数据中心供用户选择,存放资源。

主节点在对外提供服务时,用户数据在主节点落盘后即向用户回应“写成功”应答,然后实时记录数据变化的相关日志信息。备节点则实时比较主备数据差异,并及时将差异化数据拉回备节点。异步复制技术适用于远距离的容灾方案,对系统性能影响较小。

2.介绍

单个数据中心的配置通常由一个zonegroup组成,该zonegroup包含一个zone和一个或多个ceph-radosgw实例,您可以在这些实例之间负载均衡网关客户端请求。在单个数据中心配置中,通常,多个网关实例指向单个Ceph存储群集。Kraken支持Ceph对象网关的多个多站点配置选项:

  • Multi-zone:更高级的配置由一个zonegroup和多个zone组成,每个zone具有一个或多个ceph-radosgw实例。每个zone均由其自己的Ceph存储群集支持。如果zone之一发生严重故障,则zonegroup中的多个zone可为zonegroup提供灾难恢复。在Kraken中,每个zone都处于活动状态,并且可以接收写操作。除了灾难恢复外,多个活动zone还可以用作内容交付网络的基础。

  • Multi-zone-group:又名region,Ceph对象网关还可以支持多个zonegroup,每个zonegroup具有一个或多个zone。在相同的realm中,在同一个zonegroup中的对象共享一个全局命名空间,在跨zonegroup和zone中具有唯一的对象ID。

  • Multiple Realms:在Kraken中,Ceph对象网关支持realm的概念,realm可以是单个zonegroup或多个zonegroup以及该realm的全局唯一名称空间。multi realm提供了支持众多配置和名称空间的能力。

同一zonegroup中,多zone之间数据拷贝形如:


多站点配置需要至少两个Ceph存储群集,最好给定一个不同的群集名称。至少两个Ceph对象网关实例,每个Ceph存储集群一个。

注意:元数据在同一realm的zone之间进行同步。
实体数据只在同一zonegroup的主zone和从zone之间同步,无法跨zonegroup访问实体数据的信息。

3.配置说明

名词解析:

名称 含义
realm 域,同一域内的账户在其下属的zone上是通用的。一个域下只能有一个主zonegroup,从的zonegroup可以是0或多个。
Period 表示realm的有效期,在realm的结构发生变化时,其Period会相应变化。
Zonegroup Zone的集合,等价于之前的Region。一个Zonegroup下只能有一个主Zone。主Zone和从Zone可以部署在同一集群上,也可以部署在不同的集群上。
zone 表示独立的一个对象存储区域。
Metadata Sync 用户及桶相关的元数据同步,因元数据更新只能在主zonegroup的主zone上进行,所以同步只能由从的zone发起。

一个realm代表了全局唯一的命名空间,这个命名空间由一个或者多个zonegroup,zonegroup可以包含一个或多个zone.


每个realm都有与之对应period(表示一个realm的有效期)。每个period及时地代表了zonegroup的状态和zone的配置。每次需要对zonegroup或者zone做修改的时,需要更新period,并提交。

3.1.配置master zone

3.1.1.create realm

命令:

radosgw-admin realm create --rgw-realm={realm-name} [--default]

如果集群只有一个域,请指定--default标志。如果指定了--default,则radosgw-admin将默认使用此领域。如果未指定--default,则添加区域组和区域时需要指定--rgw-realm标志或--realm-id标志,以在添加区域组和区域时标识领域。

3.1.2.create a master zonegroup

一个realm必须至少具有一个zonegroup,它将用作该realm的主zonegroup。命令:

 radosgw-admin zonegroup create --rgw-zonegroup={name} --endpoints={url} [--rgw-realm={realm-name}|--realm-id={realm-id}] --master --default

如果该realm只有一个zonegroup,请指定--default标志。如果指定--default,则radosgw-admin在添加新zone时将默认使用此zonegroup。如果未指定--default,则添加或修改zone时,添加zone将需要--rgw-zonegroup标志或--zonegroup-id标志来标识zonegroup。

3.1.3.create a master zone

 radosgw-admin zone create --rgw-zonegroup={zone-group-name} \
                            --rgw-zone={zone-name} \
                            --master --default \
                            --endpoints={http://fqdn}[,{http://fqdn}]

重要说明:以下步骤假设您使用的是尚未安装数据的新安装系统进行多站点配置。如果已经使用默认区域及其池来存储数据,请不要删除它,否则数据将被删除且无法恢复。

3.1.4.delete default zonegroup and zone

删除默认zone(如果存在)。确保首先将其从默认zonegroup中删除。

# radosgw-admin zonegroup remove --rgw-zonegroup=default --rgw-zone=default
# radosgw-admin period update --commit
# radosgw-admin zone rm --rgw-zone=default
# radosgw-admin period update --commit
# radosgw-admin zonegroup delete --rgw-zonegroup=default
# radosgw-admin period update --commit

最后,删除Ceph存储群集中的默认池(如果存在)。

# ceph osd pool rm default.rgw.control default.rgw.control --yes-i-really-really-mean-it
# ceph osd pool rm default.rgw.data.root default.rgw.data.root --yes-i-really-really-mean-it
# ceph osd pool rm default.rgw.gc default.rgw.gc --yes-i-really-really-mean-it
# ceph osd pool rm default.rgw.log default.rgw.log --yes-i-really-really-mean-it
# ceph osd pool rm default.rgw.users.uid default.rgw.users.uid --yes-i-really-really-mean-it

3.1.5.create a system user

ceph-radosgw守护程序必须在提取域和期间信息之前进行身份验证。在主区域中,创建一个系统用户以促进守护程序之间的认证。

radosgw-admin user create --uid="{user-name}" --display-name="{Display Name}" --system

记下access_key和secret_key,因为secondary zone将要求它们向主区域进行身份验证。
最后,将系统用户添加到主区域。

radosgw-admin zone modify --rgw-zone={zone} --access-key={access-key} --secret={secret}
radosgw-admin period update --commit

3.1.6.UPDATE THE CEPH CONFIGURATION FILE

通过在实例条目中添加rgw_zone配置选项和主zone的名称来更新主区域主机上的Ceph配置文件。

[client.rgw.{instance-name}]
...
rgw_zone={zone-name}

3.1.7.START THE GATEWAY

在对象网关主机上,启动并启用Ceph对象网关服务

# systemctl start ceph-radosgw@rgw.`hostname -s`
# systemctl enable ceph-radosgw@rgw.`hostname -s`

3.2.配置SECONDARY ZONES

zonegroup中的zone将复制所有数据,以确保每个zone都具有相同的数据。创建SECONDARY ZONES时,请在标识为服务于SECONDARY ZONES的主机上执行以下所有操作。

注意:要添加第三个区域,请按照与添加SECONDARY ZONES相同的步骤进行操作。使用其他zone名称。

重要说明:您必须在主zone内的主机上执行元数据操作,例如用户创建。主zone和SECONDARY ZONES可以接收存储桶操作,但是SECONDARY ZONES将存储桶操作重定向到主zone。如果主zone关闭,则存储桶操作将失败。

3.2.1.PULL THE REALM

使用master zone group中master的URL路径,和access keysecret,将realm配置拉到主机。要拉出非默认realm,请使用--rgw-realm或--realm-id配置选项指定领域。

radosgw-admin realm pull --url={url-to-master-zone-gateway} --access-key={access-key} --secret={secret}

注意:pull realm还会检索远程服务器的当前period配置,并使其也成为此主机上的。period
如果此realm是默认realm或唯一realm,请将该realm设置为默认realm。

radosgw-admin realm default --rgw-realm={realm-name}

3.2.2 CREATE A SECONDARY ZONE

通过在标识为SECONDARY ZONE提供服务的主机上打开命令行界面,为多站点配置创建SECONDARY ZONE。指定zonegrop ID,新的zone name和该zone的端点。不要使用--master或--default标志。在Kraken中,默认情况下,所有区域都以双活配置运行。也就是说,网关客户端可以将数据写入任何区域,并且该zone会将数据复制到zonegroup内的所有其他zone。如果SECONDARY ZONE不应接受写操作,请指定--read-only标志以在主区域和SECONDARY ZONE之间创建主动-被动配置。此外,提供存储在主区域组的主区域中的生成的系统用户的access_key和secret_key。执行以下命令:

radosgw-admin zone create --rgw-zonegroup={zone-group-name}\
                            --rgw-zone={zone-name} --endpoints={url} \
                            --access-key={system-key} --secret={secret}\
                            --endpoints=http://{fqdn}:80 \
                            [--read-only]

重要说明:以下步骤假设使用不存储数据的新安装系统进行多站点配置。如果已经使用默认区域及其池来存储数据,请不要删除它,否则数据将丢失并且无法恢复。

如果需要,请删除默认区域。

radosgw-admin zone rm --rgw-zone=default

最后,根据需要删除Ceph存储群集中的默认池。

# ceph osd pool rm default.rgw.control default.rgw.control --yes-i-really-really-mean-it
# ceph osd pool rm default.rgw.data.root default.rgw.data.root --yes-i-really-really-mean-it
# ceph osd pool rm default.rgw.gc default.rgw.gc --yes-i-really-really-mean-it
# ceph osd pool rm default.rgw.log default.rgw.log --yes-i-really-really-mean-it
# ceph osd pool rm default.rgw.users.uid default.rgw.users.uid --yes-i-really-really-mean-it

3.2.3 UPDATE THE CEPH CONFIGURATION FILE

通过在实例条目中添加rgw_zone配置选项和辅助区域的名称,来更新辅助区域主机上的Ceph配置文件。

[client.rgw.{instance-name}]
...
rgw_zone={zone-name}

3.2.4 UPDATE THE PERIOD

更新主区域配置后,请更新period。

# radosgw-admin period update --commit

注意更新perood会更改epoch,并确保其他zone将接收更新的配置。

3.2.5 START THE GATEWAY

在对象网关主机上,启动并启用Ceph对象网关服务:

# systemctl start ceph-radosgw@rgw.`hostname -s`
# systemctl enable ceph-radosgw@rgw.`hostname -s`

3.3检查同步状态

SECONDARY ZONE启动并运行后,检查同步状态。同步会将在主zone中创建的用户和存储桶复制到SECONDARY ZONE。

radosgw-admin sync status

注意:SECONDARY ZONE接受存储桶操作;但是,SECONDARY ZONE将存储桶操作重定向到主zone,然后与主zone同步以接收存储桶操作的结果。如果主zone关闭,则在SECONDARY ZONE上执行的存储桶操作将失败,但对象操作应成功。

4.实践操作

1.在主集群(master zone)创建一个名为default的realm

[root@node20 ~]# radosgw-admin realm create --rgw-realm=default --default
{
    "id": "ac48a172-ae86-4af7-8b31-b0fa03a0bb57",
    "name": "default",
    "current_period": "5ca7f77e-e4e2-42cf-bb7e-bc62bd4edc42",
    "epoch": 1
}
[root@node20 ~]# 


2.创建名为cd的master zonegroup

[root@node20 ~]# radosgw-admin zonegroup create --rgw-zonegroup=cd --endpoints=http://10.0.9.20:7480 --rgw-realm=default --master --default
{
    "id": "25aaab57-2bb9-4c73-9518-b0dedef9051e",
    "name": "cd",
    "api_name": "cd",
    "is_master": "true",
    "endpoints": [
        "http://10.0.9.20:7480"
    ],
    "hostnames": [],
    "hostnames_s3website": [],
    "master_zone": "",
    "zones": [],
    "placement_targets": [],
    "default_placement": "",
    "realm_id": "ac48a172-ae86-4af7-8b31-b0fa03a0bb57"
}
[root@node20 ~]# 


3.创建名为chengdu的master zone

[root@node20 ~]# radosgw-admin zone create --rgw-zonegroup=cd --rgw-zone=chengdu --master --default --endpoints=http://10.0.9.20:7480
{
    "id": "a0a652dc-4e29-4100-96e5-8a35c1354985",
    "name": "chengdu",
    "domain_root": "chengdu.rgw.meta:root",
    "control_pool": "chengdu.rgw.control",
    "gc_pool": "chengdu.rgw.log:gc",
    "lc_pool": "chengdu.rgw.log:lc",
    "log_pool": "chengdu.rgw.log",
    "intent_log_pool": "chengdu.rgw.log:intent",
    "usage_log_pool": "chengdu.rgw.log:usage",
    "reshard_pool": "chengdu.rgw.log:reshard",
    "user_keys_pool": "chengdu.rgw.meta:users.keys",
    "user_email_pool": "chengdu.rgw.meta:users.email",
    "user_swift_pool": "chengdu.rgw.meta:users.swift",
    "user_uid_pool": "chengdu.rgw.meta:users.uid",
    "otp_pool": "chengdu.rgw.otp",
    "system_key": {
        "access_key": "",
        "secret_key": ""
    },
    "placement_pools": [
        {
            "key": "default-placement",
            "val": {
                "index_pool": "chengdu.rgw.buckets.index",
                "storage_classes": {
                    "STANDARD": {
                        "data_pool": "chengdu.rgw.buckets.data"
                    }
                },
                "data_extra_pool": "chengdu.rgw.buckets.non-ec",
                "index_type": 0
            }
        }
    ],
    "metadata_heap": "",
    "realm_id": "ac48a172-ae86-4af7-8b31-b0fa03a0bb57"
}
[root@node20 ~]# 


4.更新period

[root@node20 ~]# 
[root@node20 ~]# radosgw-admin period update --commit
{
    "id": "837c61b0-a6f4-4165-b973-c2c3aaef0e1e",
    "epoch": 1,
    "predecessor_uuid": "5ca7f77e-e4e2-42cf-bb7e-bc62bd4edc42",
    "sync_status": [],
    "period_map": {
        "id": "837c61b0-a6f4-4165-b973-c2c3aaef0e1e",
        "zonegroups": [
            {
                "id": "25aaab57-2bb9-4c73-9518-b0dedef9051e",
                "name": "cd",
                "api_name": "cd",
                "is_master": "true",
                "endpoints": [
                    "http://10.0.9.20:7480"
                ],
                "hostnames": [],
                "hostnames_s3website": [],
                "master_zone": "a0a652dc-4e29-4100-96e5-8a35c1354985",
                "zones": [
                    {
                        "id": "a0a652dc-4e29-4100-96e5-8a35c1354985",
                        "name": "chengdu",
                        "endpoints": [
                            "http://10.0.9.20:7480"
                        ],
                        "log_meta": "false",
                        "log_data": "false",
                        "bucket_index_max_shards": 0,
                        "read_only": "false",
                        "tier_type": "",
                        "sync_from_all": "true",
                        "sync_from": [],
                        "redirect_zone": ""
                    }
                ],
                "placement_targets": [
                    {
                        "name": "default-placement",
                        "tags": [],
                        "storage_classes": [
                            "STANDARD"
                        ]
                    }
                ],
                "default_placement": "default-placement",
                "realm_id": "ac48a172-ae86-4af7-8b31-b0fa03a0bb57"
            }
        ],
        "short_zone_ids": [
            {
                "key": "a0a652dc-4e29-4100-96e5-8a35c1354985",
                "val": 1358787057
            }
        ]
    },
    "master_zonegroup": "25aaab57-2bb9-4c73-9518-b0dedef9051e",
    "master_zone": "a0a652dc-4e29-4100-96e5-8a35c1354985",
    "period_config": {
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        }
    },
    "realm_id": "ac48a172-ae86-4af7-8b31-b0fa03a0bb57",
    "realm_name": "default",
    "realm_epoch": 2
}
[root@node20 ~]# 


5.创建名为同步用户

[root@node20 ~]# radosgw-admin user create --uid="admin" --display-name="Admin User" --system
{
    "user_id": "admin",
    "display_name": "Admin User",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [],
    "keys": [
        {
            "user": "admin",
            "access_key": "POMDCNR4FX3WJS0MW7ZH",
            "secret_key": "LIAmUYpP0Hd0oNYF3IzmB1Qn49DJ3i5zFaDu5YYx"
        }
    ],
    "swift_keys": [],
    "caps": [],
    "op_mask": "read, write, delete",
    "system": "true",
    "default_placement": "",
    "default_storage_class": "",
    "placement_tags": [],
    "bucket_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "user_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "temp_url_keys": [],
    "type": "rgw",
    "mfa_ids": []
}

[root@node20 ~]# 


6.修改zone的key,并更新period

[root@node20 ~]# 
[root@node20 ~]# radosgw-admin zone modify --rgw-zone=chengdu --access-key=POMDCNR4FX3WJS0MW7ZH --secret=LIAmUYpP0Hd0oNYF3IzmB1Qn49DJ3i5zFaDu5YYx
{
    "id": "a0a652dc-4e29-4100-96e5-8a35c1354985",
    "name": "chengdu",
    "domain_root": "chengdu.rgw.meta:root",
    "control_pool": "chengdu.rgw.control",
    "gc_pool": "chengdu.rgw.log:gc",
    "lc_pool": "chengdu.rgw.log:lc",
    "log_pool": "chengdu.rgw.log",
    "intent_log_pool": "chengdu.rgw.log:intent",
    "usage_log_pool": "chengdu.rgw.log:usage",
    "reshard_pool": "chengdu.rgw.log:reshard",
    "user_keys_pool": "chengdu.rgw.meta:users.keys",
    "user_email_pool": "chengdu.rgw.meta:users.email",
    "user_swift_pool": "chengdu.rgw.meta:users.swift",
    "user_uid_pool": "chengdu.rgw.meta:users.uid",
    "otp_pool": "chengdu.rgw.otp",
    "system_key": {
        "access_key": "POMDCNR4FX3WJS0MW7ZH",
        "secret_key": "LIAmUYpP0Hd0oNYF3IzmB1Qn49DJ3i5zFaDu5YYx"
    },
    "placement_pools": [
        {
            "key": "default-placement",
            "val": {
                "index_pool": "chengdu.rgw.buckets.index",
                "storage_classes": {
                    "STANDARD": {
                        "data_pool": "chengdu.rgw.buckets.data"
                    }
                },
                "data_extra_pool": "chengdu.rgw.buckets.non-ec",
                "index_type": 0
            }
        }
    ],
    "metadata_heap": "",
    "realm_id": "ac48a172-ae86-4af7-8b31-b0fa03a0bb57"
}
[root@node20 ~]# 
  
   

7.删除默认zone和zonegroup
由于环境是新环境,没有default zone/zonegroup,此操作省略;可通过以下命令查看环境存在的zonegroup和zone

[root@node20 ~]# radosgw-admin zonegroup list
{
    "default_info": "09a7c3d7-e45b-4510-ba78-dee84c5b5d16",
    "zonegroups": [
        "cd"
    ]
}
[root@node20 ~]# radosgw-admin zone list
{
    "default_info": "3bab4fa1-c67e-4dae-bdca-53fe3162862f",
    "zones": [
        "chengdu"
    ]
}
[root@node20 ~]# 

如果环境存在default zonegroup/zone,可用以下命令删除:

radosgw-admin zonegroup remove --rgw-zonegroup=default --rgw-zone=default
radosgw-admin period update --commit
radosgw-admin zone delete --rgw-zone=default
radosgw-admin period update --commit
radosgw-admin zonegroup delete --rgw-zonegroup=default
radosgw-admin period update --commit

8.删除默认pool

ceph osd pool delete default.rgw.control default.rgw.control --yes-i-really-really-mean-it

ceph osd pool delete default.rgw.meta default.rgw.meta --yes-i-really-really-mean-it

ceph osd pool delete default.rgw.log default.rgw.log --yes-i-really-really-mean-it

9.修改rgw配置, 增加rgw_zone = chengdu

[client.rgw.node20]
host = node20
keyring = /var/lib/ceph/radosgw/ceph-rgw.node20/keyring
log file = /var/log/ceph/ceph-rgw-node20.log
rgw frontends = civetweb port=10.0.9.20:7480 num_threads=100
rgw_zone = chengdu

10.重启rgw,并查看pool是否创建

[root@node20 ceph]# systemctl restart [email protected]
[root@node20 ceph]# ceph osd pool ls
.rgw.root
chengdu.rgw.control
chengdu.rgw.meta
chengdu.rgw.log
[root@node20 ceph]# 

在secondy zone节点进行如下配置:

1.同步realm, 并设置default为默认的realm

[root@node103 ~]# radosgw-admin realm pull --url=http://10.0.9.20:7480 --access-key=POMDCNR4FX3WJS0MW7ZH --secret=LIAmUYpP0Hd0oNYF3IzmB1Qn49DJ3i5zFaDu5YYx
{
    "id": "ac48a172-ae86-4af7-8b31-b0fa03a0bb57",
    "name": "default",
    "current_period": "837c61b0-a6f4-4165-b973-c2c3aaef0e1e",
    "epoch": 2
}
[root@node103 ~]# 


2.更新period

 [root@node103 ~]# radosgw-admin period pull --url=http://10.0.9.20:7480 --access-key=POMDCNR4FX3WJS0MW7ZH --secret=LIAmUYpP0Hd0oNYF3IzmB1Qn49DJ3i5zFaDu5YYx
2020-07-23 06:16:59.252 7fcb267fc6c0  1 found existing latest_epoch 1 >= given epoch 1, returning r=-17 [RGWPeriod::update_latest_epoch:1100]
{
    "id": "837c61b0-a6f4-4165-b973-c2c3aaef0e1e",
    "epoch": 1,
    "predecessor_uuid": "5ca7f77e-e4e2-42cf-bb7e-bc62bd4edc42",
    "sync_status": [],
    "period_map": {
        "id": "837c61b0-a6f4-4165-b973-c2c3aaef0e1e",
        "zonegroups": [
            {
                "id": "25aaab57-2bb9-4c73-9518-b0dedef9051e",
                "name": "cd",
                "api_name": "cd",
                "is_master": "true",
                "endpoints": [
                    "http://10.0.9.20:7480"
                ],
                "hostnames": [],
                "hostnames_s3website": [],
                "master_zone": "a0a652dc-4e29-4100-96e5-8a35c1354985",
                "zones": [
                    {
                        "id": "a0a652dc-4e29-4100-96e5-8a35c1354985",
                        "name": "chengdu",
                        "endpoints": [
                            "http://10.0.9.20:7480"
                        ],
                        "log_meta": "false",
                        "log_data": "false",
                        "bucket_index_max_shards": 0,
                        "read_only": "false",
                        "tier_type": "",
                        "sync_from_all": "true",
                        "sync_from": [],
                        "redirect_zone": ""
                    }
                ],
                "placement_targets": [
                    {
                        "name": "default-placement",
                        "tags": [],
                        "storage_classes": [
                            "STANDARD"
                        ]
                    }
                ],
                "default_placement": "default-placement",
                "realm_id": "ac48a172-ae86-4af7-8b31-b0fa03a0bb57"
            }
        ],
        "short_zone_ids": [
            {
                "key": "a0a652dc-4e29-4100-96e5-8a35c1354985",
                "val": 1358787057
            }
        ]
    },
    "master_zonegroup": "25aaab57-2bb9-4c73-9518-b0dedef9051e",
    "master_zone": "a0a652dc-4e29-4100-96e5-8a35c1354985",
    "period_config": {
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        }
    },
    "realm_id": "ac48a172-ae86-4af7-8b31-b0fa03a0bb57",
    "realm_name": "default",
    "realm_epoch": 2
}
[root@node103 ~]# 

3.创建secondy zone


  [root@node103 ~]# radosgw-admin zone create --rgw-zonegroup=cd --rgw-zone=shanghai --url=http://10.0.9.103:7480 --access-key=POMDCNR4FX3WJS0MW7ZH --secret=LIAmUYpP0Hd0oNYF3IzmB1Qn49DJ3i5zFaDu5YYx
2020-07-23 06:18:42.133 7fc06d8956c0  0 failed reading obj info from .rgw.root:zone_info.a0a652dc-4e29-4100-96e5-8a35c1354985: (2) No such file or directory [RGWSystemMetaObj::read_info:597]
2020-07-23 06:18:42.133 7fc06d8956c0  0 WARNING: could not read zone params for zone id=a0a652dc-4e29-4100-96e5-8a35c1354985 name=chengdu [RGWZoneGroup::post_process_params:277]
{
    "id": "fe9e5cd4-3c4f-4cc3-aefa-3308ed20b369",
    "name": "shanghai",
    "domain_root": "shanghai.rgw.meta:root",
    "control_pool": "shanghai.rgw.control",
    "gc_pool": "shanghai.rgw.log:gc",
    "lc_pool": "shanghai.rgw.log:lc",
    "log_pool": "shanghai.rgw.log",
    "intent_log_pool": "shanghai.rgw.log:intent",
    "usage_log_pool": "shanghai.rgw.log:usage",
    "reshard_pool": "shanghai.rgw.log:reshard",
    "user_keys_pool": "shanghai.rgw.meta:users.keys",
    "user_email_pool": "shanghai.rgw.meta:users.email",
    "user_swift_pool": "shanghai.rgw.meta:users.swift",
    "user_uid_pool": "shanghai.rgw.meta:users.uid",
    "otp_pool": "shanghai.rgw.otp",
    "system_key": {
        "access_key": "POMDCNR4FX3WJS0MW7ZH",
        "secret_key": "LIAmUYpP0Hd0oNYF3IzmB1Qn49DJ3i5zFaDu5YYx"
    },
    "placement_pools": [
        {
            "key": "default-placement",
            "val": {
                "index_pool": "shanghai.rgw.buckets.index",
                "storage_classes": {
                    "STANDARD": {
                        "data_pool": "shanghai.rgw.buckets.data"
                    }
                },
                "data_extra_pool": "shanghai.rgw.buckets.non-ec",
                "index_type": 0
            }
        }
    ],
    "metadata_heap": "",
    "realm_id": "ac48a172-ae86-4af7-8b31-b0fa03a0bb57"
}
[root@node103 ~]# 

4.删除默认default zone, defaul zonegroup和 default存储池

5.修改rgw配置, 增加rgw_zone = shanghai

6.重启rgw,并查看pool是否创建

[root@node103 ceph]# systemctl restart [email protected]
[root@node103 ceph]# 
[root@node103 ceph]# ceph osd pool ls
.rgw.root
shanghai.rgw.control
shanghai.rgw.meta
shanghai.rgw.log
[root@node103 ceph]# 

7.更新period

[root@node103 ceph]# 
[root@node103 ceph]# radosgw-admin period update --commit
2020-07-23 06:21:25.195 7f156479b6c0  1 Cannot find zone id=fe9e5cd4-3c4f-4cc3-aefa-3308ed20b369 (name=shanghai), switching to local zonegroup configuration [RGWSI_Zone::do_start:137]
Sending period to new master zone a0a652dc-4e29-4100-96e5-8a35c1354985
{
    "id": "837c61b0-a6f4-4165-b973-c2c3aaef0e1e",
    "epoch": 2,
    "predecessor_uuid": "5ca7f77e-e4e2-42cf-bb7e-bc62bd4edc42",
    "sync_status": [],
    "period_map": {
        "id": "837c61b0-a6f4-4165-b973-c2c3aaef0e1e",
        "zonegroups": [
            {
                "id": "25aaab57-2bb9-4c73-9518-b0dedef9051e",
                "name": "cd",
                "api_name": "cd",
                "is_master": "true",
                "endpoints": [
                    "http://10.0.9.20:7480"
                ],
                "hostnames": [],
                "hostnames_s3website": [],
                "master_zone": "a0a652dc-4e29-4100-96e5-8a35c1354985",
                "zones": [
                    {
                        "id": "a0a652dc-4e29-4100-96e5-8a35c1354985",
                        "name": "chengdu",
                        "endpoints": [
                            "http://10.0.9.20:7480"
                        ],
                        "log_meta": "false",
                        "log_data": "true",
                        "bucket_index_max_shards": 0,
                        "read_only": "false",
                        "tier_type": "",
                        "sync_from_all": "true",
                        "sync_from": [],
                        "redirect_zone": ""
                    },
                    {
                        "id": "fe9e5cd4-3c4f-4cc3-aefa-3308ed20b369",
                        "name": "shanghai",
                        "endpoints": [],
                        "log_meta": "false",
                        "log_data": "true",
                        "bucket_index_max_shards": 0,
                        "read_only": "false",
                        "tier_type": "",
                        "sync_from_all": "true",
                        "sync_from": [],
                        "redirect_zone": ""
                    }
                ],
                "placement_targets": [
                    {
                        "name": "default-placement",
                        "tags": [],
                        "storage_classes": [
                            "STANDARD"
                        ]
                    }
                ],
                "default_placement": "default-placement",
                "realm_id": "ac48a172-ae86-4af7-8b31-b0fa03a0bb57"
            }
        ],
        "short_zone_ids": [
            {
                "key": "a0a652dc-4e29-4100-96e5-8a35c1354985",
                "val": 1358787057
            },
            {
                "key": "fe9e5cd4-3c4f-4cc3-aefa-3308ed20b369",
                "val": 888817739
            }
        ]
    },
    "master_zonegroup": "25aaab57-2bb9-4c73-9518-b0dedef9051e",
    "master_zone": "a0a652dc-4e29-4100-96e5-8a35c1354985",
    "period_config": {
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        }
    },
    "realm_id": "ac48a172-ae86-4af7-8b31-b0fa03a0bb57",
    "realm_name": "default",
    "realm_epoch": 2
}
[root@node103 ceph]# 

8.查看同步状态

[root@node103 ceph]# radosgw-admin sync status
          realm ac48a172-ae86-4af7-8b31-b0fa03a0bb57 (default)
      zonegroup 25aaab57-2bb9-4c73-9518-b0dedef9051e (cd)
           zone fe9e5cd4-3c4f-4cc3-aefa-3308ed20b369 (shanghai)
  metadata sync syncing
                full sync: 0/64 shards
                incremental sync: 64/64 shards
                metadata is caught up with master
      data sync source: a0a652dc-4e29-4100-96e5-8a35c1354985 (chengdu)
                        syncing
                        full sync: 0/128 shards
                        incremental sync: 128/128 shards
                        data is caught up with source
[root@node103 ceph]# 

5.验证

6.维护

6.1 检测同步状态

[root@node103 ~]# radosgw-admin sync status
          realm ac48a172-ae86-4af7-8b31-b0fa03a0bb57 (default)
      zonegroup 25aaab57-2bb9-4c73-9518-b0dedef9051e (cd)
           zone fe9e5cd4-3c4f-4cc3-aefa-3308ed20b369 (shanghai)
  metadata sync syncing
                full sync: 0/64 shards
                incremental sync: 64/64 shards
                metadata is caught up with master
      data sync source: a0a652dc-4e29-4100-96e5-8a35c1354985 (chengdu)
                        syncing
                        full sync: 0/128 shards
                        incremental sync: 128/128 shards
                        data is caught up with source
[root@node103 ~]# 

6.2 更改元数据master zone

重要:当更改zone为元数据主zone时,必须小心。如果某个zone尚未完成从当前主zone的元数据同步,则当提升为主区域时,该区域将无法提供任何剩余条目,这些更改将丢失。因此,建议先等待zone的radosgw-admin同步状态赶上元数据同步,然后再将其升级为master zone。
同样,如果当前master zone正在处理对元数据的更改,而另一个zone正被提升为master zone,则这些更改很可能会丢失。为避免这种情况,建议关闭前一个主zone上的所有radosgw实例。升级另一个zone后,可以使用radosgw-admin时期拉取来获取其新时期,并且可以重新启动网关。

要将zone升级为元数据master zone,请在该zone上运行以下命令:

$ radosgw-admin zone modify --rgw-zone={zone} --master
$ radosgw-admin zonegroup modify --rgw-zonegroup={zonegroup} --master
$ radosgw-admin period update --commit

这将产生一个新的period,zone {zone} 中的radosgw实例会将这个period发送到其他zone。

6.3 故障转移和灾难恢复

如果master zone发生故障,请故障转移到secondary zone以进行灾难恢复

6.3.1 故障转移

1.设置secondary zone为master和default zone.

# radosgw-admin zone modify --rgw-zone={zone-name} --master --default

默认情况下,Ceph对象网关将以双活配置运行。如果将群集配置为在主动-被动配置中运行,则是secondary zone只读zone。删除--read-only状态以允许zone接收写操作。例如:

# radosgw-admin zone modify --rgw-zone={zone-name} --master --default --read-only=false

2.更新period以使更改生效

# radosgw-admin period update --commit

3.最后,重新启动Ceph对象网关。

systemctl restart ceph-radosgw@rgw.`hostname -s`

6.3.2 恢复

如果以前的master zone恢复,还原操作:

1.从恢复的zone中,从当前的master zone中提取最新的realm配置。

radosgw-admin realm pull --url={url-to-master-zone-gateway} \
                           --access-key={access-key} --secret={secret}

2.将恢复的zone设为主zone和默认zone。

radosgw-admin zone modify --rgw-zone={zone-name} --master --default

3.更新period以使更改生效

radosgw-admin period update --commit

4.在恢复的zone中重新启动Ceph对象网关。

systemctl restart ceph-radosgw@rgw.`hostname -s`

5.如果secondary zone需要为只读配置,请更新secondary zone

radosgw-admin zone modify --rgw-zone={zone-name} --read-only

6.更新period以使更改生效

radosgw-admin period update --commit

7.在中secondary zone重新启动Ceph对象网关

systemctl restart ceph-radosgw@rgw.`hostname -s`

6.4 单站点系统迁移到多站点

要将具有默认zonegroup和zone的单个站点系统迁移到多站点系统,请使用以下步骤:

1.创建一个realm

 radosgw-admin realm create --rgw-realm= --default

2.重命名默认的zone和zonegroup

# radosgw-admin zonegroup rename --rgw-zonegroup default --zonegroup-new-name=
# radosgw-admin zone rename --rgw-zone default --zone-new-name us-east-1 --rgw-zonegroup=

3.配置主zonegroup

radosgw-admin zonegroup modify --rgw-realm= --rgw-zonegroup= --endpoints http://:80 --master --default

4.配置主zone

# radosgw-admin zone modify --rgw-realm= --rgw-zonegroup= \
                            --rgw-zone= --endpoints http://:80 \
                            --access-key= --secret= \
                            --master --default

5.创建一个system user,用于认证

radosgw-admin user create --uid= --display-name=""\
                            --access-key= --secret= --system

6.提交配置修改

radosgw-admin period update --commit

7.重启rgw服务

systemctl restart ceph-radosgw@rgw.`hostname -s`

你可能感兴趣的:(Ceph RGW multisite异地容灾备份方案)