MILLE-XTERM 和 LTSP

作者:Francis Giraldeau

基于 Linux 的 X 终端以其经济实惠的计算方式、赋予旧硬件第二次生命以及减轻管理负担而闻名。如果您曾经有过使用 Linux X 终端的想法,您可能熟悉 Linux 终端服务器项目 (LTSP),如图 1 所示。LTSP 服务器非常适合小型工作组或教室。然而,为了部署更多数量的终端,例如数千个,当前的 LTSP 模型遇到了可扩展性问题。

MILLE-XTERM and LTSP

图 1. LTSP 简单网络配置

MILLE-XTERM 项目的主要目标是

  • 无限的可扩展性。

  • 集中式 X 终端管理。

  • 增强的用户体验。

MILLE-XTERM 项目将集群概念应用于 X 终端基础设施,以实现这些目标。

MILLE 项目由加拿大公共机构和魁北克省的学区资助。MILLE 的意思是“教育的自由软件基础设施模型”,目标是教育机构。它由四个子项目组成:一个门户网站(基于 uportal)、一个开源中间件堆栈、一个包含 Windows/Mac 免费软件的 CD,以及最终的 MILLE-XTERM(本文的主题)。

MILLE-XTERM 集群概述

该解决方案需要将服务器集中在安全、空调的计算机房中,以形成终端服务器集群。如图 2 所示,该集群有四个主要组件。第一个是引导服务器,它提供 DHCP 和 TFTP 服务,并通过 NFS 用作终端优化的基础系统。接下来是配置器,它从 SQL 数据库生成 lts.cfg 配置文件。然后终端查询负载均衡器,负载均衡器反过来寻找集群中负载最轻的应用服务器。然后出现选定的应用服务器登录屏幕,用户在成功身份验证后即可开始使用桌面、浏览器、办公套件和其他应用程序。

MILLE-XTERM and LTSP

图 2. 集群 LTSP 网络图

MILLE-XTERM 依赖于中央文件和身份验证服务,这些服务为用户在每个应用服务器上提供相同的帐户和文件。开源选择是用于用户主目录的 NFS 和用于目录服务的 OpenLDAP。它也可以通过额外的配置集成到 Novell 或 Windows 环境中。

与 LTSP 不同,不需要单独的网络专门用于终端。它们可以与其他 PC 共享 LAN。然而,可靠的网络基础设施至关重要。在通常的使用情况下,每个终端平均产生 1Mb/秒的 X11 流量。应避免使用低端集线器;具有全双工功能的管理型交换机确实会带来改变。

与 LTSP 不同,每个组件都由 RPM 构建;系统管理员可以使用标准软件包管理器工具轻松添加功能和本地应用程序。发行版的 init 脚本被标准的 LTSP 脚本替换。我们目前使用 Mandriva 2006 作为基础发行版,尽管也可以支持其他发行版。

终端的引导服务器

引导服务器主要是一个只读 NFS 服务器。可选地,它可以提供 DHCP、TFTP 和 NBD 交换服务。xtermroot 包含一个基本系统和一个 X 服务器。使用多个引导服务器,很容易定期在每个引导服务器上 rsync xtermroot。然后,无论终端使用哪个引导服务器,都以统一的方式启动。

引导方法

MILLE-XTERM 支持不同的引导方法:CD-ROM、本地硬盘驱动器、闪存盘、Etherboot 或 PXE。每种引导方法都有其优点和缺点。

PXE 和 Etherboot 依赖于 TFTP 来传输用于引导过程的初始文件。它简化了部署,因为终端本身不存储任何配置。但是,通过 TFTP 同时启动数百个客户端可能会导致传输错误,从而导致引导问题。

另一种选择是使用 16MB IDE 闪存盘,其中包含内核、initrd 和 grub。闪存盘在终端启动时自动更新。该磁盘仅在启动时使用,不包含移动部件。

控制配置

