公开服务列表

游戏服务

  1. MCSM:MC、steam等游戏服务器管理平台
  • 访问方式:https://eoelab.org:1026
  • 说明:
    1. 支持游戏类型:Minecraft(Java/基岩版,全版本支持),steam联机游戏
    2. 支持开服或者加入现有服务器游玩,请加QQ群(945537763)
    3. 支持通过wine/兼容层运行的Windows下游戏服务器,但是没有计划支持Windows虚拟机作为节点

计算服务

  1. JupyterHub(提供广泛语言与开发环境的支持)
  • 访问方式:https://eoelab.org:1029
  • 使用方法:GitHub成为eoeair成员
  • 说明
    1. 目前可以持久化建立虚拟环境,具体用法参考 https://github.com/eoeair/jupyter
    2. JupyterHub默认提供交互式编程方法,务必注意那些有主函数等语言设计,你可以把整个notebook视作主函数,因此不需要在notebook内再次定义

开发服务

  1. Gitea:Git代码仓库,Devops,软件包仓库与镜像仓库
  1. runner: Gitea配套的自动化执行器
  • label(用于命中执行环境): runner runner_privileged
  • 说明:
    1. 默认支持CI/CD,CI请参考gitlea Action
    2. runner/runner_privileged执行环境是主机,主要用于docker镜像打包,注意不要在actions里添加任何setup动作,需要安装什么请反馈,会手动给主机添加
    3. runner_privileged与runner不同的是容器将以特权模式运行,这对dind是必须的

存储服务

  1. AList:AList网盘

RUSTDESK 中继服务器

ID服务器:eoelab.org

Key: G4OChznO8b8NHA5iPLuVKDQk5URpia+2NstLW8060vo=

IO Benchmark & ZFS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1.BW-R
fio -name=Seq_Read_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=read -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=5G -numjobs=1 -runtime=600 -filename=./test
2.BW-W
fio -name=Seq_Write_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=write -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=5G -numjobs=1 -runtime=600 -filename=./test
3.IOPS-R
fio -name=Rand_Read_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=1G -numjobs=1 -runtime=600 -filename=./test
4.IOPS-W
fio -name=Rand_Write_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=1G -numjobs=1 -runtime=600 -filename=./test
5.IOPS-Hybid
fio -name=Read_Write_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=randrw -rwmixread=70 -refill_buffers -norandommap -randrepeat=0 -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=600 -ioscheduler=noop -filename=./test
6.Throughput-R
fio -name=Read_BandWidth_Test -group_reporting -direct=1 -iodepth=32 -rw=read -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=1024k -size=5G -numjobs=1 -runtime=600 -filename=./test
7.Throughput-W
fio -name=Write_BandWidth_Test -group_reporting -direct=1 -iodepth=32 -rw=write -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=1024k -size=5G -numjobs=1 -runtime=600 -filename=./test

以下是测试集群的IO BenchMark数据

1
2
3
4
5
6
7
8
9
10
11
系统存储区域(local-zfs)
带宽
顺序读:679MB/S
顺序写:59.6MB/S
IOPS
随机读:24K
随机写:483
混合读写:读 1070 写 457
吞吐量
读:1984MB/S
写:50.5MB/S
1
2
3
4
5
6
7
8
9
10
11
nvme存储区域(bs_nsl)
带宽
顺序读:746MB/S
顺序写:281MB/S
IOPS
随机读:24.6K
随机写:4.64K
混合读写:读 5.3K 写 2.27K
吞吐量
读:2062MB/S
写:361MB/S

—-change_1—-

  1. global
    arc调整为缓存metadata,取消缓存all

  2. local-zfs

    1. 双ssd分区做镜像,设为slog设备,容量大小为1G
    2. 双ssd分区做镜像,设为special设备,容量为13.4G
  3. nvme

    1. 增加为三块磁盘改为raidz

—-over—–

1
2
3
4
5
6
7
8
9
10
11
系统存储区域(local-zfs)
带宽
顺序读:236MB/S
顺序写:64.4MB/S
IOPS
随机读:234
随机写:167
混合读写:读 137 写 60
吞吐量
读:184MB/S
写:116MB/S
1
2
3
4
5
6
7
8
9
10
11
nvme存储区域(bs_nsl)
带宽
顺序读:582MB/S
顺序写:157MB/S
IOPS
随机读:2.72K
随机写:2.37K
混合读写:读 1.99K 写 854
吞吐量
读:1939MB/S
写:784MB/S

—-change_2—-

  1. nvme
    1. raidz 分裂为raid1(bs_nsm),单磁盘(bs_nsl)

—-over—–

