银河麒麟 V10 离线安装 s3cmd 踩坑记录+存储负载均衡测试
文章目录
一、背景说明
在一些政务、医院、企业内网环境中,服务器通常无法直接访问公网,因此无法通过 yum install 或 pip install 在线安装工具。
本次场景是在 银河麒麟 V10SP3 测试机上,离线安装 s3cmd 2.4.0,然后通过 深信服 AD 硬件 IP 负载 访问后端 X10000 分布式存储资源池 的 S3 服务。
整体访问链路如下:
源测试机 -> 深信服 AD 硬件负载 -> X10000 分布式存储资源池
二、测试环境
| 项目 | 内容 |
|---|---|
| 操作系统 | 银河麒麟 V10SP3 |
| Python 版本 | Python 2.7 |
| S3 客户端 | s3cmd 2.4.0 |
| 访问协议 | S3 over HTTP |
| HTTPS | False |
| 负载设备 | 深信服 AD 硬件负载 |
| 后端存储 | X10000 分布式存储资源池 |
| 测试 Bucket | s3://fztest-demo |
三、离线安装包准备
由于服务器无法访问公网,所以需要提前下载好源码包,然后拷贝到目标服务器。
本次使用的安装包如下:
s3cmd-2.4.0.tar.gz
six-1.16.0.tar.gz
python-magic-0.4.27.tar.gz
python-dateutil-2.6.1.tar.gz
下载地址可以从 PyPI 获取:
https://pypi.org/project/s3cmd/2.4.0/#files
https://pypi.org/project/six/1.16.0/#files
https://pypi.org/project/python-magic/0.4.27/#files
https://pypi.org/project/python-dateutil/2.6.1/#files
注意:这里使用 python-dateutil-2.6.1,不要直接使用 2.8.2 或 2.7.5,因为在 Python2.7 离线环境中,它们会尝试下载 setuptools_scm,导致安装失败。(我测试了 2.8.2 和 2.7.5 都安装失败)
四、上传离线安装包
将安装包上传到服务器目录,例如:
/home/squiduser
查看文件:
cd /home/squiduser
ll
示例:
python-dateutil-2.6.1.tar.gz
python-magic-0.4.27.tar.gz
s3cmd-2.4.0.tar.gz
six-1.16.0.tar.gz

五、安装 Python 依赖
建议先安装依赖,再安装 s3cmd。
1. 安装 six
cd /home/squiduser
tar xzf six-1.16.0.tar.gz
cd six-1.16.0
python setup.py install
cd ..
2. 安装 python-dateutil
cd /home/squiduser
tar xzf python-dateutil-2.6.1.tar.gz
cd python-dateutil-2.6.1
python setup.py install
cd ..
安装成功后一般会看到类似输出:
Installed /usr/lib/python2.7/site-packages/python_dateutil-2.6.1-py2.7.egg
Finished processing dependencies for python-dateutil==2.6.1
3. 安装 python-magic
cd /home/squiduser
tar xzf python-magic-0.4.27.tar.gz
cd python-magic-0.4.27
python setup.py install
cd ..
4. 安装 s3cmd
cd /home/squiduser
tar xzf s3cmd-2.4.0.tar.gz
cd s3cmd-2.4.0
python setup.py install
安装完成后验证版本:
s3cmd --version
正常输出:
s3cmd version 2.4.0

六、验证 Python 模块是否正常
执行:
python - <<'PY'
for m in ("six", "dateutil", "magic"):
mod = __import__(m)
print(m, "OK", getattr(mod, "__file__", ""))
PY
正常情况下会看到:
six OK ...
dateutil OK ...
magic OK ...
如果 python-magic 报 libmagic.so 相关错误,需要安装系统库:
yum install -y file file-libs
七、配置 s3cmd
s3cmd 的配置文件一般位于:
~/.s3cfg
可以执行:
vi ~/.s3cfg
示例配置如下:
[default]
access_key = YOUR_ACCESS_KEY
secret_key = YOUR_SECRET_KEY
host_base = 10.xx.xx.xx:1234
host_bucket = 10.xx.xx.xx:1234
use_https = False
bucket_location = default
signature_v2 = False

说明:
access_key S3 访问 AK
secret_key S3 访问 SK
host_base S3 服务访问地址
host_bucket Bucket 访问地址模板
use_https 是否使用 HTTPS
bucket_location 默认区域
signature_v2 是否使用 V2 签名
注意不要把 access_key 写成 sccess_key,否则会导致认证失败(我当时写错了排查了半天)
如果你的对象存储需要 path-style 访问,也可以尝试:
host_bucket = 10.xx.xx.xx:xxxx/%(bucket)s
具体以现场对象存储服务兼容方式为准。
八、基础连通性验证
1. 查看 s3cmd 版本
s3cmd --version
2. 查看当前配置
cat ~/.s3cfg
确认以下字段正确:
access_key
secret_key
host_base
host_bucket
use_https
3. 查看已有 Bucket
s3cmd ls

九、Bucket 创建测试
创建测试 Bucket:
s3cmd mb s3://fztest-demo
查看 Bucket:
s3cmd ls

十、小文件上传下载测试
1. 创建测试目录
mkdir -p /tmp/s3test
mkdir -p /tmp/download
2. 创建小文件
echo "hello s3cmd" > /tmp/s3test/test1.txt
查看文件内容:
cat /tmp/s3test/test1.txt
输出:
hello s3cmd
3. 上传小文件
s3cmd put /tmp/s3test/test1.txt s3://fztest-demo/
4. 查看 Bucket 内容
s3cmd ls s3://fztest-demo/
正常可以看到:
s3://fztest-demo/test1.txt
5. 下载文件
s3cmd get s3://fztest-demo/test1.txt /tmp/download/
6. 校验内容
cat /tmp/download/test1.txt