无盘终端需要一种存储配置数据的方法,例如屏幕分辨率和可用打印机。在 LTSP 下,一个名为 lts.conf 的中央文件存储终端的配置,并且必须手动编辑。对于数千个终端,您需要一个分层数据库——这就是配置器的目的。

此组件用 PHP 编写,并具有两个接口。第一个接口专用于终端。在引导过程中,终端使用其 MAC 地址作为参数从服务器请求其配置。服务器生成相应的配置,并以标准 lts.conf 格式将其发送到终端。围绕 getltscfg 命令的包装器确保与其他 LTSP 脚本的向后兼容性。

另一个接口允许管理员通过 Web 浏览器管理终端的配置。管理员可以按组分层组织终端,并根据特定标准(例如位置或硬件类型)应用配置。但配置器还有另一个功能。它旨在与 links(一个控制台文本浏览器)一起使用,如图 3 所示。终端可以在不需要运行 X 服务器的特殊管理模式下启动。要在此模式下启动,请将选项 mode=admin 附加到引导加载程序配置中的内核选项。然后,使用终端配置器 URL 和 MAC 启动 links。管理员可以直接更改终端设置。完成后,终端重新启动并接收其新配置。

MILLE-XTERM and LTSP

图 3. 基于 Xterm 的管理系统

配置器对于构建终端清单也很有用。硬件信息在引导过程中发送到配置器。管理员可以生成有关终端状态的报告。此外,每次连接到配置器的操作都会被记录下来,然后可以进行分析,以确定终端使用情况、用户登录信息等等。您知道经理们喜欢报告!

应用服务器之间的负载均衡

当终端启动时,它会从应用服务器请求显示。为了将用户分配到可用的应用服务器上,MILLE-XTERM 提供了负载均衡器。负载均衡器的第一个版本(概念验证)需要五行 PHP 代码,并从应用服务器的静态列表中返回一个随机地址。虽然简单,但这种方法有一些缺点。首先,应从列表中删除脱机服务器,并且不应将其返回给终端。其次,为了提供可靠的负载均衡,必须考虑几个因素,例如处理器数量、速度和负载平均值。因此,一个更强大和完整的 Python 系统取代了最初的原型(图 4)。负载均衡器代理在每个应用服务器上运行,收集有关应用服务器状态的数据,并等待负载均衡器服务器请求。均衡器也是一个 Python 脚本,在引导服务器上运行。它联系每个负载均衡器代理以确定其状态,并计算每个服务器的权重。权重越大表示服务器负载越轻,并且在统计上更频繁地被选择接受新用户。然后,终端对应用服务器的请求将提示负载均衡器服务器在加权列表中获取随机选择的应用服务器。

MILLE-XTERM and LTSP

图 4. LTSP 集群的负载均衡

让我们检查一个具体的示例:三个应用服务器和两个引导服务器。在每个应用服务器上安装 mille-xterm-lbagent 软件包,并在每个引导服务器上安装 mille-xterm-lbserver。确保相应的服务 lbagent 和 lbserver 已启动。在文件 /etc/mille-xterm/lbsconfig.xml 中为每个应用服务器添加一个节点条目

<?xml version="1.0"?>
 <lbsconfig>
  <nodes>
   <group default="true" name="PROD">
    <node address="http://10.0.0.1:8001" name="xapp1"/>
    <node address="http://10.0.0.2:8001" name="xapp2"/>
    <node address="http://10.0.0.3:8001" name="xapp3"/>
   </group>
  </nodes>

将此文件复制到每个引导服务器上。启动浏览器并输入负载均衡器的 URL 以查看其运行情况。默认情况下,lbserver 侦听端口 8008,因此不要忘记将端口附加到 URL:https://:8008/。将显示所选应用服务器的 IP 地址。按刷新按钮以获取新的 IP,您就完成了!

获得最佳用户体验

