EOS 中基于 GeoTag 的存取策略


目录

  1. GeoTags
    1. 存储节点标签
    2. 客户端标签
  2. 调度策略
    1. 文件写入
    2. 文件读取
  3. 基于 GeoTag 的访问性能测试
    1. 测试准备
    2. 测试方案
      1. 文件写入
      2. 文件读取
    3. 测试结果
      1. 文件写入
      2. 文件读取
    4. 测试结论
  4. 基于 XrootD Cache Proxy 的访问测试
    1. 测试准备
    2. 测试方案
      1. 文件读取
    3. 测试结果
      1. 文件读取
    4. 测试结论

GeoTags

存储节点标签

1
2
3
4
### file: /etc/sysconfig/eos[_env]
export EOS_GEOTAG="beijing"
### or
export EOS_GEOTAG="daocheng"

客户端标签

1
2
3
4
5
6
7
$ eos vid -h
...
vid set geotag <IP-prefix> <geotag> : ...
### default tag
$ eos vid set geotag default beijing
### 1.1.*.* daocheng
$ eos vid set geotag 1.1. daocheng

调度策略

文件写入

EOS 调度器会选择一个 FS 群组,尽量根据客户端的 GetTag 匹配一个存储位置。

1
2
### enforce location matching geotag when writing
$ eos space config default space.geo.access.policy.write.exact=on

文件读取

调度器会尽量将客户端与具有相同 GeoTag 的 replica 位置相匹配。 不保证距离最近的副本会一直被选择(95%)。 如果要强制进行位置匹配,可以设置如下 tag:

1
2
### enforce location matching geotag when reading
$ eos space config default space.geo.access.policy.read.exact=on

基于 GeoTag 的访问性能测试

测试准备

  • EOS 测试环境: @beijing (MGM & FST), @daocheng (FST)
  • EOS 副本设置:beijing & beijing, beijing & daocheng , daocheng & daocheng 双副本
  • EOS GeoTag 设置:基于 IP, beijing & daocheng 两个 GeoTag
  • EOS 客户端: 一个 @beijing,一个 @daocheng

每种读写测试均进行 10 次,取读写速度的平均值。

测试方案

文件写入

  • 在 beijing 客户端写入测试文件,记录写入速度,检查是否在 daocheng 有副本
  • 在 daocheng 客户端写入测试文件,记录写入速度,检查是否在 beijing 有副本

文件读取

  • 在 beijing 客户端访问测试文件,记录读取速度,检查是否是访问的 beijing 的副本
  • 在 daocheng 客户端访问测试文件,记录读取速度,检查是否是访问的 daocheng 的副本

测试结果

文件写入

客户端以 FUSE 的方式挂载 EOS 到 /eos/ 目录。分别在 beijing 和 daocheng 以 dd 方式写入文件。

1
2
3
4
5
$ cd /eos/user/c/ceph/
$ for i in {0..9}; do
dd if=/dev/urandom of=test${i}.img bs=1M count=5120;sync;
eos file info /eos/user/c/ceph/test${i}.img --fullpath;rm -f test${i}.img;
done

测试结果如下,unit MB/s:

location Replica Max Min Mean
beijing beijing+daocheng 8.0 6.8 7.5
daocheng beijing+daocheng 8.6 7.5 8.0
beijing beijing
daocheng daocheng 320?

文件读取

1
2
3
$ for i in {0..9};do
xrdcp -f -d 1 ${EOS_MGM_URL}//eos/user/c/ceph/test${i}.img .; rm -f test${i}.img
done

测试结果如下,unit MB/s:

location Replica target Max Min Mean
beijing beijing+daocheng beijing 113.8 111.3 112.55
daocheng beijing+daocheng daocheng 232.7 146.3 166.11
daocheng beijing beijing 10.30 10.08 10.16
beijing daocheng daocheng

测试结论

  • 基于 GeoTag 的调度暂时不会完全匹配相同的 tag,即使设定了强制匹配规则,这可能是 EOS 设置的原因
  • FST 设置成 1 beijng + 1 daocheng 的 group 模式, 在写入文件时,会保证 beijing & daocheng 双副本
  • 从 daocheng 访问 beijing & daocheng 时,有可能访问到 beijing 的副本, 可能能是 EOS 设置的原因

基于 XrootD Cache Proxy 的访问测试

测试准备

  • EOS 测试环境: @beijing (MGM & FST),@daocheng (XrootD Cache Proxy)
  • EOS 副本设置: beijing 双副本
  • EOS GeoTag 设置:基于 IP, beijing & daocheng 两个 GeoTag
  • EOS 客户端:两个@daocheng, 一个做 XrootD Cache Proxy, 一个用于读写访问
  • XrootD Cache Proxy 两种模式: Disk Cache and Memory Cache

测试方案

每种读取测试均进行 10 次,取读写速度的平均值,每个文件大小为 512MB 和 5G。

文件读取

  • 在 daocheng 客户端通过代理访问测试文件,记录读取速度
  • 在 daocheng 客户端再次通过代理访问测试文件,记录读取速度

测试结果

使用 Disk Cache 模式第二次读取的时候,对代理和客户端进行了内存缓存清理。

1
$ sync; echo 3 > /sync; echo 3 > /proc/sys/vm/drop_caches

文件读取

  1. 从 daocheng 读取 beijing 的文件 (500MB):
mode 1st Max 1st Min 1rs Mean 2nd Max 2nd Min 2nd Mean
Disk Cache 11.38 10.24 10.95 512 512 512
Mem Cache 512?
  1. 从 daocheng 读取 beijing 的文件 (5GB)
mode 1st Max 1st Min 1rs Mean 2nd Max 2nd Min 2nd Mean
Disk Cache 5.095 ? 5.095 ? 5.095? 341.3 301.2 320
Mem Cache 320?

测试结论

  • Disk Cache 模式是基于路径而不是 md5sha256 等哈希值的文件代理缓存
  • 大文件会缓存到硬盘上,小文件同时会缓存到内存中
  • 文件重命名或移动后,访问新的文件会重新进行缓存
  • 文件被修改或删除后,若有缓存则会直接返回缓存的文件,可能一定时间后才会检查文件状态
  • 不确定是否有自动清理功能,或者要手动进行清理空间 使用 pfc.diskusgage 指定使用空间警戒线