本节介绍有关 Application Server 8.1 中所包含的 HADB 实现的其他重要信息。
实现了新的管理命令 hadbm setadminpassword,使用该命令可更改用于数据库管理的密码。此命令通过使用相应的选项,来指示要使用的管理代理以及旧密码和新密码。有关更多信息,请参见 hadbm setadminpassword 手册页。
现有管理命令 hadbm listpackages 已被修改。以前,此命令没有操作数,并且会列出相关管理域中的所有软件包。修改后引入了可选的软件包名称操作数,并且只列出具有该名称的软件包。如果不指定相应的操作数,则列出所有软件包。有关更多信息,请参见 hadbm listpackages 手册页。
现有管理命令 hadbm createdomain 已被修改。将 hostlist 操作数的功能扩展为还可以指定管理代理的端口号。通过这种方法,仅使用 hostlist 操作数就可以完全指定该域。旧的行为仍受支持,以保持向下兼容。有关更多信息,请参见 hadbm createdomain 手册页。
管理系统的某些错误消息已被修改。这些修改旨在改进错误消息的易懂性、一致性和准确性。详细的修改内容未在本发行说明中列出。
安装和卸载行为稍有变化。安装或卸载 HADB 时,应始终保留软链接 /opt/SUNWhadb/4,但并非始终都这样。
不能再在命令行上输入密码作为命令选项。这与所有使用密码作为命令行选项的 hadbm 命令相关。对于 hadbm 命令,以前可以通过以下方式输入密码:
密码文件
命令行选项
交互式输入
方法 2(命令行选项)被认为不安全,因此已过时。如果以这种方法输入密码,将发出警告消息。请改为使用方法 1(密码文件)或方法 3(交互式输入)。在命令行中使用密码的方式将在下一个版本中废弃。请注意,这适用于所有使用命令行密码选项的 hadbm 命令。
HADB 已升级为使用 JGroups 2.2 版,其源代码与 HADB 一起分发。为了支持从先前的 HADB 版本联机升级,HADB 同时附带了 JGroups 2.1 和 2.2。对于 JGroups 2.1,仅提供字节代码。
如果您要将 HADB 配置为使用以下文件系统之一,则需考虑几个重要事项:
ext2 和 ext3—对于 Red Hat Application Server 3.0,HADB 支持 ext2 和 ext3 文件系统。对于 Red Hat Application Server 2.1,HADB 仅支持 ext2 文件系统。
Veritas—在 Solaris 平台上使用 Veritas 文件系统时,消息“警告:直接磁盘 I/O 映射失败”将写入历史文件。此消息指出:HADB 无法打开用于数据和日志设备的直接 I/O。直接 I/O 可以减少写入磁盘页面的 CPU 耗时,从而提高性能。它还可以降低管理操作系统中的脏数据页面的系统开销。
要结合使用直接 I/O 和 Veritas 文件系统,请使用以下方法之一:
在以选项 mincache=direct 进行安装的文件系统上创建数据和日志设备。此选项将应用于该文件系统上创建的所有文件。有关详细信息,请参见 mount_vxfs(1M) 命令。
使用 Veritas Quick I/O 工具对文件系统的文件执行原始 I/O。有关详细信息,请参见《VERITAS File System 4.0 Administrator's Guide for Solaris 》。
请注意,尚未使用 Application Server 8.1 2005Q2 Update 2 对这些配置进行测试。
有关使用 Application Server 软件安装和配置 HADB 的信息,请参见《 Application Server Enterprise Edition High Availability Administration Guide》。
用户应保留 HADB 历史文件、管理代理配置文件、日志文件、系统信息库以及安装路径以外的所有数据设备。如果尚未这样做,应在升级前完成此操作。要移动管理系统信息库和配置文件,请执行以下操作:
停止所有旧的管理代理,但继续运行 HADB 节点。
在每台主机上,将系统信息库目录移到新位置。
在每台主机上,将 dbconfig 目录复制到新位置。
在每台主机上,更新 mgt.cfg 文件,并为 dbconfig 和系统信息库目录设置正确的路径。
使用更新后的 mgt.cfg 文件启动管理代理。
要从 HADB 4.4.x 版升级到 4.4.2-7 版,请执行以下步骤:
根据需要执行上述的升级前任务。
将 HADB 4.4.2-7 版安装到所有 HADB 主机上(安装到不同于 4.4.x 版路径的其他路径中,例如 /opt/SUNWhadb/4.4.2-7 中)。
将 HADB 4.4.2-7 版安装到 hadbm 客户机主机上(如果该客户机主机的路径与 HADB 主机的不同)。
停止所有 HADB 主机上运行的全部管理代理。
使用新版本的软件和旧的配置文件来启动管理代理进程。在余下的步骤中,请使用在新版本的 bin 目录中找到的 hadbm 命令。
在管理域中注册该软件包(由于默认的软件包名称为 V4.4,因此可能需要使用其他软件包名称,以免与现有的同名软件包冲突):
hadbm registerpackage --packagepath=/opt/SUNWhadb/4.4.2-7 V4.4.2-7 |
运行 hadbm listpackages 命令并检查新软件包是否已在该域中注册。
使用新的 hadbm 4.4.2-7 版重新启动数据库。如果需要移动设备和历史文件,请运行联机升级,并在同一操作中为设备和历史文件设置新路径:
hadbm set packagename=V4.4.2-7,devicepath=new_devpath, historypath=new_histpath |
否则,如果设备和历史文件位于安装目录之外,则运行以下命令后,将仅滚动重新启动这些节点:
hadbm set packagename=V4.4.2-7 database name |
检查数据库是否处于“正在运行”状态(使用 hadbm status 命令)并且能够正常处理客户机事务。
如果结果有效,随后就可以删除旧安装。在取消注册旧软件包之前,先从 ma 系统信息库中删除对旧软件包的所有引用。否则,hadbm unregisterpackage 将失败,并显示消息“软件包正在使用”。伪重新配置操作(例如 hadbm set connectiontrace=same as previous value)将删除对旧软件包的所有引用。现在,取消注册旧软件包:
hadbm unregisterpackage [--hosts=host-list] old pacakge name |
从文件系统中删除旧安装。
在 Solaris 上,要测试升级是否成功,请检查是否已正确执行升级:
确保运行的进程使用了新的二进制。在所有 HADB 节点上检查以下路径:
new path/bin/ma -v new path/bin/hadbm -v |
检查数据库是否处于运行状态。使用以下命令应该显示所有 HADB 节点都处于“正在运行”状态。
new path/bin/hadbm status -n |
确保使用 HADB 的产品已将其指针更改为指向新的 HADB 路径。
使用 HADB 的产品可以运行自己的升级测试,以检验 HADB 升级是否有效。
联机升级后,如果新版本无法正常运行,请转回使用以前的 HADB 版本。但是,如果已对管理代理系统信息库进行了更改,则可降级 HADB 本身,但新的管理代理必须继续运行。
本节列出有关 HADB 部署和升级的其他信息。
仅将设备文件、日志文件和历史文件存储在本地磁盘中,请勿使用远程安装的文件系统。
如果在一台主机上存在多个节点,建议将属于每个节点的设备分别存放在不同的磁盘上。否则,磁盘争用会导致性能降低。通过在历史文件中查找此类消息“注意 - 上次 flush/fputs 时间过长”可以查看此问题的症状。如果一个节点拥有多个数据设备文件,建议对这些设备文件使用单独的磁盘。
使用本地磁盘(最好是与数据设备所用不同的磁盘)在 HADB 主机上安装 HADB 二进制。NFS 延迟或磁盘争用可能导致节点重新启动,并且历史文件中出现警告“进程已阻塞 nnn,最长阻塞时间为 nnn”。
不要将 hadb 设备、历史文件、管理代理目录和代理配置文件放在 hadb 软件包路径下。因为这会导致在升级更新版本和删除旧软件包路径时出现问题。
正常情况下,此版 HADB 最多支持 28 个节点(24 个活动数据节点和 4 个备用节点)。
建议使用相同版本的 JDBC 驱动程序和 HADB 服务器。
不支持 IPv6,仅支持 IPv4。
在 Windows 上,命令行长度限制为 2048 字节。
必须将网络配置为可以进行 UDP 多址广播。
由于在 RedHat Enterprise Linux 3.0 的 Update 1 到 Update 3 上发现了过度交换,建议不要将其用作部署平台。此问题已在 RedHat Enterprise Linux 3.0 Update 4 中修复。
使用实时优先级运行 NSUP 时可能出现的情况。
节点的监控 (NSUP) 进程 (clu_nsup_srv) 通过及时交换 "heartbeat" 消息来确保 HADB 的高可用性。如果 NSUP 与导致资源耗尽的其他进程位于同一位置,则会影响计时。这将导致错误的网络分区和节点重新启动(在此之前,历史文件中会记录一条警告“进程被阻塞 n 秒”),同时导致出现异常中止的事务和其他异常情况。
要解决这一问题,clu_nsup_srv(可在 installpath/lib/server 中找到)必须设置 suid 位且该文件必须属于超级用户。这可以通过使用以下命令手动实现:
# chown root clu_nsup_srv # chmod u+s clu_nsup_srv |
这将导致 clu_nsup_srv 进程以超级用户的身份启动,而这又使该进程在启动后能够自动为其本身分配实时优先级。要通过使用 setuid 来避免任何安全性影响,请尽早设置实时优先级,并在更改优先级后立即将进程返回到有效的 uid。其他 HADB 进程会将其优先级降低为分时优先级。
如果 NSUP 无法设置实时优先级,则它会发出一条警告“无法设置实时优先级”(unix: errno 将设置为 EPERM),该警告将记录在 ma.log 文件中,并且 NSUP 在没有实时优先级的情况下继续运行。
以下是无法设置实时优先级的情况,例如:
安装在 Solaris 10 非全局区域中时
在 Solaris 10 中调用 PRIV_PROC_LOCK_MEMORY(允许进程锁定物理内存中的页)和/或 PRIV_PROC_PRIOCNTL 权限时
用户关闭 setuid 权限时
用户将本软件安装为 tar 文件(App.server 的非根安装选项)时
clu_nsup_srv 进程不会大量占用 CPU,其资源占用少,并且在使用实时优先级运行时不会影响系统性能。
为 Solaris 的 HADB 配置 IP 网络多路径(仅在 Solaris 9 上进行过测试)。
Sun 建议对运行 HADB 的 Solaris 主机设置网络多路径,以便尽可能确保最高的网络可用性。《IP Network Multipathing Administration Guide》中详细介绍了网络多路径设置。如果打算将多路径与 HADB 一起使用,请参阅《IP Network Multipathing Administration Guide》中的 "Administering Network Multipathing" 一节,以便先设置多路径,然后按照如下所属针对 HADB 调整多路径设置。《IP Network Multipathing Administration Guide》是 Solaris 9 System Administrator Collection 的一部分,并且可以从 http://docs.sun.com 下载。
设置网络接口故障检测时间
为了使 HADB 能够正确支持多路径故障转移,网络接口故障检测时间不能超过 1000 毫秒,此时间由 /etc/default/mpathd 中的 FAILURE_DETECTION_TIME 参数指定。如果此参数的原始值较高,请编辑文件并将其值更改为 1000:
FAILURE_DETECTION_TIME=1000 |
为了使更改生效,执行以下命令:
pkill -HUP in.mpathd |
与 HADB 一起使用的 IP 地址
如 Solaris IP Network Multipathing Administration Guide 中所述,多路径功能涉及将物理网络接口分组为多路径接口组。在此类组中,每个物理接口均包含两个与其关联的IP 地址:物理接口地址和测试地址。只有物理接口地址可用于传输数据,而测试地址仅供 Solaris 内部使用。运行 hadbm create --hosts 时,应该仅使用多路径组中的一个物理接口地址来指定每台主机。
示例
假设主机 1 和主机 2 分别具有两个物理网络接口。在每台主机上,均将这两个接口设置为多路径组,并且运行 ifconfig -a 将产生如下结果:
主机1
bge0: flags=1000843<mtu 1500 index 5 inet 129.159.115.10 netmask ffffff00 broadcast 129.159.115.255 groupname mp0 bge0:1: flags=9040843<mtu 1500 index 5 inet 129.159.115.11 netmask ffffff00 broadcast 129.159.115.255 bge1: flags=1000843<mtu 1500 index 6 inet 129.159.115.12 netmask ffffff00 broadcast 129.159.115.255 groupname mp0 bge1:1: flags=9040843<mtu 1500 index 6 inet 129.159.115.13 netmask ff000000 broadcast 129.159.115.255 |
主机 2
bge0: flags=1000843<mtu 1500 index 3 inet 129.159.115.20 netmask ffffff00 broadcast 129.159.115.255 groupname mp0 bge0:1: flags=9040843<mtu 1500 index 3 inet 129.159.115.21 netmask ff000000 broadcast 129.159.115.255 bge1: flags=1000843<mtu 1500 index 4 inet 129.159.115.22 netmask ffffff00 broadcast 129.159.115.255 groupname mp0 bge1:1: flags=9040843<mtu 1500 index 4 inet 129.159.115.23 netmask ff000000 broadcast 129.159.115.255 |
在此示例中,两台主机的物理网络接口就是列出的 bge0 和 bge1。而列出的 bge0:1 和 bge1:1 是多路径测试接口(它们在 ifconfig 输出中标记为 DEPRECATED),如《IP Network Multipathing Administration Guide》中所述。
要在此环境中设置 HADB,请从每个节点选择一个物理接口地址。在此示例中,我们从主机 1 选择 129.159.115.10 并从主机 2 选择 129.159.115.20。要使用每台主机的一个数据库节点创建数据库,请对 hadbm create 使用以下参数:
--host 129.159.115.10,129.159.115.20 |
要使用每台主机的两个数据库节点创建数据库,请使用以下参数:
--host 129.159.115.10,129.159.115.20,129.159.115.10,129.159.115.20 |
在上述两个示例中,两台主机上的 ma.server.mainternal.interfaces 变量应设置为 129.159.115.0/24。
不可能从 4.2 或 4.3 联机升级到 4.4。但是,4.4 支持未来版本的联机升级。要从 4.4.1 升级到 4.4.2,请执行以下步骤:
将 4.4.2 安装到所有 HADB 主机上(安装到不同于 4.4.1 版路径的其他路径中,例如在 /opt/SUNWhadb/4.4.2-6 中)。
将新版本安装到 hadbm client 主机上。
停止 HADB 主机上运行的所有管理代理。
使用新版本的软件和旧的配置文件来启动管理代理进程。在余下的步骤中,请使用在新版本的 bin 目录中找到的 hadbm 命令。
在管理域中注册该软件包(由于默认的软件包名称为 V4.4,因此可能需要使用其他软件包名称,以免与现有的同名软件包冲突):
hadbm registerpackage --packagepath=/opt/SUNWhadb/4.4.2-6 V4.4.2 |
使用新版本重新启动数据库(以下命令将滚动重新启动这些节点):
hadbm set packagename=V4.4.2 database_name |
检查数据库是否处于“正在运行”状态(使用 hadbm status 命令)并且能够正常处理客户机事务。
如果一切运行正常,随后就可以删除旧安装。
在取消注册旧软件包之前,先从 ma 系统信息库中删除对旧软件包的所有引用。否则,hadbm unregisterpackage 将失败,并显示消息“软件包正在使用”。伪重新配置操作(例如 hadbm set connectiontrace=<same_as_previous_value>)将删除对旧软件包的所有引用。现在,取消注册旧软件包:
hadbm unregisterpackage [--hosts=<host_list>] <old_package_name> |
如 HADB installation instructions 所述,从文件系统中删除旧安装。
无法在表中创建 UNIQUE 二级索引。
除非表达式 (DISTINCT column) 是唯一选定的表达式,否则不允许在聚合表达式中使用该表达式。
创建所有表时都必须定义主键(即,不支持没有主键的表)。
不支持 FULL OUTER JOIN。
不支持 IN 子查询(此类子查询为表子查询);例如:
SELECT SNAME FROM S WHERE (S1#,S2#) IN (SELECT S1#,S2# FROM SP WHERE P#='P2') |
不支持除 NOT NULL 和 PRIMARY KEY 以外的约束。
不能为资源指定新的拥有者。但是,如果执行此操作,授予当前拥有者的权限不会授予新拥有者。
两个或两个以上的嵌套 NOT EXISTS 子查询中,如果其每个子查询不直接与外层查询关联,则不受支持。
不支持列权限。
仅允许在 VALUES 子句中使用行值构造函数。
不能使用子查询作为行值构造函数中的值表达式。
创建主键时,不能使用以下数据类型:
REAL
FLOAT
DOUBLE PRECISION
DECIMAL
NUMERIC
Application Server 包括 HTTP、IIOP 和 JMS 客户机的负载平衡;HTTP 会话故障转移支持;EJB 群集和故障转移支持;具有高可用性的 EJB 计时器;分布式事务恢复;对持续式应用程序升级的支持;以及一个用于存储 J2EE 应用程序瞬间状态的高可用性数据库。
可用性允许对群集中的 Application Server 实例进行故障转移保护。一个 Application Server 实例出现故障时,其他 Application Server 实例将接管指定给该故障服务器的会话。会话信息存储在 HADB 中。HADB 支持 HTTP 会话的持久性、有状态会话 Bean 和单点登录证书。