Sun Java System Application Server 9.1 高可用性管理指南

第 3 章 管理高可用性数据库


注 –

HADB 软件随 Sun Java System Application Server 的 Application Server 独立分发提供。有关 Sun Java System Application Server 的可用分发的信息,请参见《Sun Java System Application Server 9.1 Installation Guide》中的“Distribution Types and Their Components”。HADB 功能仅在企业配置文件中可用。有关配置文件的信息,请参见《Sun Java System Application Server 9.1 管理指南》中的“用法配置文件”


本章介绍了 Sun Java System Application Server 环境中的高可用性数据库 (High Availability Database, HADB)。其中介绍了如何配置和管理 HADB。在创建和管理 HADB 之前,必须首先确定系统的拓扑并在各种计算机上安装 HADB 软件。

本章讨论以下主题:

使用 HADB 管理代理

管理代理 ma,在 HADB 主机上执行管理命令。管理代理还通过重新启动 HADB 节点监控进程(如果失败)来确保其可用性。

启动管理代理

您可以使用以下方式启动管理代理:

对于每种启动方式,启动过程会因使用的是 Java Enterprise System 还是独立的 Application Server 而有所不同。

将管理代理作为服务启动

将管理代理作为服务启动,可确保它继续运行直到系统关闭或管理代理被明确停止。命令取决于您的安装和平台:

Solaris 或 Linux 上的 Java Enterprise System

要将管理代理作为服务启动,请使用以下命令:

/etc/init.d/ma-initd start

要停止该服务,请使用以下命令:

/etc/init.d/ma-initd stop

Windows 上的 Java Enterprise System

要将管理代理作为 Windows 服务启动,请使用以下命令:HADB_install_dir\bin\ma -i [config-file ]

可选参数 config-file 指定了管理代理配置文件。仅当您希望更改默认管理代理配置时,才使用配置文件。有关更多信息,请参见自定义管理代理配置

要将管理代理(作为服务)停止并删除(注销),请使用以下命令:HADB_install_dir\bin\ma -r [config-file ]

要执行管理,请选择“管理工具”|“服务”,以便能够启动和停止该服务、禁用自动启动等等。

Solaris 或 Linux 上的独立 Application Server

要将管理代理作为服务启动,请使用以下命令:

HADB_install_dir/bin/ma-initd start

要停止该服务,请使用以下命令:

HADB_install_dir/bin/ma-initd stop

要更改默认值,请编辑 shell 脚本 HADB_install_dir/bin/ma-initd。将 ma-initd 复制到目录 /etc/init.d。替换脚本中 HADB_ROOT 和 HADB_MA_CFG 的默认值以对应于您的安装:

Windows 上的独立 Application Server

要将管理代理作为 Windows 服务启动,请使用以下命令:HADB_install_dir\bin\ma -i [config-file ]

可选参数 config-file 指定了管理代理配置文件。仅当您希望更改默认管理代理配置时,才使用配置文件。

要将管理代理(作为服务)停止并删除(注销),请使用以下命令:HADB_install_dir\bin\ma -r [config-file ]

要执行管理,请选择“管理工具”|“服务”,以便能够启动和停止该服务、禁用自动启动等等。

确保管理代理自动重新启动

在生产部署中,将管理代理配置为自动重新启动。这样可确保在 ma 进程失败或操作系统重新引导时管理代理的可用性。

在 Windows 平台上,将管理代理作为服务启动后,您可以使用 Windows 管理工具将服务的启动类型设置为“自动”,然后设置所需的恢复选项。

在 Solaris 和 Linux 平台上,使用本节中的过程可配置管理代理自动重新启动。这些过程确保管理代理仅在系统进入以下两个运行级时才启动:

进入其他运行级将停止管理代理。

Procedure在 Solaris 或 Linux 上使用 Java Enterprise System 配置自动重新启动

开始之前

本节假定您对操作系统初始化和运行级有基本的了解。有关这些主题的信息,请参见您的操作系统文档。

  1. 请确保您系统的默认运行级为 3 或 5。

    要查看系统的默认运行级,请检查文件 /etc/inittab,并在靠近顶部的位置,查找类似于如下所示的行:

    id:5:initdefault:

    本示例显示了默认运行级 5。

  2. 创建指向文件 /etc/init.d/ma-initd 的软链接,如创建软链接中所述。

  3. 重新引导计算机。

接下来的操作

取消激活自动启动和停止代理、删除链接或将链接名称中的字母 K 和 S 更改为小写。

Procedure在 Solaris 或 Linux 上使用独立 Application Server 配置自动重新启动

  1. 在 shell 中,将当前目录更改为 HADB_install_dir/bin

  2. 编辑 shell 脚本 ma-initd

    确保脚本中 HADB_ROOT 和 HADB_MA_CFG 的默认值反映您的安装:

    • HADB_ROOT 为 HADB 安装目录 HADB_install_dir

    • HADB_MA_CFG 为管理代理配置文件的位置。有关更多信息,请参见自定义管理代理配置

  3. ma-initd 复制到目录 /etc/init.d

  4. 创建指向文件 /etc/init.d/ma-initd 的软链接,如创建软链接中所述。

接下来的操作

取消激活自动启动和停止代理、删除链接或将链接名称中的字母 K 和 S 更改为小写。

创建软链接

在 Solaris 上,创建以下软链接:

/etc/rc0.d/K20ma-initd
/etc/rc1.d/K20ma-initd
/etc/rc2.d/K20ma-initd
/etc/rc3.d/S99ma-initd
/etc/rc5.d/K20ma-initd (only for Sun 4m and 4u architecture)
/etc/rc6.d/K20ma-initd
/etc/rcS.d/K20ma-initd

在 Linux 上,创建以下软链接:

/etc/rc0.d/K20ma-initd
/etc/rc1.d/K20ma-initd
/etc/rc3.d/S99ma-initd
/etc/rc5.d/S99ma-initd
/etc/rc6.d/K20ma-initd

在控制台模式下启动管理代理

您可能希望在控制台模式下启动管理代理以便进行评估或测试。请勿在生产环境中以这种方式启动管理代理,因为系统或进程失败后 ma 进程将不会重新启动而且命令窗口关闭时该进程将终止。命令取决于您的平台和安装:

Solaris 或 Linux 上的 Java Enterprise System

要在控制台模式下启动 HADB 管理代理,请使用以下命令:

opt/SUNWhadb/bin/ma [config-file]

管理代理的默认配置文件为 /etc/opt/SUNWhadb/mgt.cfg

要停止管理代理,请中止进程或关闭 shell 窗口。

Windows 上的 Java Enterprise System

要在控制台模式下启动管理代理,请使用以下命令:

HADB_install_dir\bin\ma [config-file]

可选参数 config-file 为管理代理配置文件的名称。有关配置文件的更多信息,请参见自定义管理代理配置

要停止代理,请中止进程。

Windows 上的独立 Application Server

要在控制台模式下启动管理代理,请使用以下命令:

HADB_install_dir\bin\ma [config-file]

可选参数 config-file 为管理代理配置文件的名称;有关更多信息,请参见自定义管理代理配置

要停止管理代理,请中止进程。

Solaris 或 Linux 上的独立 Application Server

要在控制台模式下启动 HADB 管理代理,请使用以下命令:

HADB_install_dir/bin/ma [config-file]

管理代理的默认配置文件为 HADB_install_dir/bin/ma.cfg

要停止管理代理,请中止进程或关闭 shell 窗口。

使用 Solaris 10 服务管理工具运行管理代理

在 Solaris 10 上,服务管理工具 (Service Management Facility, SMF) 提供了重新启动、查看和管理服务的机制。您可以使用 SMF 启动、重新启动和管理 HADB 管理代理。

管理代理的故障管理资源标识符 (fault management resource identifier, FMRI) 为 svc:/application/hadb-ma

管理代理命令语法

管理代理 ma 命令的语法为:

ma [common-options] 
[ service-options] 
config-file

其中:

表 3–1 管理代理通用选项

选项 

说明 

默认值 

--define name=value-D

value 指定给属性 name,其中属性为配置文件中定义的属性之一。此选项可以重复多次。

无 

--help-? 

显示帮助信息。 

False 

--javahome path-j

使用位于 path 的 Java 运行时环境(1.4 版或更高版本)。

无 

--systemroot path-y

通常设置在 %SystemRoot% 中的操作系统根目录的路径。 

无 

--version-V 

显示版本信息。 

False 

表 3–2 介绍了用于将管理代理作为 Windows 服务启动的选项。-i、-r 和 -s 选项相互排斥,即每次只能使用其中一个选项。

