Solaris Resource Manager 1.3 系统管理指南

服务器合并

第一个示例说明这些命令:

liminfo

打印一名或多名用户的属性以及限制终端窗口

limadm

为一组用户改变限制属性或为其删除限制在数据库中的入口

srmadm

显示或设定操作模式和 Solaris Resource Manager 系统级别的可调节参数

srmstat

显示 lnode 节点活动信息

假设有两个服务器,每一个都在运行一个数据库应用程序,现在要将这两个服务器合并在一台机器上。简单地运行单台机器上的两个应用程序会得到工作系统。在没有 Solaris Resource Manager 的情况下,Solaris 系统在平等使用的基础上将资源分配给应用程序,而且并不保护一个应用程序不受另一个应用程序所提出的竞争请求的影响。Solaris Resource Manager 却可提供适当机制,防止应用程序遭受资源缺乏。若使用 Solaris Resource Manager,可通过启动附加到与数据库( db1db2)相关的 lnode 节点的每一个数据库来达到此目的。若要这样做,必须创建三个新的管理位置标识符用户,例如, databasesdb1db2。这三个用户被添加到限制数据库;由于 lnode 与 UNIX UID 对应,因此也必须将这三个用户添加到 passwd 文件(如果系统使用 NIS 或 NIS+ 之类的名称服务,则添加到口令映射)。假定 UID 被添加到 passwd 文件或口令映射,则使用以下命令将位置标识符用户 db1db2 分配到 databases lnode 组:

# limadm set sgroup=0 databases
# limadm set sgroup=databases db1 db2

并假设 /usr/srm/bin 在用户路径中。

图形 10-1 服务器合并

图中说明了将两台各自都在运行数据库应用程序的服务器合并到一台机器上的情况。

由于没有其它被定义的组,databases 组目前占用整台机器。与数据库关联的两个 lnode 在运行,而运行数据库应用程序的进程则通过数据库例程的启动脚本中的 srmuser 命令附加到相应的 lnode。

# srmuser db1 /usr/bin/database1/init.db1
# srmuser db2 /usr/bin/database2/init.db2

当启动数据库 db1db2 时,请使用 srmuser 命令以确保数据库附加到正确的 lnode 并正确收费(srmuser 不影响执行此操作的进程的拥有权)。要运行以上命令,用户必须拥有运行 init.db1 所需的 UNIX 许可和将进程附加到 lnode db1 的管理许可。当用户登入和使用数据库时,数据库执行的活动被传送至 lnode 节点 db1db2

使用每个 lnode 节点一个共享权的缺省分配,databases 组的使用将会逐渐平均,以便确保数据库 db1db2 平均分配机器的使用。尤其是,有一个剩余共享权-适用于 databases 组-;而且 databases 拥有该共享权。lnode 节点 db1db2 也被分别给予一个共享权的缺省分配。在 databases 组内,有两个剩余共享权,因此 db1db2 获得 databases 资源之外的平等分配(在这个简单的示例中,没有竞争分配,因此 databases 拥有对整个系统的访问权)。

如果 1 号数据库需要机器 CPU 容量的 60%,而 2 号数据库需要其容量的 20%,管理员可以规定系统必须至少提供这些容量(假设应用程序有这样的要求),其方法是增加 cpu.shares 的数目,分配给 db1:

# limadm set cpu.shares=3 db1

现在,有四个剩余共享权在 databases 组;db1 有三个,而 db2 有一个。执行上述命令之后,这个改变立即生效。将有一段过渡时间,然后 lnode 节点 db1(1 号数据库)才会真正得到大于机器资源 60% 的分配部分,因为 Solaris Resource Manager 需要逐步平均机器使用。但是,视乎衰变总参数,这段时间不会太长。

若要在任何时候监视这项活动,可使用命令 liminfo(请参阅典型的应用程序服务器)和 srmstat,它们在不同的窗口里。注意,命令 srmstat 定期提供更新的显示。有关 srmstat 的更多信息,请参阅 srmstat(1SRM)

现在,一台机器运行两个数据库应用程序,一个得到 75% 的资源,另一个得到 25% 的资源。请记住,root 是最高层群组长用户。处理程序作为 root 运行,若有需要,可使用整个系统。因此,应该建立更多的 lnode 节点,用于运行后援程序、守护程序和其它脚本,使 root 处理程序不能占用整个机器。若按传统方式运行,则有可能占用。