csmart.swift
Swift
这是一个用于设置和管理 OpenStack Swift 集群的角色。 目前支持运行所有 Swift 服务的 PACO 节点:代理、帐户、容器和对象。
它将会:
- 准备 Swift 节点,包括设置 SELinux 和确保 SSH 访问
- 添加软件仓库并安装包
- 配置依赖服务,比如日志记录、rsyncd 和 memcached
- 配置 keepalived 以实现代理 VIP 的故障转移
- 配置 Swift PACO 服务
- 创建初始的帐户、容器和对象环
- 准备每个节点的磁盘,按照环格式化和挂载
- 构建和分发环
- 配置扩散
- 简单的操作任务,例如:
- 更新和分发环
- 重新配置 PACO 服务
- 生成扩散和复制报告
要求
需要一份预先存在的 CentOS 8 Stream 节点清单,且其网络已配置好。
集群需要一个管理主机(包括在 swift_admin
组中),通过它管理所有 Swift 节点。
如果没有单独的管理主机,可以选用其中一个 Swift 节点作为管理主机。
如果构建虚拟的 Swift 集群,建议使用 csmart.virt_infra
Ansible 角色,地址为 https://github.com/csmart/ansible-role-virt-infra。
示例清单和剧本可以在 https://github.com/csmart/virt-infra-swift 找到,适用于 csmart.virt_infra
和 csmart.swift
。
角色变量
该角色有许多默认变量,这些变量被分成单独的文件,在 defaults/main/
下。
这些包括 Swift 集群的常用设置,以及特定 Swift 服务的默认值。
- account-rings.yml
- account.yml
- container-rings.yml
- container.yml
- dispersion.yml
- hash.yml
- networks.yml
- object-rings.yml
- object.yml
- packages.yml
- proxy.yml
- swift.yml
- tempauth.yml
用户必须定义的全局变量包括:
swift_hash_suffix
- 集群的哈希后缀,一旦设置不应更改- 默认值为
07b4ef9c-2e01-4ea2-a109-5ffc5273225f
- 默认值为
swift_hash_prefix
- 集群的哈希前缀,一旦设置不应更改- 默认值为
f9175259-ace0-48bb-af9d-e7ac505b89d2
- 默认值为
swift_outward_subnet
- 外部连接的可路由 CIDR 子网(用于代理节点)- 默认值为
203.0.113.0/24
- 默认值为
swift_cluster_subnet
- 集群通信的 CIDR 子网- 默认值为
192.0.2.0/24
- 默认值为
swift_replication_subnet
- 复制的 CIDR 子网(可以与集群相同)- 默认值为
198.51.100.0/24
- 默认值为
用户必须定义的特定节点变量包括:
swift_outward_ip
- 外部网络的 IP- 例如:
203.0.113.11
- 例如:
swift_cluster_ip
- 集群网络的 IP- 例如:
192.0.2.11
- 例如:
swift_replication_ip
- 复制网络的 IP- 例如:
198.51.100.11
- 例如:
swift_vips
- 代理 VIP 的列表,IP 的第四个八位字节每个代理节点应按优先级列出 VIP IP 的第四个八位字节。例如,基于默认的外部子网
203.0.113.0/24
,一个节点想要 VIP203.0.113.111
、203.0.113.112
和203.0.113.113
。swift_vips: - 111 - 112 - 113
swift_rings_disks
- 定义使用哪些磁盘的字典列表,用于哪些环每个节点的磁盘应包括路径及其在环中的权重。例如,下面是一个用于对象的 SCSI 磁盘和一个同时用于帐户和容器的 NVMe 磁盘。
swift_rings_disks: - disk: device: sdb rings: - name: account weight: 0 - name: container weight: 0 - name: object weight: 100 - disk: device: nvme0n1 rings: - name: account weight: 100 - name: container weight: 100 - name: object weight: 0
依赖关系
无。
示例剧本
virt-infra-swift
存储库在 https://github.com/csmart/virt-infra-swift 提供了一组示例剧本和示例清单。
您的清单应包括以下组:
swift
(或all
)swift_admin
swift_proxy
swift_account
swift_container
swift_object
这是一个带有必需组的三节点 PACO Swift 集群的示例清单。
swift:
hosts:
swift-admin:
swift-[01:03]:
children:
swift_admin:
hosts:
swift-admin:
swift_proxy:
hosts:
swift-[01:03]:
swift_account:
hosts:
swift-[01:03]:
swift_container:
hosts:
swift-[01:03]:
swift_object:
hosts:
swift-[01:03]:
一旦您有了基本清单,创建基本的剧本应该很简单。
---
- hosts: swift
tasks:
- include_role:
name: csmart.swift
执行该剧本将按照顺序运行整个角色及默认任务集。
ansible-playbook -i inventory/ site.yml
该角色还包括每种任务类型的标签,这样您可以为所有标签或特定标签创建一个或多个剧本。
---
- hosts: swift
tasks:
- include_role:
name: csmart.swift
tags:
- account
- common
- config
- container
- disks
- dispersion
- hosts
- keepalived
- logging
- memcached
- object
- packages
- prep
- proxy
- rings
- rsyncd
- selinux
- services
- system
- update
然后可以只针对特定标签运行剧本,例如,仅重新配置帐户服务。
ansible-playbook -i inventory/ site.yml --tags account
许可证
GPLv3+
作者信息
Chris Smart https://blog.christophersmart.com