SIDUS—操作系统极限重复数据删除解决方案

SIDUS(单实例通用系统分发)在 Centre Blaise Pascal(里昂高等师范学院,法国里昂)开发,该机构仅由一名管理员负责管理 180 个工作站。Emmanuel Quemener 于 2010 年 2 月启动了 SIDUS 项目,并显著减少了他管理这些工作站的工作量。SIDUS 现在已在里昂高等师范学院的超级计算中心 PSMN(Pôle Scientifique de Modélisation Numérique)投入使用。

借助 SIDUS,您可以在几秒钟内为新用户提供完整的功能环境。您可以探测损坏的计算机,而无需拆卸任何部件。您可以测试新设备,而无需在其上安装操作系统。当您管理数百个集群节点、工作站或自助服务站时,您可以让您的生活变得轻松得多。您可以大幅减少这些机器上操作系统所需的存储空间。

免责声明

SIDUS 不是 LTSP。LTSP 是一种通过 X11 或 RDP 访问服务器来简化瘦终端管理的解决方案。因此,所有的处理负载都在后端的服务器上。相反,SIDUS 充分利用(或部分利用,根据用户意愿)工作站的资源。只有操作系统是远程存储的。

SIDUS 不是 FAI。FAI 或 Kickstart 提供完全简化的安装,从而可以减少或完全免除管理。相反,SIDUS 在一个树状结构中提供一个单一系统,该系统集成了基础系统以及所有手动安装的应用程序。

SIDUS 非常灵活。在组织 IT 培训课程时,您可能希望为参与者提供特定的虚拟环境。但是,一旦他们下载了该环境,您就无法为他们修改它。SIDUS 为用户提供一个单一的给定环境,该环境可以随时轻松配置。

SIDUS 并非异类。SIDUS 使用任何发行版都可用的服务(DHCP、PXE、TFTP、NFSroot、DebootStrap 和 AUFS)。您只需了解这几个关键词即可安装 SIDUS。此外,SIDUS 还利用了 Live CD 中的发行版技巧。SIDUS 可在 Debian 上运行,一直可以追溯到 Etch 版本。

SIDUS 有多好?

SIDUS 是

  • 通用的:平台无关,x86 或 x86_64 架构。

  • 高效的:安装只需几分钟,启动只需几秒钟。

  • 节能的:只需一个核心,1GB 内存,40GB 磁盘空间和一个以太网 (Gbit) 网络。

  • 可扩展的:已在数百个节点上成功测试。

  • 多用途的:我们选择使用 Debian,因为它广泛集成了开源科学软件。

在您的系统上安装 SIDUS

您的系统需要进行一些准备才能托管 SIDUS。我们有几个服务可供部署客户端:DHCP、TFTP 和 NFS 服务器。现在,您要么与您的 IT 人员关系良好,要么能够自由访问定义明确的 LDAP 和 DNS 服务器

  • DHCP 服务为客户端提供一个 IP 地址,但传播两条互补信息:TFTP 服务器的 IP 地址(变量“next-server”)和 PXE 二进制文件的名称,通常称为 pxelinux.0。

  • 然后 TFTP 服务开始发挥作用。通过二进制文件 pxelinux.0、内核和客户端系统的启动,TFTP 实现了系统启动。如果您需要为客户端提供一些参数,您只需构建一个专用文件,其名称源自客户端的 MAC 地址(以 01 为前缀并将 : 替换为 -)。

  • NFS 服务现在进入循环:它通过其协议 (NFSroot) 提供系统的根目录。相应地,您将在此根目录中安装您的客户端系统——例如,/src/nfsroot/sidus。

在我们的配置中,我们分别使用了 isc-dhcp-server、tftpd-hpa 和 nfs-kernel-server 作为 DHCP、TFTP 和 NFS 服务器。让我们来研究一下这个配置。

对于 DHCP,配置文件 (/etc/dhcp/dhcpd.conf) 内容如下


next-server 172.16.20.251;
filename "pxelinux.0";
allow booting;

