用户应保留 HADB 历史文件、管理代理配置文件、日志文件、系统信息库以及安装路径以外的所有数据设备。如果尚未这样做,应在升级前完成此操作。要移动管理系统信息库和配置文件,请执行以下操作:
停止所有旧的管理代理,但继续运行 HADB 节点。
在每台主机上,将系统信息库目录移到新位置。
在每台主机上,将 dbconfig 目录复制到新位置。
在每台主机上,更新 mgt.cfg 文件,并为 dbconfig 和系统信息库目录设置正确的路径。
使用更新后的 mgt.cfg 文件启动管理代理。
要从 HADB 4.4.x 版升级到 4.4.2-7 版,请执行以下步骤:
根据需要执行上述的升级前任务。
将 HADB 4.4.2-7 版安装到所有 HADB 主机上(安装到不同于 4.4.x 版路径的其他路径中,例如 /opt/SUNWhadb/4.4.2-7 中)。
将 HADB 4.4.2-7 版安装到 hadbm 客户机主机上(如果该客户机主机的路径与 HADB 主机的不同)。
停止所有 HADB 主机上运行的全部管理代理。
使用新版本的软件和旧的配置文件来启动管理代理进程。在余下的步骤中,请使用在新版本的 bin 目录中找到的 hadbm 命令。
在管理域中注册该软件包(由于默认的软件包名称为 V4.4,因此可能需要使用其他软件包名称,以免与现有的同名软件包冲突):
hadbm registerpackage --packagepath=/opt/SUNWhadb/4.4.2-7 V4.4.2-7 |
运行 hadbm listpackages 命令并检查新软件包是否已在该域中注册。
使用新的 hadbm 4.4.2-7 版重新启动数据库。如果需要移动设备和历史文件,请运行联机升级,并在同一操作中为设备和历史文件设置新路径:
hadbm set packagename=V4.4.2-7,devicepath=new_devpath, historypath=new_histpath |
否则,如果设备和历史文件位于安装目录之外,则运行以下命令后,将仅滚动重新启动这些节点:
hadbm set packagename=V4.4.2-7 database name |
检查数据库是否处于“正在运行”状态(使用 hadbm status 命令)并且能够正常处理客户机事务。
如果结果有效,随后就可以删除旧安装。在取消注册旧软件包之前,先从 ma 系统信息库中删除对旧软件包的所有引用。否则,hadbm unregisterpackage 将失败,并显示消息“软件包正在使用”。伪重新配置操作(例如 hadbm set connectiontrace=same as previous value)将删除对旧软件包的所有引用。现在,取消注册旧软件包:
hadbm unregisterpackage [--hosts=host-list] old pacakge name |
从文件系统中删除旧安装。
在 Solaris 上,要测试升级是否成功,请检查是否已正确执行升级:
确保运行的进程使用了新的二进制。在所有 HADB 节点上检查以下路径:
new path/bin/ma -v new path/bin/hadbm -v |
检查数据库是否处于运行状态。使用以下命令应该显示所有 HADB 节点都处于“正在运行”状态。
new path/bin/hadbm status -n |
确保使用 HADB 的产品已将其指针更改为指向新的 HADB 路径。
使用 HADB 的产品可以运行自己的升级测试,以检验 HADB 升级是否有效。
联机升级后,如果新版本无法正常运行,请转回使用以前的 HADB 版本。但是,如果已对管理代理系统信息库进行了更改,则可降级 HADB 本身,但新的管理代理必须继续运行。
本节列出有关 HADB 部署和升级的其他信息。
仅将设备文件、日志文件和历史文件存储在本地磁盘中,请勿使用远程安装的文件系统。
如果在一台主机上存在多个节点,建议将属于每个节点的设备分别存放在不同的磁盘上。否则,磁盘争用会导致性能降低。通过在历史文件中查找此类消息“注意 - 上次 flush/fputs 时间过长”可以查看此问题的症状。如果一个节点拥有多个数据设备文件,建议对这些设备文件使用单独的磁盘。
使用本地磁盘(最好是与数据设备所用不同的磁盘)在 HADB 主机上安装 HADB 二进制。NFS 延迟或磁盘争用可能导致节点重新启动,并且历史文件中出现警告“进程已阻塞 nnn,最长阻塞时间为 nnn”。
不要将 hadb 设备、历史文件、管理代理目录和代理配置文件放在 hadb 软件包路径下。因为这会导致在升级更新版本和删除旧软件包路径时出现问题。
正常情况下,此版 HADB 最多支持 28 个节点(24 个活动数据节点和 4 个备用节点)。
建议使用相同版本的 JDBC 驱动程序和 HADB 服务器。
不支持 IPv6,仅支持 IPv4。
在 Windows 上,命令行长度限制为 2048 字节。
必须将网络配置为可以进行 UDP 多址广播。
由于在 RedHat Enterprise Linux 3.0 的 Update 1 到 Update 3 上发现了过度交换,建议不要将其用作部署平台。此问题已在 RedHat Enterprise Linux 3.0 Update 4 中修复。
使用实时优先级运行 NSUP 时可能出现的情况。
节点的监控 (NSUP) 进程 (clu_nsup_srv) 通过及时交换 "heartbeat" 消息来确保 HADB 的高可用性。如果 NSUP 与导致资源耗尽的其他进程位于同一位置,则会影响计时。这将导致错误的网络分区和节点重新启动(在此之前,历史文件中会记录一条警告“进程被阻塞 n 秒”),同时导致出现异常中止的事务和其他异常情况。
要解决这一问题,clu_nsup_srv(可在 installpath/lib/server 中找到)必须设置 suid 位且该文件必须属于超级用户。这可以通过使用以下命令手动实现:
# chown root clu_nsup_srv # chmod u+s clu_nsup_srv |
这将导致 clu_nsup_srv 进程以超级用户的身份启动,而这又使该进程在启动后能够自动为其本身分配实时优先级。要通过使用 setuid 来避免任何安全性影响,请尽早设置实时优先级,并在更改优先级后立即将进程返回到有效的 uid。其他 HADB 进程会将其优先级降低为分时优先级。
如果 NSUP 无法设置实时优先级,则它会发出一条警告“无法设置实时优先级”(unix: errno 将设置为 EPERM),该警告将记录在 ma.log 文件中,并且 NSUP 在没有实时优先级的情况下继续运行。
以下是无法设置实时优先级的情况,例如:
安装在 Solaris 10 非全局区域中时
在 Solaris 10 中调用 PRIV_PROC_LOCK_MEMORY(允许进程锁定物理内存中的页)和/或 PRIV_PROC_PRIOCNTL 权限时
用户关闭 setuid 权限时
用户将本软件安装为 tar 文件(App.server 的非根安装选项)时
clu_nsup_srv 进程不会大量占用 CPU,其资源占用少,并且在使用实时优先级运行时不会影响系统性能。
为 Solaris 的 HADB 配置 IP 网络多路径(仅在 Solaris 9 上进行过测试)。
Sun 建议对运行 HADB 的 Solaris 主机设置网络多路径,以便尽可能确保最高的网络可用性。《IP Network Multipathing Administration Guide》中详细介绍了网络多路径设置。如果打算将多路径与 HADB 一起使用,请参阅《IP Network Multipathing Administration Guide》中的 "Administering Network Multipathing" 一节,以便先设置多路径,然后按照如下所属针对 HADB 调整多路径设置。《IP Network Multipathing Administration Guide》是 Solaris 9 System Administrator Collection 的一部分,并且可以从 http://docs.sun.com 下载。
设置网络接口故障检测时间
为了使 HADB 能够正确支持多路径故障转移,网络接口故障检测时间不能超过 1000 毫秒,此时间由 /etc/default/mpathd 中的 FAILURE_DETECTION_TIME 参数指定。如果此参数的原始值较高,请编辑文件并将其值更改为 1000:
FAILURE_DETECTION_TIME=1000 |
为了使更改生效,执行以下命令:
pkill -HUP in.mpathd |
与 HADB 一起使用的 IP 地址
如 Solaris IP Network Multipathing Administration Guide 中所述,多路径功能涉及将物理网络接口分组为多路径接口组。在此类组中,每个物理接口均包含两个与其关联的IP 地址:物理接口地址和测试地址。只有物理接口地址可用于传输数据,而测试地址仅供 Solaris 内部使用。运行 hadbm create --hosts 时,应该仅使用多路径组中的一个物理接口地址来指定每台主机。
示例
假设主机 1 和主机 2 分别具有两个物理网络接口。在每台主机上,均将这两个接口设置为多路径组,并且运行 ifconfig -a 将产生如下结果:
主机1
bge0: flags=1000843<mtu 1500 index 5 inet 129.159.115.10 netmask ffffff00 broadcast 129.159.115.255 groupname mp0 bge0:1: flags=9040843<mtu 1500 index 5 inet 129.159.115.11 netmask ffffff00 broadcast 129.159.115.255 bge1: flags=1000843<mtu 1500 index 6 inet 129.159.115.12 netmask ffffff00 broadcast 129.159.115.255 groupname mp0 bge1:1: flags=9040843<mtu 1500 index 6 inet 129.159.115.13 netmask ff000000 broadcast 129.159.115.255 |
主机 2
bge0: flags=1000843<mtu 1500 index 3 inet 129.159.115.20 netmask ffffff00 broadcast 129.159.115.255 groupname mp0 bge0:1: flags=9040843<mtu 1500 index 3 inet 129.159.115.21 netmask ff000000 broadcast 129.159.115.255 bge1: flags=1000843<mtu 1500 index 4 inet 129.159.115.22 netmask ffffff00 broadcast 129.159.115.255 groupname mp0 bge1:1: flags=9040843<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,请从每个节点选择一个物理接口地址。在此示例中,我们从主机 1 选择 129.159.115.10 并从主机 2 选择 129.159.115.20。要使用每台主机的一个数据库节点创建数据库,请对 hadbm create 使用以下参数:
--host 129.159.115.10,129.159.115.20 |
要使用每台主机的两个数据库节点创建数据库,请使用以下参数:
--host 129.159.115.10,129.159.115.20,129.159.115.10,129.159.115.20 |
在上述两个示例中,两台主机上的 ma.server.mainternal.interfaces 变量应设置为 129.159.115.0/24。
不可能从 4.2 或 4.3 联机升级到 4.4。但是,4.4 支持未来版本的联机升级。要从 4.4.1 升级到 4.4.2,请执行以下步骤:
将 4.4.2 安装到所有 HADB 主机上(安装到不同于 4.4.1 版路径的其他路径中,例如在 /opt/SUNWhadb/4.4.2-6 中)。
将新版本安装到 hadbm client 主机上。
停止 HADB 主机上运行的所有管理代理。
使用新版本的软件和旧的配置文件来启动管理代理进程。在余下的步骤中,请使用在新版本的 bin 目录中找到的 hadbm 命令。
在管理域中注册该软件包(由于默认的软件包名称为 V4.4,因此可能需要使用其他软件包名称,以免与现有的同名软件包冲突):
hadbm registerpackage --packagepath=/opt/SUNWhadb/4.4.2-6 V4.4.2 |
使用新版本重新启动数据库(以下命令将滚动重新启动这些节点):
hadbm set packagename=V4.4.2 database_name |
检查数据库是否处于“正在运行”状态(使用 hadbm status 命令)并且能够正常处理客户机事务。
如果一切运行正常,随后就可以删除旧安装。
在取消注册旧软件包之前,先从 ma 系统信息库中删除对旧软件包的所有引用。否则,hadbm unregisterpackage 将失败,并显示消息“软件包正在使用”。伪重新配置操作(例如 hadbm set connectiontrace=<same_as_previous_value>)将删除对旧软件包的所有引用。现在,取消注册旧软件包:
hadbm unregisterpackage [--hosts=<host_list>] <old_package_name> |
如 HADB installation instructions 所述,从文件系统中删除旧安装。