多区域 Swift

日期:

2015-07-03 13:00

标签:

kilo, swift

此蓝图旨在为 OSAD 添加多区域 Swift 支持。它将阐述一系列用例,以定义 OSAD 中多区域 Swift 的需求。

Swift 集群可以部署成跨多个地理分散的数据中心的方式。这允许最终用户在数据中心发生故障时确保弹性,每个数据中心位置存储一个或多个对象的副本。这有助于最终用户构建地理分散的基础设施,从而实现高可用性。

问题描述

  • 作为用户,我希望能够使用相同的凭据在多位置对象存储解决方案的任何位置存储或检索对象。

  • 作为用户,我希望我的默认对象存储/检索位置尽可能靠近我的位置 - 通过指定最近的端点并让该端点访问最近的存储位置来实现。

  • 作为管理员,我希望能够设置一个全局存储策略,该策略能够让我根据以下预定义的场景指定每个位置存储的每个对象的副本数量

    • 对于 3 个或更多存储部署,每个位置都被视为与其他位置一样重要。应在每个位置保留相同数量的副本。

    • 对于 3 个存储部署,我们将 1 个视为主要位置,另外 2 个视为地理位置方便的读取位置。主要位置应有 2 个副本,其他每个位置有 1 个副本。

    • 对于 2 个存储部署,我们将 1 个视为主要位置,另一个视为“备份”位置。主要位置应有 2 个副本, “备份”位置有 1 个副本。

  • 作为用户,我希望确保在各种情况下内容的持久性,例如

    • 初始上传到单个位置。例如,在将对象上传到 3 位置解决方案中的位置 A,全局策略为本地 1 个,远程每个位置 1 个 - 在确认 2 个远程对象之前,本地对象存储集群将拥有 3 个副本。

    • 一个或多个位置发生故障。例如,在 3 位置解决方案中,全局策略为本地 1 个,远程每个位置 1 个 - 如果位置 A 发生故障,则位置 B 或 C 将生成第二个“丢失”对象的副本,以确保始终有 3 个副本。

  • 作为管理员,我希望能够覆盖容器级别上的全局存储策略,以增加或减少复制。例如

    • 一个或多个容器可以在容器级别指定替代策略,以覆盖全局策略。如果 3 位置解决方案中的全局策略为本地 1 个,远程每个位置 1 个,则可以配置一个或多个容器为本地 3 个策略。

  • 作为用户,如果全局存储策略配置为跨位置复制对象,我希望能够在默认位置发生故障时从替代位置检索我的对象。

  • 作为管理员,我希望确保从主要位置到远程位置复制数据时,数据是安全的,不会以明文形式传输。

提议的变更

  1. 在 swift-proxy 主机基础上启用 Swift 中 read_affinity、write_affinity 和 write_affinity_node_count 设置的使用。这将允许根据区域对读取/写入进行优先级排序。

  2. 启用某种形式的加密,以确保跨位置复制对象是安全的。

  3. 配置管理在多个位置和“部署”之间进行通信所需的环和密钥。

  4. 记录 read_affinity、write_affinity 和 write_affinity_node_count 设置在 openstack-ansible 中的使用,并提供有关如何实施指定用例的指导。

  5. 记录在 openstack-ansible 中设置全局 swift 集群的过程。

  6. 调整设置以允许在 swift 配置文件中使用 keystone v3 API。

备选方案

我们未能启用 swift 多区域支持。

Playbook 影响

虽然多区域组件将是可选的,但我们需要实施以下更改,而不会调整当前默认操作方式

  1. 多区域组件需要对 swift 主机的环/密钥管理进行调整,以及对 user_config.yml(或 conf.d/swift.yml)文件中 Swift 资源清册的管理方式进行一些更改。

  2. 需要为代理服务器添加 read_affinity、write_affinity 和 write_affinity_node_count 配置。

  3. 需要跨所有位置/区域的节点处理 swift 环的同步。

升级影响

这不应产生升级影响。

安全影响

由于 swift 不处理对象的加密,因此需要在 swift 外部处理此问题。

性能影响

N/A

最终用户影响

用户现在可以选择配置多区域 Swift 集群。默认设置将保持不变,因此不应影响任何不希望使用多区域 Swift 集群的用户。

部署者影响

部署者能够调整多个部署中的资源清册,以确保所有部署都在统一运行的全局 swift 集群。

开发人员影响

依赖项

目前尚无已知问题

实现

负责人

主要负责人

https://launchpad.net/~andrew-mccrae (andymccr)

其他贡献者

https://launchpad.net/~steve-lewis (stevelle) https://launchpad.net/~tom-cameron (rackertom) https://launchpad.net/~apsu-2 (Apsu) https://launchpad.net/~prometheanfire (prometheanfire)

工作项

  1. 在 swift-proxy 主机基础上启用 Swift 中 read_affinity、write_affinity 和 write_affinity_node_count 设置的使用。这将允许根据区域对读取/写入进行优先级排序。

  2. 启用某种形式的加密,以确保跨位置复制对象是安全的。

  3. 配置管理在多个位置和“部署”之间进行通信所需的环和密钥。

  4. 记录 read_affinity、write_affinity 和 write_affinity_node_count 设置在 openstack-ansible 中的使用,并提供有关如何实施指定用例的指导。

  5. 记录在 openstack-ansible 中设置全局 swift 集群的过程。

  6. 调整设置以允许使用 keystone v3 API。

测试

由于这将需要独立安装两次 swift,因此我们不会添加任何特定内容到 gate 中以自动测试此功能。但是,更改不应调整当前测试的工作方式,并且所有更改都需要确保现有测试继续通过。

文档影响

  1. 需要记录用例的实施情况

  2. 需要记录全局集群的实施情况和所需的设置。

  3. 需要记录新的网络需求。

  4. 需要记录添加的结果的资源清册管理和配置选项。

参考资料