对于 TFTP,/srv/tftp 中有三个文件和一个目录 (pxelinux.cfg)


./pxelinux.0 
./vmlinuz-Sidus
./initrd.img-Sidus
./pxelinux.cfg

pxelinux.0 文件来自 syslinux-common 软件包。在 pxelinux.cfg 中,有一个名为 default 的文件。

要启动,您需要以下内容:内核 vmlinuz-Sidus、系统 initrd.img-Sidus 和服务器 NFSroot 10.13.20.13,挂载点为 /srv/nfsroot/sidus。

下面是一个启动文件示例。它接受两个输入:tmpfs 和 iscsi(我们稍后会回到 iscsi 输入)


DEFAULT tmpfs

LABEL tmpfs
KERNEL vmlinuz-Sidus
APPEND console=tty1 root=/dev/nfs
    initrd=initrd.img-Sidus
    nfsroot=10.13.20.13:/srv/nfsroot/sidus,
    rsize=8192,wsize=8192,tcp ip=dhcp aufs=tmpfs

LABEL iscsi
KERNEL vmlinuz-Sidus
APPEND console=tty1 root=/dev/nfs
    initrd=initrd.img-Sidus
    nfsroot=10.13.20.13:/srv/nfsroot/wheezy64,
    rsize=8192,wsize=8192,tcp ip=dhcp aufs=iscsi
    ISCSI_TARGET_IP=10.13.20.14
    ISCSI_INITIATOR=iqn.2013-04.zone.sidus.target:
    default root=LABEL=ISCSI

关于 NFS 服务器,它在文件 /etc/exports 中占用一行来配置它


/srv/nfsroot/sidus
10.13.20.0/255.255.255.0(ro,no_subtree_check,async,no_root_squash)

在这里,我们打开对 IP 地址在 10.13.20.1 和 10.13.20.254 之间的工作站的只读访问。

一旦您配置了这三个服务(DHCP、TFTP 和 NFS),您就可以安装完整的 SIDUS。请注意,您还需要用户帐户的根目录(通过 NFSv4)以及启用其身份识别/验证的进程(通过 LDAP 或 Kerberos)。我们已在由第三方服务器提供这些服务的环境中以及独立环境中部署了 SIDUS。安装带有 SSL 的 OpenLDAP 服务器或 Kerberos 服务器是题外话,因此我们仅显示我们基础架构的客户端配置文件(再次,LDAP 用于身份识别/验证,NFSv4 用于用户文件夹)。

使用 Debootstrap 安装 Debian 基础系统

借助 Debootstrap,您可以在额外的根位置安装系统。Debootstrap 需要您指定参数,例如安装根目录、硬件架构、发行版以及用于从 Debian 全球镜像站点下载的 FTP 或 HTTP Debian 存档。

警告:这里我们开始涉及 Debian 特有的内容。Debootstrap 是所有类似 Debian 的发行版(通常在 Ubuntu 上可用)的常用工具。不过,在类似 Red Hat 的发行版上实现它也并非难事。有一个 Fedora 的克隆版本称为 febootstrap;但我们尚未对其进行测试。

Debootstrap 还接受存档列表作为输入——众所周知,Debian 非常注重区分主存档区域与 contrib 和 non-free 区域——要包含的软件包列表和要排除的软件包列表。我们希望可以指定后两个列表,但您无法使用 Debootstrap 处理所有事情。我们从一开始就安装了一组我们认为必要的工具(例如内核、一些固件和审计工具)。

我们定义了与 SIDUS 系统根目录对应的环境变量。我们定义了一个命令,该命令可以通过 chroot 执行命令,并为软件包安装指定特定选项。变量 $MyInclude 对应于您想要的软件包的(逗号分隔)列表,而 $MyExclude 对应于您不想要的软件包的列表


export SIDUS=/srv/nfsroot/sidus
time debootstrap --arch amd64
    --components='main,contrib,non-free'
    --include=$MyInclude --exclude=$MyExclude
    wheezy $SIDUS http://ftp.debian.org/debian
