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

第 2 章 安装和设置高可用性数据库


注 –

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 管理指南》中的“用法配置文件”


本节包含以下主题:

设置 HADB 前的准备工作

本节包括以下主题:

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

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

先决条件和限制

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

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

配置网络冗余

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

设置网络多路径

设置网络多路径之前,请参阅《IP Network Multipathing Administration Guide》中的 "Administering Network Multipathing" 一节。

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 之后列出。在 bge0:1bge1:1 之后列出的接口是多路径测试接口(它们在 ifconfig 输出中标记为 DEPRECATED),如《 IP Network Multipathing Administration Guide》中所述。

要在此环境中设置 HADB,请从每个节点选择一个物理接口地址。在此示例中,HADB 在 host1 中使用 IP 地址 129.159.115.10,在 host2 中使用 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.

安装

通常,可以在与 Application Server(同机拓扑)相同的系统上或单独的主机(单独层拓扑)上安装 HADB。有关这两个选项的更多信息,请参见《Sun Java System Application Server 9.1 部署规划指南》中的第 3  章 “选择拓扑”

必须安装 HADB 管理客户机,才能使用 asadmin configure-ha-cluster 命令设置高可用性。使用 Java Enterprise System 安装程序时,即使要将节点安装在单独层上,也必须安装完整的 HADB 实例以便安装管理客户机。

HADB 安装

在单或双 CPU 系统上,如果该系统至少有 2 GB 的内存,则可以同时安装 HADB 和 Application Server。否则,请在单独的系统上安装 HADB 或使用其他硬件。要使用 asadmin configure-ha-cluster 命令,必须同时安装有 HADB 和 Application Server。

每个 HADB 节点需要 512 MB 的内存,因此计算机需要 1 GB 的内存来运行两个 HADB 节点。如果计算机内存不足,请在不同的计算机上设置每个节点。例如,您可以在以下系统上安装两个节点:

默认安装目录

本手册中,HADB_install_dir 表示安装 HADB 的目录。默认的安装目录将取决于您是否将 HADB 作为 Java Enterprise System 的一部分安装。对于 Java Enterprise System,默认安装目录为 /opt/SUNWhadb/4。对于独立的 Application Server 安装程序,安装目录为 /opt/SUNWappserver/hadb/4

节点监控进程权限

节点监控进程 (node supervisor processes, NSUP) 通过彼此交换 "I'm alive" 消息来确保 HADB 的可用性。NSUP 可执行文件必须具有 root 用户权限才能尽可能快地作出响应。clu_nsup_srv 进程不使用重要的 CPU 资源,它所占用的资源少,因此使用实时优先级运行该进程并不影响性能。


注 –

Java Enterprise System 安装程序会自动正确地设置 NSUP 权限,因此您不必采取进一步操作。但是,使用独立的 Application Server(非 root 用户)安装程序,您必须在创建数据库之前手动设置权限。


权限不足时出现的情况

如果 NSUP 不具有正确的权限,您可能会注意到以下资源不足时出现的问题,例如:

限制

如果 NSUP 无法设置实时优先级,则 errno 在 Solaris 和 Linux 中被设为 EPERM。在 Windows 中,它将发出“无法设置实时优先级”的警告。系统将错误写入 ma.log 文件,并且进程在没有实时优先级的情况下继续进行。

在以下情况下无法设置实时优先级:

Procedure授予节点监控进程 root 用户权限

  1. 以 root 用户身份登录。

  2. 将您的工作目录更改为 HADB_install_dir/lib/server

    NSUP 可执行文件为 clu_nsup_srv

  3. 使用以下命令设置文件的 suid 位:

    chmod u+s clu_nsup_srv

  4. 使用以下命令将文件的所有权设置为 root 用户:

    chown root clu_nsup_srv

    这将以 root 用户身份启动 clu_nsup_srv 进程,并使该进程授予其自身实时优先级。

    为了避免任何安全性影响,启动进程后将立即设置实时优先级,并且一旦优先级更改,该进程将退回至有效 UID。其他 HADB 进程使用普通优先级运行。

