Sun Java System Application Server Enterprise Edition 8.1 2005Q2 高可用性管理指南

配置 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 createdomain 和 hadbm registerpackage 执行成功,但 hadbm create database 失败,则 hadbm createdomain 和 hadbm 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 开始编号。 

1 

--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 查找。主机名必须为绝对主机名。不能使用 localhost 或 127.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 选项中指定的节点数目。

0 

--set=attr-val-list

-S 

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

无 


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

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

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

指定主机

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

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

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

指定设备大小

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

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

其中

设置异构设备路径

要为每个节点或服务设置不同的设备路径,请使用 hadbm create 中的 --set 选项。有四种类型的设备:DataDevice、NiLogDevice(节点内部日志设备)、RelalgDevice(关系代数查询设备)和 NoManDevice(节点管理器设备)。每个 name=value 对的语法如下,其中仅当 device 为 DataDevice 时才需要 -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 set 和 hadbm addnodes 命令更改设备路径和历史文件的位置。


错误诊断

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

查看和修改配置属性

您可以分别使用 hadbm get 和 hadbm 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 设置除 ConnectionTrace 或 SQLTraceMode 之外的任何配置属性将导致 HADB 的滚动重新启动。在滚动重新启动过程中,每次将停止并启动(使用新配置)一个节点;不中断 HADB 服务。

如果设置了 ConnectionTrace 或 SQLTraceMode,将不会发生滚动重新启动,但更改仅适用于从 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 

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 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