继续安装之前的注意事项

运行上述命令后,您应该稍微谨慎一些。Debian 软件包通常在安装后启动。您需要定义一个 hook 来禁止服务启动。安装完成后,您可以删除此 hook


printf '#!/bin/sh\nexit 101\n' >
    ${SIDUS}/usr/sbin/policy-rc.d
chmod +x ${SIDUS}/usr/sbin/policy-rc.d

某些软件包需要访问进程列表、系统、外围设备、外围设备指针和虚拟内存。因此,您应该将这些主机系统文件夹的挂载绑定到 SIDUS


alias sidus="DEBIAN_FRONTEND=noninteractive chroot
    ${SIDUS} $@"
sidus mount -t proc none /proc
sidus mount -t sysfs sys /sys
mount --bind /run/shm ${SIDUS}/run/shm
mount --bind /dev/pts ${SIDUS}/dev/pts
安装其他软件包(科学库)

为了简化安装同一系列软件包的过程,Debian 提供了元软件包。在我们的例子中,我们对科学软件包感兴趣:它们的名称以“science”为前缀。例如,我们有“science-chemistry”,包括所有化学软件包。您只需一个命令即可安装所有科学软件包


time sidus apt-get install --install-suggests -f
    -m -y --force-yes science-*

因为我们讨论的是一个全功能操作系统,所以我们还安装了建议的软件包:--install-suggests 选项从 Wheezy 版本开始可用(发布于 2013 年 5 月 5 日)。

在安装过程中,最耗时的阶段是下载软件包和配置某些组件(Perl 和 LaTeX)。在最佳情况下,一个 32GB 的完整树需要 45 分钟。为这种安装狂热付出代价是值得的。某些软件包安装不顺利,您可能需要清除某些软件包,例如 M*tlab 安装程序


time sidus apt-get purge -y -f --force-yes matlab-*
本地环境

通常,您需要使系统适应本地环境(身份验证和用户共享)。默认设置为美国,因此您可能需要配置

  • ${SIDUS}/etc/locale.gen。

  • ${SIDUS}/etc/timezone。

  • ${SIDUS}/etc/default/keyboard。

对于 LDAP 身份验证,您可能需要配置:${SIDUS}/etc/nsswitch.conf、${SIDUS}/etc/libpam_ldap.conf、${SIDUS}/etc/libnss-ldap.conf 和 ${SIDUS}/etc/ldap/ldap.conf。

至于 NFS 用户文件夹的挂载

  • ${SIDUS}/etc/default/nfs-common、${SIDUS}/etc/default/idmapd.conf 和 ${SIDUS}/etc/fstab(对于 NFSv4)。

  • ${SIDUS}/etc/fstab(对于 NFSv3)。

设置启动顺序

如何在不复制 SIDUS 的情况下共享它?我们发现最佳解决方案是通过 Live CD。启动顺序包括您需要的两个层——即,一个只读层(对于 Live CD 上的介质和我们案例中的 NFS)和一个读写层(对于 TMPFS 上的介质)。这两层通过 AUFS(UnionFS 的后继者)链接。所有事情都由启动时的单个 hook(名为 rootaufs 的脚本)处理。它分五个步骤操作

  1. 创建临时文件 /ro、/rw 和 /aufs。

  2. 将 NFSroot 的根目录从原始挂载点移动到 /ro。

  3. 挂载本地或远程分区。

  4. 将 /ro 和 /rw 叠加到 /aufs 中。

  5. 将 /aufs 移动到原始挂载点。rootaufs 进入 ${SIDUS}/etc/initramfs-tools/scripts/init-bottom。

原始脚本的灵感来自 Nicholas A. Schembri 的 rootaufs 项目。我们对其进行了大幅修改,以适应我们的基础架构。一个版本可在 http://www.cbp.ens-lyon.fr/sidus/rootaufs 上找到


wget -O
    ${SIDUS}/etc/initramfs-tools/scripts/init-bottom
    http://www.cbp.ens-lyon.fr/sidus/rootaufs

