Sun Java System Application Server Enterprise Edition 8.2 高可用性管理指南

设置 HADB 前的准备工作

本节包括以下主题:

执行完这些任务后,请参见第 3 章,管理高可用性数据库

有关 HADB 的最新信息,请参见《Sun Java System Application Server Enterprise Edition 8.2 发行说明》

先决条件和限制

在设置和配置 HADB 之前,请确保您的网络和硬件环境符合《Sun Java System Application Server Enterprise Edition 8.2 发行说明》中所述的要求。此外,对某些文件系统还有一些限制,例如,对 Veritas。有关更多信息,请参见《Sun Java System Application Server Enterprise Edition 8.2 发行说明》

HADB 在创建并附加到其共享内存段时,使用锁定共享内存(SHM_SHARE_MMU 标志)。使用此标志实质上是将共享内存段锁定到物理内存中,防止它们被调出。因此,HADB 的共享内存已锁定到物理内存,这很容易影响到低端计算机上的安装。请确保在协同定位 Application Server 和 HADB 时拥有建议的内存量。

配置网络冗余

配置冗余网络后,即使单个网络出现故障,HADB 也仍然可用。您可以使用以下两种方法配置冗余网络:

设置网络多路径

在设置网络多路径之前,请参阅《IP Network Multipathing Administration Guide》中的第 2  章 “Administering Network Multipathing (Task)”

Procedure配置已使用 IP 多路径的 HADB 主机

  1. 设置网络接口故障检测时间。

    为了使 HADB 能够正确支持多路径故障转移,网络接口故障检测时间不能超过一秒(1000 毫秒),此时间由 /etc/default/mpathd 中的 FAILURE_DETECTION_TIME 参数来指定。如果此参数的初始值较高,请编辑文件并将其值更改为 1000:


    FAILURE_DETECTION_TIME=1000

    要使所作的更改生效,请使用以下命令:


    pkill -HUP in.mpathd
  2. 设置 IP 地址以用于 HADB。

    《IP Network Multipathing Administration Guide》中所述,多路径功能包括将物理网络接口分组为多路径接口组。在此类组中,每个物理接口均包含两个与其关联的IP 地址:

    • 用于传输数据的物理接口地址。

    • 仅供 Solaris 内部使用的测试地址。

    当您使用 hadbm create --hosts 时,请仅从多路径组指定一个物理接口地址。


示例 2–1 设置多路经

假定存在两台名称分别为 host1 和 host2 的主机。如果这两台主机都有两个物理网络接口,则将这两个接口设置为一个多路径组。在每台主机上运行 ifconfig -a

host1 上的输出为:


bge0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>
mtu 1500 index 5 inet 129.159.115.10 netmask ffffff00 broadcast 129.159.115.255 
groupname mp0

bge0:1: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER>
mtu 1500 index 5 inet 129.159.115.11 netmask ffffff00 broadcast 129.159.115.255

bge1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> 
mtu 1500 index 6 inet 129.159.115.12 netmask ffffff00 broadcast 129.159.115.255 
groupname mp0

bge1:1: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> 
mtu 1500 index 6 inet 129.159.115.13 netmask ff000000 broadcast 129.159.115.255

host2 上的输出为:


bge0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> 
mtu 1500 index 3 inet 129.159.115.20 netmask ffffff00 broadcast 129.159.115.255 
groupname mp0

bge0:1: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> 
mtu 1500 index 3 inet 129.159.115.21 netmask ff000000 broadcast 129.159.115.255

bge1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> 
mtu 1500 index 4 inet 129.159.115.22 netmask ffffff00 broadcast 129.159.115.255 
groupname mp0

bge1:1: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> 
mtu 1500 index 4 inet 129.159.115.23 netmask ff000000 broadcast 129.159.115.255

在此示例中,两台主机的物理网络接口都在 bge0bge1 之后列出。按照《IP Network Multipathing Administration Guide》中所述,在 bge0:1bge1:1 之后列出的接口为多路径测试接口(在 ifconfig 输出中标记为 "DEPRECATED")。

