文章内容
2024/7/15 19:39:04,作 者: 黄兵
Ubuntu 24.04 安装 OpenStack Swift
最近需要实现对象存储,采用的技术是 OpenStack Swift,系统是 Ubuntu 24.04,Python 环境管理更加严格(PEP 668),下面是在 Ubuntu 24.04 安装 OpenStack Swift 的一些步骤:
安装依赖:
首先更新系统,通过入如下命令:
sudo apt-get update && sudo apt-get -y upgrade
通过如下命令安装相关依赖:
# 安装基础工具和编译依赖 sudo apt-get install git curl gcc memcached rsync sqlite3 xfsprogs libffi-dev libssl-dev -y # 安装 Python 相关依赖 (移除过时的 nose,确保有 venv) sudo apt-get install python3-dev python3-setuptools python3-pip python3-venv -y # 安装 OpenStack 相关的系统级 Python 库 (可选,推荐在 venv 中安装) sudo apt-get install python3-eventlet python3-greenlet python3-pastedeploy python3-netifaces python3-dnspython -y
安装 Swift CLI(Python-Swiftclient)
cd /opt git clone https://github.com/openstack/python-swiftclient.git cd /opt/python-swiftclient
在 Ubuntu 24.04 中,强烈建议使用虚拟环境(Virtual Environment)进行安装,否则会触发 error: externally-managed-environment 错误。
# 1. 创建虚拟环境 python3 -m venv venv # 2. 激活虚拟环境 (激活后命令行前会出现 (venv) 标识) source venv/bin/activate # 3. 升级 pip pip install --upgrade pip # 4. 安装依赖 pip install -r requirements.txt # 5. 安装 Swift Client # 注意:不推荐使用 setup.py install,改用 pip install . pip install . # ========================================== # 【关键步骤】安装完 Client 后,退出当前虚拟环境 # ========================================== deactivate
安装 OpenStack Swift (核心服务)
切换到 /opt 目录之后,克隆 Swift 库:
cd /opt git clone https://github.com/openstack/swift.git cd /opt/swift
创建虚拟环境并安装
为了保持环境隔离,我们为 Swift 创建独立的虚拟环境(或者复用上面的环境,但建议独立管理)。
# 1. 创建虚拟环境 python3 -m venv venv # 2. 激活虚拟环境 source venv/bin/activate # 3. 升级 pip pip install --upgrade pip # 4. 安装 Swift 自身依赖 pip install -r requirements.txt
【重要】安装关键中间件 (CORS 支持)
默认的 Swift 依赖中可能不包含 oslo.middleware,但这对于实现浏览器端直传(解决 CORS 跨域问题)是必须的。
# 安装 oslo.middleware 以支持高级 CORS 配置 pip install oslo.middleware
编译安装 Swift
# 使用 pip 安装当前目录 pip install .
复制 Swift 配置文件
创建 Swift 目录并将源代码中的配置文件示例复制过去,以便能够在后续的配置中以他们作为模板来编辑配置文件:
mkdir -p /etc/swift cd /opt/swift/etc cp account-server.conf-sample /etc/swift/account-server.conf cp container-server.conf-sample /etc/swift/container-server.conf cp object-server.conf-sample /etc/swift/object-server.conf cp proxy-server.conf-sample /etc/swift/proxy-server.conf cp drive-audit.conf-sample /etc/swift/drive-audit.conf cp swift.conf-sample /etc/swift/swift.conf
此时我们可以运行 swift-init 命令,使用 -h 标志显示帮助信息:
swift-init -h
使用该命令可以启动、停止或重启 Swift 进程。
配置 Swift
在启动 Swift 服务进程之前,需要对其进行配置。首先我们需要创建构造器文件(builder files),添加驱动器并构造环。
向 Swift 中添加驱动器
在驱动器上存储数据是 Swift 的基本目的,因此添加驱动器并进行格式化是重要的第一步。
如果我们的 VPS 上只有一块硬盘,没有挂载硬盘,我们可以按照这篇文章:OpenStack Swift 单节点部署 来完成硬盘的挂载。
发现驱动器
首先我们需要确定系统中有哪些驱动器,并判断哪些是需要格式化的,那些是系统盘,不能格式化。
使用如下命令:
df
执行结果如下:

该命令会列出所有已经挂载的文件系统。注意一下哪个盘是启动盘以防止后面不小心将其格式化了,比较常见的挂载是在根目录(/)下的 sda 设备,也可以通过查看 /proc/mounts 找到那个目录是 roofs:
cat /proc/mounts
结果示例:

这告诉我们根文件系统是 /,在根据 df 命令结果,该位置挂载的是 /dev/sda1,所以系统是从 /dev/sda1 启动的。
查找系统其它块设备,查看 /sys/block 目录:
ls /sys/block
该命令会返回如下结果:

这里需要注意的是 sd 开头的盘,使用下面这条命令查看是否被格式化,用什么文件系统格式化的:
blkid
会得到如下类似的结果:

TYPE 值表明这个设备上是那种文件系统(如 xfs 或 ext4),TYPE 为 swap 分区是不能被用户使用的。
如果出现没有被格式化的块设备需要格式化同时需要给驱动器赋卷标。
给驱动器赋卷标
如果我们在实验环境使用的是 VPS,一般都只有一个硬盘,这个时候我们需要增加磁盘,例如在 Hetzner 中我们可以选择 VPS 之后,点击 Volumes 创建新的硬盘挂载:

由于我们购买的磁盘默认是挂载了的,我们首先需要卸载磁盘。
首先,确认 /dev/sdb 是否被挂载:
mount | grep /dev/sdb
如果 /dev/sdb 已被挂载,使用 umount 命令卸载它:
sudo umount /dev/sdb
卸载成功后,重新执行 mkfs.xfs 命令进行格式化:
sudo mkfs.xfs -f -L d1 /dev/sdb
创建脚本让设备启动时自动挂载
假设新分区分别是 /dev/sda1 和 /dev/sda2,使用 mkfs.xfs 格式化新分区并分配卷标:
sudo mkfs.xfs -f -L d1 /dev/sda1 sudo mkfs.xfs -f -L d2 /dev/sda2
编辑 /etc/fstab 文件以使用卷标挂载新分区:
sudo nano /etc/fstab
添加以下条目:
LABEL=d1 /srv/node/sda1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0 LABEL=d2 /srv/node/sda2 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0
noatime/nodiratime: 不记录文件/目录访问时间,减少写操作。nobarrier: 提升写性能(前提是有电池备份的 RAID 卡或 UPS,如果是云 VPS 通常可以开启)。
创建挂载点目录:
sudo mkdir -p /srv/node/sda1 sudo mkdir -p /srv/node/sda2
挂载新分区:
sudo mount -a
确认新分区已经成功挂载:
df -h
其结果如下:

Swift 用户
我们挂载了启动器之后,我们需要创建一个对这些挂载点目录有读写权限的用户。Swift 所使用的默认用户名是 swift。
useradd swift
给用户 swift 赋予这个目录的所有权:
chown -R swift:swift /srv/node
参考资料:
1、《对象存储:OpenStack Swift 应用、管理与开发》
其它相关推荐:
1、ModuleNotFoundError: No module named 'pyeclib'
2、The 'lxml>=4.2.3' distribution was not found and is required by swift
评论列表