在 Windows 上为配置文件或命令行中的属性值指定路径时,使用双引号 (") 为包含空格的文件路径进行转义。使用双引号和反斜杠:"\: 和\"为驱动器和目录分隔符(: 和 \)进行转义。

表 3–2 管理代理服务选项(仅限于 Windows)

选项 

说明 

默认值 

--install-i 

将代理作为 Windows 服务来安装并启动该服务。仅使用 -i、-r 和 -s 选项之一。 

False 

--name servicename-n

在主机上运行多个代理时,将指定名称用于服务。 

HADBMgmtAgent 

--remove-r 

停止服务并从 Windows 服务管理器中删除代理。仅使用 -i、-r 和 -s 选项之一。 

False 

--service-s 

将代理作为 Windows 服务来运行。仅使用 -i、-r 和 -s 选项之一。 

False 

自定义管理代理配置

HADB 包含可用于自定义管理代理设置的配置文件。未指定配置文件而启动管理代理时,将使用默认值。如果指定了配置文件,管理代理将使用该文件中的设置。您可以在域中所有主机上重复使用该配置文件。

Procedure在 HADB 主机上自定义管理代理配置

  1. 编辑管理代理配置文件并设置所需的值。

  2. 启动管理代理(将自定义的配置文件指定为参数)。

配置文件

使用 Java Enterprise System 时,配置文件中的所有条目都被注释掉。使用默认配置时无需任何更改。要自定义管理代理配置,请从文件删除注释,并按需要更改值,然后启动将配置文件指定为参数的管理代理。

管理代理配置文件安装在:

使用独立安装程序将管理代理配置文件安装在:

下表介绍了配置文件中的设置。

表 3–3 配置文件设置

设置名称 

说明 

默认值 

console.loglevel

控制台的日志级别。有效值为 SEVERE、ERROR、WARNING、INFO、FINE、FINER、FINEST 

WARNING 

logfile.loglevel

日志文件的日志级别。有效值为 SEVERE、ERROR、WARNING、INFO、FINE、FINER、FINEST 

INFO 

logfile.name

日志文件的名称和位置。必须为具有读取/写入权限的有效路径。 

Solaris 和 Linux:/var/opt/SUNWhadb/ma/ma.log

Windows:HADB_install_dir\ma.log

ma.server.type

客户机协议。仅支持 JMXMP。 

jmxmp 

ma.server.
jmxmp.port

用于内部 (UDP) 和外部 (TCP) 通信的端口号。必须为正整数。建议范围为 1024-49151。 

1862 

ma.server.
mainternal.interfaces

具有多个接口的计算机的内部通信接口。必须为有效的 IPv4 地址掩码。同一个域的所有管理代理必须使用相同的子网。 

例如,如果主机有两个接口 10.10.116.61 和 10.10.124.61,使用 10.10.116.0/24 可以使用第一个接口。斜杠后的数字表示子网掩码的位数。 

无 

ma.server.
dbdevicepath

存储 HADB 设备信息的路径。 

Solaris 和 Linux:/var/opt/SUNWhadb/4

Windows:HADB_install_dir\device

ma.server.
dbhistorypath

存储 HADB 历史文件的路径。 

Solaris 和 Linux:/var/opt/SUNWhadb

Windows:REPLACEDIR(运行时由实际 URL 替换。) 

ma.server.
dbconfigpath

存储节点配置数据的路径。 

Solaris 和 Linux:/var/opt/SUNWhadb/dbdef

Windows:C:\Sun\SUNWhadb\dbdef

repository.dr.path

域系统信息库文件的路径。 

Solaris 和 Linux:/var/opt/SUNWhadb/repository

Windows:C:\Sun\SUNWhadb\repository

使用 hadbm 管理命令

使用 hadbm 命令行实用程序来管理 HADB 域及其数据库实例和节点。hadbm 实用程序(也称为管理客户机)向指定的管理代理(用作管理服务器)发送管理请求,该管理代理可以从系统信息库访问数据库配置。

本节介绍了 hadbm 命令行实用程序,包括以下主题:

命令语法

hadbm 实用程序位于 HADB_install_dir/bin 目录中。hadbm 命令的常规语法如下:

hadbm subcommand  
[-short-option [option-value]] 
[--long-option [option-value]] 
[operands]

子命令标识了要执行的操作或任务。子命令区分大小写。大多数子命令都具有一个操作数(通常为 dbname)。

选项修改了 hadbm 如何执行子命令。选项区分大小写。每个选项都有长短两种形式。在短形式之前加一个破折号 (-);在长形式前加两个破折号 (--)。大多数选项都需要参数值,但布尔选项除外(布尔选项必须存在才能启用功能)。选项对于命令的成功执行不是必需的。

如果子命令需要数据库名称,而您未指定,则 hadbm 将使用默认数据库 hadb


示例 3–1 hadbm 命令示例

以下说明了 status 子命令:

hadbm status --nodes

安全性选项

出于安全性原因,所有 hadbm 命令都需要管理员密码。创建数据库或域时,使用 --adminpassword 选项设置密码。自此之后,您必须在执行数据库或域操作时指定该密码。

为增强安全性,请使用 --adminpasswordfile 选项指定包含密码的文件,而不是在命令行上输入密码。使用以下行定义密码文件中的密码:

HADBM_ADMINPASSWORD=password

用密码替换 password。忽略文件中的其他内容。

如果同时指定了 --adminpassword--adminpasswordfile 选项,则 --adminpassword 将优先使用。如果需要密码,但未在命令中指定密码,则 hadbm 将提示您输入密码。


注 –

仅在创建数据库或域时,才可以设置管理员密码,此后无法更改此密码。


除管理员密码之外,HADB 还需要数据库密码以执行修改数据库模式的操作。使用以下命令时,必须使用上述两个密码:hadbm createhadbm addnodeshadbm refragment

在命令行上使用 --dbpassword 选项指定数据库密码。与管理员密码类似,您也可以将密码放入文件并使用 --dbpasswordfile 选项指定文件位置。使用以下行设置密码文件中的密码:

HADBM_DBPASSWORD=password

为了测试或评估,您可以在创建数据库或域时使用 --no-adminauthentication 选项禁用密码验证。有关更多信息,请参见创建数据库创建管理域

下表汇总了 hadbm 安全性命令行选项。

表 3–4 hadbm 安全性选项

选项(短形式) 

说明 

--adminpassword=password

-w 

指定数据库或域的管理员密码。如果创建数据库或域时使用了该选项,则必须在每次使用 hadbm 操作数据库或域时提供该密码。 

可以使用该选项或 --adminpasswordfile,但两者不能同时使用。 

--adminpasswordfile=filepath

-W 

指定包含数据库或域的管理员密码的文件。如果创建数据库或域时使用了该选项,则必须在每次使用 hadbm 操作数据库或域时提供该密码。 

可以使用该选项或 --adminpassword,但两者不能同时使用。 

--no-adminauthentication 

-U 

创建数据库或域时,使用该选项可指定无需管理员密码。出于安全性原因,请勿在生产部署中使用该选项。 

--dbpassword= password

-p 

指定数据库密码。如果在创建数据库时使用了该选项,则必须在每次使用 hadbm 命令操作数据库时提供该密码。为 HADB 系统用户创建密码。至少应为 8 个字符。可以使用该选项或 --dbpasswordfile,但两者不能同时使用。

--dbpasswordfile= filepath

-P 

指定包含 HADB 系统用户密码的文件。可以使用该选项或 --dbpassword,但两者不能同时使用。

常规选项

常规命令选项可用于任何 hadbm 子命令。它们都是布尔选项,默认情况下为 false。下表介绍了 hadbm 常规命令选项。

表 3–5 hadbm 常规选项

选项(短形式) 

说明 

--quiet 

-q 

在无提示、没有任何描述性消息的情况下执行子命令。 

--help 

-? 

显示该命令和所有支持的子命令的简短说明。无需任何子命令。 

--version 

-V 

显示 hadbm 命令的版本详细信息。无需任何子命令。

--yes 

-y 

以非交互模式执行子命令。 

--force 

-f 

如果已满足命令的发出条件,则非交互地执行命令,并且不抛出错误。 

--echo 

-e 

显示带有所有选项的子命令和选项的用户定义值或默认值,然后执行子命令。 

--agent=URL

-m 

管理代理的 URL。URL 为:hostlist:port,其中 hostlist 是以逗号分隔的主机名或 IP 地址列表,port 是运行管理代理的端口号。

默认值为 localhost:1862。 

注:该选项对 hadbm addnodes 无效。

环境变量

为了方便起见,您可以设置环境变量而不用指定命令选项。下表介绍了与 hadbm 命令选项对应的环境变量。

表 3–6 HADB 选项和环境变量

长形式 

短形式 

默认值 

环境变量 

--adminpassword 

-w 

无 

$HADBM_ADMINPASSWORD 

--agent 

--m 

localhost:1862 

$HADBM_AGENT 

--datadevices 

-a 

1

$HADBM_DATADEVICES 

dbname 

无 

hadb

$HADBM_DB 

--dbpassword 

-p 

无 

$HADBM_DBPASSWORD 

--dbpasswordfile 

-P 

无 

$HADBM_DBPASSWORDFILE 

--devicepath 

-d 

Solaris 和 Linux:/var/opt/SUNWhadb

Windows:C:\Sun\AppServer \SUNWhadb\vers,其中 vers 是 HADB 的版本号。

$HADBM_DEVICEPATH 

--devicesize 

-z 

无 

$HADBM_DEVICESIZE 

--echo 

-e 

False 

$HADBM_ECHO 

--fast 

-F 

False 

$HADBM_FAST 

--force 

-f 

False 

$HADBM_FORCE 

--help 

-? 

False 

$HADBM_HELP 

--historypath 

-t 

Solaris 和 Linux:/var/opt/SUNWhadb

Windows:REPLACEDIR,运行时由实际 URL 替换。 

$HADBM_HISTORYPATH 

--hosts 

-H 

无 

$HADBM_HOSTS 

--interactive 

-i 

True 

$HADBM_INTERACTIVE 

--no-refragment 

-r 

False 

$HADBM_NOREFRAGMENT 

--portbase 

-b 

15200 

$HADBM_PORTBASE 

--quiet 

-q 

False 

$HADBM_QUIET 

--repair 

-R 

True 

$HADBM_REPAIR 

--rolling 

-g 

True 

$HADBM_ROLLING 

--saveto 

-o 

无 

$HADBM_SAVETO 

--set 

-S 

无 

$HADBM_SET 

--spares 

-s 

$HADBM_SPARES 

--startlevel 

-l 

normal 

$HADBM_STARTLEVEL 

--version 

-V 

False 

$HADBM_VERSION 

--yes 

-y 

False 

$HADBM_YES 

配置 HADB

本节介绍了以下基本 HADB 配置任务:

创建管理域

命令 hadbm createdomain 可以创建包含指定 HADB 主机的管理域。该命令初始化主机和持久性配置存储之间的内部通信通道。

该命令的语法为:

hadbm createdomain
 [--adminpassword=password |--adminpasswordfile=
file | --no-adminauthentication] [--agent=maurl]
 hostlist

hostlist 操作数是以逗号分隔的 HADB 主机列表,其中每个主机都是一个有效的 IPv4 网络地址。hostlist 中包含您希望置入新域中的所有主机。

有关命令选项的说明,请参见常规选项

使用该命令之前,请确保 hostlist 中的每台主机都在运行 HADB 管理代理。此外,这些管理代理必须:

hadbm 创建管理域之后,将启用域中的所有主机。接下来管理代理就可以管理数据库了。创建 HADB 域之后,接着应创建 HADB 数据库。有关创建 HADB 数据库的更多信息,请参见创建数据库


示例 3–2 创建 HADB 管理域

以下示例将在四个指定主机上创建管理域:

hadbm createdomain --adminpassword= password host1,host2,host3,host4

hadbm 成功执行该命令之后,您将看到以下消息:

Domain host1,host2,host3, host4 created.

创建 HADB 域之后,使用管理代理注册 HADB 软件包的路径和版本。


创建数据库

使用 hadbm create 命令手动创建数据库。

使用此命令创建数据库之前,请先创建管理域并注册 HADB 软件包。如果在运行 hadbm create 时未执行这两步,则该命令将隐式执行它们。尽管这看起来可能更省事,但是任何命令的失败都可能会使调试变得困难。此外,hadbm create 不是原子操作,也就是说,如果任一隐式命令失败,执行成功的命令将不会被回滚。因此,最好只在创建域并注册 HADB 软件包之后创建数据库。

例如,如果 hadbm createdomainhadbm registerpackage 执行成功,但 hadbm create database 失败,则 hadbm createdomainhadbm registerpackage 所做的更改将保留下来。

Procedure创建数据库

  1. 创建管理域。

    有关更多信息,请参见创建管理域

  2. 注册 HADB 软件包。

    有关更多信息,请参见注册 HADB 软件包

  3. 使用 hadbm create 命令创建数据库。

    有关命令语法的信息,请参见以下部分。

hadbm create 命令语法

hadbm create [--package=name] [--packagepath=path] [--historypath=path] [--devicepath=path] [--datadevices=number ] [--portbase=number] [--spares=number ] [--set=attr-val-list] [--agent=maurl] [--no-cleanup] [ --no-clear ] [ --devicesize =size] [--dbpassword=password | --dbpasswordfile=file ] --hosts=host list [--adminpassword=password | --adminpasswordfile=file | --no-adminauthentication] [dbname ]

dbname 操作数指定数据库名称,该名称必须唯一。为了确保数据库名称唯一,请使用 hadbm list 命令列出现有数据库名称。请使用默认数据库名称,除非您需要创建多个数据库。例如,要在同一组 HADB 计算机上创建具有独立数据库的多个群集,请为每个群集使用单独的数据库名称。

hadbm create 命令将错误消息写入控制台而不是日志文件。

表 3–7 介绍了特殊的 hadbm create 命令选项。有关其他命令选项的说明,请参见常规选项

表 3–7 hadbm create 选项

选项(短形式) 

说明 

默认值 

--datadevices= number

-a 

每个节点上的数据设备数目(在 1 至 8 之间,包括 1 和 8)。数据设备从 0 开始编号。 

--devicepath= path

-d 

设备的路径。有四种设备: 

  • DataDevice

  • NiLogDevice(节点内部日志设备)

  • RelalgDevice(关系代数查询设备)

  • NoManDevice(节点管理器设备)

    此路径必须存在并且可写。要为每个节点或每个设备设置不同的设备路径,请参见设置异构设备路径

Solaris 和 Linux:/var/opt/SUNWhadb

Windows:C:\Sun\AppServer \SUNWhadb\vers,其中 vers 是 HADB 的版本号。

默认值由管理代理配置文件中的 ma.server.dbdevicepath 指定。有关详细信息,请参见配置文件

--devicesize= size

-z 

每个节点的设备大小。有关更多信息,请参见指定设备大小

要增加设备大小,请参见为现有节点添加存储空间

1024 MB 

最大值小于操作系统文件的最大大小或为 256 GB。最小值为: 

(4 x LogbufferSize + 16MB) / n

其中 n 为选项 --datadevices 指定的数据设备数。

--historypath= path

-t 

历史文件的路径。此路径必须已存在并且可写。 

有关历史文件的更多信息,请参见清除和归档历史文件

默认值由管理代理配置文件中的 ma.server.dbhistorypath 指定。有关详细信息,请参见配置文件

Solaris 和 Linux:/var/opt/SUNWhadb

在 Windows 上:REPLACEDIR(运行时由实际 URL 替换。) 

--hosts= hostlist

-H 

数据库节点的以逗号分隔的主机名或 IP 地址(仅限于 IPv4)列表。使用 IP 地址以避免依赖 DNS 查找。主机名必须为绝对主机名。不能使用 localhost127.0.0.1 作为主机名。

有关更多信息,请参见指定主机

无 

--package=name -k

HADB 软件包的名称(版本)。如果未找到该软件包,则注册默认软件包。 

此选项已过时。使用 hadbm registerpackage 命令在域中注册软件包。 

无 

--packagepath=path-L

HADB 软件包的路径。仅当未在域中注册软件包时使用。 

此选项已过时。使用 hadbm registerpackage 命令在域中注册软件包。 

无 

--portbase= number

-b 

节点 0 所使用的端口基准号。从该基准号开始,以 20 为增量自动为后续节点指定端口基准号。每个节点均使用其端口基准号和接下来的五个连续编号端口。 

要在一台计算机上运行几个数据库,请制订明确分配端口号的计划。 

15200 

--spares= number

-s 

备用节点的数目。此数目必须为偶数,并且必须小于 --hosts 选项中指定的节点数目。

--set=attr-val-list

-S 

以逗号分隔的数据库配置属性列表(采用 name =value 格式)。有关数据库配置属性的说明,请参见清除和归档历史文件

无 


示例 3–3 创建数据库的示例

以下命令是创建数据库的一个示例:

hadbm create --spares 2 --devicesize 1024  --hosts n0,n1,n2,n3,n4,n5

指定主机

使用 --hosts 选项为数据库中的节点指定以逗号分隔的主机名或 IP 地址列表。hadbm create 命令为列表中的每个主机名(或 IP 地址)创建一个节点。节点的数目必须为偶数。使用重复的主机名将在同一台计算机上创建具有不同端口号的多个节点。确保同一台计算机上的节点不是镜像节点,并且不是来自不同的 DRU。

节点将按照在此选项中列出的顺序从零开始编号。第一对镜像节点是节点零 (0) 和一 (1),第二对是二 (2) 和三 (3),依此类推。奇数编号的节点位于一个 DRU 中,偶数编号的节点位于另一个 DRU 中。如果使用 --spares 选项,则备用节点为具有最大编号的那些节点。

有关配置双网络接口的信息,请参见配置网络冗余

指定设备大小

使用 --devicesize 选项指定设备大小。建议的设备大小为:

(4x / nd + 4l/d) / 0.99

其中

设置异构设备路径

要为每个节点或服务设置不同的设备路径,请使用 hadbm create--set 选项。有四种类型的设备:DataDeviceNiLogDevice(节点内部日志设备)、RelalgDevice(关系代数查询设备)和 NoManDevice(节点管理器设备)。每个 name=value 对的语法如下,其中仅当 deviceDataDevice 时才需要 -devno

node-nodeno.device-devno.Devicepath

例如:

--set Node-0.DataDevice-0.DevicePath=/disk0,
Node-1.DataDevice-0.DevicePath=/disk 1

您还可以为历史文件设置异构路径,如下所示:

node-nodeno.historypath=path

有关历史文件的信息,请参见清除和归档历史文件

所有不是为特定节点或设备设置的设备路径的默认值都为 --devicepath 的值。


注 –

使用 hadbm sethadbm addnodes 命令更改设备路径和历史文件的位置。


错误诊断

如果创建数据库时遇到困难,请检查以下内容:

查看和修改配置属性

您可以分别使用 hadbm gethadbm set 命令来查看和修改数据库配置属性 。

获取配置属性的值

要获得配置属性的值,请使用 hadbm get 命令。有关有效属性的列表,请参见配置属性。该命令语法为:

hadbm get attribute-list | --all  
[dbname]  
[--adminpassword=password | --adminpasswordfile=file]  
[--agent=maurl]

dbname 操作数指定数据库名称。默认值为 hadb

attribute-list 操作数是以逗号分隔或包含在引号之间并以空格分隔的属性的列表。--all 选项显示所有属性的值。有关 hadbm get 的所有属性的列表,请参见配置属性

有关命令选项的说明,请参见常规选项


示例 3–4 使用 hadbm get 的示例

hadbm get JdbcUrl,NumberOfSessions

设置配置属性的值

要设置配置属性的值,请使用 hadbm set 命令。有关有效属性的列表,请参见配置属性

hadbm set [dbname] attribute
=value[,attribute=
value...]
 [--adminpassword=password | --adminpasswordfile=file]
 [--agent=maurl]

dbname 操作数指定数据库名称。默认值为 hadb

attribute=value 列表是以逗号分隔或包含在引号之间并以空格分隔的属性的列表。

有关命令选项的说明,请参见常规选项

如果该命令执行成功,它将重新启动数据库使其恢复先前状态或进入更佳状态。有关数据库状态的信息,请参见获取 HADB 的状态。按照重新启动数据库中的说明重新启动 HADB。

无法使用 hadbm set 设置以下属性,而应在创建数据库时设置它们(请参见创建数据库)。


注 –

使用 hadbm set 设置除 ConnectionTraceSQLTraceMode 之外的任何配置属性将导致 HADB 的滚动重新启动。在滚动重新启动过程中,每次将停止并启动(使用新配置)一个节点;不中断 HADB 服务。

如果设置了 ConnectionTraceSQLTraceMode,将不会发生滚动重新启动,但更改仅适用于从 Application Server 实例建立的新的 HADB 连接。


配置属性

下表列出了可以通过 hadbm set 修改并通过 hadbm get 检索的配置属性列表。

表 3–8 配置属性

属性 

说明 

默认值 

范围 

ConnectionTrace

如果为 true,当客户机连接(JDBC、ODBC)开始或结束时将在 HADB 历史文件中记录一条消息。 

False 

True 或 False 

CoreFile

请勿更改默认值。 

False 

True 或 False 

DatabaseName

数据库名称。 

hadb 

 

DataBufferPoolSize

在共享内存中分配的数据缓冲池的大小。 

200 MB 

16 - 2047 MB 

DataDeviceSize

指定节点的设备大小。有关建议的 DataDeviceSize 的信息,请参见指定设备大小

最大值为 256 GB 或操作系统文件的最大大小,取其中的较小值。最小值为: 

(4 x LogbufferSize + 16MB) / n

其中 n 为数据设备的数目。

1024 MB 

32 - 262144 MB 

PackageName 

数据库使用的 HADB 软件包的名称。 

V4.x.x.x 

无 

DevicePath

设备的位置。这些设备包括: 

  • 数据设备 (DataDevice)

  • 节点内部日志设备 (NiLogDevice)

  • 关系代数查询设备 (RelalgDevice)

Solaris 和 Linux:/var/opt/SUNWhadb

Windows:C:\Sun\AppServer \SUNWhadb\vers,其中 vers 是 HADB 的版本号。

 

EagerSessionThreshold

确定使用正常还是主动空闲会话失效。 

在正常空闲会话失效中,空闲时间超过 SessionTimeout 秒的会话将失效。

当并发会话的数目超过最大会话数目的 EagerSessionThreshold% 时,空闲时间超过 EagerSessionTimeout 秒的会话将失效。

NumberOfSessions 属性值的一半 

0 - 100 

EagerSessionTimeout

使用主动会话失效时,在数据库连接失效之前该连接可以处于空闲状态的秒数。 

120 秒 

0-2147483647 秒 

EventBufferSize

记录数据库事件的事件缓冲区的大小。如果设置为 0,将不执行事件缓冲区日志记录。

在故障期间,将转储事件缓冲区。在试验部署期间,这将给出有关故障原因的有价值的信息并且非常有用。 

将事件写入内存会影响性能。 

0 MB

0-2097152 MB 

HistoryPath

包含信息、警告和错误消息的 HADB 历史文件的位置。 

此属性为只读属性。 

Solaris 和 Linux:/var/opt/SUNWhadb

Windows:REPLACEDIR(运行时由实际 URL 替换。) 

 

InternalLogbufferSize

记录与存储数据相关的操作的节点内部日志设备的大小。 

12 MB 

4 - 128 MB 

JdbcUrl

数据库的 JDBC 连接 URL。 

此属性为只读属性。 

无 

 

LogbufferSize

记录与数据相关的操作的日志缓冲区的大小。 

48 MB 

4 - 2048 MB 

MaxTables

HADB 数据库中允许的表的最大数目。 

1100 

100 - 1100 

NumberOfDatadevices

HADB 节点使用的数据设备的数目。 

此属性为只读属性。 

1 - 8 

NumberOfLocks

HADB 节点分配的锁的数目。 

50000 

20000- 1073741824 

NumberOfSessions

可以为 HADB 节点打开的会话(数据库连接)的最大数目。 

100 

1 - 10000 

PortBase

用于为不同的 HADB 进程创建不同的端口号的基准端口号。 

此属性为只读属性。 

15200 

10000 - 63000 

RelalgDeviceSize

关系代数查询中使用的设备的大小。 

128 MB 

32 - 262144 MB 

SessionTimeout

使用正常会话失效时,在数据库连接失效之前该连接可以处于空闲状态的时间。 

1800 秒 

0-2147483647 秒 

SQLTraceMode

写入历史文件的有关已执行的 SQL 查询的信息量。 

如果为 SHORT,则记录 SQL 会话的登录和注销。如果为 FULL,则记录正在准备和正在执行的所有 SQL 查询,包括参数值。

NONE 

NONE/SHORT/FULL 

StartRepairDelay

备用节点允许故障活动节点执行节点恢复的最长时间。如果故障节点在此时间间隔内无法恢复,备用节点将开始从故障节点的镜像复制数据并成为活动节点。建议不要更改默认值。 

20 秒 

0 - 100000 秒 

StatInterval

HADB 节点向其历史文件写入吞吐量和响应时间统计信息的时间间隔。要禁用此属性,请将其设置为 0。 

以下是统计信息行的示例: 

Req-reply time: # 123, min= 69 avg= 1160 max= 9311 %=100.0

符号 (#) 后的数字是在 StatInterval 内处理的请求的数目。接下来的三个数字是在 StatInterval 内完成的事务所用的最短、平均和最长时间(以微秒为单位)。百分比符号 (%) 后的数字是在 StatInterval 中 15 毫秒之内成功完成的事务数目。

600 秒 

0 - 600 秒 

SyslogFacility

syslog 报告时使用的工具。应当配置 syslog 守护进程(有关详细信息,请参见 man syslogd.conf)。

请使用同一计算机上运行的其他应用程序未使用的工具。 

设置为 none 可以禁用 syslog 日志记录。

local0 

local0、local1、local2、local3、local4、local5、local6、local7、kern、user、mail、daemon、auth、syslog、lpr、news、uucp、cron、none 

SysLogging

如果为 true,HADB 节点将信息写入操作系统的 syslog 文件。

True 

True 或 False 

SysLogLevel

保存到操作系统的 syslog 文件的 HADB 消息的最低级别。将记录该级别或更高级别的所有消息。例如,"info" 将记录所有消息。

warning 

nonealert errorwarning info 

SyslogPrefix

在由 HADB 写入的所有 syslog 消息之前插入的文本字符串。

hadb -dbname 

 

TakeoverTime

节点出现故障和该节点的镜像接管之间的时间。请勿更改默认值。 

10000(毫秒) 

500 - 16000 毫秒 

配置 JDBC 连接池

Application Server 使用 Java Database Connectivity (JDBC) API 与 HADB 进行通信。asadmin configure-ha-cluster 命令自动创建 JDBC 连接池以与 HADB 一起使用(用于群集 cluster-name)。连接池的名称为 "cluster-name-hadb-pool"。JDBC 资源的 JNDI URL 为 "jdbc/cluster-name-hastore"。

连接池的初始配置通常已足够。添加节点时,更改稳定的池大小,以使每个 HADB 活动节点都有八个连接。请参见添加节点

本节包含以下主题:

有关连接池和 JDBC 资源的常规信息,请参见《Sun Java System Application Server 9.1 高可用性管理指南》

获取 JDBC URL

在可以设置 JDBC 连接池之前,需要使用 hadbm get 命令来确定 HADB 的 JDBC URL,如下所示:

hadbm get JdbcUrl [dbname]

例如:

hadbm get JdbcUrl

该命令显示 JDBC URL,其形式如下所示:

jdbc:sun:hadb:host:port,
host:port,...

删除 jdbc:sun:hadb: 前缀并将 host:port, host:port... 部分用作 serverList 连接池属性(表 3–10 所示)的值。

创建连接池

下表汇总了 HADB 所需的连接池设置。添加节点时,请更改稳定池大小,但不要更改其他设置。

表 3–9 HADB 连接池设置

设置 

HADB 所需的值 

名称

HADB JDBC 资源的池名称设置必须指定此名称 

数据库供应商

HADB 4.4 

全局事务支持

取消选中/false 

数据源类名称

com.sun.hadb.jdbc.ds.HadbDataSource

稳定的池大小

每个活动的 HADB 节点使用 8 个连接。有关更多详细信息,请参见 System Deployment Guide

需要连接验证

选中/true 

验证方法

meta-data

表名称

不指定 

所有连接均失败

取消选中/false 

事务隔离

repeatable-read

保证隔离层

选中/true 

下表汇总了 HADB 所需的连接池属性。添加节点时,请更改 serverList,但不要更改其他属性。

表 3–10 HADB 连接池属性

属性 

说明 

username

asadmin create-session-store 命令中使用的 storeuser 的名称。

password

asadmin create-session-store 命令中使用的密码 (storepassword)。

serverList

HADB 的 JDBC URL。要确定该值,请参见获取 JDBC URL

如果将节点添加到数据库中,则必须更改此值。请参见添加节点

cacheDatabaseMetaData

需要时设置为 false,以确保对 Connection.getMetaData() 的调用可以获得对数据库的调用,从而确保连接有效。

eliminateRedundantEndTransaction

必要时设置为 true 可以通过消除冗余提交和回滚请求以及忽略这些请求(如果未打开任何事务)来提高性能。

maxStatement

在驱动程序语句池中高速缓存的每个打开的连接的最大语句数目。请将此属性设置为 20


示例 3–5 创建连接池

下面是一个创建 HADB JDBC 连接池的示例 asadmin create-jdbc-connection-pool 命令:

asadmin create-jdbc-connection-pool
--user adminname --password secret 
--datasourceclassname com.sun.hadb.jdbc.ds.HadbDataSource
--steadypoolsize=32
--isolationlevel=repeatable-read
--isconnectvalidatereq=true
--validationmethod=meta-data
--property username=storename:password=secret456:serverList=
host\:port,host\:port,
host\\:port,host\:port,
host\:port,host\:port
:cacheDatabaseMetaData=false:eliminateRedundantEndTransaction=true hadbpool

在 Solaris 上,用双反斜杠 (\\) 对属性值内的冒号字符 (:) 进行转义。在 Windows 上,用单反斜杠 (\) 对冒号字符 (:)进行转义。


创建 JDBC 资源

下表汇总了 HADB 所需的 JDBC 资源设置。

表 3–11 HADB JDBC 资源设置

设置 

说明 

JNDI 名称

在会话持久性配置中,以下 JNDI 名称为默认值:jdbc/hastore。您可以使用默认名称,也可以使用其他名称。

当激活可用性服务时,还必须将此 JNDI 名称指定为 store-pool-jndi-name 持久性存储属性的值。

池名称

从列表中选择此 JDBC 资源所使用的 HADB 连接池的名称(或 ID)。有关更多信息,请参见配置网络冗余

已启用的数据源

选中/true 

管理 HADB

当替换或升级网络、硬件、操作系统或 HADB 软件时,通常需要执行管理操作。以下各节说明了各种管理操作:

管理域

您可以在 HADB 域上执行以下操作:

有关命令选项的说明,请参见安全性选项常规选项

扩展域

使用 extenddomain 将主机添加到一个现有管理域中。该命令语法为:

hadbm extenddomain  
[--adminpassword=password | --adminpasswordfile=file]  
[--agent=maurl]  
hostlist

HADB 主机的 IP 地址必须为 IPv4 地址。

有关更多信息,请参见 hadbm-extenddomain(1)

删除域

使用 deletedomain 删除管理域。该命令语法为:

hadbm deletedomain  
[--adminpassword=password | --adminpasswordfile=file]  
[--agent=maurl]

有关更多信息,请参见 hadbm-deletedomain(1)

从域中删除主机

使用 reducedomain 从管理域中删除主机。该命令语法为:

hadbm reducedomain  
[--adminpassword=password | --adminpasswordfile=file]  
[--agent=maurl]  
host_list

有关更多信息,请参见 hadbm-reducedomain(1)

列出域中的主机

使用 listdomain 列出管理域中定义的所有主机。该命令语法为:

hadbm listdomain  
[--adminpassword=password | --adminpasswordfile=file]  
[--agent=maurl]

有关更多信息,请参见 hadbm-listdomain(1)

管理节点

您可以在单个节点上执行以下操作:

启动节点

您可能需要手动启动已停止的 HADB 节点(停止原因为其主机为进行硬件或软件的升级或替换而脱机)。此外,您可能需要手动启动由于某种原因(非双重故障)而无法重新启动的节点。有关如何从双重故障中恢复的更多信息,请参见清除数据库

在大多数情况下,您应首先尝试使用 normal 启动级别启动节点。如果 normal 启动级别失败或超时,则必须使用 repair 启动级别。

要启动数据库中的节点,请使用 hadbm startnode 命令。语法为:

hadbm startnode
 [--adminpassword=password | --adminpasswordfile=file]
 [--agent=maurl]
 [--startlevel=level]
 nodeno
 [dbname]

dbname 操作数指定数据库名称。默认值为 hadb

nodeno 操作数指定要启动的节点编号。使用 hadbm status 显示数据库中所有节点的编号。

有关更多信息,请参见 hadbm-startnode(1)

启动级别选项

hadbm startnode 命令具有一个特殊选项 --startlevel(短形式 -l),该选项指定了启动节点的级别。

节点启动级别为:

有关其他命令选项的说明,请参见常规选项


示例 3–6 启动节点的示例

hadbm startnode 1

停止节点

您可能需要停止节点以修复或升级主机的硬件或软件。要停止节点,请使用 hadbm stopnode 命令。该命令语法为:

hadbm stopnode  
[--adminpassword=password | --adminpasswordfile=file]  
[--agent=maurl]  
[--no-repair]  
nodeno  
[dbname]

nodeno 操作数指定要停止的节点的编号。此节点编号的镜像节点必须正在运行。使用 hadbm status 显示数据库中所有节点的编号。

dbname 操作数指定数据库名称。默认值为 hadb

hadbm stopnode 命令具有一个特殊选项 --no-repair(短形式 -R),该选项表明无备用节点可以替换已停止的节点。如果没有此选项,备用节点将启动并接管已停止的节点的工作。

有关其他命令选项的说明,请参见常规选项。有关更多信息,请参见 hadbm-stopnode(1)


示例 3–7 停止节点的示例

hadbm stopnode 1

重新启动节点

如果发现行为异常(例如,过度 CPU 消耗),您可能需要重新启动节点。

要重新启动数据库中的节点,请使用 hadbm restartnode 命令。该命令语法为:

hadbm restartnode  
[--adminpassword=password | --adminpasswordfile=file]  
[--agent=maurl]  
[--startlevel=level]  
nodeno  
[dbname]

dbname 操作数指定数据库名称。默认值为 hadb

nodeno 操作数指定要重新启动的节点的编号。使用 hadbm status 显示数据库中所有节点的编号。

hadbm restartnode 命令具有一个特殊选项 --startlevel(短形式 -l),该选项指定了启动节点的级别。有关更多信息,请参见启动级别选项

有关其他命令选项的说明,请参见常规选项。有关更多信息,请参见 hadbm-restartnode(1)


示例 3–8 重新启动节点的示例

hadbm restartnode 1

管理数据库

您可以在 HADB 数据库中执行以下操作:

启动数据库

要启动数据库,请使用 hadbm start 命令。此命令将启动数据库停止之前正在运行的所有节点。在停止数据库之后再次启动数据库时,不会启动单独停止(脱机)的节点。

该命令语法为:

hadbm start
[--adminpassword=password | --adminpasswordfile=file]
[--agent=maurl]
[dbname]

dbname 操作数指定数据库名称。默认值为 hadb

有关命令选项的说明,请参见常规选项。有关更多信息,请参见 hadbm-start(1)


示例 3–9 启动数据库的示例

hadbm start

停止数据库

如果使用单独的操作停止并启动数据库,则数据库处于停止状态时数据不可用。要保持数据可用,可以重新启动数据库,如重新启动数据库所述。

停止数据库以:

停止数据库之前,可以停止使用该数据库的依赖 Application Server 实例,也可以将其配置为使用持久性类型而不使用 ha

停止数据库时,将停止数据库中所有正在运行的节点并且数据库将变为已停止状态。有关数据库状态的更多信息,请参见数据库状态

要停止数据库,请使用 hadbm stop 命令。该命令语法为:

hadbm stop  
[--adminpassword=password | --adminpasswordfile= file]  
[--agent=maurl]  
[dbname]

dbname 操作数指定数据库名称。默认值为 hadb

有关命令选项的说明,请参见常规选项。有关更多信息,请参见 hadbm-stop(1)


示例 3–10 停止数据库的示例

hadbm stop

重新启动数据库

如果发现行为异常(例如持续超时问题),则可能需要重新启动数据库。在某些情况下,重新启动可以解决此问题。

重新启动数据库时,数据库及其数据仍然可用。如果使用单独的操作停止并启动 HADB,则 HADB 处于停止状态时数据和数据库服务不可用。这是因为,默认情况下,hadbm restart 执行节点的滚动重新启动:它逐个停止并启动节点。相反,hadbm stop 将同时停止所有节点。

要重新启动数据库,请使用 hadbm restart 命令。该命令语法为:

hadbm restart  
[--adminpassword=password | --adminpasswordfile=file]  
[--agent=maurl]  
[--no-rolling]  
[dbname]

dbname 操作数指定数据库名称。默认值为 hadb

特殊选项 --no-rolling(短形式 -g)指定同时重新启动所有节点(这将使服务受到损失)。如果没有此选项,此命令将重新启动数据库中的每个节点并使其达到当前状态或更佳状态。

有关其他命令选项的说明,请参见常规选项。有关更多信息,请参见 hadbm-restart(1)

例如:

hadbm restart

列出数据库

要列出 HADB 实例中的所有数据库,请使用 hadbm list 命令。该命令语法为:

hadbm list  
[--agent=maurl] 
[--adminpassword=password | --adminpasswordfile=file]

有关命令选项的说明,请参见常规选项。有关更多信息,请参见 hadbm-list(1)

清除数据库

在以下情况时清除数据库:

hadbm clear 命令可以停止数据库节点,并清除数据库设备,然后启动节点。该命令将删除 HADB 中的 Application Server 模式数据存储,包括表、用户名和密码。运行 hadbm clear 之后,使用 asadmin configure-ha-cluster 重新创建数据模式、重新配置 JDBC 连接池并重新装入会话持久性存储。

该命令语法为:

hadbm clear  [--fast]  [--spares=number]  
[--dbpassword=password | --dbpasswordfile= file]  
[--adminpassword=password | --adminpasswordfile= file]  
[--agent=maurl] 
[dbname]

dbname 操作数指定数据库名称。默认值为 hadb

下表介绍了特殊的 hadbm clear 命令选项。有关其他选项的说明,请参见常规选项

有关更多信息,请参见 hadbm-clear(1)

表 3–12 hadbm clear 选项

选项 

说明 

默认值 

--fast

-F 

在初始化数据库时跳过设备初始化。如果磁盘存储设备损坏,请勿使用此选项。 

不存在 

--spares= number

-s 

重新初始化的数据库将具有的备用节点数目。此数目必须为偶数,并且必须小于数据库中的节点数目。 

先前的备用节点数目 

例如:

hadbm clear --fast --spares=2

删除数据库

要删除现有数据库,请使用 hadbm delete 命令。该命令将删除数据库的配置文件、设备文件和历史文件,并释放共享的内存资源。您要删除的数据库必须存在并且必须处于已停止状态。请参见停止数据库

该命令语法为:

hadbm delete  
[--adminpassword=password | --adminpasswordfile=file]  
[--agent=maurl]  
[dbname]

dbname 操作数指定数据库名称。默认值为 hadb

有关命令选项的说明,请参见常规选项。有关更多信息,请参见 hadbm-delete(1)


示例 3–11 删除数据库的示例

命令:

hadbm delete

将删除默认数据库 hadb


从会话数据损坏恢复

以下情况表明会话数据可能已损坏:

Procedure使会话存储恢复到一致状态

如果您确定会话存储已损坏,则可以执行以下步骤使其恢复到一致状态:

  1. 清除会话存储。

    确定此操作是否可以修正该问题。如果已修正,则停止。如果未修正(例如,服务器日志中仍出现错误),则继续。

  2. 重新初始化所有节点上的数据空间并清除数据库中的数据。

    请参见清除数据库

    确定此操作是否可以修正该问题。如果已修正,则停止。如果未修正(例如,服务器日志中仍出现错误),则继续。

  3. 删除并重新创建数据库。

    请参见删除数据库创建数据库

扩展 HADB

扩展初始 HADB 配置的原因有两个:

本节介绍如何在无需关闭 Application Server 群集或数据库的情况下扩展 HADB,其中包括以下内容:

另请参见维护 HADB 计算机中的相关信息。

为现有节点添加存储空间

添加 HADB 存储空间:

如果节点上有未使用的磁盘空间或在添加磁盘容量时,您可能还希望向现有节点添加存储空间。有关建议的数据设备大小的信息,请参见指定设备大小

要向节点添加存储空间,请使用 hadbm set 命令增加数据设备大小。

该命令的语法为:

hadbm set DataDeviceSize=size

其中 size 为数据设备大小(以 MB 为单位)。

有关命令选项的说明,请参见常规选项

更改 FaultTolerant 或更高状态中的数据库的数据设备大小将升级系统,并且不会丢失数据或影响可用性。在重新配置过程中,数据库仍可操作。在非 FaultTolerant 或更差的系统上更改设备大小将导致数据丢失。有关数据库状态的更多信息,请参见数据库状态


示例 3–12 设置数据设备大小的示例

以下命令是设置数据设备大小的一个示例:

hadbm set DataDeviceSize=1024

添加计算机

如果 HADB 需要更多处理或存储容量,则可能需要添加计算机。要添加运行 HADB 的新计算机,请将 HADB 软件包与 Application Server 安装在一起或单独安装(如第 2 章,安装和设置高可用性数据库所述)。有关节点拓扑选择的说明,请参见《Sun Java System Application Server 9.1 部署规划指南》中的第 3  章 “选择拓扑”

Procedure将新计算机添加到现有 HADB 实例

  1. 在新节点上启动管理代理。

  2. 将管理域扩展到新主机。

    有关详细信息,请参见 hadbm extenddomain 命令。

  3. 在这些主机上启动新节点。

    有关详细信息,请参见添加节点

添加节点

要增加 HADB 系统的处理和存储容量,请创建新节点并将其添加到数据库。

添加节点后,请更新 HADB JDBC 连接池的以下属性:

要添加节点,请使用 hadbm addnodes 命令。该命令语法为:

hadbm addnodes  [--no-refragment]  [--spares=sparecount]  
[--historypath=path]  
[--devicepath=path]  
[--set=attr-name-value-list]  
[--dbpassword=password | --dbpasswordfile=file ]  
[--adminpassword=password | --adminpasswordfile=file]  
--hosts=hostlist  [dbname]

dbname 操作数指定数据库名称。默认值为 hadb。数据库必须处于 HAFaultTolerantFaultTolerant 状态。有关数据库状态的更多信息,请参见数据库状态

如果不指定 --devicepath--historypath 选项,则新节点将具有与现有数据库相同的设备路径,并与其使用相同的历史文件。

添加节点可以对现有数据执行重新分段和重新分发以在系统中包含新节点。联机重新分段需要 HADB 节点有足够的磁盘空间,可以在重新分段完成之前同时容纳旧数据和新数据,也就是说用户数据大小切勿超过用户数据可用空间的 50%。有关详细信息,请参见获取设备信息


注 –

最好在系统负载较小时添加节点。



示例 3–13 添加节点的示例

例如:

hadbm addnodes -adminpassword=password --hosts n6,n7,n8,n9

下表介绍了特殊的 hadbm addnodes 命令选项。有关其他选项的说明,请参见常规选项

表 3–13 hadbm addnodes 选项

选项 

说明 

默认值 

--no-refragment

-r 

请勿在节点创建期间重新分段数据库;这种情况下,请稍后使用 hadbm refragment 命令重新分段数据库以使用新节点。有关重新分段的详细信息,请参见重新分段数据库

如果没有足够的设备空间来进行重新分段,则重新创建具有更多节点的数据库。请参见通过重新创建数据库添加节点

不存在 

--spares= number

-s 

新的备用节点(已存在的备用节点除外)的数目。必须为偶数,并且不能大于添加的节点数目。 

--devicepath= path

-d 

设备的路径。这些设备包括: 

  • DataDevice

  • NiLogDevice(节点内部日志设备)

  • RelalgDevice(关系代数查询设备)

    此路径必须已存在并且可写。要为每个节点或每个设备设置不同的设备路径,请参见设置异构设备路径

Solaris 和 Linux:HADB_install_dir/device

Windows:C:\Sun\AppServer \SUNWhadb\vers,其中 vers 是 HADB 的版本号。

--hosts= hostlist

-H 

数据库中新节点的以逗号分隔的新主机名的列表。为列表中的每个以逗号分隔的项目创建一个节点。节点的数目必须为偶数。HADB 主机的 IP 地址必须为 IPv4 地址。 

使用重复的主机名将在同一台计算机上创建具有不同端口号的多个节点。请确保同一台计算机上的节点不是镜像节点。 

奇数编号的节点位于一个 DRU 中,偶数编号的节点位于另一个 DRU 中。如果使用 --spares,则新的备用节点为具有最大编号的那些节点。

如果使用双网络接口创建了数据库,则必须以相同方式配置新的节点。请参见配置网络冗余

无 

重新分段数据库

重新分段数据库以在新创建的节点中存储数据。通过重新分段可以在所有活动节点之间平均分配数据。

要重新分段数据库,请使用 hadbm refragment 命令。该命令语法为:

hadbm refragment  [--dbpassword=password | --dbpasswordfile=file]  
[--adminpassword=password | --adminpasswordfile=file]  
[--agent=maurl]  
[dbname]

dbname 操作数指定数据库名称。默认值为 hadb。数据库必须处于 HAFaultTolerantFaultTolerant 状态。有关数据库状态的更多信息,请参见获取 HADB 的状态

有关命令选项的说明,请参见常规选项。有关更多信息,请参见 hadbm-refragment(1)

联机重新分段需要 HADB 节点有足够的磁盘空间,可以在重新分段完成之前同时容纳旧数据和新数据,也就是说用户数据大小切勿超过用户数据可用空间的 50%。有关详细信息,请参见获取设备信息


注 –

最好在系统负载较轻时重新分段数据库。


如果多次尝试后该命令仍然失败,请参见通过重新创建数据库添加节点


示例 3–14 重新分段数据库示例

例如:

hadbm refragment

通过重新创建数据库添加节点

如果添加新节点时联机重新分段总是失败(由于数据设备空间不足或其他原因),请重新创建具有新节点的数据库。这将导致现有用户数据和模式数据的丢失。

Procedure通过重新创建数据库来添加节点

该步骤将使您可以在整个进程中维持 HADB 可用性。

  1. 对于每个 Application Server 实例:

    1. 禁用负载平衡器中的 Application Server 实例。

    2. 禁用会话持久性。

    3. 重新启动 Application Server 实例。

    4. 重新启用负载平衡器中的 Application Server 实例。

    如果不需要维持可用性,则可以同时禁用并重新启用负载平衡器中的所有服务器实例。这样可以节省时间并防止过期会话数据故障转移。

  2. 停止数据库,如停止数据库所述。

  3. 删除数据库,如删除数据库所述。

  4. 重新创建具有其他节点的数据库,如创建数据库所述。

  5. 重新配置 JDBC 连接池,如配置 JDBC 连接池所述。

  6. 重新装入会话持久性存储。

  7. 对于每个 Application Server 实例:

    1. 禁用负载平衡器中的 Application Server 实例。

    2. 启用会话持久性。

    3. 重新启动 Application Server 实例。

    4. 重新启用负载平衡器中的 Application Server 实例。

    如果不需要维持可用性,则可以同时禁用并重新启用负载平衡器中的所有服务器实例。这样可以节省时间并防止过期会话数据故障转移。

监视 HADB

您可以通过以下方式监视 HADB 的活动:

以下各节简要介绍了 hadbm statushadbm deviceinfohadbm resourceinfo 命令。有关 HADB 信息的说明,请参见《Sun Java System Application Server 9.1 Performance Tuning Guide》中的“Performance”

获取 HADB 的状态

使用 hadbm status 命令显示数据库或其节点的状态。该命令语法为:

hadbm status  
[--nodes]  
[--adminpassword=password | --adminpasswordfile=file]  
[--agent=maurl] 
[dbname]

dbname 操作数指定数据库名称。默认值为 hadb

--nodes 选项(短形式 -n)显示了数据库中每个节点的信息。有关更多信息,请参见节点状态。有关其他命令选项的说明,请参见常规选项

有关更多信息,请参见 hadbm-status(1)


示例 3–15 获取 HADB 状态的示例

例如:

hadbm status --nodes

数据库状态

数据库的状态汇总了其当前情况。下表介绍了数据库的可能状态。

表 3–14 HADB 状态

数据库状态 

说明 

高可用性容错 (High-Availability Fault Tolerant, HAFaultTolerant) 

数据库具有容错能力,并且在每个 DRU 中至少有一个备用节点。 

容错 

所有镜像节点对均启动并且正在运行。 

可操作 

每个镜像节点对中至少有一个节点正在运行。 

不可操作 

一个或多个镜像节点对中的双方均缺少节点。 

如果数据库处于不可操作状态,请清除数据库,如清除数据库所述。

已停止 

数据库中没有正在运行的节点。 

不明 

无法确定数据库的状态。 

节点状态

通过 --nodes 选项使 hadbm status 命令显示数据库中每个节点的以下信息:

节点的角色和状态可以更改,如以下各节中所述:

节点的角色

在创建节点过程中为节点指定了角色,并且节点可以具有以下角色之一:

节点的状态

节点可处于以下状态之一:

获取设备信息

监视 HADB 数据(磁盘存储)设备的空闲空间:

使用 hadbm deviceinfo 命令获取关于数据设备上空闲空间的信息。该命令显示了数据库每个节点的以下信息:

该命令语法为:

hadbm deviceinfo  [--details]  
[--adminpassword=password | --adminpasswordfile=file]  
[--agent=maurl]  [dbname]

dbname 操作数指定数据库名称。默认值为 hadb

--details 选项显示了以下其他信息:

有关其他命令选项的说明,请参见常规选项

有关更多信息,请参见 hadbm-deviceinfo(1)

要确定用户数据的可用空间,请用总设备大小减去为 HADB 保留的空间:即四倍的 LogBufferSize + 1% 的设备大小。如果不知道日志缓冲区的大小,请使用命令 hadbm get logbufferSize。例如,如果总设备大小为 128 MB,LogBufferSize 为 24 MB,则用户数据的可用空间为 128 – (4 x 24) = 32 MB。32 MB 中一半用于已复制的数据,大约百分之一用于索引,只有百分之二十五用于实际用户数据。

总大小和保留大小之间的差额为用户数据的可用空间。如果将来对数据进行重新分段,则空闲大小必须为用户数据可用空间的大约 50%。如果不进行重新分段,则可以最大限度地利用数据设备。如果系统在设备空间不足的情况下运行,则资源消耗警告将被写入历史文件。

有关调节 HADB 的更多信息,请参见 Sun Java System Application Server Performance Tuning Guide


示例 3–16 获取设备信息的示例

以下命令:

hadbm deviceinfo --details

显示以下示例结果:

NodeNO Totalsize Freesize Usage NReads NWrites DeviceName
0      128       120      6%    10000  5000    C:\Sun\SUNWhadb\hadb.data.0
1      128       124      3%    10000  5000    C:\Sun\SUNWhadb\hadb.data.1
2      128       126      2%     9500  4500    C:\Sun\SUNWhadb\hadb.data.2
3      128       126      2%     9500  4500    C:\Sun\SUNWhadb\hadb.data.3

获取运行时资源信息

hadbm resourceinfo 命令显示了 HADB 运行时资源信息。使用此信息有助于识别资源争用并减少性能瓶颈。有关详细信息,请参见《Sun Java System Application Server 9.1 Performance Tuning Guide》中的“Tuning HADB”

该命令语法为:

hadbm resourceinfo  [--databuf]  [--locks]  [--logbuf]  [--nilogbuf]  
[--adminpassword=password | --adminpasswordfile=file]  
[--agent=maurl]  
[dbname]

dbname 操作数指定数据库名称。默认值为 hadb

下表介绍了 hadbm resourceinfo 的特殊命令选项。有关其他命令选项的说明,请参见常规选项

有关更多信息,请参见 hadbm-resourceinfo(1)

表 3–15 hadbm resourceinfo 命令选项

选项 

说明 

--databuf

-d 

显示数据缓冲池信息。 

有关更多信息,请参见以下数据缓冲池信息

--locks

-l 

显示锁信息。 

有关更多信息,请参见以下锁信息

--logbuf

-b 

显示日志缓冲区信息。 

有关更多信息,请参见以下日志缓冲区信息

--nilogbuf

-n 

显示节点内部日志缓冲区信息。 

有关更多信息,请参见以下节点内部日志缓冲区信息

数据缓冲池信息

数据缓冲池信息包含:

当用户事务在记录上执行操作时,包含该记录的页面必须在数据缓冲池中。如果该页面不在数据缓冲池中,则发生 miss 或缺页。然后事务必须等待,直到从磁盘的数据设备文件中检索到该页面。

如果未命中率很高,则增加数据缓冲池。由于未命中次数是累积的,请定期运行 hadbm resourceinfo,并使用两次运行结果的不同查看未命中率的趋向。如果空闲空间很小,请勿考虑运行该命令,因为检查点机制将使新块可用。


示例 3–17 数据缓冲池信息示例

例如:


NodeNO Avail Free Access Misses Copy-on-Write
0 256 128 100000 50000 10001 256 128 110000 45000 950

锁信息

锁信息如下:

一个事务无法使用节点上超过 25% 的可用锁。因此,大规模执行操作的事务应注意到该限制。最好成批执行此类事务,其中每批都必须被视为一个独立事务,即分批提交。需要这样做的原因是,读取操作(在 repeatable read 隔离层运行)以及 deleteinsertupdate 操作使用仅在事务终止后才被释放的锁。

要更改 NumberOfLocks,请参见清除和归档历史文件


示例 3–18 锁信息示例

例如:


NodeNO Avail Free Waits
0 50000 20000 101 50000 20000 0

日志缓冲区信息

日志缓冲区信息为:

如果空闲空间很小,请勿担心,因为 HADB 可以启动日志缓冲区压缩。HADB 从环状缓冲区的头部开始压缩,并在连续日志记录上执行。当 HADB 遇到尚未由节点执行并且尚未由镜像节点接收的日志记录时,压缩无法继续进行。


示例 3–19 日志缓冲区信息的示例

例如:


NodeNO Avail Free
0 16 21 16 3

节点内部日志缓冲区信息

节点内部日志缓冲区信息为:


示例 3–20 内部日志缓冲区信息示例

例如:

NodeNO Avail Free

0 16 21 16 3


维护 HADB 计算机

HADB 通过复制镜像节点上的数据来实现容错。在生产环境中,与其镜像的节点不同,镜像节点在单独的 DRU 上,如《Sun Java System Application Server 9.1 部署规划指南》所述。

故障是一种意外事件,如硬件故障、电源故障或操作系统重新引导。HADB 允许一个节点、一台计算机(没有镜像节点对)、属于同一 DRU 的一台或多台计算机甚至一个整个的 DRU 的单个故障。但是,HADB 不能从双重故障(即一个或多个镜像节点对同时出现故障)中自动恢复。如果出现双重故障,则必须清除 HADB 并重新创建其会话存储(这将删除它的所有数据)。

具体的维护过程取决于您需要在一台计算机上工作还是在多台计算机上工作。

Procedure在一台计算机上执行维护

此过程适用于规划的和非规划的维护,并且不中断 HADB 可用性。

  1. 执行维护过程并使计算机启动并运行。

  2. 确保 ma 正在运行。

    如果 ma 作为 Windows 服务运行或位于 init.d 脚本(推荐用于部署)下,则应该已由操作系统启动。如果未启动,请手动启动。请参见启动管理代理

  3. 启动计算机上的所有节点。

    有关更多信息,请参见启动节点

  4. 检查节点是否处于活动状态并且正在运行。

    有关更多信息,请参见获取 HADB 的状态

Procedure在所有 HADB 计算机上执行规划的维护

规划的维护包含诸如硬件和软件升级之类的操作。此过程不中断 HADB 可用性。

  1. 对于第一个 DRU 中的每台备用计算机,逐个对每台计算机重复单个计算机过程,如在一台计算机上执行维护所述。

  2. 对于第一个 DRU 中的每台活动计算机,逐个对每台计算机重复单个计算机过程,如在一台计算机上执行维护所述。

  3. 对于第二个 DRU 重复步骤 1 和步骤 2。

Procedure在所有 HADB 计算机上执行规划的维护

此过程适用于 HADB 在一台或多台计算机上的情况。在维护过程中将中断 HADB 服务。

  1. 停止 HADB。请参见停止数据库

  2. 执行维护过程并使所有计算机启动并运行。

  3. 确保 ma 正在运行。

  4. 启动 HADB。

    有关更多信息,请参见启动数据库

    完成最后一个步骤后,HADB 数据将重新变为可用。

Procedure在出现故障时执行非规划的维护

  1. 检查数据库状态。

    请参见获取 HADB 的状态

    • 如果数据库状态为可操作或更佳:

      需要非规划的维护的计算机包含镜像节点。对每台故障计算机执行单个计算机过程(每次一个 DRU)。不中断 HADB 服务。

    • 如果数据库处于不可操作状态:

      需要非规划的维护的计算机包含镜像节点。当整个 HADB 位于一台故障计算机上时,就属于这种情况。请先使所有计算机启动并运行。然后清除 HADB 并重新创建会话存储。请参见清除数据库。这将中断 HADB 服务。

清除和归档历史文件

HADB 历史文件记录所有数据库操作和错误消息。HADB 附加在现有历史文件的末尾,因此文件大小将随时间增长。为了节省磁盘空间并防止文件过大,应定期清除和归档历史文件。

要清除数据库的历史文件,请使用 hadbm clearhistory 命令。

该命令语法为:

hadbm clearhistory  
[--saveto=path]  
[dbname]  
[--adminpassword=password | --adminpasswordfile=file]  
[--agent=maurl]

dbname 操作数指定数据库名称。默认值为 hadb

使用 --saveto 选项(短形式 -o)指定要存储旧的历史文件的目录。此目录必须具有适当的写权限。有关其他命令选项的说明,请参见常规选项

有关更多信息,请参见 hadbm-clearhistory(1)

hadbm create 命令的 --historypath 选项确定了历史文件的位置。历史文件名称的格式为 dbname.out.nodeno。有关 hadbm create 的信息,请参见创建数据库

历史文件格式

历史文件中的每条消息都包含以下信息:

有关资源短缺的消息包含字符串 "HIGH LOAD"。

您无需详细了解历史文件中的所有条目。如果由于某种原因您需要深入了解历史文件,请联系 Sun 用户支持。