执行完这些任务后,请参见第 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 也仍然可用。您可以使用以下两种方法配置冗余网络:
在 Solaris 9 中,设置网络多路径。
在除 Windows Server 2003 以外的所有平台中,配置双网络。
设置网络多路径之前,请参阅《IP Network Multipathing Administration Guide》中的 "Administering Network Multipathing" 一节。
设置网络接口故障检测时间。
为了使 HADB 能够正确支持多路径故障转移,网络接口故障检测时间不能超过一秒(1000 毫秒),此时间由 /etc/default/mpathd 中的 FAILURE_DETECTION_TIME 参数来指定。如果此参数的原始值较高,请编辑文件并将此参数值更改为 1000:
FAILURE_DETECTION_TIME=1000 |
要使所作的更改生效,请使用以下命令:
pkill -HUP in.mpathd |
设置 IP 地址以用于 HADB。
如《IP Network Multipathing Administration Guide》中所述,多路径功能涉及将物理网络接口分组为多路径接口组。在此类组中,每个物理接口均包含两个与其关联的IP 地址:
用于传输数据的物理接口地址。
仅供 Solaris 内部使用的测试地址。
当您使用 hadbm create --hosts 时,请仅从多路径组指定一个物理接口地址。
假设具有两个名为 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 |
在此示例中,两台主机的物理网络接口都在 bge0 和 bge1 之后列出。在 bge0:1 和 bge1: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
因此,网络地址如下
对于 node0,为 10.10.116.61 和 10.10.124.61
对于 node1,为 10.10.116.62 和 10.10.124.62
请注意,10.10.116.61 和 10.10.116.62 位于同一个子网;10.10.124.61 和 10.10.124.62 位于同一个子网。
在此示例中,管理代理必须使用同一子网。因此,以配置变量 ma.server.mainternal.interfaces 为例,它必须设置为 10.10.116.0/24。此设置对本示例中的两个代理均可使用。
安装 HADB 之前,必须配置共享内存和信号。此过程取决于您的操作系统。
如果在主机上运行除 HADB 以外的应用程序,则应计算这些应用程序使用的共享内存和信号量,并将其与 HADB 所需的值相加。本节所建议的值足够用于在每台主机上运行多达六个 HADB 节点。如果运行的 HADB 节点超过六个,或主机运行的应用程序需要更多的共享内存和信号量,则只需要增大这些值。
如果 信号量的数目过低,则 HADB 可能会失败,并显示以下错误消息:No space left on device。在启动数据库时或在运行时可能会出现这种情况。
因为信号量是全局操作系统资源,所以配置将会与主机上运行的所有进程相关,而不是只与 HADB 相关。在 Solaris 中,通过编辑 /etc/system 文件来配置信号量设置。
以 root 用户身份登录。
配置共享内存。
设置 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 中,对于每台主机最多有六个节点的情况,不需要更改默认值。
配置信号。
检查 /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 |
重新引导计算机。
在 Linux 中,必须配置共享内存设置。不需要调整默认信号量设置。
以 root 用户身份登录。
编辑文件 /etc/sysctl.conf。
在 Redhat Linux 中,您还可以修改 sysctl.conf 以设置内核参数。
按如下所示,设置 kernel.shmax 和 kernel.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 |
使用以下命令重新引导该计算机:
sync; sync; reboot
Windows 并不需要任何特殊的系统设置。但是,如果要使用现有 J2SE 安装,请将 JAVA_HOME 环境变量设置为安装 J2SE 所在的位置。
必须使 HADB 主机上的时钟同步,因为 HADB 使用基于系统时钟的时间戳。HADB 使用系统时钟管理超时并为记录到历史文件的事件标上时间戳。由于 HADB 是分布式系统,因此对于故障排除,您必须对所有历史文件一起进行分析。所以,使所有主机的时钟同步非常重要。
请勿在 HADB 系统处于运行状态时调整其系统时钟。这样做会导致操作系统或其他软件组件出现问题,而这些问题反之会导致系统出现诸如 HADB 节点挂起或重新启动等问题。将时钟调慢可能导致某些 HADB 服务器进程因时钟的调整而挂起。
要使时钟同步:
在 Solaris 中,请使用 xntpd(网络时间协议守护进程)。
在 Linux 中,请使用 ntpd。
在 Windows 中,请使用 Windows 中的 NTPTime。
如果 HADB 检测到时钟调整超过一秒钟,则将该数据记录到节点历史文件中,例如:
NSUP INF 2003-08-26 17:46:47.975 Clock adjusted. Leap is +195.075046 seconds.