系统尚未正常运行。您需要创建一个特定于您的 NFS 启动的 initrd。在 ${SIDUS}/etc/initramfs-tools/modules 中添加 aufs,并在 ${SIDUS}/etc/initramfs-tools/initramfs.conf 中强制 eth0 作为 DEVICE


sidus update-initramfs -k all -u

然后,您只需在定义中复制内核和引导加载程序即可


cp ${SIDUS}/vmlinuz /srv/tftp/vmlinux-Sidus
cp ${SIDUS}/srv/nfsroot/boot/initrd
    /srv/tftp/initrd-Sidus

如何在保持从一次启动到下一次启动的给定配置的同时利用 SIDUS?在每个节点上单独挂载 NFS 非常耗费资源。最好在每个节点上挂载 iSCSI。

最初,我们研究了如何提供第二个读写模式的 NFS 共享,以确保客户端相关更改从一次启动到下一次启动的持久性。尽管此版本功能齐全,但需要原子化的 NFS——每个客户端一个。这对服务器来说是不可持续的。

因此,我们决定采用另一种解决方案来确保持久性。我们为每个客户端创建一个 iSCSI 共享。用于挂载 iSCSI 磁盘的设置在命令行中定义。

因此,我们使用来自 iSCSI 技术的网络驱动器。在配置文件 /srv/tftp/pxelinux.cfg/default 中,我们有定义 LABEL=iscsi。每个 SIDUS 客户端都需要自己的 iSCSI 存储空间以确保持久性。为了简单起见,在 initrd 启动序列中,SIDUS 客户端获取带有各自 IP 的卷。rootaufs 文件包含默认的登录名/密码。

一些技巧

  • 擦除 /etc/hostname 以通过 DHCP 设置主机名。

  • 使用硬编码定义设置 /etc/resolv.conf。

  • 在 /etc/network/interfaces 中定义一个环回。

  • 更改 GDM3 的启动,使其仅在 NSCD 启动后启动。

  • 设置 /etc/security/limits.conf(在高性能计算环境中至关重要)。

  • 使用来自用户帐户 NFS 服务器的输入设置 /etc/fstab。

  • 对于基于 VirtualBox 的虚拟系统,在 SIDUS 系统中安装 VBoxLinuxAdditions.run。

  • 对于具有 InfiniBand 卡的系统,强制在 /etc/modules 中加载模块并重新生成 initrd。在 /etc/rc.local 中,执行一个脚本,该脚本获取以太网 IP 地址并为 InfiniBand 卡构建 IP 地址。

  • 对于具有 NVIDIA 卡的系统:对于大多数 NVIDIA 卡,Debian Wheezy 提供的软件包允许您安装必要的专有驱动程序以及 OpenGL、Cuda 和 OpenCL 库。如果您想使用 AMD 的 OpenCL ICD(可安装客户端加载器)来同时操作处理器和图形卡,请务必小心。为了能够做到这一点,我们必须从头开始安装整个环境——驱动程序、Cuda 和 OpenCL。

  • 对于具有 AMD ATI 卡的系统:对于大多数 ATI 卡,Debian Wheezy 提供的软件包允许您安装必要的专有驱动程序以及 OpenGL、Cuda 和 OpenCL 库。

目前在 CBP,我们在需要持久性的 SIDUS 工作站上使用“NFSroot + iSCSI = AUFS”技术,例如 DiStoNet 节点。否则,我们使用“NFSroot + TMPFS = AUFS”。

安装总结

我们卸载安装所需的所有系统文件夹


umount ${SIDUS}/run/shm
umount ${SIDUS}/dev/pts
sidus umount /proc/sys/fs/binfmt_misc
sidus umount /proc
sidus umount /sys

我们激活启动守护进程


rm -f ${SIDUS}/usr/bin/policy-rc.d
cp /usr/sbin/start-stop-daemon
    ${SIDUS}/usr/sbin/start-stop-daemon

我们删除所有由安装过程启动的进程引用


