AppLogic 读取边界属性、输出和输入,然后使用 appl_start 脚本生成配置,并填充 /config 和 [config extention]。 应通过将数据置于单独的占位符卷中并将 /os 和 /app 置于可实例化的只读卷中,将配置和数据与代码分开。
占位符卷是可挂接卷的位置。 这些卷用于组件特定内容,如属于应用(而不是组件类)的文件和数据库。 占位符卷用于处于持续状态的内容(如文件和数据库)以及固定内容(如 Web 服务器的 HTML 文件)。
与占位符卷不同,可实例化卷属于组件类,并与目录类一起复制和迁移。
重要信息:可实例化卷可能会在组件启动期间丢失,且不会在复制和迁移组件所在的应用时加以保留。 唯一例外情况是单例。 对于单例,始终保留可实例化卷。
完成以下步骤:
此时将显示“卷”选项卡。
此时将显示“创建卷”对话框。
卷的类型。 例如:占位符
卷的唯一名称。 例如:data
以 MB 或 GB 为单位的卷大小。 例如:100M
安装在卷上的文件系统。 例如:ext3
单击“下一步”,然后单击“关闭 ”。
此时将显示“卷”选项卡。
此时将显示基础架构编辑器。
vol manage appliancename.volumename --rw
mkdir content
此时将显示基础架构编辑器。
先前您已定义组件边界。 现在需要将边界与内核关联,以配置组件初始化和启动。 这样,组件将在自己的虚拟化环境中执行,启动自己的操作系统、应用服务和其他所需软件。
组件的内核包括:
在组件启动期间会执行将内核与边界关联的最重要方面。
在组件启动过程中,APK 具有以下两个功能:
例如,在配置过程的早期阶段,APK 执行以下操作:
applogic_init_config 文件允许您更改操作系统配置中 APK 要进行自动配置的方面。 有关其他信息,请参阅 Linux 组件或 Windows 组件中的自定义组件行为。
组件实例描述符包含操作系统特定的信息,如所有网络接口和磁盘卷的设备名。 将此特定组件类添加到应用中时,您将创建一个此类的实例,其可配置属性具有特定值且连接到其他组件和/或外部世界。 一旦启动,则会将此特定配置作为一个整体传递到虚拟组件。
组件启动脚本
早期配置完成并启动基本操作系统之后,组件启动脚本将启动。 此可选脚本允许您更改组件边界属性,以满足组件中软件产品的特定功能 。
APK 为脚本提供一个配置文件和一个挂接点。 文件位置是操作系统特定的。 例如,在 Posix 样式的操作系统(如 Linux 和 BSD)中文件位于 /etc/sysconfig/,而在 Windows 操作系统中文件位于 \aookiguc\config\。
文件包括:
提供配置选项,这些配置选项可定义操作系统设置中 APK 要自动执行的方面,并指定 APK 将应用属性设置的配置文件列表。 此文件的存在是可选的。 APK 具有文件中允许的所有设置的默认值。
提供了一个在 APK 向 AppLogic 报告启动状态前运行的后期设置挂接点。 您可以使用此挂接点执行组件特定的配置和/或启动服务。 此挂接点预计返回状态,并在标准错误输出流中打印一条单行消息(如果失败)。 将在网格显示板上显示此消息。
此外,组件可以使用操作系统提供的启动功能,如 Linux 中的 sys5 initi 或 Windows 中的服务控制管理器。
组件特定的启动检查脚本
在组件特定的启动完成之后,APK 可选择执行组件特定的启动检查脚本。 此脚本(如果存在)将验证组件是否已启动并将成功或失败的消息返回给控制器。 如果脚本返回错误,组件启动检查将停止并发送一条失败消息。 如果没有返回脚本或脚本没有返回错误,组件启动检查将发送一条成功启动的消息。
组件实例描述符
组件实例描述符包含操作系统特定的信息,如所有网络接口和磁盘卷的设备名。 将此特定组件类添加到应用中时,您将创建一个此类的实例,其可配置属性具有特定值且连接到其他组件和/或外部世界。 一旦启动,则会将此特定配置作为一个整体传递到虚拟组件。
配置和启动应用时,相应的实例描述符包含类似如下的信息:
property weight: integer, value=37 # appliance was configured with specific value volume data: dev=/dev/sdc, mount=/opt # configured, appears as /dev/sdc # to the operating system volume cache: disconnected # optional, app designer chose not to configure it
终端是仅用于组件之间连接的专门网络接口,例如与同一应用中的组件进行交互。 您可以将终端看作主机名。
如果包括某一 IP 地址,APK 将自动配置终端网络。 组件无法更改 IP 地址。 APK 使终端显示类似主机名,以便轻松实现与现有软件的集成。 您可以在组件描述符文件和/或 APK 实用工具中查看终端配置和映射。 当您提供 IP 地址时,实用工具将为您提供一个终端名称。
终端类型包括:
IN 是主机名。 如果尝试解析主机名 IN,您将得到自己终端的 IP 地址。 在配置要侦听的服务器的接口时,这十分有用。 例如,HTP 负载均衡器 (HALB) 接受在其 IN 输入终端上进行分派的请求,并控制在其 CTL 终端上的请求。 这是 HALB 运行的唯一方式。
输出是最常用的终端。 输出终端的名称可用作组件内部的主机名,以便在与其他连接组件交互时进行连接。
APK 将此名称映射到已连接到 IP 地址输出的输入的 IP 地址。 例如,web6 可以引用数据库主机,以便连接到数据库。 您可以使用 mysql –h –db 连接到 web6 的 mysql 数据库。
使用 fs 终端作为主机名时,fs 终端将对 NAS 组件中的 NFS 服务器的 IP 地址进行解析。 查找命令 – mount fs l-share /mnt
注意:在组件边界上,您可以配置一个将作为终端名称别名的主机名。 如果主机名已在软件包中进行硬编码,这十分有用。 APK 会将别名映射到已连接的组件的 IP 地址。
与用于连接到单个主机名或服务的常规输出终端不同,网关输出终端用于连接到多个主机,通常通过网络网关组件。
在组件的边界上为组件配置网关终端后,APK 会自动将此接口配置为组件及其 DNS 服务器的默认网关。
要通过网关输出访问服务,请使用目标的 IP 地址或主机名。 例如:
wget actp://wordpress.com/latest .tar .gz
在大多数组件中,网关输出终端用于访问网络。 您还可以将其用于访问任何网络,如公司网络。 网关输出终端的名称可解析为由连接到网关输出的组件提供的网关或路由器的 IP 地址。 此名称还可以用作 DNS 服务器的名称。 例如,dig @net google.com Net 是网关输出终端的名称,dig 可解析为 IP 地址。
和与同一应用中的组件进行通讯的终端不同,原始接口在组件外部进行通讯。 这包括与其他组件以及外部世界进行通讯。
原始接口非常类似于虚拟机中的虚拟网络接口和传统服务器中的 NIC。 其 IP 地址已作为应用配置的一部分进行分配。 APK 在原始接口上自动配置 IP 地址。 此外,APK 将基于 IP 地址自动配置子网掩码和网关以及 NAS 服务器。
组件有一个原始接口时,它将成为默认网关,并且可以用于访问外部网络。 组件无法使用在应用上配置的 IP 地址之外的其他 IP 地址。 将丢弃包含无效 IP 地址的任何程序包。
原始接口最多支持四个 IP 地址。
虽然 APK 会自动配置子网掩码和网关,但是可以使用 APK config_extif 命令禁用此功能。 禁用此功能后,组件启动脚本将为原始接口配置网络设置。 分配的设置位于组件实例描述符文件中。 禁用原始接口后,如果组件有多个原始接口并且希望控制路由和名称解析,则自动配置将非常有用。
VLAN 和网络
将原始接口置于特定的 VLAN 上时,将由 AppLogic 处理 VLAN 标记。 此组件发送的程序包应不包含 802.19 VLAN 标记。
传统原始接口
版本 3.5 之前的 CA AppLogic® 版本仅支持称为“外部”的单个原始接口。 此接口不需要外部接口连接器。 它是通过属性进行配置的。 此传统原始接口仅支持向后兼容性,不应当将其用于新组件。
您必须使用组件启动脚本来配置传统的原始接口。APK 不会自动配置传统的原始接口。网络设置(如 IP 地址、子网掩码、网关以及 DNS 服务器)通常是通过“属性”设置进行配置的。 将基于您是否将 IP 地址定义为 IP 拥有的属性来实施 IP 地址。
在 IP 拥有的属性中,将验证 IP 地址是否在允许的范围内,并且不允许接口使用任何其他 IP 地址。 最多可以定义四个 IP 拥有的属性。
如果组件没有 IP 拥有的属性,则不会验证或实施传统原始接口的 IP 地址。 它会允许 IP 地址劫持,应谨慎使用。 它仅支持向后兼容功能。 将在未来版本中丢弃或禁用此支持。
默认原始接口
默认的原始接口可发送事件并为 SSH 和 Web 控制台提供对组件的访问权限。
将组件边界上的每个卷配置作为块设备提供给组件。 APK 使用边界配置中提供的挂接点 自动挂接组件文件系统中的所有卷。
可以通过 apk_config_automount 选项禁用自动挂接功能。 有关其他信息,请参阅“在 Linux 或 Windows 中自定义组件行为”。
默认情况下,在组件文件系统中挂接这些卷:
对于大多数卷,每个卷都有一个分区,以更好地支持传统虚拟机映像。 APK 也了解多分区卷。
注意:
在所有情况下,组件无法修改只读卷。
远程文件系统以及一些服务器组件(如 Web6 和 Tomcat)可以自动挂接网络文件系统。 网络文件系统不作为卷,其挂接过程不是在 APK 中完成的,而是由组件开发人员来完成。
按照惯例,网络文件系统挂接在以下位置:
组件可以发送事件,以表示重要的事件更改以及报告意外事件。 例如,APK 通过将消息打印到 stderr 来报告启动成功或失败事件。 启动之后,您可以在组件操作期间使用 VME 事件生成器实用工具来发送附加信息或警告消息。 VME 是用户模式实用工具,在组件启动过程中以及在运行时可生成特定事件。 有关其他信息,请参阅“vme:事件生成器”。
关键事件
启动完成是组件必须发送的最重要的且唯一必要的事件。 在完成和启动时,受管组件会发送一条启动正常的消息,以表示组件已成功配置和启动。 组件现在已准备好执行其功能。
如果组件提交“启动失败”,则表示组件配置和/或启动已失败并提供说明消息以及失败原因。 失败原因存储在网格日志中,可通过使用 log list 或显示板上的“日志”选项卡进行查看。
使用 APK 时,APK 将基于 AppLogic 脚本的返回状态自动调用 vme 实用工具。
如果组件启动正常,此脚本(如果存在)应返回退出代码 0;如果组件启动失败,则返回非零值。 应将此错误消息打印到 stderr。 APK 仅将 applogic_appliance 脚本打印的文本的最后一行发送到网格日志。 将打印到 stderr 的其他文本存储在组件启动盘上的临时文件中。 如果脚本没有打印任何内容,但返回失败状态,则 APK 将发送一条常规的“Failed to Start”(无法启动)文本消息。
您可以使用 vme 二进制文件来启动直接管理的组件或使其失败。 启动之后,vme 二进制文件可在组件操作期间发送附加信息/警告消息。 有关其他详细信息,请参阅“vme:事件生成器”部分。
在启动期间,组件也可以发送日志和报警,如下所示。
大多数组件会在可预测的较短时间内完成启动。 但是,有时某个组件可能需要执行冗长的过程,此过程不适合启动超时或不在可预测的时间范围之内。
需要执行冗长过程的组件可能会请求附加时间以完成此过程。 例如:
如果组件需要执行使用外部服务的冗长路径,则时间量可能是不可预测的。 为此,组件必须提交维护事件。 如果发行事件将组件置于维护启动模式中,则 AppLogic 可提供不定量的启动时间。 在此模式下,组件可提供定期报告,传递逻辑和启动完成的百分比。
如果组件不通过发送维护进度事件来表示进度,则认为组件挂起或失败和启动超时。 组件应每隔 1 秒以及 1 分钟提供一次定期维护更新,直到超时。 进度百分比应当是递增的。 一旦维护操作完成,组件将通过发送“启动成功或失败”事件来表示启动完成并提供原因。
组件可在检测到异常时向网格日志发送日志消息。 组件使用 grid_log 向网格日志发送事件。 VME = 消息的 log_text。 组件应当有节制地使用此事件,仅将其用于对网格范围产生影响的重要事件(如 IP 地址冲突)。 组件不应当将所有 sys 日志或定期事件发送到网格日志,以免造成日志堵塞。
检测灾难性事件或高度重要事件的组件可能会提交报警事件。 这会导致在显示板上显示一条消息,并(如果配置)向网格管理员发送电子邮件。 组件应针对以下事件发送一条网格报警,如 IP 地址冲突、故障转移事件、数据库验证错误,以及停止或恢复事件。
组件应当仅在发生例外时使用网格报警事件,不应当发送定期事件。 网格控制器可能会阻止发送过多事件或发送事件过于频繁的组件。
每个运行 ccad(计数器收集代理)后台进程的组件都允许第三方实用工具定义和收集自定义计数器。 此功能称为扩展接口,它使组件创建者可以选择通过标准 MON 用户界面来监控组件特定的计数器数据。
要监控自定义计数器,请将计数器定义添加到 ccad 配置,并将实际计数器值馈送到 ccad。 必须在可选的 /etc/ccad.conf 配置文件中定义自定义计数器(采用 UDL 格式)。 每次更改配置后,必须重新启动 ccad 后台进程,这样才能使更改生效。
下面是一个简单的示例配置:
counters Apache
{
pace = 1000
pipe = /tmp/cca
counter Total_Accesses
{
name = "Total hits"
desc = "Total number of hits"
units = "#"
type = "MAX"
}
counter Total_kBytes
{
name = "Total bytes"
desc = "Total number of bytes"
units = "bytes"
type = "MAX"
}
counter BusyWorkers
{
name = "Active requests"
desc = "Number of active requests"
units = "#"
type = "MAX"
}
counter IdleWorkers
{
name = "Idle servers"
desc = "Number of idle servers"
units = "#"
type = "MAX"
}
}
|
版权所有 © 2013 CA。
保留所有权利。
|
|