一、背景说明

在一些政务、医院、企业内网环境中,服务器通常无法直接访问公网,因此无法通过 yum installpip 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.22.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-magiclibmagic.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
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