设置高可用性

本节提供了创建高可用性群集和测试 HTTP 会话持久性的步骤。

本节包括以下主题:

Procedure准备高可用性系统

  1. 安装 Application Server 实例和负载平衡器插件。

    有关更多信息,请参见 Java Enterprise System 安装指南(如果使用 Java ES)或《Sun Java System Application Server 9.1 Installation Guide》(如果使用独立的 Application Server 安装程序)。

  2. 创建 Application Server 域和群集。

    有关如何创建域的信息,请参见《Sun Java System Application Server 9.1 管理指南》中的“创建域”。有关如何创建群集的信息,请参见创建群集

  3. 安装和配置 Web Server 软件。

  4. 设置和配置负载平衡。

    有关更多信息,请参见设置 HTTP 负载平衡

启动 HADB 管理代理

管理代理 ma 用于在 HADB 主机上执行管理命令,并在 HADB 节点监控进程失败时通过重新启动它们来确保其可用性。

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

配置高可用性群集

开始本节之前,您必须已经创建一个或多个 Application Server 群集。有关如何创建群集的信息,请参见创建群集

使用以下命令,从运行域管理服务器的计算机将群集配置为使用 HADB:

asadmin configure-ha-cluster --user admin --hosts hadb_hostname1,hadb_hostname2 [,...] --devicesize 256 clusterName

hadb_hostname1hadb_hostname2 等替换为运行 HADB 的每台计算机的主机名,并将 clusterName 替换为群集的名称。例如:

asadmin configure-ha-cluster --user admin --hosts host1,host2,host1,host2 --devicesize 256 cluster1

此示例会在每台计算机上创建两个节点,即使在 HADB 故障转移时这些节点也具有很高的可用性。请注意,–hosts 选项后主机名的顺序非常重要,因此上一示例会与 --hosts host1,host1,host2,host2 不同。

如果仅使用一台计算机,则必须提供两次主机名。在生产设置中,建议使用多台计算机。

配置高可用性应用程序

在管理控制台中,在“应用程序”>“企业应用程序”下选择应用程序。设置“启用可用性”,然后单击“保存”。

重新启动群集

要在管理控制台中重新启动群集,请选择“群集”> cluster-name。单击“停止实例”。当实例都停止后,单击“启动实例”。

或者,使用以下 asadmin 命令:

asadmin stop-cluster --user admin cluster-name
asadmin start-cluster --user admin cluster-name

有关这些命令的更多信息,请参见 stop-cluster(1)start-cluster(1)

重新启动 Web Server

要重新启动 Web Server,请键入以下 Web Server 命令:

web_server_root/https-hostname/reconfig

web_server_root 替换为您的 Web Server 根目录,并将 hostname 替换为您的主机名。

Procedure清除作为负载平衡器使用的 Web Server 实例

  1. 删除负载平衡器配置:

    asadmin delete-http-lb-ref --user admin --config MyLbConfig FirstCluster

    asadmin delete-http-lb-config --user admin MyLbConfig

  2. 如果您创建了新的 Web Server 实例,则您可以通过以下方法删除它:

    1. 登录到 Web Server 的管理控制台。

    2. 停止该实例。

      删除该实例。

升级 HADB

HADB 旨在通过升级本软件提供不间断的 "always on" 服务。本节介绍了在不使数据库脱机或不引起任何可用性损失的情况下,如何升级到 HADB 的新版本。这称为联机升级

以下各节将介绍如何升级 HADB 安装:

