银河麒麟 V10 离线安装 s3cmd 踩坑记录+存储负载均衡测试

文章目录

  • 一、背景说明
  • 二、测试环境
  • 三、离线安装包准备
  • 四、上传离线安装包
  • [五、安装 Python 依赖](#五、安装 Python 依赖)
    • [1. 安装 six](#1. 安装 six)
    • [2. 安装 python-dateutil](#2. 安装 python-dateutil)
    • [3. 安装 python-magic](#3. 安装 python-magic)
    • [4. 安装 s3cmd](#4. 安装 s3cmd)
  • [六、验证 Python 模块是否正常](#六、验证 Python 模块是否正常)
  • [七、配置 s3cmd](#七、配置 s3cmd)
  • 八、基础连通性验证
    • [1. 查看 s3cmd 版本](#1. 查看 s3cmd 版本)
    • [2. 查看当前配置](#2. 查看当前配置)
    • [3. 查看已有 Bucket](#3. 查看已有 Bucket)
  • [九、Bucket 创建测试](#九、Bucket 创建测试)
  • 十、小文件上传下载测试
    • [1. 创建测试目录](#1. 创建测试目录)
    • [2. 创建小文件](#2. 创建小文件)
    • [3. 上传小文件](#3. 上传小文件)
    • [4. 查看 Bucket 内容](#4. 查看 Bucket 内容)
    • [5. 下载文件](#5. 下载文件)
    • [6. 校验内容](#6. 校验内容)
  • 十一、大对象上传测试
    • [1. 生成 10MiB 测试文件](#1. 生成 10MiB 测试文件)
    • [2. 上传 10MiB 文件](#2. 上传 10MiB 文件)
    • [3. 查看容量统计](#3. 查看容量统计)
    • [4. 递归查看对象](#4. 递归查看对象)
  • 十二、大数据传输测试流程
    • [1. 创建 1GB 文件](#1. 创建 1GB 文件)
    • [2. 上传 1GB 文件](#2. 上传 1GB 文件)
    • [3. 下载 1GB 文件](#3. 下载 1GB 文件)
    • [4. MD5 校验](#4. MD5 校验)
  • [十三、10GB 大文件测试](#十三、10GB 大文件测试)
    • [1. 生成 10GB 文件](#1. 生成 10GB 文件)
    • [2. 上传 10GB 文件](#2. 上传 10GB 文件)
    • [3. 下载 10GB 文件](#3. 下载 10GB 文件)
    • [4. 校验 MD5](#4. 校验 MD5)
  • 十四、并发上传测试
  • 十五、持续上传稳定性测试
  • 十六、测试过程中建议观察的系统指标
    • [1. 查看 CPU 和内存](#1. 查看 CPU 和内存)
    • [2. 查看网卡流量](#2. 查看网卡流量)
    • [3. 查看磁盘 IO](#3. 查看磁盘 IO)
  • 十七、清理测试数据
    • [1. 删除所有对象](#1. 删除所有对象)
    • [2. 删除 Bucket](#2. 删除 Bucket)
    • [3. 最终确认](#3. 最终确认)
  • 我遇到的问题及处理
    • [问题 1:安装 s3cmd 时自动访问 PyPI](#问题 1:安装 s3cmd 时自动访问 PyPI)
    • [问题 2:python-dateutil 安装时报 setuptools_scm](#问题 2:python-dateutil 安装时报 setuptools_scm)
    • [问题 3:配置文件中 access_key 写错](#问题 3:配置文件中 access_key 写错)
    • [问题 4:host_bucket 配置不兼容](#问题 4:host_bucket 配置不兼容)
    • [问题 5:python-magic 报 libmagic.so 找不到](#问题 5:python-magic 报 libmagic.so 找不到)

一、背景说明

在一些政务、医院、企业内网环境中,服务器通常无法直接访问公网,因此无法通过 yum installpip install 在线安装工具。

本次场景是在 银河麒麟 V10SP3 测试机上,离线安装 s3cmd 2.4.0,然后通过 深信服 AD 硬件 IP 负载 访问后端 X10000 分布式存储资源池 的 S3 服务。

整体访问链路如下:

text 复制代码
源测试机 -> 深信服 AD 硬件负载 -> X10000 分布式存储资源池

二、测试环境

项目 内容
操作系统 银河麒麟 V10SP3
Python 版本 Python 2.7
S3 客户端 s3cmd 2.4.0
访问协议 S3 over HTTP
HTTPS False
负载设备 深信服 AD 硬件负载
后端存储 X10000 分布式存储资源池
测试 Bucket s3://fztest-demo

三、离线安装包准备

由于服务器无法访问公网,所以需要提前下载好源码包,然后拷贝到目标服务器。

本次使用的安装包如下:

text 复制代码
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 都安装失败)

四、上传离线安装包

将安装包上传到服务器目录,例如:

bash 复制代码
/home/squiduser

查看文件:

bash 复制代码
cd /home/squiduser

ll

示例:

text 复制代码
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

bash 复制代码
cd /home/squiduser

tar xzf six-1.16.0.tar.gz

cd six-1.16.0

python setup.py install

cd ..

2. 安装 python-dateutil

bash 复制代码
cd /home/squiduser

tar xzf python-dateutil-2.6.1.tar.gz

cd python-dateutil-2.6.1

python setup.py install

cd ..

安装成功后一般会看到类似输出:

text 复制代码
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

bash 复制代码
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

bash 复制代码
cd /home/squiduser

tar xzf s3cmd-2.4.0.tar.gz

cd s3cmd-2.4.0

python setup.py install

安装完成后验证版本:

bash 复制代码
s3cmd --version

正常输出:

text 复制代码
s3cmd version 2.4.0

六、验证 Python 模块是否正常

执行:

bash 复制代码
python - <<'PY'
for m in ("six", "dateutil", "magic"):
    mod = __import__(m)
    print(m, "OK", getattr(mod, "__file__", ""))
PY

正常情况下会看到:

text 复制代码
six OK ...
dateutil OK ...
magic OK ...

如果 python-magiclibmagic.so 相关错误,需要安装系统库:

bash 复制代码
yum install -y file file-libs

七、配置 s3cmd

s3cmd 的配置文件一般位于:

bash 复制代码
~/.s3cfg

可以执行:

bash 复制代码
vi ~/.s3cfg

示例配置如下:

ini 复制代码
[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

说明:

text 复制代码
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 访问,也可以尝试:

ini 复制代码
host_bucket = 10.xx.xx.xx:xxxx/%(bucket)s

具体以现场对象存储服务兼容方式为准。

八、基础连通性验证

1. 查看 s3cmd 版本

bash 复制代码
s3cmd --version

2. 查看当前配置

bash 复制代码
cat ~/.s3cfg

确认以下字段正确:

text 复制代码
access_key
secret_key
host_base
host_bucket
use_https

3. 查看已有 Bucket

bash 复制代码
s3cmd ls

九、Bucket 创建测试

创建测试 Bucket:

bash 复制代码
s3cmd mb s3://fztest-demo

查看 Bucket:

bash 复制代码
s3cmd ls

十、小文件上传下载测试

1. 创建测试目录

bash 复制代码
mkdir -p /tmp/s3test
mkdir -p /tmp/download

2. 创建小文件

bash 复制代码
echo "hello s3cmd" > /tmp/s3test/test1.txt

查看文件内容:

bash 复制代码
cat /tmp/s3test/test1.txt

输出:

text 复制代码
hello s3cmd

3. 上传小文件

bash 复制代码
s3cmd put /tmp/s3test/test1.txt s3://fztest-demo/

4. 查看 Bucket 内容

bash 复制代码
s3cmd ls s3://fztest-demo/

正常可以看到:

text 复制代码
s3://fztest-demo/test1.txt

5. 下载文件

bash 复制代码
s3cmd get s3://fztest-demo/test1.txt /tmp/download/

6. 校验内容

bash 复制代码
cat /tmp/download/test1.txt

十一、大对象上传测试

1. 生成 10MiB 测试文件

bash 复制代码
dd if=/dev/zero of=/tmp/s3test/test10m.bin bs=1M count=10

查看大小:

bash 复制代码
ls -lh /tmp/s3test/test10m.bin

2. 上传 10MiB 文件

bash 复制代码
s3cmd put /tmp/s3test/test10m.bin s3://fztest-demo/

3. 查看容量统计

bash 复制代码
s3cmd du s3://fztest-demo

4. 递归查看对象

bash 复制代码
s3cmd ls --recursive s3://fztest-demo

本次现场测试中,10MiB 对象上传成功,容量统计与递归列表结果均符合预期,截图中 10MiB 单对象上传速率约为 67.13 MB/s。该速率只能作为现场参考值,不等同于完整性能压测结论。

十二、大数据传输测试流程

如果需要进一步做大数据传输测试,可以增加 1GB、10GB、并发上传、下载校验等测试。

1. 创建 1GB 文件

bash 复制代码
dd if=/dev/zero of=/tmp/s3test/test1g.bin bs=1M count=1024

查看文件:

bash 复制代码
ls -lh /tmp/s3test/test1g.bin

2. 上传 1GB 文件

bash 复制代码
time s3cmd put /tmp/s3test/test1g.bin s3://fztest-demo/

3. 下载 1GB 文件

bash 复制代码
time s3cmd get s3://fztest-demo/test1g.bin /tmp/download/

4. MD5 校验

bash 复制代码
md5sum /tmp/s3test/test1g.bin

md5sum /tmp/download/test1g.bin

两个 MD5 值一致,说明文件传输完整。

十三、10GB 大文件测试

1. 生成 10GB 文件

bash 复制代码
dd if=/dev/zero of=/tmp/s3test/test10g.bin bs=1M count=10240

查看文件:

bash 复制代码
ls -lh /tmp/s3test/test10g.bin

2. 上传 10GB 文件

bash 复制代码
time s3cmd put /tmp/s3test/test10g.bin s3://fztest-demo/

3. 下载 10GB 文件

bash 复制代码
time s3cmd get s3://fztest-demo/test10g.bin /tmp/download/

4. 校验 MD5

bash 复制代码
md5sum /tmp/s3test/test10g.bin

md5sum /tmp/download/test10g.bin

十四、并发上传测试

创建多个 1GB 文件:

bash 复制代码
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 并发上传:

bash 复制代码
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
)

查看结果:

bash 复制代码
s3cmd ls --recursive s3://fztest-demo

十五、持续上传稳定性测试

可以循环上传同一个文件,观察是否出现中断、超时、速度下降等情况。

bash 复制代码
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

查看对象数量和容量:

bash 复制代码
s3cmd du s3://fztest-demo

s3cmd ls --recursive s3://fztest-demo

十六、测试过程中建议观察的系统指标

1. 查看 CPU 和内存

bash 复制代码
top
free -h

2. 查看网卡流量

bash 复制代码
sar -n DEV 1

3. 查看磁盘 IO

bash 复制代码
iostat -x 1

重点关注:

text 复制代码
1. 上传速度是否稳定
2. 下载速度是否稳定
3. 是否出现超时
4. 是否出现认证失败
5. CPU 是否打满
6. 网卡是否跑满
7. 磁盘 IO 是否成为瓶颈
8. 大文件 MD5 是否一致
9. 并发上传是否存在失败对象

十七、清理测试数据

测试完成后,可以清理 Bucket 中的数据。

1. 删除所有对象

bash 复制代码
s3cmd del --recursive s3://fztest-demo

2. 删除 Bucket

bash 复制代码
s3cmd rb s3://fztest-demo

3. 最终确认

bash 复制代码
s3cmd ls

确认测试 Bucket 已删除。

我遇到的问题及处理

问题 1:安装 s3cmd 时自动访问 PyPI

报错示例:

text 复制代码
Reading https://pypi.org/simple/python-magic/
Download error ...
No local packages or working download links found for python-magic

原因:

text 复制代码
离线环境无法访问 PyPI,但 setup.py 会尝试自动下载依赖。

解决方法:

text 复制代码
提前下载 python-magic、python-dateutil、six 源码包,先离线安装依赖,再安装 s3cmd。

问题 2:python-dateutil 安装时报 setuptools_scm

报错示例:

text 复制代码
Could not find suitable distribution for Requirement.parse('setuptools_scm')

原因:

text 复制代码
部分 python-dateutil 版本安装时需要 setuptools_scm,离线环境无法自动下载。

解决方法:

text 复制代码
安装 python-dateutil-2.6.1。

问题 3:配置文件中 access_key 写错

错误示例:

ini 复制代码
sccess_key = xxxxx

正确写法:

ini 复制代码
access_key = xxxxx

问题 4:host_bucket 配置不兼容

可以先使用:

ini 复制代码
host_bucket = 10.xx.xx.xx:1234

如果访问 Bucket 异常,可以尝试:

ini 复制代码
host_bucket = 10.xx.xx.xx:1234/%(bucket)s

具体取决于对象存储服务使用 path-style 还是 virtual-hosted-style。

问题 5:python-magic 报 libmagic.so 找不到

解决方法:

bash 复制代码
yum install -y file file-libs
相关推荐
大师兄66681 小时前
HarmonyOS 服务卡片开发之JS 卡片开发
javascript·华为·harmonyos·harmonyos6·formkit
rGzywSmDg2 小时前
如何在Dev-C++中选择TDM-GCC编译器
linux·jvm·c++
Irissgwe2 小时前
九、Linux信号机制(二)
linux·进程·可重入函数·volatile·sigchld信号·进程信号
程序猿追2 小时前
HarmonyOS 6.0 NEXT:基于 Map Kit 实现一款“手绘路线”骑行导航应用
华为·harmonyos
野熊佩骑2 小时前
一文读懂Nginx 之 Ubuntu使用apt方式安装Nginx官方最新版本
linux·运维·服务器·nginx·ubuntu·http
顶点多余2 小时前
多路转接--select /poll
运维·服务器
老毛肚2 小时前
微服务网关整合授权中心实现单点登录
运维·微服务·架构
小梦爱安全2 小时前
配置RIP动态路由协议
运维·网络
闫记康2 小时前
Linux学习day3
linux·服务器·学习