[ English | Indonesia | русский ]

多区域对象存储的访问性

在使用独立数据库后端的多区域对象存储中,如果 keystone 数据库中用户的 default_project_id 在每个数据库后端中都相同,则可以从其他位置检索对象。

重要提示

建议在发生故障之前执行以下步骤,以避免转储和恢复数据库。

如果发生故障,请按照以下步骤从主(失败)区域恢复数据库

  1. 记录 keystone 数据库的用户表中的指定用户的 default_project_id 的主区域输出

    注意

    在此示例中,用户是 admin

    # mariadb -e "SELECT default_project_id from keystone.user WHERE \
      name='admin';"
    
    +----------------------------------+
    | default_project_id               |
    +----------------------------------+
    | 76ef6df109744a03b64ffaad2a7cf504 |
    +-----------------—————————————————+
    
  2. 记录 keystone 数据库的用户表中的指定用户的 default_project_id 的辅助区域输出

    # mariadb -e "SELECT default_project_id from keystone.user WHERE \
      name='admin';"
    
    +----------------------------------+
    | default_project_id               |
    +----------------------------------+
    | 69c46f8ad1cf4a058aa76640985c     |
    +----------------------------------+
    
  3. 在辅助区域,更新对 project_id 的引用,以匹配来自主区域的 ID

    # export PRIMARY_REGION_TENANT_ID="76ef6df109744a03b64ffaad2a7cf504"
    # export SECONDARY_REGION_TENANT_ID="69c46f8ad1cf4a058aa76640985c"
    
    # mariadb -e "UPDATE keystone.assignment set \
    target_id='${PRIMARY_REGION_TENANT_ID}' \
    WHERE target_id='${SECONDARY_REGION_TENANT_ID}';"
    
    # mariadb -e "UPDATE keystone.user set \
    default_project_id='${PRIMARY_REGION_TENANT_ID}' WHERE \
    default_project_id='${SECONDARY_REGION_TENANT_ID}';"
    
    # mariadb -e "UPDATE keystone.project set \
    id='${PRIMARY_REGION_TENANT_ID}' WHERE \
    id='${SECONDARY_REGION_TENANT_ID}';"
    

辅助区域中的用户现在可以访问在主区域中 PUT 的对象。辅助区域可以 PUT 用户可以在主区域访问的对象。