转载:【Oracle 集群】RAC知识图文详细教程(五)--特殊问题和实战经验

文章导航


  1. 集群概念介绍(一)
  2. ORACLE集群概念和原理(二)
  3. RAC 工作原理和相关组件(三)
  4. 缓存融合技术(四)
  5. RAC 特殊问题和实战经验(五)
  6. ORACLE 11 G版本2 RAC在LINUX上使用NFS安装前准备(六)
  7. ORACLE ENTERPRISE LINUX 5.7下DATABASE 11G RAC集群安装(七)
  8. ORACLE ENTERPRISE LINUX 5.7下DATABASE 11G RAC数据库安装(八)
  9. ORACLE ENTERPRISE LINUX 5.7下DATABASE 11G RAC基本测试与使用(九)

转载自:http://www.cnblogs.com/baiboy/p/orc1.html\

转载目的:便于本人对看到的好文章进行分类整理,及根据实际需要进行进行适当的调整或补充,不用于适合商业用途。

共享存储

在需要将一个 LUN (逻辑单元号)映射给多个节点、为集群提供一个共享的存储卷时,同一个存储 LUN 在各个主机端的 LUNID 必须是相同的。比如:

(一) 在为多个 ESX 节点创建一个 VMFS 卷的时候

(二) 在双机 HA 集群创建共享存储的时候

时间一致性

集群模式下,各个节点要协同工作,因此,各主机的时间必须一致。因此,各主机的时间必须一致。各个节点之间的时间差不能超时,一般如果超过 30s,节点很可能会重启,所以要同步各节点的时间。例如,需要配置一个 ntp 时钟服务器,来给 RAC 的各个节点进行时间同步。或者让节点之间进行时间同步,保证各个节点的时间同步,但是无法保证 RAC 数据库的时间的准确性。

互联网络(或者私有网络、心跳线)

集群必须依赖内部的互联网络实现数据通讯或者心跳功能。因此,采用普通的以太网还是其他的高速网络(比如 IB),就很有讲究,当然了,还有拿串口线实现心跳信息传递。此外,采用什么样的网络参数对集群整体的性能和健壮性都大有关系。

案例:

XX 市,4 节点 Oracle 10g RAC

操作系统采用的是 RHEL 4,按照默认的安装文档,设置网络参数为如下值:

net.core.rmem_default = 262144

net.core.rmem_max = 262144

执行一个查询语句,需要 11 分钟,修改参数:

net.core.rmem_default = 1048576

net.core.rmem_max = 1048576

再次执行仅需 16.2 秒。

固件、驱动、升级包的一致性

案例:

XX 市,HPC 集群,运行 LS-DYNA(通用显示非线性有限元分析程序)。

集群存储系统的环境说明:存储系统的 3 个 I/O 节点通过 FC SAN 交换机连接到一个共享的存储。

    1. 节点使用的 FC HBA 卡为 Qlogic QLE2460;
    2. 光纤交换机为 Brocade 200E
    3. 磁盘阵列为 Dawning DS8313FF

故障现象

集群到货后发现盘阵与机器直连能通,两个设备接 200E 交换机不通。后经测试交换机 IOS 版本问题导致不能正常认出盘阵的光纤端口,与交换机的供货商联系更新了两次 IOS,盘阵的端口能正常识别,但盘阵与机器相连还是无法找到盘阵。经过今天的测试发现三台 I/O 节点采用的 HBA 卡 firmware 版本不一致。最早接光纤交换机及与盘阵直连的的 I/O1 的 firmware 为 v4.03.02,今天又拿出来的两台 I/O 节点 firmware 为 v4.06.03。用后两台测试后盘阵、机器、交换机之间可以正常通信,到今天晚上为止没有发现异常情况。从目前的情况判断是QLE2460 firmware 为 v4.03.01 的 HBA 卡与 200E IOS V5.3.1 有冲突者不兼容导致的故障。至于新的 HBA 卡 firmware为 v4.06.03 与 200E IOS V5.3.1 连接的稳定性如何还要做进一步测试。

诊断处理结果