1
2
3
4
5
6
7
8
9
10
11
nvme存储区域(bs_nsl)
带宽
顺序读:547MB/S
顺序写:184MB/S
IOPS
随机读:2.61K
随机写:2.02K
混合读写:读 1.82K 写 777
吞吐量
读:1122MB/S
写:560MB/S
1
2
3
4
5
6
7
8
9
10
11
nvme存储区域(bs_nsm)
带宽
顺序读:633MB/S
顺序写:185MB/S
IOPS
随机读:2.50K
随机写:1.95K
混合读写:读 1.78K 写 758
吞吐量
读:1956MB/S
写:553MB/S

—-change_3—-

  1. Global
    1. 禁用透明压缩

—-over—–

1
2
3
4
5
6
7
8
9
10
11
系统存储区域(local-zfs)
带宽
顺序读:233MB/S
顺序写:59.5MB/S
IOPS
随机读:220
随机写:157
混合读写:读 114 写 47
吞吐量
读:96.8MB/S
写:93.9MB/S
1
2
3
4
5
6
7
8
9
10
11
nvme存储区域(bs_nsl)
带宽
顺序读:573MB/S
顺序写:184MB/S
IOPS
随机读:2.99K
随机写:2.02K
混合读写:读 1.82K 写 781
吞吐量
读:1126MB/S
写:523MB/S

总结 PVE中的ZFS

  1. 对于机械磁盘,需要启用透明压缩,固态不需要启用
  2. RAIDZ到RAID1的转变使性能更稳定
  3. ARC的all缓存有利于提高读IOPS,但是内存受限时,可以只使用metadata缓存

Nebulae开放云标准

目录

  1. IaaS
  2. PaaS
  3. SaaS
  4. 必要说明

IaaS

  1. 计算设施:通过虚拟化打包的计算资源(CPU+Mem)

    • Hypervisor(VMM)
      • KVM:基于内核的虚拟化
      • Firecracker:轻量级虚拟化运行环境
    • 操作系统层虚拟化
      • LXC:linux容器
    • 说明
      1. 如果您是为了学习Linux操作系统,一个简单的资源需求就是1C2G,即使你需要桌面也完全足够,但是我们更推荐您前往jupyter下的novnc环境
      2. 不支持跨CPU架构模拟,目前仅支持X86、AMD64架构
      3. Firecracker不支持包括PCIE设备直通在内的功能,这是为了满足轻量级的需要
      4. 操作系统层虚拟化仅支持Linux,由于会与主机共用内核,“特权容器”被禁止,允许在内部完成嵌套运行docker容器,有关于安全增强的方案是Firecracker
      5. 取消xen的原因是其对windows等使用全虚拟化方案不如直接使用kvm统一全虚拟化方案
  2. 数据设施:通过ceph提供提供较好的性能、可靠性和可扩展性的共享存储

    • Dashboard:基于Web-UI实现管理Ceph的功能
    • OSS(对象存储服务):兼容Amazon S3与Swift接口
      • 使用方法:在您需要的服务中搜索如何链接Amazon S3与Swift存储
    • 说明
      1. 存储资源选择指导
        • fs支持多节点读写,读延迟低,带宽表现好,尤其是较大的文件,但写延迟相对较高且延迟时间不稳定,适用于对I/O延迟不大敏感的文件读写,以及非海量的小文件存储支持
        • bs读写延迟都很低,适用于对I/O延迟要求较高,且无多个节点同时读写数据需求的应用,例如数据库
        • os是专门用于大数据存储的方案,根据数据与服务相分离的原则,数据能放入oss,就放入oss
        • 延迟时间不稳定指在连续高负载压力工作时,会有极少数IO出现慢响应,对于数据库服务,会破坏其正常工作
      2. Crush rule策略:用于制定数据分布的规则
        • 介质性能编码(device_class):
          • h s n 存储介质与协议,h代表机械磁盘(SAS/SATA协议),s代表固态磁盘(SATA协议),n也是固态磁盘(NVME协议)
          • s m l e 存储容量,s一般为1T以内,m为1-4T,l为4-12T,e为12T以上
          • h l 综合写入延迟与带宽,h设备代表延迟更低,带宽更高,同介质的读取速度通常是一致的
          • 新设备一般靠近底部设备编号
        • 存储可靠策略编码:
          • ec_ 表示使用纠删码,无ec_代表使用副本策略,其故障域为host层次,采用三副本或近似RAID5(2+1)的冗余策略
        • 混合设备策略:nvme作为四块机械OSD的WAL/DB,分配容量为4%,固态硬盘不分配WAL/DB
        • 附加功能后缀:
          1. _tem : 数据转移或临时策略使用和此后缀用于区分生产环境与测试环境
        • 最终Crush rule类似ec_hll hll等命名方式
      3. Pool接口:bs fs os
        • bs:块存储,接口提供rbd iscsi
        • fs:文件存储,接口提供 cephfs nfs
        • os:对象存储,接口提供s3 swift
        • 附加功能后缀:
          1. data:一个用于bs(在使用纠删码情况下)/fs的附加后缀,标识该存储池用于数据存储
          2. metadata:一个用于bs(在使用纠删码情况下)/fs的附加后缀,标识该存储池用于元数据存储
      4. 存储服务接口,Crush rule组合成为最终用户态名称,这样可以保证存储服务在多个策略中具备平滑层次,以满足多样的数据需求,例如bs_ec_hll fs_hll等命名方式
  3. 网络设施:通过SDN、Proxy提供网络资源

    • 内部代理服务器
    • 网络地址池
      • PaaS地址池
        • 默认网段:10.0.0.0/8,内部K8S网络隔离等由K8S管理
  4. IaaS集群联邦:单一主控集群统一管理多个数据中心

    • 数据中心:不依靠任何其他外部节点,数据中心内部服务完备
      1. 中心服务器集群:CSC,主要的服务中心,默认情况下是全局服务提供者
      2. 边缘服务器集群:ESC,主要的架构试验地,默认情况下不提供服务或保障
    • 说明:
      1. 云存储资源中块存储与文件存储不可跨数据中心网络使用,对象存储可以跨数据中心网络使用
      2. 数据中心外的节点可以作为计算节点加入联邦,默认情况下CSC会作为主控集群
      3. 节点主机名使用CSC-0 CSC-1命名方式