MILLE-XTERM 项目专注于用户体验。MILLE-XTERM X 终端必须提供与常规工作站相同的功能。为了实现此目标,需要广泛的桌面个性化设置。以下是一些最重要的主题

  • 声音支持:因为应用程序在服务器上运行,而声卡在终端上,所以使用 /dev/dsp 不起作用。随着时间的推移,已经开发了诸如 Esound、Arts、Nas 等解决方案。我们发现 Arts 会使机器不稳定(例如,TiMidity++ 占用高达 99% 的 CPU),并且很少有应用程序支持 Nas。根据我们的经验,唯一可行的解决方案是 Esound (esd)。GNOME 支持是原生的,而使用 Arts 的 KDE 有一个选项可以使用 esd 作为其后端。主要的应用程序,例如 Flash Player、RealPlayer 和基于 SDL 的游戏,都原生使用它。当用户首次登录系统时,脚本会自动创建配置文件以使用 esd。但是,仍有工作要做。例如,Audacity 尚不支持 esd。

  • 视频支持:在 Windows 中,人们通常使用 QuickTime、RealPlayer 或 Windows Media Player。他们期望这些基本软件包在 X 终端上工作。这有点挑战,因为大多数发行版不提供这些播放器和适当的编解码器。熟悉命令行的人对 MPlayer 赞不绝口,其他人则对它嗤之以鼻。一个名为 mplayerplug-in 的 Mozilla 插件解决了这个问题,并将 MPlayer 整齐地嵌入到带有播放、暂停和前进按钮的 Web 浏览器中。MPlayer 还可以选择使用 Windows DLL 来播放流行的文件格式,但与所有专有程序一样,有很多许可问题需要考虑。

  • 本地应用程序:某些应用程序根本无法在标准客户端/服务器场景中运行。例如,如果用户想要控制终端声卡的音量,他们必须在终端本地运行 Aumix 或 Alsamixer。此外,直接在终端上运行媒体播放器比通过网络流式传输每秒 30 帧更好,因为这会很快阻塞网络。在这些情况下,当这些应用程序在终端本地捆绑运行时,它们会更好地运行。为此,一个名为 runlocal 的包装器脚本通过 SSH 使用用户密钥连接到终端,并通过 sshfs 挂载用户的主目录,从而允许应用程序访问用户文件和设置。

  • 应用程序配置:大多数应用程序在首次启动时都会创建自己的配置文件。在许多情况下,默认设置效果很好。在其他情况下,需要修改它们以在 X 终端上使用。例如,一些应用程序使用 X 服务器内存作为缓存内存。虽然这在 Linux 工作站上非常有效,但当 X 服务器使用的内存大于终端的 RAM 时,可能会导致 X 终端崩溃。诊断 X 服务器内存消耗问题的有效方法是使用 xrestop 工具。对于 KDE 用户,当启用 Klipper 复制/粘贴大型绘图时,可能会发生这种内存问题。此时唯一的解决方案是禁用 Klipper。这是一个禁用内存和磁盘缓存的 Firefox 配置示例

    // File /opt/firefox/greprefs/xterm.js
    pref("general.config.obscure_value", 0);
    pref("general.config.filename", "firefox.cfg");
    
    // File /opt/firefox/firefox.cfg
    lockPref("browser.cache.disk.enable", false);
    lockPref("browser.cache.memory.enable", false);
    lockPref("browser.sessionhistory.max_total_viewers", 0);
    
  • 个性化:许多项目都专注于语言问题,例如国际化 (i18n) 和本地化 (l10n)。但是,仍然没有个性化层 (p13n) 提供一种简单的方法来配置桌面上的图标、菜单、浏览器首选项、书签、背景、屏幕保护程序、默认应用程序等等。freedesktop.org 项目以及 Sabayon 和 Kiosk 等项目已经开始了这方面的工作,但这仍然远未完成,并且仅涵盖 KDE 和 GNOME。与此同时,我们使用一套自制的脚本和配置文件来根据组织的需求配置桌面。

  • 全局基础设施集成:为了获得成功,系统必须完全集成到现有基础设施(目录服务器、文件和打印)中。以打印为例。如果一个学区有 50 所学校和一千多台不同的打印机,您如何选择要在 Firefox 或 OpenOffice.org 中显示哪些打印机?我们通过一个简单的包装器解决了这个挑战,该包装器拦截对 CUPS 共享库的调用,以便根据用户位置应用过滤器。终端的打印机列表和默认打印机存储在配置器数据库中。