十一、大对象上传测试
1. 生成 10MiB 测试文件
dd if=/dev/zero of=/tmp/s3test/test10m.bin bs=1M count=10
查看大小:
ls -lh /tmp/s3test/test10m.bin
2. 上传 10MiB 文件
s3cmd put /tmp/s3test/test10m.bin s3://fztest-demo/
3. 查看容量统计
s3cmd du s3://fztest-demo
4. 递归查看对象
s3cmd ls --recursive s3://fztest-demo

本次现场测试中,10MiB 对象上传成功,容量统计与递归列表结果均符合预期,截图中 10MiB 单对象上传速率约为 67.13 MB/s。该速率只能作为现场参考值,不等同于完整性能压测结论。
十二、大数据传输测试流程
如果需要进一步做大数据传输测试,可以增加 1GB、10GB、并发上传、下载校验等测试。
1. 创建 1GB 文件
dd if=/dev/zero of=/tmp/s3test/test1g.bin bs=1M count=1024
查看文件:
ls -lh /tmp/s3test/test1g.bin
2. 上传 1GB 文件
time s3cmd put /tmp/s3test/test1g.bin s3://fztest-demo/
3. 下载 1GB 文件
time s3cmd get s3://fztest-demo/test1g.bin /tmp/download/
4. MD5 校验
md5sum /tmp/s3test/test1g.bin
md5sum /tmp/download/test1g.bin
两个 MD5 值一致,说明文件传输完整。
十三、10GB 大文件测试
1. 生成 10GB 文件
dd if=/dev/zero of=/tmp/s3test/test10g.bin bs=1M count=10240
查看文件:
ls -lh /tmp/s3test/test10g.bin
2. 上传 10GB 文件
time s3cmd put /tmp/s3test/test10g.bin s3://fztest-demo/
3. 下载 10GB 文件
time s3cmd get s3://fztest-demo/test10g.bin /tmp/download/
4. 校验 MD5
md5sum /tmp/s3test/test10g.bin
md5sum /tmp/download/test10g.bin
十四、并发上传测试
创建多个 1GB 文件:
cd /tmp/s3test
cp test1g.bin test1g_1.bin
cp test1g.bin test1g_2.bin
cp test1g.bin test1g_3.bin
cp test1g.bin test1g_4.bin
执行 4 并发上传:
time (
s3cmd put /tmp/s3test/test1g_1.bin s3://fztest-demo/ &
s3cmd put /tmp/s3test/test1g_2.bin s3://fztest-demo/ &
s3cmd put /tmp/s3test/test1g_3.bin s3://fztest-demo/ &
s3cmd put /tmp/s3test/test1g_4.bin s3://fztest-demo/ &
wait
)
查看结果:
s3cmd ls --recursive s3://fztest-demo
十五、持续上传稳定性测试
可以循环上传同一个文件,观察是否出现中断、超时、速度下降等情况。
for i in {1..20}
do
echo "===== upload round $i ====="
time s3cmd put /tmp/s3test/test1g.bin s3://fztest-demo/test1g_round_${i}.bin
done
查看对象数量和容量:
s3cmd du s3://fztest-demo
s3cmd ls --recursive s3://fztest-demo
十六、测试过程中建议观察的系统指标
1. 查看 CPU 和内存
top
free -h
2. 查看网卡流量
sar -n DEV 1
3. 查看磁盘 IO
iostat -x 1
重点关注:
1. 上传速度是否稳定
2. 下载速度是否稳定
3. 是否出现超时
4. 是否出现认证失败
5. CPU 是否打满
6. 网卡是否跑满
7. 磁盘 IO 是否成为瓶颈
8. 大文件 MD5 是否一致
9. 并发上传是否存在失败对象
十七、清理测试数据
测试完成后,可以清理 Bucket 中的数据。
1. 删除所有对象
s3cmd del --recursive s3://fztest-demo
2. 删除 Bucket
s3cmd rb s3://fztest-demo
3. 最终确认
s3cmd ls
确认测试 Bucket 已删除。
我遇到的问题及处理
问题 1:安装 s3cmd 时自动访问 PyPI
报错示例:
Reading https://pypi.org/simple/python-magic/
Download error ...
No local packages or working download links found for python-magic
原因:
离线环境无法访问 PyPI,但 setup.py 会尝试自动下载依赖。
解决方法:
提前下载 python-magic、python-dateutil、six 源码包,先离线安装依赖,再安装 s3cmd。
问题 2:python-dateutil 安装时报 setuptools_scm
报错示例:
Could not find suitable distribution for Requirement.parse('setuptools_scm')
原因:
部分 python-dateutil 版本安装时需要 setuptools_scm,离线环境无法自动下载。
解决方法:
安装 python-dateutil-2.6.1。
问题 3:配置文件中 access_key 写错
错误示例:
sccess_key = xxxxx
正确写法:
access_key = xxxxx
问题 4:host_bucket 配置不兼容
可以先使用:
host_bucket = 10.xx.xx.xx:1234
如果访问 Bucket 异常,可以尝试:
host_bucket = 10.xx.xx.xx:1234/%(bucket)s
具体取决于对象存储服务使用 path-style 还是 virtual-hosted-style。
问题 5:python-magic 报 libmagic.so 找不到
解决方法:
yum install -y file file-libs
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)