本节介绍有关 Application Server 8.2 中所包含的 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.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.3 版,请执行以下步骤:
根据需要执行上述的升级前任务。
将 HADB 4.4.3 版安装到所有 HADB 主机上(安装到不同于 4.4.x 版路径的其他路径中,例如 /opt/SUNWhadb/4.4.3)。
将 HADB 4.4.3 版安装到 hadbm 客户机主机上(如果该客户机主机的路径与 HADB 主机的路径不同)。
停止所有 HADB 主机上运行的全部管理代理。
使用新版本的软件和旧的配置文件来启动管理代理进程。在余下的步骤中,请使用在新版本的 bin 目录中找到的 hadbm 命令。
在管理域中注册该软件包(由于默认的软件包名称为 V4.4,因此可能需要使用其他软件包名称,以免与现有的同名软件包冲突):
hadbm registerpackage --packagepath=/opt/SUNWhadb/4.4.3 V4.4.3 |
运行 hadbm listpackages 命令并检查新软件包是否已在该域中注册。
使用新的 hadbm 4.4.3 版重新启动数据库。如果需要移动设备和历史文件,请运行联机升级,并在同一操作中为设备和历史文件设置新的路径:
hadbm set packagename=V4.4.3,devicepath=new_devpath, historypath=new_histpath |
否则,如果设备和历史文件位于安装目录之外,则运行以下命令后,将仅滚动重新启动这些节点:
hadbm set packagename=V4.4.3 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 和单点登录证书。