使用 Linux-VServers 虚拟化组件

出于安全和管理方面的考虑,可以隔离 MILLE-XTERM 组件。为了获得虚拟化的好处而又没有性能缺陷,Linux-VServer 是完美的替代方案,尽管需要在 Linux-VServer 中安装 MILLE-XTERM 时进行一些特定的配置。在 vserver 中安装引导服务器时,除非 vserver 设置了 CAP_SYS_ADMIN 属性,否则无法生成 initrd。解决方案是在主机上使用 chroot。此外,使用用户空间 NFS 服务器而不是常规的基于内核的 nfsd。最后,应用服务器上的 GDM 将尝试在 vserver 内启动 X,这是不需要的。要纠正这一点,请将 --no-console 选项附加到 init 脚本,它将仅侦听网络请求,而没有本地主机显示。

当掌握了这些技巧后,您可以添加或删除应用服务器、复制现有应用服务器、备份和更新它们,并在对更改感到满意后,将它们投入生产并在整个集群中复制它们,从而将可管理性提升到更高的水平。

未来发展

MILLE-XTERM 可以在许多方面更进一步——从安全性开始,或者更确切地说,是缺乏安全性,XDMCP 协议就是这种情况。您可以在家中尝试一下。使用 Xnest 启动 X 会话并使用 ethereal 捕获数据包。以下过滤器可让您查看键入的每个按键

x11.eventcode == 2

您可以使用本地安全显示管理器来解决此问题,该管理器创建 SSH 隧道来加密 X11 流量。另一种可能性是在终端和应用服务器之间使用 OpenVPN。

MILLE-XTERM 项目的几乎每个组件都应该是高可用的。配置器正在进行中(使用 slony 复制 PostgreSQL 数据库)。引导服务器(以及负载均衡器)将紧随其后,以实现透明故障转移(这很容易实现,因为它们的主要功能是作为只读 NFS 服务器)。

优化 X 协议以节省带宽是另一个有趣的发展方向。然后,可以使用带有简单宽带 Internet 连接的 X 终端。Linux 终端的下一步是 NX/FreeNX。去年,《Linux Journal》专门用五篇文章讨论了这个主题。NX 客户端将在终端本地运行,这将要求将它们添加到 xtermroot 中才能工作。

结论

目前,Laval 学区(MILLE 项目的创始人之一)已部署了超过 800 个终端,计划每年再部署 1,000 多个终端(高达 75% 的现有计算机将成为 X 终端)。

我们坚信,Linux 终端是关键解决方案,它将使学区能够提供低成本/高质量的桌面体验。借助 Linux 终端服务器集群,孩子们可以访问他们学习、创造和参与 Linux 革命所需的软件。

致谢

作者要感谢 MILLE 项目的创始人以及 MILLE-XTERM 解决方案的早期采用者

本文资源: /article/9134

Francis Giraldeau 是舍布鲁克大学的电气工程师。他在 Revolution Linux 工作,同时完成计算机科学硕士学位。他三年来一直致力于 MILLE-XTERM 项目。可以通过 francis.giraldeau@revolutionlinux.com 与他联系。

Jean-Michel Dault (jmdault@revolutionlinux.com) 于 1994 年使用 Linux 创立了他的第一家互联网提供商。在 Mandriva 工作了五年后,他现在是 Revolution Linux 的联合创始人兼首席技术官。

Benoit des Ligneris 在舍布鲁克大学完成了物理学博士学位,在那里他培养了大型系统(集群)和科学计算方面的专业知识。他曾担任 OSCAR(开源集群应用程序资源)项目的负责人。他现在是 Revolution Linux 的首席执行官。

加载 Disqus 评论