要在此环境中设置 HADB,请从每个节点选择一个物理接口地址。在此示例中, HADB 使用 host1 的 IP 地址 129.159.115.10 和 host2 的 IP 地址 129.159.115.20。要创建数据库以实现每台主机具有一个数据库节点,请使用命令 hadbm create --hosts。例如


hadbm create --hosts 129.159.115.10,129.159.115.20

要创建数据库以实现每台主机具有两个数据库节点,请使用以下命令:


hadbm create --hosts 129.159.115.10,129.159.115.20,
129.159.115.10,129.159.115.20

在这两种情况下,必须使用单独的参数配置 host1 和 host2 上的代理,以指定代理所应使用的计算机的接口。因此,在 host1 上使用以下命令:


ma.server.mainternal.interfaces=129.159.115.10

在 host2 上使用以下命令:


ma.server.mainternal.interfaces=129.159.115.20

有关 ma.server.mainternal.interfaces 变量的信息,请参见配置文件


配置双网络

要启用 HADB 以允许单个网络故障,请使用 IP 多路径(如果操作系统 [例如 Solaris] 支持)。请勿在 Windows Server 2003 上将 HADB 配置为使用双网络—此操作系统在双网络配置下无法正常工作。

如果您没有将操作系统配置为使用 IP 多路径,并且已为 HADB 主机配备两个 NIC,则可以将 HADB 配置为使用双网络。对于每台主机,每个网络接口卡 (network interface card, NIC) 的 IP 地址必须位于单独的 IP 子网中。

在数据库中,所有节点均必须连接到单个网络,或者所有节点均必须连接到两个网络。


注 –

必须将子网之间的路由器配置为可以在子网之间转发 UDP 多址广播消息。


创建 HADB 数据库时,请使用 –hosts 选项来指定每个节点的两个 IP 地址或主机名:每个 NIC IP 地址一个。对于每个节点,第一个 IP 地址位于 net-0,第二个位于 net-1。 语法如下所示,其中同一节点的主机名使用加号 (+) 分隔:

--hosts=node0net0name+node0net1name
,node1net0name+node1net1name
,node2net0name+node2net1name
, ...

例如,以下变量可创建两个节点,每个节点具有两个网络接口。以下主机选项用于创建这些节点:

--hosts 10.10.116.61+10.10.124.61,10.10.116.62+10.10.124.62

因此,网络地址如下

请注意,10.10.116.6110.10.116.62 位于同一个子网;10.10.124.6110.10.124.62 位于同一个子网。

在此示例中,管理代理必须使用同一子网。因此,以配置变量 ma.server.mainternal.interfaces 为例,它必须设置为 10.10.116.0/24。此设置对本示例中的两个代理均可使用。

配置共享内存和信号量

安装 HADB 之前,必须配置共享内存和信号量。此过程取决于您的操作系统。

如果在主机上运行除 HADB 以外的应用程序,则应计算这些应用程序使用的共享内存和信号量,并将其与 HADB 所需的值相加。本节所建议的值足够用于在每台主机上运行多达六个 HADB 节点。如果运行的 HADB 节点超过六个,或主机运行的应用程序需要更多的共享内存和信号量,则只需要增大这些值。

如果 信号量的数目过低,则 HADB 可能会失败,并显示以下错误消息:No space left on device。在启动数据库时或在运行时可能会出现这种情况。

Procedure在 Solaris 上配置共享内存和信号量