I/O 1 节点 HBA 卡的 fimware 升级到 v4.06.03 后连接 200E 找不到盘阵的故障已经得到解决。其实是一个 FCHBA 卡的固件版本不一致引起的问题。

共享文件 OCR 及 Voting Disk

Oracle Cluster Registry(OCR):记录 OCR 记录节点成员的配置信息,如 database、ASM、instance、 listener、VIP 等 CRS 资源的配置信息,可存储于裸设备或者群集文件系统上。Voting disk : 即仲裁盘,保存节点的成员信息,当配置多个投票盘的时候个数必须为奇数,每个节点必须同时能够连接半数以上的投票盘才能够存活。初次之外包含哪些节点成员、节点的添加和删除信息。

安装

在 Oracle RAC 中,软件不建议安装在共享文件系统上,包括 CRS_HOME 和 ORACLE_HOME,尤其是 CRS 软件,推荐安装在本地文件系统中,这样在进行软件升级,以及安装 patch 和 patchset 的时候可以使用滚动升级(rolling upgrade)的方式,减少计划当机时间。另外如果软件安装在共享文件系统也会增加单一故障点。如果使用 ASM 存储,需要为 asm 单独安装 ORACLE 软件,独立的 ORACLE_HOME,易于管理和维护,比如当遇到 asm 的 bug 需要安装补丁时,就不会影响 RDBMS 文件和软件。

脑裂症(split brain)

在一个共享存储的集群中,当集群中 heartbeat 丢失时,如果各节点还是同时对共享存储去进行操作,那么在这种情况下所引发的情况是灾难的。ORACLE RAC 采用投票算法来解决这个问题,思想是这样的:每个节点都有一票,考虑有 A,B,C 三个节点的集群情形,当 A 节点由于各种原因不能与 B,C 节点通信时,那么这集群分成了两个 DOMAIN,A 节点成为一个 DOMAIN,拥有一票;B,C 节点成为一个 DOMAIN 拥有两票,那么这种情况B,C 节点拥有对集群的控制权,从而把 A 节点踢出集群,对要是通 IO FENCING 来实现。如果是两节点集群,则引入了仲裁磁盘,当两个节点不能通信时,请求最先到达仲裁磁盘的节点拥用对集群的控制权。网络问题(interconnect 断了),时间不一致;misscount 超时 等等,才发生 brain split,而此时为保护整个集群不受有问题的节点影响,而发生 brain split。oracle 采用的是 server fencing,就是重启有问题的节点,试图修复问题。当然有很多问题是不能自动修复的。比如时间不一致,而又没有 ntp;网线坏了。。。这些都需要人工介入修复问题。而此时的表现就是有问题的节点反复重启。

集群软件

从 Oracle10g 起,Oracle 提供了自己的集群软件,叫做 Oracle Clusterware,简称 CRS,这个软件是安装 oraclerac 的前提,而上述第三方集群则成了安装的可选项 。同时提供了另外一个新特性叫做 ASM,可以用于 RAC 下的共享磁盘设备的管理,还实现了数据文件的条带化和镜像,以提高性能和安全性 (S.A.M.E: stripe and mirroreverything ) ,不再依赖第三方存储软件来搭建 RAC 系统。尤其是 Oracle11gR2 版本不再支持裸设备,Oracle 将全力推广 ASM,彻底放弃第三方集群组件支持。

Oracle Clusterware 的心跳

Oracle Clusterware 使用两种心跳设备来验证成员的状态,保证集群的完整性。

  • l   一是对 voting disk 的心跳,ocssd 进程每秒向 votedisk 写入一条心跳信息。
  • l   二是节点间的私有以太网的心跳。

两种心跳机制都有一个对应的超时时间,分别叫做 misscount 和 disktimeout:

  • l   misscount 用于定义节点间心跳通信的超时,单位为秒;
  • l   disktimeout ,默认 200 秒,定义 css 进程与 vote disk 连接的超时时间;

reboottime ,发生裂脑并且一个节点被踢出后,这个节点将在reboottime 的时间内重启;默认是 3 秒。用下面的命令查看上述参数的实际值:

  • l  # crsctl get css misscount
  • l  # grep misscount $CRS_HOME/log/hostname/cssd/ocssd.log