Procedure将 HADB 升级到更新版本

  1. 安装 HADB 的新版本。

  2. 按照注册 HADB 软件包中所述,注册新的 HADB 版本。

    在 HADB 管理域中注册 HADB 软件包使得升级或更改 HADB 软件包变得更加容易。管理代理记录软件包的位置以及域中主机的版本信息。默认软件包的名称是以 V 开头的字符串,其中包括 hadbm 程序的版本号。

  3. 更改数据库所使用的软件包。

    请输入以下命令:


    hadbm set PackageName=package
    

    其中,package 是新的 HADB 软件包的版本号。

  4. 按照取消注册 HADB 软件包中所述,注销您现有的 HADB 安装。

  5. 如果需要,请替换管理代理的启动脚本。

    有关更多信息,请参见替换管理代理的启动脚本

  6. 按照验证 HADB 升级中所述,验证结果。

  7. (可选的)删除旧 HADB 版本的二进制文件。

    验证 HADB 已正确升级后,可以删除旧的 HADB 软件包。

注册 HADB 软件包

使用 hadbm registerpackage 命令注册 HADB 软件包,该软件包安装在管理域中的主机上。也可在使用 hadbm create 命令创建数据库时注册 HADB 软件包。

使用 hadm registerpackage 命令之前,请确保满足以下要求:已配置所有管理代理并且它们在主机列表中的所有主机上运行;管理代理的系统信息库可以更新,并且没有使用相同的软件包名称注册的软件包。

该命令语法为:

hadbm registerpackage --packagepath=path [--hosts=hostlist] [--adminpassword= password | --adminpasswordfile=file] [--agent=maurl] [[package-name]]

package-name 操作数是软件包的名称。

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

表 2–1 hadbm registerpackage 选项

选项 

说明 

--hosts=hostlist

-H 

主机列表,用逗号分隔或放在双引号内并用空格分隔。 

--packagepath=path

-L 

HADB 软件包的路径。 

例如,使用以下命令可在主机 host1、host2 和 host3 上注册软件包 v4:

hadbm registerpackage 
--packagepath=hadb_install_dir/SUNWHadb/4.4 
--hosts=host1,host2,host3 v4

响应为:

软件包注册成功

如果您省略 --hosts 选项,则此命令将在域中所有已启用的主机上注册该软件包。

取消注册 HADB 软件包

使用 hadbm unregisterpackage 命令删除用管理域注册的 HADB 软件包。

使用 hadbm unregisterpackage 命令之前,请确保:

该命令语法为:

hadbm unregisterpackage  
--hosts=hostlist  
[--adminpassword=password | --adminpasswordfile= file]  
[--agent= maurl]  
[package-name ]

package-name 操作数是软件包的名称。

有关 --hosts 选项的说明,请参见注册 HADB 软件包。如果您省略 --hosts 选项,主机列表将默认为已启用的注册了软件包的主机。有关其他命令选项的说明,请参见安全性选项常规选项


示例 2–2 注销 HADB 的示例

从域中特定主机上注销软件包 v4:

hadbm unregisterpackage --hosts=host1,host2,host3 v4

响应为:

软件包注销成功


替换管理代理的启动脚本

安装 HADB 的新版本时,您可能需要替换 /etc/init.d/ma-initd 中的管理代理启动脚本。检查文件 HADB_install_dir/lib/ma-initd 的内容。如果该文件不同于旧的 ma-initd 文件,请将旧文件替换为新文件。

Procedure验证 HADB 升级

执行以下过程以验证 HADB 已正确升级:

  1. 确认正在运行的 HADB 进程的版本。

    在所有 HADB 节点上输入以下命令以显示 HADB 版本:

    new-path/bin/ma -v

    new-path/bin/hadbm -v

    其中,new-path 是新 HADB 的安装路径。

    该结果应该显示新的 HADB 版本号。

  2. 确认数据库正在运行。

    输入以下命令:

    new-path/bin/hadbm status -n

    如果升级成功,则结果将显示所有处于 running 状态的 HADB 节点。

  3. 确保使用 HADB 的产品已将其配置设置更改为新的 HADB 路径。

  4. 为使用 HADB 的产品运行所有升级测试。