rm -r ${SIDUS}/run/* ${SIDUS}/tmp/*

这会清除所有与 SIDUS 相关的进程。

适应异构性

计算机集群可能由集群节点(具有快速网络设备)、工作站(具有嵌入式 GPU)或虚拟机(需要数据共享和 GPU 加速)组成。对于大型集群,您不需要持久性。您应该使用启动脚本、单独的 SIDUS 树或安装第三方组件。

管理系统不如安装系统那么容易。但是,安装系统所获得的收益远远超过了管理系统所带来的痛苦。借助 SIDUS,每个管理阶段都遵循安装机制:防止启动和挂载系统文件夹。

管理技术与初始安装的技术类似。我们使用脚本,以便在 SIDUS 中执行的命令被预操作/后操作包围。我们自动(通常用于更新)或手动使用此脚本。归根结底,这些额外的命令与我们获得的收益相比微不足道。我们现在有几个(许多)工作站与给定的基本系统完全相同。其他好处

  • SIDUS 适用于用户工作站。可以将单个工作站视为共享的。我们从十几个内存增强和超频的 Neoware 轻客户端开始。我们现在大约有 20 个这样的客户端。

  • SIDUS 适用于集群节点。在 2010 年 3 月,我们对 24 个节点进行了概念验证。如今,SIDUS 为 86 个永久节点提供服务,这些节点分布在四种不同的硬件架构上。

  • SIDUS 适用于虚拟工作站。自 2011 年以来,约瑟夫·傅里叶大学每年都会举办关于科学计算的暑期学校。在为期十天的繁忙日程中,学生们进行实践培训。因此,有必要在短时间内为他们提供同质的环境。提供两个虚拟镜像:一个持久镜像,他们可以在暑期学校之后使用,另一个通过 SIDUS 提供。这样,教师可以日复一日地调整材料和活动。自 2012 年夏天以来,该解决方案也已在里昂高师化学实验室中使用。

  • SIDUS 适用于可疑工作站。通过网络启动可以调查关机系统的海量存储。不需要 Live CD——它总是缺乏您理想的取证工具。

  • SIDUS 适用于借用工作站。硬件制造商通常提供评估设备。在最新设备上安装阶段可能很乏味。使用 SIDUS,系统启动就像在其他(正在使用的)设备上一样——例如,20 个节点只需几分钟。

结论

谁应该使用 SIDUS 以及为什么?

  • 用户:您可以选择要在其上启动工作站的资源。因此,工作站可以随意分段。SIDUS 的 VirtualBox 版本已在 Linux、MS Windows 和 Mac OS 上成功测试。GPU 加速和与主机的共享可用。用户发现自己与节点处于相同的环境中。这使得代码集成变得异常容易。性能方面,VirtualBox 的虚拟化损失在 10% 到 20% 之间,而 KVM 的虚拟化损失约为 5%。

  • 管理员:给定的操作会传播到整个基础设施,就像简单地在 SIDUS 树上同步一样。全功能系统的安装需要几十分钟。为了解决系统之间的细微差异,简单的脚本或 puppet 就可以完成这项工作。对于更重要的差异,只需构建另一个 SIDUS 树即可。SIDUS 树甚至可以使用快照工具(LVM 或更好的是 ZFSonLinux)立即克隆。

  • 为了实验:SIDUS 环境为科学家和系统工程师提供了一个进行可重复实验的框架。在同一 SIDUS 基础上启动的两个节点确实运行着完全相同的系统。这样,即使工作站实际上并不相同,仍然可以进行相关的测试。

资源成本是多少?为了了解情况,CBP 的集群服务器(也是网关)托管 DHCP、DNS、TFTP 和 NFS 服务,以及批处理服务器 OAR。当启动整个基础设施(88 个节点)时,NFS 服务器的负载为 900Mb/s。

总而言之,您会希望在各种环境中使用 SIDUS,无论是高性能计算节点、工作站还是虚拟机。SIDUS 为用户和管理员提供了前所未有的灵活性。它非常节能且传播速度非常快,您将离不开它!

加载 Disqus 评论