在下面两种情况发生时,css 会踢出节点来保证数据的完整,:

(一) Private Network IO time > misscount,会发生 split brain 即裂脑现象,产生多个“子集群”(subcluster) ,这些子集群进行投票来选择哪个存活,踢出节点的原则按照下面的原则:节点数目不一致的,节点数多的 subcluster 存活;节点数相同的,node ID 小的节点存活。

(二) VoteDisk I/O Time > disktimeout ,踢出节点原则如下:失去半数以上 vote disk 连接的节点将在 reboottime 的时间内重启。例如有 5 个 vote disk,当由于网络或者存储原因某个节点与其中>=3 个 vote disk 连接超时时,该节点就会重启。当一个或者两个 vote disk 损坏时则不会影响集群的运行。

如何查看现有系统的配置

对于一个已经有的系统,可以用下面几种方法来确认数据库实例的心跳配置,包括网卡名称、IP 地址、使用的网络协议。

 最简单的方法,可以在数据库后台报警日志中得到。使用 oradebug

SQL> oradebug setmypid

Statement processed.

SQL> oradebug ipc

Information written to trace file.

SQL> oradebug tracefile_name

/oracle/admin/ORCL/udump/orcl2_ora_24208.trc

找到对应 trace 文件的这一行:socket no 7 IP 10.0.0.55 UDP 16878

 从数据字典中得到:

SQL> select * from v$cluster_interconnects;

转载:【Oracle 集群】RAC知识图文详细教程(五)--特殊问题和实战经验

SQL> select * from x$ksxpia;

转载:【Oracle 集群】RAC知识图文详细教程(五)--特殊问题和实战经验

心跳调优和设置

为了避免心跳网络成为系统的单一故障点,简单地我们可以使用操作系统绑定的网卡来作为 Oracle 的心跳网络,以 AIX 为例,我们可以使用 etherchannel 技术,假设系统中有 ent0/1/2/3 四块网卡,我们绑定 2 和 3 作为心跳:在 HPUX 和 Linux 对应的技术分别叫 APA 和 bonding

UDP 私有网络的调优当使用 UDP 作为数据库实例间 cache fusion 的通信协议时,在操作系统上需要调整相关参数,以提高 UDP传输效率,并在较大数据时避免出现超出 OS 限制的错误:

(一) UDP 数据包发送缓冲区:大小通常设置要大于(db_block_size * db_multiblock_read_count )+4k,

(二) UDP 数据包接收缓冲区:大小通常设置 10 倍发送缓冲区;

(三) UDP 缓冲区最大值:设置尽量大(通常大于 2M)并一定要大于前两个值;

各个平台对应查看和修改命令如下:

Solaris 查看 ndd /dev/udp udp_xmit_hiwat udp_recv_hiwat udp_max_buf ;

修改 ndd -set /dev/udp udp_xmit_hiwat 262144

ndd -set /dev/udp udp_recv_hiwat 262144

ndd -set /dev/udp udp_max_buf 2621440

AIX 查看 no -a |egrep “udp_|tcp_|sb_max”

修改 no -p -o udp_sendspace=262144

no -p -o udp_recvspace=1310720

no -p -o tcp_sendspace=262144

no -p -o tcp_recvspace=262144

no -p -o sb_max=2621440

Linux 查看 文件/etc/sysctl.conf

修改 sysctl -w net.core.rmem_max=2621440

sysctl -w net.core.wmem_max=2621440

sysctl -w net.core.rmem_default=262144

sysctl -w net.core.wmem_default=262144

HP-UX 不需要

HP TRU64 查看 /sbin/sysconfig -q udp

修改: 编辑文件/etc/sysconfigtab

inet: udp_recvspace = 65536

udp_sendspace = 65536

Windows 不需要

参考文献


  1. Oracle的三种高可用集群方案
  2. 集群概念介绍:栢图教育 Oracle 高级课程——理论教材
  3. Oracle 11 RAC生存指南
  4. Oracle 11gR2 RAC管理与性能优化
上一篇:Maven 安装 eclispe


下一篇:转载:【Oracle 集群】RAC知识图文详细教程(八)--Oracle 11G RAC数据库安装