5.7. 配置多站点 Ceph 对象网关
作为系统管理员,您可以配置多站点 Ceph 对象网关来镜像集群间的数据,以满足灾难恢复的需要。
您可以使用一个或多个 RGW 域来配置多站点。域允许其中的 RGW 独立于域外的 RGW 并与其隔离。这样,一个域中写入 RGW 的数据就无法被另一个域中的 RGW 访问。
在单一站点配置中已使用网关后,Ceph-ansible 无法将网关重新配置为多站点设置。您可以手动部署此配置。联系红帽支持以获取帮助。
从 Red Hat Ceph Storage 4.1,您不需要在 group_vars/all.yml
文件中设置 rgw_multisite_endpoints_list
的值。
如需更多信息,请参阅 Red Hat Ceph Storage Object Gateway Configuration and Administration Guide 中的 多站点 部分。
5.7.1. 先决条件
- 两个 Red Hat Ceph Storage 集群。
- 在 Ceph 对象网关节点上,执行 Red Hat Ceph Storage安装指南中的安装 Red Hat Ceph Storage 要求一节中列出的任务。
- 对于每个对象网关节点,执行 Red Hat Ceph Storage 安装指南中的安装 Ceph 对象网关一节中的第 1 到 6 步。
5.7.2. 使用一个域配置多站点 Ceph 对象网关
Ceph-ansible 配置 Ceph 对象网关,以在具有多个 Ceph 对象网关实例的多个存储集群之间镜像数据。
在单一站点配置中已使用网关后,Ceph-ansible 无法将网关重新配置为多站点设置。您可以手动部署此配置。联系红帽支持以获取帮助。
先决条件
- 两个正在运行的 Red Hat Ceph Storage 集群。
- 在 Ceph 对象网关节点上,执行 Red Hat Ceph Storage安装指南中的安装 Red Hat Ceph Storage 要求一节中列出的任务。
- 对于每个对象网关节点,执行 Red Hat Ceph Storage 安装指南中的安装 Ceph 对象网关一节中的第 1 到 6 步。
流程
生成系统密钥并将其输出捕获至
multi-site-keys.txt
文件中:[root@ansible ~]# echo system_access_key: $(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 20 | head -n 1) > multi-site-keys.txt [root@ansible ~]# echo system_secret_key: $(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 40 | head -n 1) >> multi-site-keys.txt
主存储集群
进入 Ceph-ansible 配置目录:
[root@ansible ~]# cd /usr/share/ceph-ansible
打开并编辑
group_vars/all.yml
文件。取消注释rgw_multisite
行并将其设置为true
。取消注释rgw_multisite_proto
参数。rgw_multisite: true rgw_multisite_proto: "http"
在
/usr/share/ceph-ansible
中创建host_vars
目录:[root@ansible ceph-ansible]# mkdir host_vars
在
host_vars
中为主存储群集上的每个对象网关节点创建一个文件。文件名应当与 Ansible 清单文件中使用的名称相同。例如,如果对象网关节点命名为rgw-primary
,则创建host_vars/rgw-primary
文件。语法
touch host_vars/NODE_NAME
示例
[root@ansible ceph-ansible]# touch host_vars/rgw-primary
注意如果集群中有多个 Ceph 对象网关节点用于多站点配置,则为每个节点创建单独的文件。
编辑该文件,并添加对应对象网关节点上所有实例的配置详情。配置以下设置,并相应地更新 ZONE_NAME、ZONE_GROUP_NAME、ZONE_USER_NAME、ZONE_DISPLAY_NAME 和 REALM_NAME。使用
multi-site-keys.txt
文件中保存的随机字符串用于 ACCESS_KEY 和 SECRET_KEY。语法
rgw_instances: - instance_name: 'INSTANCE_NAME' rgw_multisite: true rgw_zonemaster: true rgw_zonesecondary: false rgw_zonegroupmaster: true rgw_zone: ZONE_NAME_1 rgw_zonegroup: ZONE_GROUP_NAME_1 rgw_realm: REALM_NAME_1 rgw_zone_user: ZONE_USER_NAME_1 rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1" system_access_key: ACCESS_KEY_1 system_secret_key: SECRET_KEY_1 radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: RGW_PRIMARY_PORT_NUMBER_1
示例
rgw_instances: - instance_name: 'rgw0' rgw_multisite: true rgw_zonemaster: true rgw_zonesecondary: false rgw_zonegroupmaster: true rgw_zone: paris rgw_zonegroup: idf rgw_realm: france rgw_zone_user: jacques.chirac rgw_zone_user_display_name: "Jacques Chirac" system_access_key: P9Eb6S8XNyo4dtZZUUMy system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: 8080
可选: 要创建多个实例,编辑该文件并将配置详情添加到对应对象网关节点上的所有实例。配置以下设置,并更新
rgw_instances
下的项目。将multi-site-keys-realm-1.txt
文件中保存的随机字符串用于 ACCESS_KEY_1 和 SECRET_KEY_1。语法
rgw_instances: - instance_name: 'INSTANCE_NAME_1' rgw_multisite: true rgw_zonemaster: true rgw_zonesecondary: false rgw_zonegroupmaster: true rgw_zone: ZONE_NAME_1 rgw_zonegroup: ZONE_GROUP_NAME_1 rgw_realm: REALM_NAME_1 rgw_zone_user: ZONE_USER_NAME_1 rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1" system_access_key: ACCESS_KEY_1 system_secret_key: SECRET_KEY_1 radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: PORT_NUMBER_1 - instance_name: 'INSTANCE_NAME_2' rgw_multisite: true rgw_zonemaster: true rgw_zonesecondary: false rgw_zonegroupmaster: true rgw_zone: ZONE_NAME_1 rgw_zonegroup: ZONE_GROUP_NAME_1 rgw_realm: REALM_NAME_1 rgw_zone_user: ZONE_USER_NAME_1 rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1" system_access_key: ACCESS_KEY_1 system_secret_key: SECRET_KEY_1 radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: PORT_NUMBER_2
示例
rgw_instances: - instance_name: 'rgw0' rgw_multisite: true rgw_zonemaster: true rgw_zonesecondary: false rgw_zonegroupmaster: true rgw_zone: paris rgw_zonegroup: idf rgw_realm: france rgw_zone_user: jacques.chirac rgw_zone_user_display_name: "Jacques Chirac" system_access_key: P9Eb6S8XNyo4dtZZUUMy system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: 8080 - instance_name: 'rgw1' rgw_multisite: true rgw_zonemaster: true rgw_zonesecondary: false rgw_zonegroupmaster: true rgw_zone: paris rgw_zonegroup: idf rgw_realm: france rgw_zone_user: jacques.chirac rgw_zone_user_display_name: "Jacques Chirac" system_access_key: P9Eb6S8XNyo4dtZZUUMy system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: 8081
辅助存储集群
进入 Ceph-ansible 配置目录:
[root@ansible ~]# cd /usr/share/ceph-ansible
打开并编辑
group_vars/all.yml
文件。取消注释rgw_multisite
行并将其设置为true
。取消注释rgw_multisite_proto
参数。rgw_multisite: true rgw_multisite_proto: "http"
在
/usr/share/ceph-ansible
中创建host_vars
目录:[root@ansible ceph-ansible]# mkdir host_vars
在
host_vars
中为次要存储集群上的每个对象网关节点创建一个文件。文件名应当与 Ansible 清单文件中使用的名称相同。例如,如果对象网关节点命名为rgw-secondary
,则创建host_vars/rgw-secondary
文件。语法
touch host_vars/NODE_NAME
示例
[root@ansible ceph-ansible]# touch host_vars/rgw-secondary
注意如果集群中有多个 Ceph 对象网关节点用于多站点配置,则为每个节点创建文件。
配置以下设置:使用与 ZONE_USER_NAME、ZONE_DISPLAY_NAME、ACCESS_KEY、SECRET_KEY、REALM_NAME 和 ZONE_GROUP_NAME 相同的值。为主存储集群中的 ZONE_NAME 使用不同的值。将 MASTER_RGW_NODE_NAME 设置为 master 区域的 Ceph 对象网关节点。请注意,与主存储集群相比,
rgw_zonemaster
、rgw_zonesecondary
和rgw_zonegroupmaster
的设置将被撤销。语法
rgw_instances: - instance_name: 'INSTANCE_NAME_1' rgw_multisite: true rgw_zonemaster: false rgw_zonesecondary: true rgw_zonegroupmaster: false rgw_zone: ZONE_NAME_2 rgw_zonegroup: ZONE_GROUP_NAME_1 rgw_realm: REALM_NAME_1 rgw_zone_user: ZONE_USER_NAME_1 rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1" system_access_key: ACCESS_KEY_1 system_secret_key: SECRET_KEY_1 radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: PORT_NUMBER_1 endpoint: RGW_PRIMARY_HOSTNAME_ENDPOINT:RGW_PRIMARY_PORT_NUMBER_1
示例
rgw_instances: - instance_name: 'rgw0' rgw_multisite: true rgw_zonemaster: false rgw_zonesecondary: true rgw_zonegroupmaster: false rgw_zone: lyon rgw_zonegroup: idf rgw_realm: france rgw_zone_user: jacques.chirac rgw_zone_user_display_name: "Jacques Chirac" system_access_key: P9Eb6S8XNyo4dtZZUUMy system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: 8080 endpoint: http://rgw-primary:8081
可选: 要创建多个实例,编辑该文件并将配置详情添加到对应对象网关节点上的所有实例。配置以下设置,并更新
rgw_instances
下的项目。将multi-site-keys-realm-1.txt
文件中保存的随机字符串用于 ACCESS_KEY_1 和 SECRET_KEY_1。将 RGW_PRIMARY_HOSTNAME 设置为主存储集群中的对象网关节点。语法
rgw_instances: - instance_name: 'INSTANCE_NAME_1' rgw_multisite: true rgw_zonemaster: false rgw_zonesecondary: true rgw_zonegroupmaster: false rgw_zone: ZONE_NAME_2 rgw_zonegroup: ZONE_GROUP_NAME_1 rgw_realm: REALM_NAME_1 rgw_zone_user: ZONE_USER_NAME_1 rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1" system_access_key: ACCESS_KEY_1 system_secret_key: SECRET_KEY_1 radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: PORT_NUMBER_1 endpoint: RGW_PRIMARY_HOSTNAME:RGW_PRIMARY_PORT_NUMBER_1 - instance_name: '_INSTANCE_NAME_2_' rgw_multisite: true rgw_zonemaster: false rgw_zonesecondary: true rgw_zonegroupmaster: false rgw_zone: ZONE_NAME_2 rgw_zonegroup: ZONE_GROUP_NAME_1 rgw_realm: REALM_NAME_1 rgw_zone_user: ZONE_USER_NAME_1 rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1" system_access_key: ACCESS_KEY_1 system_secret_key: SECRET_KEY_1 radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: PORT_NUMBER_1 endpoint: RGW_PRIMARY_HOSTNAME:RGW_PRIMARY_PORT_NUMBER_2
示例
rgw_instances: - instance_name: 'rgw0' rgw_multisite: true rgw_zonemaster: false rgw_zonesecondary: true rgw_zonegroupmaster: false rgw_zone: lyon rgw_zonegroup: idf rgw_realm: france rgw_zone_user: jacques.chirac rgw_zone_user_display_name: "Jacques Chirac" system_access_key: P9Eb6S8XNyo4dtZZUUMy system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: 8080 endpoint: http://rgw-primary:8080 - instance_name: 'rgw1' rgw_multisite: true rgw_zonemaster: false rgw_zonesecondary: true rgw_zonegroupmaster: false rgw_zone: lyon rgw_zonegroup: idf rgw_realm: france rgw_zone_user: jacques.chirac rgw_zone_user_display_name: "Jacques Chirac" system_access_key: P9Eb6S8XNyo4dtZZUUMy system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: 8081 endpoint: http://rgw-primary:8081
在两个站点中,执行以下步骤:
在主存储集群上运行 Ansible playbook:
裸机部署:
[user@ansible ceph-ansible]$ ansible-playbook site.yml -i hosts
容器部署:
[user@ansible ceph-ansible]$ ansible-playbook site-container.yml -i hosts
验证辅助存储集群可以访问主存储集群中的 API。
在辅助存储集群中的 Object Gateway 节点中,使用
curl
或者另一个 HTTP 客户端连接到主集群中的 API。使用用于在all.yml
中配置rgw_pull_proto
、rgw_pullhost
和rgw_pull_port
的信息编写 URL。在上例中,URL 是http://cluster0-rgw-000:8080
。如果无法访问 API,请验证 URL 是否正确,并根据需要更新all.yml
。URL 正常工作并解决所有网络问题后,请继续下一步,以在次要存储集群上运行 Ansible playbook。在辅助存储集群上运行 Ansible playbook:
注意如果部署了集群,且您只对 Ceph 对象网关进行了更改,则使用
--limit rgws
选项。裸机部署:
[user@ansible ceph-ansible]$ ansible-playbook site.yml -i hosts
容器部署:
[user@ansible ceph-ansible]$ ansible-playbook site-container.yml -i hosts
在主存储和次要存储集群上运行 Ansible playbook 后,Ceph 对象网关以主动-主动状态运行。
验证两个站点上的多站点 Ceph 对象网关配置:
语法
radosgw-admin sync status
5.7.3. 使用多个域和多个实例配置多站点 Ceph 对象网关
Ceph-ansible 配置 Ceph 对象网关,以在具有多个 Ceph 对象网关实例的多个存储集群之间镜像数据。
在单一站点配置中已使用网关后,Ceph-ansible 无法将网关重新配置为多站点设置。您可以手动部署此配置。联系红帽支持以获取帮助。
先决条件
- 两个正在运行的 Red Hat Ceph Storage 集群。
- 每个存储集群中至少有两个对象网关节点。
- 在 Ceph 对象网关节点上,执行 Red Hat Ceph Storage安装指南中的安装 Red Hat Ceph Storage 要求一节中列出的任务。
- 对于每个对象网关节点,执行 Red Hat Ceph Storage 安装指南中的安装 Ceph 对象网关一节中的第 1 到 6 步。
流程
在任何节点上,为 realm 1 和 2 生成系统访问密钥和密钥,并将它们分别保存在名为
multi-site-keys-realm-1.txt
和multi-site-keys-realm-2.txt
的文件中:# echo system_access_key: $(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 20 | head -n 1) > multi-site-keys-realm-1.txt [root@ansible ~]# echo system_secret_key: $(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 40 | head -n 1) >> multi-site-keys-realm-1.txt # echo system_access_key: $(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 20 | head -n 1) > multi-site-keys-realm-2.txt [root@ansible ~]# echo system_secret_key: $(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 40 | head -n 1) >> multi-site-keys-realm-2.txt
site-A 存储集群
进入 Ansible 配置目录:
[root@ansible ~]# cd /usr/share/ceph-ansible
打开并编辑
group_vars/all.yml
文件。取消注释rgw_multisite
行并将其设置为true
。取消注释rgw_multisite_proto
参数。rgw_multisite: true rgw_multisite_proto: "http"
在
/usr/share/ceph-ansible
中创建host_vars
目录:[root@ansible ceph-ansible]# mkdir host_vars
在
host_vars
中为 site-A 存储集群上的每个对象网关节点创建一个文件。文件名应当与 Ansible 清单文件中使用的名称相同。例如,如果对象网关节点命名为rgw-site-a
,则创建host_vars/rgw-site-a
文件。语法
touch host_vars/NODE_NAME
示例
[root@ansible ceph-ansible]# touch host_vars/rgw-site-a
注意如果集群中有多个 Ceph 对象网关节点用于多站点配置,则为每个节点创建单独的文件。
要为第一个域创建多个实例,请编辑文件,并将配置详情添加到对应对象网关节点上的所有实例。配置以下设置,以及更新第一个域的
rgw_instances
下的项目。将multi-site-keys-realm-1.txt
文件中保存的随机字符串用于 ACCESS_KEY_1 和 SECRET_KEY_1。语法
rgw_instances: - instance_name: '_INSTANCE_NAME_1_' rgw_multisite: true rgw_zonemaster: true rgw_zonesecondary: false rgw_zonegroupmaster: true rgw_zone: ZONE_NAME_1 rgw_zonegroup: ZONE_GROUP_NAME_1 rgw_realm: REALM_NAME_1 rgw_zone_user: ZONE_USER_NAME_1 rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1" system_access_key: ACCESS_KEY_1 system_secret_key: SECRET_KEY_1 radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: PORT_NUMBER_1 - instance_name: '_INSTANCE_NAME_2_' rgw_multisite: true rgw_zonemaster: true rgw_zonesecondary: false rgw_zonegroupmaster: true rgw_zone: ZONE_NAME_1 rgw_zonegroup: ZONE_GROUP_NAME_1 rgw_realm: REALM_NAME_1 rgw_zone_user: ZONE_USER_NAME_1 rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1" system_access_key: ACCESS_KEY_1 system_secret_key: SECRET_KEY_1 radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: PORT_NUMBER_1
示例
rgw_instances: - instance_name: 'rgw0' rgw_multisite: true rgw_zonemaster: true rgw_zonesecondary: false rgw_zonegroupmaster: true rgw_zone: paris rgw_zonegroup: idf rgw_realm: france rgw_zone_user: jacques.chirac rgw_zone_user_display_name: "Jacques Chirac" system_access_key: P9Eb6S8XNyo4dtZZUUMy system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: 8080 - instance_name: 'rgw1' rgw_multisite: true rgw_zonemaster: true rgw_zonesecondary: false rgw_zonegroupmaster: true rgw_zone: paris rgw_zonegroup: idf rgw_realm: france rgw_zone_user: jacques.chirac rgw_zone_user_display_name: "Jacques Chirac" system_access_key: P9Eb6S8XNyo4dtZZUUMy system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: 8080
注意在将 site-B 上的所有域配置为 site-A 为次要域后,跳过下一步并运行它,然后运行 Ansible playbook。
对于其他域的多个实例,请配置以下设置,以及更新
rgw_instances
下的项目。使用multi-site-keys-realm-2.txt
文件中保存的随机字符串用于 ACCESS_KEY_2 和 SECRET_KEY_2。语法
rgw_instances: - instance_name: 'INSTANCE_NAME_1' rgw_multisite: true rgw_zonemaster: false rgw_zonesecondary: true rgw_zonegroupmaster: false rgw_zone: ZONE_NAME_2 rgw_zonegroup: ZONE_GROUP_NAME_2 rgw_realm: REALM_NAME_2 rgw_zone_user: ZONE_USER_NAME_2 rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_2" system_access_key: ACCESS_KEY_2 system_secret_key: SECRET_KEY_2 radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: PORT_NUMBER_1 endpoint: RGW_SITE_B_PRIMARY_HOSTNAME_ENDPOINT:RGW_SITE_B_PORT_NUMBER_1 - instance_name: 'INSTANCE_NAME_2' rgw_multisite: true rgw_zonemaster: false rgw_zonesecondary: true rgw_zonegroupmaster: false rgw_zone: ZONE_NAME_2 rgw_zonegroup: ZONE_GROUP_NAME_2 rgw_realm: REALM_NAME_2 rgw_zone_user: ZONE_USER_NAME_2 rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_2" system_access_key: ACCESS_KEY_2 system_secret_key: SECRET_KEY_2 radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: PORT_NUMBER_1 endpoint: RGW_SITE_B_PRIMARY_HOSTNAME_ENDPOINT:RGW_SITE_B_PORT_NUMBER_1
示例
rgw_instances: - instance_name: 'rgw0' rgw_multisite: true rgw_zonemaster: false rgw_zonesecondary: true rgw_zonegroupmaster: false rgw_zone: fairbanks rgw_zonegroup: alaska rgw_realm: usa rgw_zone_user: edward.lewis rgw_zone_user_display_name: "Edward Lewis" system_access_key: yu17wkvAx3B8Wyn08XoF system_secret_key: 5YZfaSUPqxSNIkZQQA3lBZ495hnIV6k2HAz710BY radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: 8080 endpoint: http://rgw-site-b:8081 - instance_name: 'rgw1' rgw_multisite: true rgw_zonemaster: false rgw_zonesecondary: true rgw_zonegroupmaster: false rgw_zone: fairbanks rgw_zonegroup: alaska rgw_realm: usa rgw_zone_user: edward.lewis rgw_zone_user_display_name: "Edward Lewis" system_access_key: yu17wkvAx3B8Wyn08XoF system_secret_key: 5YZfaSUPqxSNIkZQQA3lBZ495hnIV6k2HAz710BY radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: 8081 endpoint: http://rgw-site-b:8081
在 site-A 存储集群上运行 Ansible playbook:
裸机部署:
[user@ansible ceph-ansible]$ ansible-playbook site.yml -i hosts
容器部署:
[user@ansible ceph-ansible]$ ansible-playbook site-container.yml -i hosts
Site-B Storage Cluster
进入 Ceph-ansible 配置目录:
[root@ansible ~]# cd /usr/share/ceph-ansible
打开并编辑
group_vars/all.yml
文件。取消注释rgw_multisite
行并将其设置为true
。取消注释rgw_multisite_proto
参数。rgw_multisite: true rgw_multisite_proto: "http"
在
/usr/share/ceph-ansible
中创建host_vars
目录:[root@ansible ceph-ansible]# mkdir host_vars
在
host_vars
中为 site-B 存储集群上的每个对象网关节点创建一个文件。文件名应当与 Ansible 清单文件中使用的名称相同。例如,如果对象网关节点命名为rgw-site-b
,则创建host_vars/rgw-site-b
文件。语法
touch host_vars/NODE_NAME
示例
[root@ansible ceph-ansible]# touch host_vars/rgw-site-b
注意如果集群中有多个 Ceph 对象网关节点用于多站点配置,则为每个节点创建文件。
要为第一个域创建多个实例,请编辑文件,并将配置详情添加到对应对象网关节点上的所有实例。配置以下设置,以及更新第一个域的
rgw_instances
下的项目。将multi-site-keys-realm-1.txt
文件中保存的随机字符串用于 ACCESS_KEY_1 和 SECRET_KEY_1。将 RGW_SITE_A_PRIMARY_HOSTNAME_ENDPOINT 设置为 site-A 存储集群中的对象网关节点。语法
rgw_instances: - instance_name: 'INSTANCE_NAME_1' rgw_multisite: true rgw_zonemaster: false rgw_zonesecondary: true rgw_zonegroupmaster: false rgw_zone: ZONE_NAME_1 rgw_zonegroup: ZONE_GROUP_NAME_1 rgw_realm: REALM_NAME_1 rgw_zone_user: ZONE_USER_NAME_1 rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1" system_access_key: ACCESS_KEY_1 system_secret_key: SECRET_KEY_1 radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: PORT_NUMBER_1 endpoint: RGW_SITE_A_HOSTNAME_ENDPOINT:RGW_SITE_A_PORT_NUMBER_1 - instance_name: '_INSTANCE_NAME_2_' rgw_multisite: true rgw_zonemaster: false rgw_zonesecondary: true rgw_zonegroupmaster: false rgw_zone: ZONE_NAME_1 rgw_zonegroup: ZONE_GROUP_NAME_1 rgw_realm: REALM_NAME_1 rgw_zone_user: ZONE_USER_NAME_1 rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_1" system_access_key: ACCESS_KEY_1 system_secret_key: SECRET_KEY_1 radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: PORT_NUMBER_1 endpoint: RGW_SITE_A_PRIMARY_HOSTNAME_ENDPOINT:RGW_SITE_A_PORT_NUMBER_1
示例
rgw_instances: - instance_name: 'rgw0' rgw_multisite: true rgw_zonemaster: false rgw_zonesecondary: true rgw_zonegroupmaster: false rgw_zone: paris rgw_zonegroup: idf rgw_realm: france rgw_zone_user: jacques.chirac rgw_zone_user_display_name: "Jacques Chirac" system_access_key: P9Eb6S8XNyo4dtZZUUMy system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: 8080 endpoint: http://rgw-site-a:8080 - instance_name: 'rgw1' rgw_multisite: true rgw_zonemaster: false rgw_zonesecondary: true rgw_zonegroupmaster: false rgw_zone: paris rgw_zonegroup: idf rgw_realm: france rgw_zone_user: jacques.chirac rgw_zone_user_display_name: "Jacques Chirac" system_access_key: P9Eb6S8XNyo4dtZZUUMy system_secret_key: qqHCUtfdNnpHq3PZRHW5un9l0bEBM812Uhow0XfB radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: 8081 endpoint: http://rgw-site-a:8081
对于其他域的多个实例,请配置以下设置,以及更新
rgw_instances
下的项目。使用multi-site-keys-realm-2.txt
文件中保存的随机字符串用于 ACCESS_KEY_2 和 SECRET_KEY_2。将 RGW_SITE_A_PRIMARY_HOSTNAME_ENDPOINT 设置为 site-A 存储集群中的对象网关节点。语法
rgw_instances: - instance_name: 'INSTANCE_NAME_1' rgw_multisite: true rgw_zonemaster: true rgw_zonesecondary: false rgw_zonegroupmaster: true rgw_zone: ZONE_NAME_2 rgw_zonegroup: ZONE_GROUP_NAME_2 rgw_realm: REALM_NAME_2 rgw_zone_user: ZONE_USER_NAME_2 rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_2" system_access_key: ACCESS_KEY_2 system_secret_key: SECRET_KEY_2 radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: PORT_NUMBER_1 - instance_name: '_INSTANCE_NAME_2_' rgw_multisite: true rgw_zonemaster: true rgw_zonesecondary: false rgw_zonegroupmaster: true rgw_zone: ZONE_NAME_2 rgw_zonegroup: ZONE_GROUP_NAME_2 rgw_realm: REALM_NAME_2 rgw_zone_user: ZONE_USER_NAME_2 rgw_zone_user_display_name: "ZONE_DISPLAY_NAME_2" system_access_key: ACCESS_KEY_2 system_secret_key: SECRET_KEY_2 radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: PORT_NUMBER_1
示例
rgw_instances: - instance_name: 'rgw0' rgw_multisite: true rgw_zonemaster: true rgw_zonesecondary: false rgw_zonegroupmaster: true rgw_zone: fairbanks rgw_zonegroup: alaska rgw_realm: usa rgw_zone_user: edward.lewis rgw_zone_user_display_name: "Edward Lewis" system_access_key: yu17wkvAx3B8Wyn08XoF system_secret_key: 5YZfaSUPqxSNIkZQQA3lBZ495hnIV6k2HAz710BY radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: 8080 - instance_name: 'rgw1' rgw_multisite: true rgw_zonemaster: true rgw_zonesecondary: false rgw_zonegroupmaster: true rgw_zone: fairbanks rgw_zonegroup: alaska rgw_realm: usa rgw_zone_user: edward.lewis rgw_zone_user_display_name: "Edward Lewis" system_access_key: yu17wkvAx3B8Wyn08XoF system_secret_key: 5YZfaSUPqxSNIkZQQA3lBZ495hnIV6k2HAz710BY radosgw_address: "{{ _radosgw_address }}" radosgw_frontend_port: 8081
在 site-B 存储集群上运行 Ansible playbook:
裸机部署:
[user@ansible ceph-ansible]$ ansible-playbook site.yml -i hosts
容器部署:
[user@ansible ceph-ansible]$ ansible-playbook site-container.yml -i hosts
在 site-A 存储集群上针对其他 site-A 的域再次运行 Ansible playbook。
在 site-A 和 site-B 存储集群上运行 Ansible playbook 后,Ceph 对象网关以主动-主动状态运行。
验证
验证多站点 Ceph 对象网关配置:
-
从每个站点的 Ceph monitor 和对象网关节点(site-A 和 site-B),使用
curl
或其他 HTTP 客户端来验证是否可从其他站点访问 API。 对两个站点运行
radosgw-admin sync status
命令。语法
radosgw-admin sync status radosgw-admin sync status --rgw -realm REALM_NAME 1
- 1
- 对存储集群的对应节点上的多个域使用这个选项。
示例
[user@ansible ceph-ansible]$ radosgw-admin sync status [user@ansible ceph-ansible]$ radosgw-admin sync status --rgw -realm usa
-
从每个站点的 Ceph monitor 和对象网关节点(site-A 和 site-B),使用