因为信号量是全局操作系统资源,所以配置将会与主机上运行的所有进程相关,而不是只与 HADB 相关。在 Solaris 中,通过编辑 /etc/system 文件来配置信号量设置。

  1. 以 root 用户身份登录。

  2. 配置共享内存。

    • 设置 shminfo_shmmax,该参数指定主机上单个共享内存段的最大大小。将此值设置为 HADB 主机上安装的 RAM 的总容量,以十六进制值表示,但不能大于 2 GB。

      例如,对于 2 GB RAM,在 /etc/system 文件中将该值设置如下:


      set shmsys:shminfo_shmmax=0x80000000

      注 –

      要确定主机的内存,请使用以下命令:


      prtconf | grep Memory

    • 在 Solaris 8 或更低版本中,设置 shminfo_shmseg,即一个进程最多可以附加的共享内存段数。将该值设置为每台主机节点数的六倍。对于每台主机最多有六个节点的情况,请向 /etc/system 文件中添加以下内容:


      set shmsys:shminfo_shmseg=36

      在 Solaris 9 和更高版本上,shmsys:shminfo_shmseg 是过时的属性。

    • 设置 shminfo_shmmni,即整个系统中共享内存段的最大数目。因为每个 HADB 节点分配六个共享内存段,所以 HADB 所需的值至少必须为每台主机节点数的六倍。在 Solaris 9 中,对于每台主机最多有六个节点的情况,不需要更改默认值。

  3. 配置信号量。

    检查 /etc/system 文件是否包含以下信号量配置条目,例如:


    set semsys:seminfo_semmni=10
    set semsys:seminfo_semmns=60
    set semsys:seminfo_semmnu=30

    如果存在这些条目,请按如下所示增大这些值。

    如果 /etc/system 文件不包含这些条目,请将它们添加到该文件的结尾:

    • 设置 seminfo_semmni,即信号量标识符最大数目。每个 HADB 节点需要一个信号量标识符。在 Solaris 9 中,对于每台主机最多有六个节点的情况,不需要更改默认值。例如:


      set semsys:seminfo_semmni=10
    • 设置 seminfo_semmns, 即整个系统中信号量的最大数目。每个 HADB 节点需要八个信号量。在 Solaris 9 中,对于每台主机最多有六个节点的情况,不需要更改默认值。例如:


      set semsys:seminfo_semmns=60
    • 设置 seminfo_semmnu,即系统中撤消结构的最大数目。每个连接需要一个撤消结构(配置变量 NumberOfSessions,默认值 100)。对于每台主机最多有六个节点的情况,将该值设置为 600:


      set semsys:seminfo_semmnu=600
  4. 重新引导计算机。

Procedure在 Linux 上配置共享内存

在 Linux 中,必须配置共享内存设置。不需要调整默认信号量设置。

  1. 以 root 用户身份登录。

  2. 编辑文件 /etc/sysctl.conf

    在 Redhat Linux 中,您还可以修改 sysctl.conf 以设置内核参数。

  3. 按如下所示,设置 kernel.shmaxkernel.shmall 的值:


    echo MemSize > /proc/sys/shmmax
    echo MemSize > /proc/sys/shmall

    其中,MemSize 为字节数。

    kernel.shmax 参数定义了共享内存段的最大大小(以字节为单位)。kernel.shmall 参数设置了在系统上可以一次使用的共享内存的总数(以页为单位)。将这两个参数的值设为计算机上的物理内存量。请以十进制字节数指定该值。

    例如,要将两个值都设置为 2GB,请使用以下命令:


    echo 2147483648 > /proc/sys/kernel/shmmax
    echo 2147483648 > /proc/sys/kernel/shmall
  4. 使用以下命令重新引导该计算机:

    sync; sync; reboot

适用于 Windows 的过程

Windows 并不需要任何特殊的系统设置。但是,如果要使用现有 J2SE 安装,请将 JAVA_HOME 环境变量设置为安装 J2SE 所在的位置。

同步系统时钟

必须使 HADB 主机上的时钟同步,因为 HADB 使用基于系统时钟的时间戳。HADB 使用系统时钟管理超时并为记录到历史文件的事件标上时间戳。由于 HADB 是分布式系统,因此对于故障排除,您必须对所有历史文件一起进行分析。所以,使所有主机的时钟同步非常重要。

请勿在 HADB 系统处于运行状态时调整其系统时钟。这样做会导致操作系统或其他软件组件出现问题,而这些问题反之会导致系统出现诸如 HADB 节点挂起或重新启动等问题。将时钟调慢可能导致某些 HADB 服务器进程因时钟的调整而挂起。

要使时钟同步:

如果 HADB 检测到时钟调整超过一秒钟,则将该数据记录到节点历史文件中,例如:

NSUP INF 2003-08-26 17:46:47.975 Clock adjusted.
 Leap is +195.075046 seconds.