Swift Global Cluster

为 Swift charms 添加对 Swift Global Cluster 功能的支持。

问题描述

目前 Swift charms 不支持上游已经提供的 Swift Global Cluster 功能

https://docs.openstack.org/swift/latest/overview_global_cluster.html

因此,使用 Swift charms 无法以多区域模式部署 Swift 集群。

提议的变更

提议的变更可以分解为以下几个部分

  1. 为 swift-storage charm 添加新的配置选项,以处理以下参数

  • “region”

    用途:指定请求成员数据的区域 数据类型:int 有效值:自然数

  • “account-server-port-rep”

    用途:指定 swift-account-replicator 服务的监听端口 数据类型:int 有效值:0 - 65535

  • “container-server-port-rep”

    用途:指定 swift-container-replicator 服务的监听端口 数据类型:int 有效值:0 - 65535

  • “object-server-port-rep”

    用途:指定 swift-object-replicator 服务的监听端口 数据类型:int 有效值:0 - 65535

  1. 为 swift-proxy charm 添加新的配置选项,以处理以下参数

  • “enable-multi-region”

    用途:指定是否应使用 Swift Global Cluster 功能 数据类型:boolean 有效值:True / False

  • “read-affinity”

    用途:指定在读取时优先选择哪些后端服务器 数据类型:string 有效值:匹配 “^rd+z?(d+)?=d+(,s?rd+z?(d+)?=d+)*$” 模式

  • “write-affinity”

    用途:指定在写入时优先选择哪些后端服务器 数据类型:string 有效值:匹配 “^rd+(,s?rd+)*$” 模式

  • “write-affinity-node-count”

    用途:指定在回退到非本地服务器之前,将尝试多少个本地对象 数据类型:string 有效值:匹配 “^d+(s*sreplicas)?$” 模式

  1. 更新模板文件,以包含 Swift Global Cluster 功能所需的选项。

  2. 重命名并更改负责 Swift account、container 和 object 服务的模板配置文件位置,以匹配 Swift Global Cluster 功能所需的模式。

  3. 扩展 swift-storage 和 swift-proxy 节点之间交换的关系数据,以包含区域和其他复制信息。

  4. 在 swift-proxy charm 中实现基于通用接口(‘swift-global-cluster’)的 ‘rings-distributor’ - ‘rings-consumer’ 关系,以处理跨所有参与多区域部署的代理节点分发 rings。

  5. 更新测试文件。

  6. 更新文档,其中包含有关如何在多区域模式下设置 Swift 的信息。

备选方案

目前,没有替代 Swift Global Cluster 功能的方案。

实现

负责人

主要负责人

tkurek

Gerrit Topic

对于与此规范相关的所有补丁,请使用 Gerrit 主题 “swift-global-cluster”。

git-review -t bug/1815879

工作项

更新 swift-proxy charm

  • 更新 ‘config.yaml’ 文件以添加新的选项

  • 使用新的选项更新模板文件

  • 更新 ‘metadata.yaml’ 文件以添加新的关系

  • 将钩子文件作为符号链接添加到 ‘swift_hooks.py’ 文件

  • 使用新的关系的钩子定义更新 ‘swift_hooks.py’ 文件

  • 更新测试文件

  • 更新 ‘README.md’ 文件以描述该功能

  • 更新其他文件(如果需要)以实现该功能

更新 swift-storage charm

  • 更新 ‘config.yaml’ 文件以添加新的选项

  • 重命名并更改负责 Swift account、container 和 object 服务的模板配置文件位置,以匹配功能所需的模式。

  • 更新 ‘metadata.yaml’ 文件以添加额外的绑定(‘cluster’ 和 ‘replication’)

  • 使用扩展的关系数据更新 ‘swift_storage_relation_joined’ 钩子定义

  • 更新测试文件

  • 更新 ‘README.md’ 文件以描述该功能

  • 更新其他文件(如果需要)以实现该功能

仓库

不需要新的 git 仓库来实现此功能。

文档

swift-proxy 和 swift-storage charms 的 README 文件应更新,其中包含有关如何在多区域模式下设置 Swift 的说明。

安全性

此变更没有安全影响。

测试

swift-proxy 和 swift-storage charms 的单元测试和功能测试需要更新,以支持此功能的实现。

依赖项

没有外部依赖项。