|
|
|
|
公众号矩阵

如何配置Ceph Rgw对象存储与公有云同步

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

作者:祝祥 来源:新钛云服|2021-10-12 10:36

本文转载自微信公众号「新钛云服」,作者祝祥。转载本文请联系新钛云服公众号。

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

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

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

以往的容灾都是在单该或者多该ceph集群之间的,本次主要由于模拟 ceph 的 RGW 可以与其他所有的S3云供应商(https://docs.ceph.com/en/latest/radosgw/cloud-sync-module/)进行数据同步,从而实现Ceph的RGW对象存储的灾备。

内容

要求:

  • Ceph 集群
  • 2 个 RGW 守护进程正在运行
  • S3 目标

我们将使用三个端点:

  • http://192.168.112.5:80

RGW 为我们现有的集群管理的端点

  • http://192.168.112.6:80

我们将创建一个新端点,它将依赖 RGW 将数据同步到另一个 S3 提供者

  • http://192.168.105.5:80

我们将用于推送/同步数据的 S3 目标

检查我们现有的存储池:

所有 rgw 都有一个区域和区域组,它可能是default.

您可以检查池的名称:

  1. (docker-croit)@mycephcluster / $ ceph osd lspools 
  2. 1 device_health_metrics 
  3. 2 .rgw.root 
  4. default.rgw.control 
  5. default.rgw.log 
  6. default.rgw.meta 
  7. default.rgw.buckets.non-ec 
  8. default.rgw.buckets.index 
  9. default.rgw.buckets.data 

或者直接检查区域或区域组:

  1. (docker-croit)@mycephcluster / $ radosgw-admin zone get --rgw-zone=default 
  2.    "id""303a00f5-f50d-43fd-afee-aa0503926952"
  3.    "name""default"
  4. ... 
  1. (docker-croit)@mycephcluster / $ radosgw-admin zonegroup get --rgw-zonegroup=default 
  2.    "id""881cf806-f6d2-47a0-b7dc-d65ee87f8ef4"
  3.    "name""default"
  4.    "api_name""default"
  5.    "is_master""true"
  6. ... 
  7.    "zones": [ 
  8.       { 
  9.            "id""303a00f5-f50d-43fd-afee-aa0503926952"
  10.            "name""default"

准备存储池:

我们的新区将需要一些池。我们将手动创建它们以确保没有问题(例如每个 osd 有太多 PG)阻止它们的创建。

  1. (docker-croit)@mycephcluster / $ for pool in sync.rgw.meta sync.rgw.log sync.rgw.control sync.rgw.buckets.non-ec sync.rgw.buckets.index sync.rgw.buckets.data; do ceph osd pool create $pool 16 16 replicated; done 
  2. pool 'sync.rgw.meta' created 
  3. pool 'sync.rgw.log' created 
  4. pool 'sync.rgw.control' created 
  5. pool 'sync.rgw.buckets.non-ec' created 
  6. pool 'sync.rgw.buckets.index' created 
  7. pool 'sync.rgw.buckets.data' created 

创建新区域:

我们的新区域将命名为sync:

  1. (docker-croit)@mycephcluster / $ radosgw-admin zone create --rgw-zonegroup=default --rgw-zone=sync --endpoints=http://192.168.112.6/ --tier-type=cloud 
  2.    "id""7ead9532-0938-4698-9b4a-2d84d0d00869"
  3.    "name""sync"
  4.    "domain_root""sync.rgw.meta:root"
  5.    "control_pool""sync.rgw.control"
  6.    "gc_pool""sync.rgw.log:gc"
  7.    "lc_pool""sync.rgw.log:lc"
  8.    "log_pool""sync.rgw.log"
  9.    "intent_log_pool""sync.rgw.log:intent"
  10.    "usage_log_pool""sync.rgw.log:usage"
  11.    "roles_pool""sync.rgw.meta:roles"
  12.    "reshard_pool""sync.rgw.log:reshard"
  13.    "user_keys_pool""sync.rgw.meta:users.keys"
  14.    "user_email_pool""sync.rgw.meta:users.email"
  15.    "user_swift_pool""sync.rgw.meta:users.swift"
  16.    "user_uid_pool""sync.rgw.meta:users.uid"
  17.    "otp_pool""sync.rgw.otp"
  18.    "system_key": { 
  19.        "access_key"""
  20.        "secret_key""" 
  21.   }, 
  22.    "placement_pools": [ 
  23.       { 
  24.            "key""default-placement"
  25.            "val": { 
  26.                "index_pool""sync.rgw.buckets.index"
  27.                "storage_classes": { 
  28.                    "STANDARD": { 
  29.                        "data_pool""sync.rgw.buckets.data" 
  30.                   } 
  31.               }, 
  32.                "data_extra_pool""sync.rgw.buckets.non-ec"
  33.                "index_type": 0 
  34.           } 
  35.       } 
  36.   ], 
  37.    "realm_id""46669d35-f7ed-4374-8247-2b8f41218109" 
  • rgw-zonegroup:我们的新区域将成为默认区域组的一部分。
  • 端点:我们的新区域需要它自己的 RGW,因此它使用新的端点。
  • tier-type :我们使用cloud层类型,请参阅文档(https://docs.ceph.com/en/latest/radosgw/cloud-sync-module/)了解更多设置

修改现有区域:

我们需要添加现有default区域的端点。

  1. (docker-croit)@mycephcluster / $ radosgw-admin zone modify --rgw-zonegroup=default --rgw-zone=default --endpoints=http://192.168.112.5:80 
  2.    "id""303a00f5-f50d-43fd-afee-aa0503926952"
  3.    "name""default"
  4.    "domain_root""default.rgw.meta:root"
  5.    "control_pool""default.rgw.control"
  6.    "gc_pool""default.rgw.log:gc"
  7.    "lc_pool""default.rgw.log:lc"
  8.    "log_pool""default.rgw.log"
  9.    "intent_log_pool""default.rgw.log:intent"
  10.    "usage_log_pool""default.rgw.log:usage"
  11.    "roles_pool""default.rgw.meta:roles"
  12.    "reshard_pool""default.rgw.log:reshard"
  13.    "user_keys_pool""default.rgw.meta:users.keys"
  14.    "user_email_pool""default.rgw.meta:users.email"
  15.    "user_swift_pool""default.rgw.meta:users.swift"
  16.    "user_uid_pool""default.rgw.meta:users.uid"
  17.    "otp_pool""default.rgw.otp"
  18.    "system_key": { 
  19.        "access_key"""
  20.        "secret_key""" 
  21.   }, 
  22.    "placement_pools": [ 
  23.       { 
  24.            "key""default-placement"
  25.            "val": { 
  26.                "index_pool""default.rgw.buckets.index"
  27.                "storage_classes": { 
  28.                    "STANDARD": { 
  29.                        "data_pool""default.rgw.buckets.data" 
  30.                   } 
  31.               }, 
  32.                "data_extra_pool""default.rgw.buckets.non-ec"
  33.                "index_type": 0 
  34.           } 
  35.       } 
  36.   ], 
  37.    "realm_id""46669d35-f7ed-4374-8247-2b8f41218109" 

创建系统用户:

系统用户将用于同步数据,可以通过 CLI 创建此用户。

  1. (docker-croit)@mycephcluster / $ radosgw-admin user create --uid=syncuser --display-name=syncuser --system 
  2.    "user_id""syncuser"
  3.    "display_name""syncuser"
  4.    "email"""
  5.    "suspended": 0, 
  6.    "max_buckets": 1000, 
  7.    "subusers": [], 
  8.    "keys": [ 
  9.       { 
  10.            "user""syncuser"
  11.            "access_key""VGIF31FGOHZ0Q6MQRBQR"
  12.            "secret_key""1FwPZH0ICfV1e1zi8okXApJJJEB0XHfiOxe1mmTr" 
  13.       } 
  14.   ], 
  15.    "swift_keys": [], 
  16.    "caps": [], 
  17.    "op_mask""read, write, delete"
  18.    "system""true"
  19.    "default_placement"""
  20.    "default_storage_class"""
  21.    "placement_tags": [], 
  22.    "bucket_quota": { 
  23.        "enabled"false
  24.        "check_on_raw"false
  25.        "max_size": -1, 
  26.        "max_size_kb": 0, 
  27.        "max_objects": -1 
  28.   }, 
  29.    "user_quota": { 
  30.        "enabled"false
  31.        "check_on_raw"false
  32.        "max_size": -1, 
  33.        "max_size_kb": 0, 
  34.        "max_objects": -1 
  35.   }, 
  36.    "temp_url_keys": [], 
  37.    "type""rgw"
  38.    "mfa_ids": [] 

配置同步区域以使用此系统用户:

我们将更改两个区域以使用我们的新系统用户。

  1. (docker-croit)@mycephcluster / $ radosgw-admin user info --uid syncuser| jq '.keys' 
  2.    "user""syncuser"
  3.    "access_key""VGIF31FGOHZ0Q6MQRBQR"
  4.    "secret_key""1FwPZH0ICfV1e1zi8okXApJJJEB0XHfiOxe1mmTr" 
  1. (docker-croit)@mycephcluster / $ radosgw-admin zone modify --rgw-zonegroup=default --rgw-zone=default --access-key=VGIF31FGOHZ0Q6MQRBQR --secret=1FwPZH0ICfV1e1zi8okXApJJJEB0XHfiOxe1mmTr 
  2.     "id""303a00f5-f50d-43fd-afee-aa0503926952"
  3.     "name""default"
  4.     "domain_root""default.rgw.meta:root"
  5.     "control_pool""default.rgw.control"
  6.     "gc_pool""default.rgw.log:gc"
  7.     "lc_pool""default.rgw.log:lc"
  8.     "log_pool""default.rgw.log"
  9.     "intent_log_pool""default.rgw.log:intent"
  10.     "usage_log_pool""default.rgw.log:usage"
  11.     "roles_pool""default.rgw.meta:roles"
  12.     "reshard_pool""default.rgw.log:reshard"
  13.     "user_keys_pool""default.rgw.meta:users.keys"
  14.     "user_email_pool""default.rgw.meta:users.email"
  15.     "user_swift_pool""default.rgw.meta:users.swift"
  16.     "user_uid_pool""default.rgw.meta:users.uid"
  17.     "otp_pool""default.rgw.otp"
  18.     "system_key": { 
  19.         "access_key""VGIF31FGOHZ0Q6MQRBQR"
  20.         "secret_key""1FwPZH0ICfV1e1zi8okXApJJJEB0XHfiOxe1mmTr" 
  21.     }, 
  22.     "placement_pools": [ 
  23.         { 
  24.             "key""default-placement"
  25.             "val": { 
  26.                 "index_pool""default.rgw.buckets.index"
  27.                 "storage_classes": { 
  28.                     "STANDARD": { 
  29.                         "data_pool""default.rgw.buckets.data" 
  30.                     } 
  31.                 }, 
  32.                 "data_extra_pool""default.rgw.buckets.non-ec"
  33.                 "index_type": 0 
  34.             } 
  35.         } 
  36.     ], 
  37.     "realm_id""46669d35-f7ed-4374-8247-2b8f41218109" 
  1. (docker-croit)@mycephcluster / $ radosgw-admin zone modify --rgw-zonegroup=default --rgw-zone=sync --access-key=VGIF31FGOHZ0Q6MQRBQR --secret=1FwPZH0ICfV1e1zi8okXApJJJEB0XHfiOxe1mmTr 
  2.     "id""7ead9532-0938-4698-9b4a-2d84d0d00869"
  3.     "name""sync"
  4.     "domain_root""sync.rgw.meta:root"
  5.     "control_pool""sync.rgw.control"
  6.     "gc_pool""sync.rgw.log:gc"
  7.     "lc_pool""sync.rgw.log:lc"
  8.     "log_pool""sync.rgw.log"
  9.     "intent_log_pool""sync.rgw.log:intent"
  10.     "usage_log_pool""sync.rgw.log:usage"
  11.     "roles_pool""sync.rgw.meta:roles"
  12.     "reshard_pool""sync.rgw.log:reshard"
  13.     "user_keys_pool""sync.rgw.meta:users.keys"
  14.     "user_email_pool""sync.rgw.meta:users.email"
  15.     "user_swift_pool""sync.rgw.meta:users.swift"
  16.     "user_uid_pool""sync.rgw.meta:users.uid"
  17.     "otp_pool""sync.rgw.otp"
  18.     "system_key": { 
  19.         "access_key""VGIF31FGOHZ0Q6MQRBQR"
  20.         "secret_key""1FwPZH0ICfV1e1zi8okXApJJJEB0XHfiOxe1mmTr" 
  21.     }, 
  22.     "placement_pools": [ 
  23.         { 
  24.             "key""default-placement"
  25.             "val": { 
  26.                 "index_pool""sync.rgw.buckets.index"
  27.                 "storage_classes": { 
  28.                     "STANDARD": { 
  29.                         "data_pool""sync.rgw.buckets.data" 
  30.                     } 
  31.                 }, 
  32.                 "data_extra_pool""sync.rgw.buckets.non-ec"
  33.                 "index_type": 0 
  34.             } 
  35.         } 
  36.     ], 
  37.     "tier_config": { 
  38.         "connection": { 
  39.             "access_key""JO4RQ1787A6OGI6XMFDW"
  40.             "endpoint""http://192.168.105.5:80"
  41.             "secret""Dx5kKGUUeR0DaSRYueBWhV6oDRvJ9oXH2gPcVJ6s" 
  42.         } 
  43.     }, 
  44.     "realm_id""46669d35-f7ed-4374-8247-2b8f41218109" 

确保默认区域是主区域:

  1. (docker-croit)@mycephcluster / $ radosgw-admin zonegroup get 
  2.     "id""881cf806-f6d2-47a0-b7dc-d65ee87f8ef4"
  3.     "name""default"
  4.     "api_name""default"
  5.     "is_master""true"
  6.     "endpoints": [], 
  7.     "hostnames": [], 
  8.     "hostnames_s3website": [], 
  9.     "master_zone""303a00f5-f50d-43fd-afee-aa0503926952"
  10.     "zones": [ 
  11.         { 
  12.             "id""303a00f5-f50d-43fd-afee-aa0503926952"
  13.             "name""default"

如果defaultzone 不是 master,则可以通过执行强制它radosgw-admin zone modify --rgw-zonegroup=default --rgw-zone=default --master --default

提交更改并验证配置:

  1. (docker-croit)@mycephcluster / $ radosgw-admin period update --commit 
  2.     "id""1861622f-b748-410d-b4a9-7338f4b6842b"
  3.     "epoch": 3, 
  4.     "predecessor_uuid""b6cd42db-6567-4a4b-9433-aee238da0c9d"
  5.     "sync_status": [], 
  6.     "period_map": { 
  7.         "id""1861622f-b748-410d-b4a9-7338f4b6842b"
  8.         "zonegroups": [ 
  9.             { 
  10.                 "id""881cf806-f6d2-47a0-b7dc-d65ee87f8ef4"
  11.                 "name""default"
  12.                 "api_name""default"
  13.                 "is_master""true"
  14.                 "endpoints": [], 
  15.                 "hostnames": [], 
  16.                 "hostnames_s3website": [], 
  17.                 "master_zone""303a00f5-f50d-43fd-afee-aa0503926952"
  18.                 "zones": [ 
  19.                     { 
  20.                         "id""303a00f5-f50d-43fd-afee-aa0503926952"
  21.                         "name""default"
  22.                         "endpoints": [ 
  23.                             "http://192.168.112.5:80" 
  24.                         ], 
  25.                         "log_meta""false"
  26.                         "log_data""true"
  27.                         "bucket_index_max_shards": 11, 
  28.                         "read_only""false"
  29.                         "tier_type"""
  30.                         "sync_from_all""true"
  31.                         "sync_from": [], 
  32.                         "redirect_zone""" 
  33.                     }, 
  34.                     { 
  35.                         "id""7ead9532-0938-4698-9b4a-2d84d0d00869"
  36.                         "name""sync"
  37.                         "endpoints": [ 
  38.                             "http://192.168.112.6/" 
  39.                         ], 
  40.                         "log_meta""false"
  41.                         "log_data""true"
  42.                         "bucket_index_max_shards": 11, 
  43.                         "read_only""false"
  44.                         "tier_type""cloud"
  45.                         "sync_from_all""true"
  46.                         "sync_from": [], 
  47.                         "redirect_zone""" 
  48.                     } 
  49.                 ], 
  50.                 "placement_targets": [ 
  51.                     { 
  52.                         "name""default-placement"
  53.                         "tags": [], 
  54.                         "storage_classes": [ 
  55.                             "STANDARD" 
  56.                         ] 
  57.                     } 
  58.                 ], 
  59.                 "default_placement""default-placement"
  60.                 "realm_id""46669d35-f7ed-4374-8247-2b8f41218109"
  61.                 "sync_policy": { 
  62.                     "groups": [] 
  63.                 } 
  64.             } 
  65.         ], 
  66.         "short_zone_ids": [ 
  67.             { 
  68.                 "key""303a00f5-f50d-43fd-afee-aa0503926952"
  69.                 "val": 2796720163 
  70.             }, 
  71.             { 
  72.                 "key""7ead9532-0938-4698-9b4a-2d84d0d00869"
  73.                 "val": 2175446857 
  74.             } 
  75.         ] 
  76.     }, 
  77.     "master_zonegroup""881cf806-f6d2-47a0-b7dc-d65ee87f8ef4"
  78.     "master_zone""303a00f5-f50d-43fd-afee-aa0503926952"
  79.     "period_config": { 
  80.         "bucket_quota": { 
  81.             "enabled"false
  82.             "check_on_raw"false
  83.             "max_size": -1, 
  84.             "max_size_kb": 0, 
  85.             "max_objects": -1 
  86.         }, 
  87.         "user_quota": { 
  88.             "enabled"false
  89.             "check_on_raw"false
  90.             "max_size": -1, 
  91.             "max_size_kb": 0, 
  92.             "max_objects": -1 
  93.         } 
  94.     }, 
  95.     "realm_id""46669d35-f7ed-4374-8247-2b8f41218109"
  96.     "realm_name""default"
  97.     "realm_epoch": 2 

配置新区域:

我们的云同步模块需要一些配置(https://docs.ceph.com/en/latest/radosgw/cloud-sync-module/#cloud-sync-tier-type-configuration)。

我们将定义用于同步数据的端点和 S3 用户凭据。注意:如果您的密钥以 0 开头,您将无法配置它。例如,使用05XXXXXXXX时 ,访问密钥将被错误地存储:

  1. (docker-croit)@mycephcluster / $ radosgw-admin zone modify --rgw-zonegroup=default --rgw-zone=sync --tier-config=connection.endpoint=http://192.168.105.5:80,connection.access_key=05XXXXXXXX,connection.secret=56NwS1p7krU0IMYaXXXXXXXXXXXXX 
  2. (docker-croit)@mycephcluster / $ radosgw-admin zone get --rgw-zone=sync | jq '.tier_config' 
  3.   "connection": { 
  4.     "access_key": 5, 
  5.     "endpoint""http://192.168.105.5:80"
  6.     "secret": 56NwS1p7krU0IMYaXXXXXXXXXXXXX 
  7.   } 
  1. (docker-croit)@mycephcluster / $ radosgw-admin zone modify --rgw-zonegroup=default --rgw-zone=sync --tier-config=connection.endpoint=http://192.168.105.5:80,connection.access_key=JO4RQ1787A6OGI6XMFDW,connection.secret=Dx5kKGUUeR0DaSRYueBWhV6oDRvJ9oXH2gPcVJ6s 
  2.     "id""7ead9532-0938-4698-9b4a-2d84d0d00869"
  3.     "name""sync"
  4.     "domain_root""sync.rgw.meta:root"
  5.     "control_pool""sync.rgw.control"
  6.     "gc_pool""sync.rgw.log:gc"
  7.     "lc_pool""sync.rgw.log:lc"
  8.     "log_pool""sync.rgw.log"
  9.     "intent_log_pool""sync.rgw.log:intent"
  10.     "usage_log_pool""sync.rgw.log:usage"
  11.     "roles_pool""sync.rgw.meta:roles"
  12.     "reshard_pool""sync.rgw.log:reshard"
  13.     "user_keys_pool""sync.rgw.meta:users.keys"
  14.     "user_email_pool""sync.rgw.meta:users.email"
  15.     "user_swift_pool""sync.rgw.meta:users.swift"
  16.     "user_uid_pool""sync.rgw.meta:users.uid"
  17.     "otp_pool""sync.rgw.otp"
  18.     "system_key": { 
  19.         "access_key"""
  20.         "secret_key""" 
  21.     }, 
  22.     "placement_pools": [ 
  23.         { 
  24.             "key""default-placement"
  25.             "val": { 
  26.                 "index_pool""sync.rgw.buckets.index"
  27.                 "storage_classes": { 
  28.                     "STANDARD": { 
  29.                         "data_pool""sync.rgw.buckets.data" 
  30.                     } 
  31.                 }, 
  32.                 "data_extra_pool""sync.rgw.buckets.non-ec"
  33.                 "index_type": 0 
  34.             } 
  35.         } 
  36.     ], 
  37.     "tier_config": { 
  38.         "connection": { 
  39.             "access_key""JO4RQ1787A6OGI6XMFDW"
  40.             "endpoint""http://192.168.105.5:80"
  41.             "secret""Dx5kKGUUeR0DaSRYueBWhV6oDRvJ9oXH2gPcVJ6s" 
  42.         } 
  43.     }, 
  44.     "realm_id""46669d35-f7ed-4374-8247-2b8f41218109" 

检查配置是否已正确应用。

  1. (docker-croit)@mycephcluster / $ radosgw-admin zone get --rgw-zone=sync | jq '.tier_config' 
  2.   "connection": { 
  3.     "access_key""JO4RQ1787A6OGI6XMFDW"
  4.     "endpoint""http://192.168.105.5:80"
  5.     "secret""Dx5kKGUUeR0DaSRYueBWhV6oDRvJ9oXH2gPcVJ6s" 
  6.   } 

提交更改:

  1. (docker-croit)@mycephcluster / $ radosgw-admin zone get --rgw-zone=sync 
  2.     "id""7ead9532-0938-4698-9b4a-2d84d0d00869"
  3.     "name""sync"
  4.     "domain_root""sync.rgw.meta:root"
  5.     "control_pool""sync.rgw.control"
  6.     "gc_pool""sync.rgw.log:gc"
  7.     "lc_pool""sync.rgw.log:lc"
  8.     "log_pool""sync.rgw.log"
  9.     "intent_log_pool""sync.rgw.log:intent"
  10.     "usage_log_pool""sync.rgw.log:usage"
  11.     "roles_pool""sync.rgw.meta:roles"
  12.     "reshard_pool""sync.rgw.log:reshard"
  13.     "user_keys_pool""sync.rgw.meta:users.keys"
  14.     "user_email_pool""sync.rgw.meta:users.email"
  15.     "user_swift_pool""sync.rgw.meta:users.swift"
  16.     "user_uid_pool""sync.rgw.meta:users.uid"
  17.     "otp_pool""sync.rgw.otp"
  18.     "system_key": { 
  19.         "access_key"""
  20.         "secret_key""" 
  21.     }, 
  22.     "placement_pools": [ 
  23.         { 
  24.             "key""default-placement"
  25.             "val": { 
  26.                 "index_pool""sync.rgw.buckets.index"
  27.                 "storage_classes": { 
  28.                     "STANDARD": { 
  29.                         "data_pool""sync.rgw.buckets.data" 
  30.                     } 
  31.                 }, 
  32.                 "data_extra_pool""sync.rgw.buckets.non-ec"
  33.                 "index_type": 0 
  34.             } 
  35.         } 
  36.     ], 
  37.     "tier_config": { 
  38.         "connection": { 
  39.             "access_key""JO4RQ1787A6OGI6XMFDW"
  40.             "endpoint""http://192.168.105.5:80"
  41.             "secret""Dx5kKGUUeR0DaSRYueBWhV6oDRvJ9oXH2gPcVJ6s" 
  42.         } 
  43.     }, 
  44.     "realm_id""46669d35-f7ed-4374-8247-2b8f41218109" 

配置 RGW:

我们需要修改每个 radosgw 配置以通过删除rgw zone = default和添加来管理正确的区域

  1. [client.rgw.$(hostname)] 
  2. host = $(hostname) 
  3. rgw zone = default 
  4.  
  5. [client.rgw.$(hostname)] 
  6. host = $(hostname) 
  7. rgw zone = sync 

在我们的基础设施上,我们/etc/ceph/ceph.conf通过添加以下内容进行编辑:

  1. [client.rgw.new-croit-host-C0DE01] 
  2. host = new-croit-host-C0DE01 
  3. rgw zone = default 
  4. [client.rgw.new-croit-host-C0DE02] 
  5. host = new-croit-host-C0DE02 
  6. rgw zone = sync 

如果你使用 croit,你可以简单地ceph.conf用这个内容替换模板。

  1. [global
  2. auth cluster required = cephx 
  3. auth service required = cephx 
  4. auth client required = cephx 
  5. auth supported = cephx 
  6. mon client hunt interval = {{huntInterval}} 
  7. mon client hunt parallel = {{huntParallel}} 
  8. fsid = {{fsid}} 
  9. mon host = {{commaSeparatedList mons}} 
  10.  
  11. {{~#if full}} 
  12. {{~#unless server.managementHost}} 
  13. crush location = host={{server.hostname}} 
  14. {{~/unless}} 
  15.  
  16. {{~#if publicNets}} 
  17. public network = {{publicNets}} 
  18. {{~/if}} 
  19.  
  20. {{~#if privateNets}} 
  21. cluster network = {{privateNets}} 
  22. {{~/if}} 
  23. log file = /dev/null 
  24. mon cluster log file = /dev/null 
  25. mon cluster log to syslog = true 
  26. log to syslog = true 
  27. err to syslog = true 
  28.  
  29. {{~#replaceAll "rgw zone = default" ""~}} 
  30. {{~#options}} 
  31. {{key}} = {{value}} 
  32. {{~/options}} 
  33. {{~/replaceAll}} 
  34.  
  35. [client.rgw.new-croit-host-C0DE01] 
  36. host = new-croit-host-C0DE01 
  37. rgw zone = default 
  38. [client.rgw.new-croit-host-C0DE02] 
  39. host = new-croit-host-C0DE02 
  40. rgw zone = sync 
  41. {{~/if}} 

要应用更改,您必须重新启动 RGW。

  1. root@new-croit-host-C0DE01 ~ $ systemctl restart ceph-radosgw@rgw.new-croit-host-C0DE01.service 
  2. root@new-croit-host-C0DE02 ~ $ systemctl restart ceph-radosgw@rgw.new-croit-host-C0DE02.service 

测试 S3 同步

我们将使用 s3cmd 进行测试。

在源和目标上生成用户并配置他们的 s3cmd 配置文件。检查 API 访问是否有效。

  1. ~ s3cmd -c .s3cfg_source ls 
  2. ~ s3cmd -c .s3cfg_target ls 

如果您有 API 错误错误,请检查您的凭据、端点。

在源上创建一个存储桶并添加对象:

我们首先创建一个bucket:

  1. ~ s3cmd -c .s3cfg_source mb s3://mystetbucket 
  2. Bucket 's3://mystetbucket/' created 
  3. ~ s3cmd -c .s3cfg_source ls 
  4. 2021-06-24 15:06  s3://mystetbucket 

现在我们在源上添加一个对象:

  1. ~ s3cmd -c .s3cfg_source put /tmp/myobject s3://mystetbucket/synctest                                                                                                                                                                                 64 
  2. WARNING: Module python-magic is not available. Guessing MIME types based on file extensions. 
  3. upload: '/tmp/myobject' -> 's3://mystetbucket/synctest'  [1 of 1] 
  4.  13 of 13   100% in    0s   325.90 B/s  done 

并检查它是否已同步到目标:

  1. ~ s3cmd -c .s3cfg_target ls s3:// 
  2. 2021-06-24 15:30  s3://rgw-default-271b93c16a9565d8 
  3. ~ s3cmd -c .s3cfg_target ls s3://rgw-default-271b93c16a9565d8 
  4.                           DIR  s3://rgw-default-271b93c16a9565d8/mystetbucket/ 
  5. ~ s3cmd -c .s3cfg_target ls s3://rgw-default-271b93c16a9565d8/mystetbucket/ 
  6. 2021-06-24 15:36           13  s3://rgw-default-271b93c16a9565d8/mystetbucket/synctest 

技巧和窍门

您可以随时增加调试日志记录以便于调试:

  1. root@new-croit-host-C0DE02 ~ $ ceph --admin-daemon /var/run/ceph/ceph-client.rgw.new-croit-host-C0DE02.96866.94534872347832.asok config set debug_rgw_sync 5 
  2. root@new-croit-host-C0DE02 ~ $ ceph --admin-daemon /var/run/ceph/ceph-client.rgw.new-croit-host-C0DE02.96866.94534872347832.asok config set debug_rgw 5 

检查同步状态:

  1. (docker-croit)@mycephcluster / $ radosgw-admin sync status --rgw-zone=sync 
  2.           realm 46669d35-f7ed-4374-8247-2b8f41218109 (default
  3.       zonegroup 881cf806-f6d2-47a0-b7dc-d65ee87f8ef4 (default
  4.            zone 7ead9532-0938-4698-9b4a-2d84d0d00869 (sync) 
  5.   metadata sync syncing 
  6.                 full sync: 0/64 shards 
  7.                 incremental sync: 64/64 shards 
  8.                 metadata is caught up with master 
  9.       data sync source: 303a00f5-f50d-43fd-afee-aa0503926952 (default
  10.                         syncing 
  11.                         full sync: 0/128 shards 
  12.                         incremental sync: 128/128 shards 
  13.                         data is caught up with source 

参考文章:

https://docs.ceph.com/en/latest/radosgw/multisite/

https://docs.ceph.com/en/latest/radosgw/cloud-sync-module/#cloud-sync-tier-type-configuration

https://croit.io/blog/setting-up-ceph-cloud-sync-module

祝祥

资深云计算架构师

OpenStack官方特邀讲师

上万台云主机和几十PB分布式存储的

建设管理经验

【编辑推荐】

  1. Java、Golang项目基于kubernetes集群CICD实践案例【Gitlab工具链】
  2. 除了备份,这些远程办公的安全工具你都有吗?
  3. Windows11Upgrade 小工具:让你轻松绕过限制升级Windows 11
  4. Facebook封杀“取消所有关注”工具背后的开发者
  5. Weakpass:一款功能强大的在线字典生成工具
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微