PaaS

  1. Kubernetes:一个用于大规模运行分布式应用和服务的开源容器编排平台

    • 负载类型:容器
    • 运行时:
      1. 默认: containerd
      2. 实验性的安全加固方案: Kata-Container
    • 负载部署方式
      1. Helm(Kubernetes的包管理器):自动化部署工作负载
      2. K8S支持的工作负载类型
    • 持久卷存储提供:
      1. 文件存储,ceph/cephfs-csi
      2. 块存储,ceph/rbd-csi
    • 网络提供:
      1. L4层负载均衡器:TCP/UDP流量管理
      2. ClusterIP:K8S单集群内网络互通
    • 说明:
      1. 块存储不支持多节点共享,文件系统允许
      2. 机密数据使用secret存储,配置文件使用configmap存储
      3. 实验性计划去除GPU Operator,提起Device Plugin合并
  2. PaaS集群联邦:单一云管平台统一管理多个K8S集群

    • 云管平台:Rancher
      • 访问方式:

SaaS

  1. 开发服务

    • Gitlea:Git代码仓库,Devops
      • 访问方式:
      • 使用方法:注册账户
  2. 计算服务

    • JupyterHub(提供广泛语言与开发环境的支持):
      • 访问方式:
      • 使用方法:访问上方的链接,如果您是第一次使用,随便输入用户名和密码创建一个新用户
      • 说明:
        1. 目前可以持久化建立虚拟环境,具体用法参考 https://github.com/ben0i0d/jupyter
        2. 我们不承诺jupyter内部数据的热可靠性,这并不是说我们会删除您的数据,而是指在可能的重大故障发生后,我们不保证热备,我们仅支持手动提取数据
        3. JupyterHub默认提供交互式编程方法,相关代码样例随附交互式编程样例,务必注意那些有主函数等语言设计,你可以把整个notebook视作主函数,因此不需要在notebook内再次定义
  3. MCSM:MC、steam等游戏服务器管理平台

    • 访问方式:
    • 支持游戏类型:Minecraft(Java/基岩版,全版本支持),steam
    • 说明
      1. 希望开服或者加入现有服务器游玩,请加QQ频道:9j65t20a74

必要说明

  1. 由于一些服务本身就不具备https访问的能力,因此在访问我们服务时,您会遇到http被自动填写为https,这是因为默认情况下启用了HSTS,以下是三种解决方案:
    • 如果您有两个浏览器,可以分别访问https与http服务
    • 如果您只有一个浏览器,可以清除浏览器对eoelab.org的记录与cookie
    • 使用隐私模式,隐私标签页,隐私窗口等访问(一般来说,是默认https,所以你可以在隐私条件下访问http),并且我们http类服务占比较小
  2. 如服务出现问题或提起新的诉求,请添加请加QQ频道:9j65t20a74,默认情况下仅在此接受反馈并下发通知

PVE+RANCHER:一种低成本的云集群方案

本文主要介绍我实验室当前使用的云服务集群,当前架构版号V24.1.28_1,以下架构均已通过生产环境验证并稳定运行至少6个月。

我们希望集群能够承担以下负载能力:

  1. 数据可靠,具有去单点故障能力、热备能力
  2. 弹性化扩缩容
  3. 完成包括GPU调度等问题

架构介绍

以下我按照IAAS,PAAS,SAAS层次介绍

IAAS层次

虚拟化方案:proxmox ve(KVM)

我们建议对于刚上手虚拟化的人,选择成熟可靠好上手的架构,不要选择openstack这样的大架构,根本玩不起来,我并不想介绍为什么不推荐ESXI,那样会带来争议,
我选择PVE单纯因为开源免费公开透明。

数据方案:

  1. 本地存储:ZFS

:要会用vdev,在进行容量更换,raid等级更换,用vdev非常方便,我们曾经把根系统变到64GU盘,又折腾到硬盘,然后又从500G raid1 换到300G raid1,完全不需要重装。

关于zfs改内存

  • 如果区域没有读性能需求,比如系统区域,我直接给512MB,对于备份区域,可以直接关闭了ARC
  • 如果区域有比较高的读性能需求,可以按照PVE默认来分配(内存的1/8),ARC对读取的提升是显而易见的

以下是IO测试数据,在一个双机械盘的ZFS上,机械盘为SAS 600G 15K

命令如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1. BW-R
fio -name=Seq_Read_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=read -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=5G -numjobs=1 -runtime=600 -filename=./test
2.BW-W
fio -name=Seq_Write_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=write -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=5G -numjobs=1 -runtime=600 -filename=./test
3.IOPS-R
fio -name=Rand_Read_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=1G -numjobs=1 -runtime=600 -filename=./test
4.IOPS-W
fio -name=Rand_Write_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=4k -size=1G -numjobs=1 -runtime=600 -filename=./test
5.IOPS-Hybid
fio -name=Read_Write_IOPS_Test -group_reporting -direct=1 -iodepth=128 -rw=randrw -rwmixread=70 -refill_buffers -norandommap -randrepeat=0 -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=600 -ioscheduler=noop -filename=./test
6.Throughput-R
fio -name=Read_BandWidth_Test -group_reporting -direct=1 -iodepth=32 -rw=read -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=1024k -size=5G -numjobs=1 -runtime=600 -filename=./test
7.Throughput-W
fio -name=Write_BandWidth_Test -group_reporting -direct=1 -iodepth=32 -rw=write -ioengine=libaio -refill_buffers -norandommap -randrepeat=0 -bs=1024k -size=5G -numjobs=1 -runtime=600 -filename=./test

结果如下

1
2
3
4
5
6
7
8
9
10
11
系统存储区域(local-zfs)
带宽
顺序读:679MB/S
顺序写:53MB/S
IOPS
随机读:24K
随机写:483
混合读写:读 1070 写 457
吞吐量
读:1984MB/S
写:50.5MB/S
  1. 共享存储:CEPH

  1. 如果真的准备用ceph,必须要有万兆网络

  2. PVE8装ceph比较方便,如果是PVE<=7,得用反向代理,因为默认是从download.proxmox下,你反向代理到中科大的Proxmox源。(你搜一下,用nginx就行)

  3. 如果需要ceph的高级功能(如RGW等),必须把ceph和PVE脱钩,也就是使用cephadm安装ceph。记得给podman配好代理,要不然拉不下来镜像。

CEPH配置建议

  1. 建议配置DB

注意ceph写入流程:客户端向主PG写,主PG向副本写,只要WAL写结束,写入就会ACK。

所以这就是为什么“DB要比block区域快,WAL区域比DB快”,日志设备快,写入完成就快,写IO延迟就小。但是实际上你不需要单独配置WAL,它会使用DB区域

DB大小:RBD需求就是block区域大小的1%-2%,对象存储RGW,就要4%。

我建议配置DB,因为我们之前写入延迟10%,配置以后,稳定降低到0.5%。

  1. 设备分类

我很喜欢CEPH的一个点就在于配合device class和crush rule可以让数据选择性落入我希望的设备中。

因为现实中包括我们实验室存储设备包括4t 7.2k hdd,300g 10k hdd,nvme等设备。

我们肯定希望对象存储扔到大容量机械盘,rbd放10k的高速盘,元数据放nvme。

所以简单方案就是,新建一个class叫hddl,然后新建crush rule,把rgw.data等不需要低延迟的数据区改成这个rule就行。

  1. 怎么将pve和cephadm配合使用

pve添加ceph存储即可

  1. 故障域

建议放host