61阅读

oracle rac-详解Oracle RAC入门和提高(1)

发布时间:2017-09-06 所属栏目:oracle rac

一 : 详解Oracle RAC入门和提高(1)

本文将详细讲述Oracle RAC入门和提高,希望对广大Oracle数据库管理人员以及致力于学习Oracle数据库的管理人有所帮助。

Oracle RAC 产品概述

Oracle Real Application Server,真正应用集群,简称Oracle RAC ,是Oracle的并行集群,位于不同服务器系统的Oracle实例同时访问同一个Oracle数据库,节点之间通过私有网络进行通信,所有的控制文件、联机日志和数据文件存放在共享的设备上,能够被集群中的所有节点同时读写。其系统架构如下图:

详解Oracle RAC入门和提高(1)_oraclerac

RAC提供的好处包括:

(1)多节点负载均衡;

(2)提供高可用:故障容错和无缝切换功能,将硬件和软件错误造成的影响最小化,下表是RAC与传统的双机热备方式切换时间的对比:

详解Oracle RAC入门和提高(1)_oraclerac

(3)通过并行执行技术提高事务响应时间----通常用于数据分析系统;

(4)通过横向扩展提高每秒交易数和连接数 ;----通常对于联机事务系统;

(5)节约硬件成本,可以用多个廉价PC服务器代替昂贵的小型机或大型机,同时节约相应维护成本;

(6)可扩展性好,可以方便添加删除节点,扩展硬件资源;

RAC的缺点有:

相对单机,管理更复杂,要求更高;

在系统规划设计较差时性能甚至不如单节点;

可能会增加软件成本(如果使用高配置的pc服务器,Oracle一般按照CPU个数收费)

在Oracle9i之前,RAC的名称是OPS (Oracle parallel Server)。RAC 与 OPS 之间的一个较大区别是,RAC采用了Cache Fusion(高速缓存合并)技术。在 OPS 中,节点间的数据请求需要先将数据写入磁盘,然后发出请求的节点才可以读取该数据。使用Cache fusion时,RAC的各个节点的数据缓冲区通过高速、低延迟的内部网络进行数据块的传输。

Oracle RAC在中国各行各业使用都比较广泛,包括通信移动、金融服务、社会保障和电子商务等,据Oracle统计,2007财年中国有500多家企业使用Oracle实时应用集群,考虑到未登记信息,实际数字更高于这一数字。典型的用户包括:中彩在线/OLTP/4节点/10gR2/AIX5.3、淘宝/DataWarehouse/4节点/10gR2/RHEL4、北京社保/6节点 /HP_Alpha/ MA8000、建行证券系统/2节点/IBM_P595/EMC_DMX3、上海电力/2节点/Alpha_GS160、广东移动、山东网通等。

详解Oracle RAC入门和提高(1)_oraclerac

Oracle RAC/Clusterware的结构和组件

一、RAC主要组件, 软硬件两部分

(1) 服务器 >= 2

(2) 操作系统,推荐使用Oracle认证的系统;版本不要太老,也不要太新

(3) CPU/内存 根据业务需要,内存至少1G

(4) 本地磁盘空间,>=30G

(5) 网卡 >=2 ,推荐4个以上千兆网卡

(6) 私有以太网络,推荐千兆交换机以上

(7) HBA卡 ,如果是SAN,推荐2个冗余HBA

(8) 共享存储设备,推荐SAN设备

(9) 存储管理, ASM/Cluster LV/裸分区/CFS,不推荐用OCFS,卷管理软件、多路径软件等

(10) 第三方集群软件: 可选

(11) Oracle Clusterware 软件

(12) Oracle RDBMS 软件

二、Clusterware主要进程

(1)crsd: 负责管理集群的高可用操作。管理的crs资源包括数据库、实例、监听、虚拟IP,ons,gds或者其他,操作包括启动、关闭、监控及故障切换。改进程由root用户管理和启动。crsd如果有故障会导致系统重启。

(2)cssd,管理各节点的关系,用于节点间通信,节点在加入或离开集群时通知集群。该进程由oracle用户运行管理。发生故障时cssd也会自动重启系统。

(3)oprocd – 集群进程管理 —Process monitor for the cluster. 用于保护共享数据IO fencing。

仅在没有使用vendor的集群软件状态下运行

(4)evmd :事件检测进程,由oracle用户运行管理

三、Clusterware使用的共享设备

(1) Oracle Cluster Registry(OCR):记录集群的配置信息;

(2) Voting disk : 即投票盘,保存节点的成员信息,当配置多个投票盘的时候个数必须为奇数,每个节点必须同时能够连接半数以上的投票盘才能够存活;

四、安装路径的选择

详解Oracle RAC入门和提高(1)_oraclerac

注:

(1)在Oracle RAC中,软件不建议安装在共享文件系统上;包括CRS_HOME和ORACLE_HOME,尤其是CRS软件,推荐安装在本地文件系统中,这样在进行软件升级,以及安装patch和patchset的时候可以使用滚动升级(rolling upgrade)的方式,减少计划当机时间。另外如果软件安装在共享文件系统也会增加单一故障点。

(2)如果使用ASM存储,需要为asm单独安装ORACLE软件,独立的ORACLE_HOME,易于管理和维护,比如当遇到asm的bug需要安装补丁时,就不会影响RDBMS文件和软件。

(3)在Oracle 11gR2中将新增存储选项:acfs (Oracle ASM Cluster File System)

第三方集群

在Oracle9i中,除了Windows和Linux,在安装RAC之前必须先安装vendor clusterware,即第三方集群,包括IBM的HACMP, HP的ServiceGuard for oracle RAC, Sun cluster,Veritas SFRAC等,这一类的集群软件为Oracle RAC提供了下面的功能:

(1)共享的逻辑卷管理或者集群文件系统用于存放数据文件;

(2)提供了统一的集群的成员组管理;

(3)使用更健壮的SCSI-3 PGR机制来防止心跳故障(即裂脑split brain)导致的数据损坏,这种功能一般叫做IO fencing;

(4)提供效率更高的、更低延迟的心跳网络用于cache fusion,可以相对减少TCP/IP的开销,包括:

HP SGeRAC: HMP (Hyper Messaging Protocol),

Sun Cluster: RSM (Remote Shared Memory),

Veritas SFRAC: LLT (low-latency transport),

Compac True Cluster: RDG (reliable data grams);

通常如果要使用第三方集群的心跳协议,需要将$ORACLE_HOME/lib/libskgxpX.so文件替换为第三方集群

软件提供的libskgxpX.so文件(其中X代表Oracle版本号9/10/11),skgxp 是System Kernel Generic Interface Inter-Process Communications的缩写,是oracle开放的一个应用接口,用于传输GCS和GES 的数据。Oracle自带的libskgxp文件定义的传输协议是UDP/IP。

5)提供扩展的容灾方案,例如campus cluster/metro cluster/extended RAC;如下图, 以Veritas的SFRAC为例,它提供两种Oracle Extended RAC方案,方案一是使用Veritas Volume Manager对底层阵列进行镜像,提供同城容灾级别的实时数据保护;方案二使用GCO/VVR对数据库进行数据复制,可以实现距离更远、超过10km广域网的容灾;

详解Oracle RAC入门和提高(1)_oraclerac

(6)Veritas SFRAC 还提供了以下特性:

补充的Oracle ODM,可以使Oracle同时拥有文件系统的易管理和裸设备的性能;

标准的多路径软件(DMP),不需要再安装其他软件就可支持绝大多数磁盘阵列,在异构SAN环境中有更好的兼容性;

从Oracle10g起,Oracle提供了自己的集群软件,叫Oracle clusterware简称CRS,这个软件是安装oracle rac的前提,而上述第三方集群则成了安装的可选项。同时提供了另外一个新特性叫做ASM,可以用于RAC下的共享磁盘设备的管理,还实现了数据文件的条带化和镜像,以提高性能和安全性 (S.A.M.E: stripe and mirror everything ) ,不再依赖第三方存储软件来搭建RAC系统。

那么Oracle是如何识别第三方集群的呢?

在安装完第三方集群后,会在特定目录下生成Oracle RAC接口文件,这个文件的作用就是上面的第二点功能:集群成员管理信息(cluster membership 简称CM)。在HPUX下该文件是/opt/nmapi/nmapi2/lib/pa20_64,在AIX/Solaris/Linux下这个文件是 /opt/ORCLcluster/lib/libskgxn2.so 。

当安装CRS的的检查阶段,就会检测是否有该文件,如果有的话,在安装CRS过程中生成一个软连接文件,文件名是ligskgxn2.so,指向上面的libskgxn2.so或pa20_64文件,这个软连接的位置在CRS_HOME/lib/目录;如果没有第三方集群,那么CRS安装过程中生成自己的libskgxn2.so文件。换句话说,在有第三方集群存在的情况下,CRS的集群成员信息是来自于第三方集群,两套集群的成员信息保持一致和同步;没有第三方集群情况时,CRS自己管理成员信息。

通过查询$CRS_HOME/log/hostname/cssd/ocssd.log可以看到css识别到的第三方集群,下面的例子分别是HACMP、SFRAC、SunCluster、ServiceGuide :

  1. [CSSD]2008-05-2715:09:43.456[1029]>TRACE:clssnm_skgxninit:initializedskgxnversion(2/0/IBMAIXskgxn)
  2. [CSSD]2008-12-3021:44:56.172[1029]>TRACE:clssnm_skgxninit:initializedskgxnversion(2/0/VeritasClusterServerMM
  3. [CSSD]2007-08-1002:19:39.572[3]>TRACE:clssnm_skgxninit:initializedskgxnversion(2/2/OracleSolarisUDLM)
  4. [CSSD]2006-09-2918:57:53.323[5]>TRACE:clssnm_skgxninit:initializedskgxnversion(2/0/Hewlett-PackardSKGXN2.0)

在9i/8i中没有css/crs,该信息可以在后台进程lmon的trace文件中得到(在bdump中);

在安装Oracle 9i RAC/8i OPS的过程中,Oracle识别集群方法类似。

在多个平台上,如果两个节点没有正确链接libskgxn2文件,可能会导致第二个实例无法mount或出现ORA-600错误。

Oracle支持的RAC环境

因为Oracle RAC本身比较复杂,在安装和管理中可能会遇到各种问题,涉及到OS、RDBMS、Cluster软件和网络、主机、存储等硬件,为了避免不必要的问题发生,在安装之前,我们需要确认安装环境是否满足要求,包括软件和硬件两方面,尤其是Vendor clusterware和OS 的版本的兼容性需要注意,可以从metalink中得到最新的Oracle官方认证信息:登陆Metalink.oracle.com 选择 Certify,选择by product,选择real application server,选择对应平台就可以得到。下面列出一些关于硬件和平台支持的常见问题:

官方不支持的:Vmware, Sun LDOM ,Solaris Local Container/Zones

官方支持的: IBM LPAR, IBM VIOS(Virtual IO Server), Solaris Global Containers

RHEL GFS , ISCSI,

私有网络(心跳线)的支持: 不支持使用交叉线,支持 Infiniband RDS (10gR2之后)

异构环境:支持不同的硬件、但相同的软件(OS/Oracle)组成的集群,不支持32位与64位系统间的集群

目前支持的NFS的server包括:

EMC Celerra

Fujitsu Filer NR1000 Series

IBM N Series

NetApp FAS, F, G Series

Pillar Data Systems Axiom 500

Sun StorageTek 5000 Series

Oracle Clusterware的心跳

Oracle clusterware 使用两种心跳设备来验证成员的状态,保证集群的完整性;一是对voting disk的心跳,ocssd进程每秒向votedisk写入一条心跳信息;二是节点间的私有以太网的心跳,两种心跳机制都有一个对应的超时时间,分别叫做 misscount和disktimeout:

misscount 用于定义节点间心跳通信的超时,单位为秒;

disktimeout ,默认200秒,定义css进程与vote disk连接的超时时间;

reboottime ,发生裂脑并且一个节点被踢出后,这个节点将在reboottime的时间内重启;默认是3秒;

其中misscount默认值见下表
详解Oracle RAC入门和提高(1)_oraclerac

用下面的命令查看上述参数的实际值:

  1. 1.#crsctlgetcssmisscount
  2. 2.#grepmisscount$CRS_HOME/log/hostname/cssd/ocssd.log
  3. [CSSD]2008-11-2722:29:42.397[1]>TRACE:clssnmInitNMInfo:misscountsetto600

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

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

节点数目不一致的,节点数多的subcluster存活;节点数相同的,node ID小的节点存活。

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

可以手工修改这三个参数的值,单位都是秒:(谨慎使用)

  1. $CRS_HOME/bin/crsctlsetcssmisscount
  2. $CRS_HOME/bin/crsctlsetcssreboottime[-force]
  3. $CRS_HOME/bin/crsctlsetcssdisktimeout[-force]
  4. 或者重新设置成默认值:crsctlunsetcssmisscount

Clusterware的私有网络

在Oracle 10g/11g中,Oracle的私有网络(private network)包括clusterware的私有网络和数据库实例的私有网络:

clusterware的私有网络主要包括css数据的传送,即用一种特殊的ping命令来检测其他机器的状态;

数据库实例的私有网络,包括RDMS和ASM的,用于cache fusion(GCS/GES)数据的传输。

当我们只使用一个私有网卡的时,同时传送上面两类的数据。如果我们在安装时指定了两个私有网卡,首先使用如下面$CRS_HOME/bin/oifcfg getif命令来得到所有网络接口列表,这些信息保存在ocr中:

  1. #oifcfggetif
  2. en010.200.56.0globalpublic
  3. en3192.168.3.0globalcluster_interconnect
  4. en5192.168.5.0globalcluster_interconnect

情况会有所不同,clusterware的私有网络,目前(10g/11g)只能使用一个网络接口,对应于/etc/hosts中定义的private hostname的那个网卡,可以通过查看ocssd的log来确定:

当/etc/hosts 中定义private hostname为192.168.3.233时看到 :

  1. [CSSD]2009-01-1617:34:12.406[1029]>TRACE:clssgmPeerListener:Listeningon(ADDRESS=(PROTOCOL=tcp)(DEV=12)(HOST=192.168.3.233)(PORT=45527))

这个是与其他节点css进行通信的信息:

  1. [CSSD]2009-01-1617:36:27.463[1029]>TRACE:clssgmConnectToNode:
  2. node2clsc(ADDRESS=(PROTOCOL=tcp)(DEV=12)(HOST=192.168.3.234)(PORT=37732))-size64ver1

当/etc/hosts 中定义private hostname为192.168.5.233时,css使用了另外一个网络:

  1. [CSSD]2009-01-1618:59:56.411[1029]>TRACE:clssgmPeerListener:
  2. Listeningon(ADDRESS=(PROTOCOL=tcp)(DEV=12)(HOST=192.168.5.233)(PORT=50415))

Oracle实例的私有网络

Oracle实例的心跳网络使用方式的优先级从高到低如下:

(1) 如果使用了第三方集群的IPC,替换了对应$ORACLE_HOME/lib/libskgxnX.so文件,那么数据库实例的cache fusion会使用对应的网络协议,而忽略ocr中和数据库初始化参数中cluster_interconnects的配置,下面的例子当中就使用了 VCSIPC,可以从对应的alert log中验证:

  1. db_name=r10g
  2. open_cursors=300
  3. pga_aggregate_target=1237319680
  4. FriMar1314:00:352009
  5. OracleinstancerunningwithODM:Veritas6.0ODMLibrary,Version1.1
  6. clusterinterconnectIPCversion:
  7. VERITASIPC5.1.0.015:16:24Feb122009
  8. IPCVendor86proto76
  9. Version1.0
  10. PMONstartedwithpid=2,OSid=4399196
  11. DIAGstartedwithpid=3,OSid=3936288

(2) 如果没有使用第三方IPC,则优先使用数据库初始化参数的cluster_interconnects配置,这个参数的格式为if1:if2:...:ifn,可以不同于crs的私有网络,需要注意的是,该参数不支持多个网卡的故障切换;

(3) 没有上面两个配置,数据库会使用oifcfg列出的心跳的网络,在对应的告警日志中可以得到:

  1. Interfacetype1en6192.168.61.0configuredfromOCRforuseasaclusterinterconnect
  2. Interfacetype1en010.182.0.0configuredfromOCRforuseasapublicinterface
  3. ....
  4. Clustercommunicationisconfiguredtousethefollowinginterface(s)forthisinstance
  5. 192.168.61.0

(4) 没有1和2的配置,并且oifcfg也没有配置cluster_interconnect,则数据库会使用共有网络进行心跳信息的传输,这种配置其实是配置失败的情况,数据库虽然能够启动,但急需DBA修正,在告警日志中可以看到:

  1. WARNING:Noclusterinterconnecthasbeenspecified.Dependingon
  2. thecommunicationdriverconfiguredOracleclustertraffic
  3. maybedirectedtothepublicinterfaceofthismachine.
  4. OraclerecommendsthatRACclustereddatabasesbeconfigured
  5. withaprivateinterconnectforenhancedsecurityand
  6. performance.

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

(1) 最简单的方法:可以在数据库的后台报警日志中得到。具体参见上面列出的告警日志;

(2) 使用oradebug ;

  1. SQL>oradebugsetmypid
  2. SQL>oradebugipc
  3. SQL>oradebugtracefile_name

找到对应trace文件的这一行:socket no 10 IP 10.0.0.1 UDP 49197

(3) 从数据字典中得到(V$CLUSTER_INTERCONNECTS 和 V$CONFIGURED_INTERCONNECTS),或查询x$ksxpia

  1. SQL>SELECT*FROMV$CLUSTER_INTERCONNECTS;----Oracle11g开始支持此试图
  2. NAMEIP_ADDRESSIS_SOURCE
  3. --------------------------------------------------------------------------------
  4. en3192.168.2.31NOOracleClusterRepository
  5. en5192.168.3.231NOOracleClusterRepository
  6. SQL>SELECT*FROMV$CONFIGURED_INTERCONNECTS;
  7. NAMEIP_ADDRESSIS_SOURCE
  8. --------------------------------------------------------------------------------
  9. en3192.168.2.31NOOracleClusterRepository
  10. en5192.168.3.231NOOracleClusterRepository
  11. en010.200.59.231YESOracleClusterRepository
  12. SQL>select*fromx$ksxpia;
  13. ADDRINDXINST_IDPUB_KSXPIAPICKED_KSXPIANAME_KSXPIAIP_KSXPIA
  14. --------------------------------------------------------------------------------------------
  15. 00000001104AAF2801NOCRen6192.168.61.121
  16. 00000001104AAF2811YOCRen010.182.6.211

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

  1. #mkdev-cadapter-spseudo-tibm_ech-aadapter_names='ent2,ent3'##将生成网卡设备ent4
  2. #/usr/lib/methods/defif
  3. #lsdev-Ccadapter|grepent
  4. #lsattr-Elent4
  5. #ifconfigen4inet192.168.3.231netmask255.255.255.0up
  6. 在Solaris上可以使用dladm来创建链路聚合:
  7. #dladmcreate-aggr-dbge2-dbge31
  8. #ifconfigaggr1plumb192.168.3.231netmask255.255.255.0up
  9. #dladmshow-aggr
  10. #ifconfig-a

同样在HPUX和Linux对应的技术分别叫APA和bonding。

UDP私有网络的调优

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

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

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

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

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

Solaris 查看

  1. ndd/dev/udpudp_xmit_hiwatudp_recv_hiwatudp_max_buf;
  2. 修改ndd-set/dev/udpudp_xmit_hiwat262144
  3. ndd-set/dev/udpudp_recv_hiwat262144
  4. ndd-set/dev/udpudp_max_buf2621440

AIX 查看

  1. no-a|egrep“udp_|tcp_|sb_max”
  2. 修改no-p-oudp_sendspace=262144
  3. no-p-oudp_recvspace=1310720
  4. no-p-otcp_sendspace=262144
  5. no-p-otcp_recvspace=262144
  6. no-p-osb_max=2621440

Linux 查看

  1. 文件/etc/sysctl.conf
  2. 修改sysctl-wnet.core.rmem_max=2621440
  3. sysctl-wnet.core.wmem_max=2621440
  4. sysctl-wnet.core.rmem_default=262144
  5. sysctl-wnet.core.wmem_default=262144

HP-UX 不需要

HP TRU64 查看 /sbin/sysconfig -q udp

修改: 编辑文件/etc/sysconfigtab

inet: udp_recvspace = 65536

udp_sendspace = 65536

Windows 不需要

常见安装、管理错误

1. 安装CRS失败,或执行root.sh报错,可能原因:

(1) 节点间的时间不同步,解决方法:使用ntp服务

(2) Linux下启用了默认的防火墙,导致执行root.sh报错:

Failure at final check of Oracle CRS stack.

10

解决方法:禁用iptables ,注释/etc/pam.d/other ;

  1. #serviceiptablesstop;#chkconfigiptablesoff.

(3) 裸设备的权限问题,可能因为操作系统重新启动后权限发生变化。(RHEL4)

解决方法: 把 chown oracle:dba /dev/raw/raw* 命令加入到/etc/rc.local中,每次开机自动执行

或者修改文件/etc/udev/permissions.d/50-udev.permissions

第113行raw/*:root:disk:0660 改成 raw/*:oracle:dba:0660

(4) Solaris使用了包括cylinder 0的磁盘分区来存储OCR或者vote disk。

解决办法:相关分区不应该包括cylinder 0,可以从1开始。

(5) 使用的公网IP地址不可路由,

解决方法:添加相关网关

(6) 在/etc/hosts 中没有loopback地址,即127.0.0.1 localhost

(7) 主机名含有大些字母、减号或者下划线等特殊字符;

(8) HPUX中oracle不要使用gnu的bash,修改使用默认shell;

(9) 检查操作系统、第三方集群是否是oracle官方支持的,是否需要补丁,比如在AIX5.3+HACMP上安装

Oracle 10g/11g RAC,oslevel就需要06及以上;

(10) AIX平台,需要将共享设备的reserve_policy (reserve_lock) 属性修改为no_reserve(no);

(11) 所有节点看到的OCR和vote设备的路径名应该一致,如果不一致,可以用软连接解决;

(12) 心跳设备问题或者ocr/votedisk 访问问题,unix/linux查看有无/tmp/crsctl.*文件,得到错误信息;

(13) 在CRS旧的安装的环境中重新安装失败

解决方法: dd清除ocr和vote disk,并使用下面语句清理旧的crs配置文件

  1. rm-rf/usr/tmp/.oracle/var/tmp/.oracle/tmp/.oracle/etc/oracle/*/var/opt/oracle/*
  2. rm-rf/etc/init.cssd/etc/init.crs*/etc/init.evmd/etc/init.d/init.cssd/etc/init.d/init.crs
  3. rm-rf/etc/init.d/init.crsd/etc/init.d/init.evmd/etc/rc3.d/K96init.crs/etc/rc3.d/S96init.crs
  4. rm-rf/etc/rc.d/rc2.d/K96init.crs/etc/rc.d/rc2.d/S96init.crs

2 客户端有时候报错:

ORA-12545: Connect failed because target host or object does not exist

ORA-12545: 因目标主机或对象不存在, 连接失败

解决方法:设置local_listener初始化参数

3 如果选择节点界面出不来。

(1)HACMP环境中需要检查oracle 用户必须在 hagsuser组里.

(2)如果是hacmp5.4,需要打Oracle补丁6718715;

(3)可以使用集群配置文件cluster CONFIGURATION FILE ,内容模板如下:

  1. MyCluster
  2. rac01rac01-privrac01-vip
  3. rac02rac02-privrac02-vip
  4. rac03rac03-privrac03-vip
  5. rac04rac04-privrac04-vip

4. AIX上数据库启动报错

  1. ora-27504IPCerrorcreatingOSDcontext
  2. ora-27300OSsystemdependentoperation:sendmsgfailedwithstatus:59
  3. ora-27301OSfailuremessage:Messagetoolong
  4. ora-27302failureoccurredat:sskgxpsnd1

原因:没有设置网络参数udp_recvspace/udp_sendspace

5. Windows平台,ORA-600 [kccsbck_first]

解决方法:关闭Media Sense(媒体感知)

6. 系统循环重启:

可能是CRS导致,如果因为crs,首先设置 crsctl disable crs 来禁止oracle crs的自动启动。

查看OS、crsd和cssd的对应日志,看/tmp/下是否有crs文件 (ls -lrt /tmp/crsctl*),确定crs失败原因。

7. 第二个节点的数据实例无法mount,挂起或者报错,

原因1:使用了vendor clusterware ,libskgxn2.so文件链接错误,

解决方法:比较两个节点的ORACLE_HOME/lib/libskgxn2和CRS_HOME/lib/libskgxn2*都是否相同,

如果不同需要重新link

原因2:任何平台Oracle 9i,没有设置网络参数udp参数

导致udp_sendspace或者udp_recvspace小于 db_block_size * db_file_multiblock_read_count

解决方法:设置对应参数,如AIX上设置udp_recvspace = 65536 udp_sendspace = 65536

原因3:AIX/HACMP/Oracle9i,在hacmp中定义了service IP

解决方法:在初始化参数中定义cluster_interconnects

原因4:任何平台,设置了错误的cluster_interconnects

解决方法:检查并纠正此参数,

8. 建库时不能识别裸设备;

原因1:Oracle,10.2.0.3 ,很多平台(比如aix和linux)有rawutl相关bug,

解决办法:还原10.2.0.1中的rawutl工具,该程序在 $ORACLE_HOME/bin目录中。

原因2:Oracle9i,AIX平台,需要设置环境变量export PGSD_SUBSYS=grpsvcs

9. evm资源自动报错oac_init:2: Could not connect to server, clsc retcode = 9

解决方法:关闭 “UDP ICMP rejections”

  1. /etc/rc.d/init.d/iptablesstop;chkconfigiptablesoff

二 : oracle安装rac后的检查

查看节点状态:[grid@rac1 ~]$ olsnodes -irac1 rac1viprac2 rac2vip[grid@rac1 ~]$ olsnodes -srac1 Activerac2 Active
查看VIP:[grid@rac1 ~]$ ifconfig -a-bash: ifconfig: command not found[grid@rac1 ~]$ /sbin/ifconfig -aeth0 Link encap:Ethernet HWaddr00:0C:29:17:22:9F inet addr:192.168.100.163Bcast:192.168.100.255Mask:255.255.255.0 inet6 addr:fe80::20c:29ff:fe17:229f/64 Scope:Link UP BROADCAST RUNNINGMULTICAST MTU:1500Metric:1 RX packets:554688 errors:0dropped:0 overruns:0 frame:0 TX packets:2423907 errors:0dropped:0 overruns:0 carrier:0 collisions:0txqueuelen:1000 RX bytes:75127756 (71.6 MiB)TX bytes:3361222244 (3.1 GiB) Interrupt:75 Baseaddress:0x2400
eth0:1 Linkencap:Ethernet HWaddr 00:0C:29:17:22:9F inet addr:192.168.100.165Bcast:192.168.100.255Mask:255.255.255.0 UP BROADCAST RUNNINGMULTICAST MTU:1500Metric:1 Interrupt:75 Baseaddress:0x2400
eth0:2 Linkencap:Ethernet HWaddr 00:0C:29:17:22:9F inet addr:192.168.100.167Bcast:192.168.100.255Mask:255.255.255.0 UP BROADCAST RUNNINGMULTICAST MTU:1500Metric:1 Interrupt:75 Baseaddress:0x2400
eth1 Link encap:Ethernet HWaddr00:0C:29:17:22:A9 inet addr:10.10.10.163Bcast:10.255.255.255Mask:255.0.0.0 inet6 addr:fe80::20c:29ff:fe17:22a9/64 Scope:Link UP BROADCAST RUNNINGMULTICAST MTU:1500Metric:1 RX packets:64881 errors:0dropped:0 overruns:0 frame:0 TX packets:21665 errors:0dropped:0 overruns:0 carrier:0 collisions:0txqueuelen:1000 RX bytes:8494460 (8.1 MiB)TX bytes:9885943 (9.4 MiB) Interrupt:59 Baseaddress:0x2480
lo Link encap:Local Loopback inet addr:127.0.0.1Mask:255.0.0.0 inet6 addr: ::1/128Scope:Host UP LOOPBACK RUNNINGMTU:16436 Metric:1 RX packets:352385 errors:0dropped:0 overruns:0 frame:0 TX packets:352385 errors:0dropped:0 overruns:0 carrier:0 collisions:0txqueuelen:0 RX bytes:119416599 (113.8MiB) TX bytes:119416599 (113.8 MiB)
sit0 Link encap:IPv6-in-IPv4 NOARPMTU:1480 Metric:1 RX packets:0 errors:0dropped:0 overruns:0 frame:0 TX packets:0 errors:0dropped:0 overruns:0 carrier:0 collisions:0txqueuelen:0 RX bytes:0 (0.0 b)TX bytes:0 (0.0 b)

查看clusterware中服务的状态:
[grid@rac1 ~]$ crs_stat -tName Type Target State Host ------------------------------------------------------------ora.DATA.dg ora....up.type ONLINE ONLINE rac1 ora....ER.lsnr ora....er.type ONLINE ONLINE rac1 ora....N1.lsnr ora....er.type ONLINE ONLINE rac1 ora.asm ora.asm.type ONLINE ONLINE rac1 ora.eons ora.eons.type ONLINE ONLINE rac1 ora.gsd ora.gsd.type OFFLINE OFFLINE ora....network ora....rk.type ONLINE ONLINE rac1 ora.oc4j ora.oc4j.type OFFLINE OFFLINE ora.ons ora.ons.type ONLINE ONLINE rac1 ora....SM1.asm application ONLINE ONLINE rac1 ora....C1.lsnr application ONLINE ONLINE rac1 ora.rac1.gsd application OFFLINE OFFLINE ora.rac1.ons application ONLINE ONLINE rac1 ora.rac1.vip ora....t1.type ONLINE ONLINE rac1 ora....SM2.asm application ONLINE ONLINE rac2 ora....C2.lsnr application ONLINE ONLINE rac2 ora.rac2.gsd application OFFLINE OFFLINE ora.rac2.ons application ONLINE ONLINE rac2 ora.rac2.vip ora....t1.type ONLINE ONLINE rac2 ora....ry.acfs ora....fs.type ONLINE ONLINE rac1 ora.scan1.vip ora....ip.type ONLINE ONLINE rac1 [grid@rac1 ~]$ crsctl check crsCRS-4638: Oracle High Availability Services is onlineCRS-4537: Cluster Ready Services is onlineCRS-4529: Cluster Synchronization Services is onlineCRS-4533: Event Manager is online[grid@rac1 ~]$ crsctl check ctssCRS-4701: The Cluster Time Synchronization Service is inActive mode.CRS-4702: Offset (in msec): 0[grid@rac1 ~]$ crsctl check cluster -all**************************************************************rac1:CRS-4537: Cluster Ready Services is onlineCRS-4529: Cluster Synchronization Services is onlineCRS-4533: Event Manager is online**************************************************************rac2:CRS-4537: Cluster Ready Services is onlineCRS-4529: Cluster Synchronization Services is onlineCRS-4533: Event Manager is online**************************************************************
查看ASM状态:[grid@rac1 ~]$ ps aux | grep ASMgrid 8359 0.0 0.0 3920 656 pts/1 R+ 01:15 0:00 grep ASMgrid 112900.0 0.6 4202527112 ? Ss Jul19 0:00 asm_pmon_+ASM1grid 112930.0 0.3 4195843856 ? Ss Jul19 0:00 asm_vktm_+ASM1grid 112970.0 0.4 4200284348 ? Ss Jul19 0:00 asm_gen0_+ASM1grid 112990.0 0.5 4256166056 ? Ss Jul19 0:00 asm_diag_+ASM1grid 113010.0 0.4 4195844328 ? Ss Jul19 0:00 asm_ping_+ASM1grid 113030.0 0.3 4195843904 ? Ss Jul19 0:00 asm_psp0_+ASM1grid 113050.0 1.3 427920 14476 ? Ss Jul19 0:00 asm_dia0_+ASM1grid 113070.0 0.8 4268449244 ? Ss Jul19 0:00 asm_lmon_+ASM1grid 113090.0 1.4 430464 15516 ? Ss Jul19 0:00 asm_lmd0_+ASM1grid 113110.0 0.9 4304009956 ? Ss Jul19 0:00 asm_lms0_+ASM1grid 113150.0 0.3 4195843868 ? Ss Jul19 0:00 asm_lmhb_+ASM1grid 113170.0 0.3 4195843916 ? Ss Jul19 0:00 asm_mman_+ASM1grid 113190.0 0.5 4217326184 ? Ss Jul19 0:00 asm_dbw0_+ASM1grid 113210.0 0.6 4209166440 ? Ss Jul19 0:00 asm_lgwr_+ASM1grid 113230.0 0.5 4195846180 ? Ss Jul19 0:00 asm_ckpt_+ASM1grid 113250.0 0.3 4195843880 ? Ss Jul19 0:00 asm_smon_+ASM1grid 113270.0 1.0 422828 11312 ? Ss Jul19 0:00 asm_rbal_+ASM1grid 113290.0 0.6 4213526496 ? Ss Jul19 0:01 asm_gmon_+ASM1grid 113310.0 0.4 4195844488 ? Ss Jul19 0:00 asm_mmon_+ASM1grid 113330.0 0.5 4195845556 ? Ss Jul19 0:00 asm_mmnl_+ASM1grid 113380.0 0.6 4205606812 ? Ss Jul19 0:00 asm_lck0_+ASM1grid 113820.0 0.4 4199524340 ? Ss Jul19 0:00 asm_asmb_+ASM1grid 113840.0 0.5 4201005964 ? Ss Jul19 0:00 oracle+ASM1_asmb_+asm1(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))grid 114090.0 0.7 4220527852 ? Ss Jul19 0:01 oracle+ASM1_ocr(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))[grid@rac1 ~]$

节点2上检查:[grid@rac2 ~]$ olsnodes -irac1 rac1viprac2 rac2vip[grid@rac2 ~]$ olsnodes -srac1 Activerac2 Active[grid@rac2 ~]$ /sbin/ifconfig -aeth0 Link encap:Ethernet HWaddr00:0C:29:E1:E4:3D inet addr:192.168.100.164Bcast:192.168.100.255Mask:255.255.255.0 inet6 addr:fe80::20c:29ff:fee1:e43d/64 Scope:Link UP BROADCAST RUNNINGMULTICAST MTU:1500Metric:1 RX packets:2206428 errors:0dropped:0 overruns:0 frame:0 TX packets:382063 errors:0dropped:0 overruns:0 carrier:0 collisions:0txqueuelen:1000 RX bytes:3271912394 (3.0 GiB)TX bytes:27042634 (25.7 MiB) Interrupt:75 Baseaddress:0x2400
eth0:1 Linkencap:Ethernet HWaddr 00:0C:29:E1:E4:3D inet addr:192.168.100.166Bcast:192.168.100.255Mask:255.255.255.0 UP BROADCAST RUNNINGMULTICAST MTU:1500Metric:1 Interrupt:75 Baseaddress:0x2400
eth1 Link encap:Ethernet HWaddr00:0C:29:E1:E4:47 inet addr:10.10.10.164Bcast:10.255.255.255Mask:255.0.0.0 inet6 addr:fe80::20c:29ff:fee1:e447/64 Scope:Link UP BROADCAST RUNNINGMULTICAST MTU:1500Metric:1 RX packets:29675 errors:0dropped:0 overruns:0 frame:0 TX packets:24162 errors:0dropped:0 overruns:0 carrier:0 collisions:0txqueuelen:1000 RX bytes:10935786 (10.4 MiB)TX bytes:12898654 (12.3 MiB) Interrupt:59 Baseaddress:0x2480
lo Link encap:Local Loopback inet addr:127.0.0.1Mask:255.0.0.0 inet6 addr: ::1/128Scope:Host UP LOOPBACK RUNNINGMTU:16436 Metric:1 RX packets:9941 errors:0dropped:0 overruns:0 frame:0 TX packets:9941 errors:0dropped:0 overruns:0 carrier:0 collisions:0txqueuelen:0 RX bytes:7158946 (6.8 MiB)TX bytes:7158946 (6.8 MiB)
sit0 Link encap:IPv6-in-IPv4 NOARPMTU:1480 Metric:1 RX packets:0 errors:0dropped:0 overruns:0 frame:0 TX packets:0 errors:0dropped:0 overruns:0 carrier:0 collisions:0txqueuelen:0 RX bytes:0 (0.0 b)TX bytes:0 (0.0 b)
[grid@rac2 ~]$ crs_stat -tName Type Target State Host ------------------------------------------------------------ora.DATA.dg ora....up.type ONLINE ONLINE rac1 ora....ER.lsnr ora....er.type ONLINE ONLINE rac1 ora....N1.lsnr ora....er.type ONLINE ONLINE rac1 ora.asm ora.asm.type ONLINE ONLINE rac1 ora.eons ora.eons.type ONLINE ONLINE rac1 ora.gsd ora.gsd.type OFFLINE OFFLINE ora....network ora....rk.type ONLINE ONLINE rac1 ora.oc4j ora.oc4j.type OFFLINE OFFLINE ora.ons ora.ons.type ONLINE ONLINE rac1 ora....SM1.asm application ONLINE ONLINE rac1 ora....C1.lsnr application ONLINE ONLINE rac1 ora.rac1.gsd application OFFLINE OFFL(www.61k.com]INE ora.rac1.ons application ONLINE ONLINE rac1 ora.rac1.vip ora....t1.type ONLINE ONLINE rac1 ora....SM2.asm application ONLINE ONLINE rac2 ora....C2.lsnr application ONLINE ONLINE rac2 ora.rac2.gsd application OFFLINE OFFLINE ora.rac2.ons application ONLINE ONLINE rac2 ora.rac2.vip ora....t1.type ONLINE ONLINE rac2 ora....ry.acfs ora....fs.type ONLINE ONLINE rac1 ora.scan1.vip ora....ip.type ONLINE ONLINE rac1 [grid@rac2 ~]$ crsctl check crsCRS-4638: Oracle High Availability Services is onlineCRS-4537: Cluster Ready Services is onlineCRS-4529: Cluster Synchronization Services is onlineCRS-4533: Event Manager is online[grid@rac2 ~]$ crsctl check ctssCRS-4701: The Cluster Time Synchronization Service is inActive mode.CRS-4702: Offset (in msec): 0[grid@rac2 ~]$ crsctl check cluster -all**************************************************************rac1:CRS-4537: Cluster Ready Services is onlineCRS-4529: Cluster Synchronization Services is onlineCRS-4533: Event Manager is online**************************************************************rac2:CRS-4537: Cluster Ready Services is onlineCRS-4529: Cluster Synchronization Services is onlineCRS-4533: Event Manager is online**************************************************************[grid@rac2 ~]$ ps aux | grep ASMgrid 9343 0.0 0.0 5028 660 pts/1 R+ 01:15 0:00 grep ASMgrid 123760.0 0.6 4202526696 ? Ss 00:08 0:00 asm_pmon_+ASM2grid 123780.0 0.3 4195843528 ? Ss 00:08 0:00 asm_vktm_+ASM2grid 123820.0 0.4 4200284320 ? Ss 00:08 0:00 asm_gen0_+ASM2grid 123840.0 0.5 4256165672 ? Ss 00:08 0:00 asm_diag_+ASM2grid 123860.0 0.3 4195843988 ? Ss 00:08 0:00 asm_ping_+ASM2grid 123880.0 0.3 4195843588 ? Ss 00:08 0:00 asm_psp0_+ASM2grid 123900.0 1.3 427920 14304 ? Ss 00:08 0:00 asm_dia0_+ASM2grid 123920.0 0.8 4268408924 ? Ss 00:08 0:00 asm_lmon_+ASM2grid 123940.0 1.3 430400 14256 ? Ss 00:08 0:00 asm_lmd0_+ASM2grid 123960.0 0.9 4304009352 ? Ss 00:08 0:00 asm_lms0_+ASM2grid 124000.0 0.3 4195843528 ? Ss 00:08 0:00 asm_lmhb_+ASM2grid 124020.0 0.3 4195843584 ? Ss 00:08 0:00 asm_mman_+ASM2grid 124040.0 0.5 4217325840 ? Ss 00:08 0:00 asm_dbw0_+ASM2grid 124060.0 0.6 4209166368 ? Ss 00:08 0:00 asm_lgwr_+ASM2grid 124080.0 0.5 4195845480 ? Ss 00:08 0:00 asm_ckpt_+ASM2grid 124100.0 0.3 4195843544 ? Ss 00:08 0:00 asm_smon_+ASM2grid 124120.0 0.8 4217368776 ? Ss 00:08 0:00 asm_rbal_+ASM2grid 124140.0 0.5 4213525836 ? Ss 00:08 0:00 asm_gmon_+ASM2grid 124160.0 0.4 4195844156 ? Ss 00:08 0:00 asm_mmon_+ASM2grid 124180.0 0.5 4195845244 ? Ss 00:08 0:00 asm_mmnl_+ASM2grid 124250.0 0.6 4205606260 ? Ss 00:08 0:00 asm_lck0_+ASM2grid 124570.0 0.6 4220486356 ? Ss 00:09 0:00 oracle+ASM2_ocr(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))grid 124680.0 0.3 4199523944 ? Ss 00:09 0:00 asm_asmb_+ASM2grid 124700.0 0.5 4201005588 ? Ss 00:09 0:00 oracle+ASM2_asmb_+asm2(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))[grid@rac2 ~]$

三 : 基于iSCSI与Openfiler构建自己的Oracle RAC(一)

    

下载



    

    Oracle 数据库 10g





    

标签



    

  linux, rac, clustering, 全部





在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 集群

作者:Jeffrey Hunter

了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 10g 第 2 版开发集群。

本指南中的信息未经 Oracle 验证,且不受 Oracle 支持,您在使用时只能风险自负;本指南仅供教学使用。

2009 年 8 月更新

目录

简介 Oracle RAC 10g 概述 共享存储概述 iSCSI 技术 硬件及成本 安装 Linux 操作系统 为 Oracle RAC 安装必需的 Linux 程序包 网络配置 安装 Openfiler 使用 Openfiler 配置 iSCSI 卷 在 Oracle RAC 节点上配置 iSCSI 卷 创建“oracle”用户和目录 为 Oracle 配置 Linux 服务器 配置 hangcheck-timer 内核模块 使用 SSH 为远程访问配置 RAC 节点 适用于这两个 Oracle RAC 节点的所有启动命令 安装和配置 Oracle 集群文件系统 (OCFS2) 安装和配置自动存储管理 (ASMLib 2.0) 下载 Oracle RAC 10g 软件 Oracle 数据库 10g 第 2 版的安装前任务 安装 Oracle 10g 集群件软件 安装 Oracle 数据库 10g 软件 安装 Oracle 数据库 10g 随附 CD 软件 创建 TNS 监听器进程 创建 Oracle 集群数据库 安装后任务 —(可选) 验证 TNS 联网文件 创建/更改表空间 验证 RAC 集群与数据库配置 启动/停止集群 透明的应用程序故障切换 — (TAF) 疑难解答 结论 致谢

本指南相关下载:

  Oracle Enterprise Linux 第 5 版 Update 3 —(适用于 x86 和 x86_64)

  Oracle Database 10g 企业版第 2 版、集群件、随附 CD — (10.2.0.1.0) —(适用于 x86 和 x86_64)

  Openfiler 2.3 Respin (21-01-09) —(openfiler-2.3-x86-disc1.iso 或 openfiler-2.3-x86_64-disc1.iso)

  ASMLib 2.0 库 RHEL5 — (2.0.4-1) —(oracleasmlib-2.0.4-1.el5.i386.rpm 或 oracleasmlib-2.0.4-1.el5.x86_64.rpm)

  支持文件

 

单击此处查看该指南的 Oracle RAC 11g 第 1 版的版本

1. 简介

熟悉 Oracle 真正应用集群 (RAC) 10g 技术的最有效方法之一是访问一个实际的 Oracle RAC 10g 集群。没有什么方法比直接体验它们能够更好地理解其优势了,包括容错、安全性、负载平衡和可伸缩性。

遗憾的是,对于很多商家而言,典型的生产级 RAC 配置所需的硬件投入使它们无法实现这一目标。一个小型的两节点集群可能需要 10,000 美元到 20,000 美元以上。该价格还不包括生产级 RAC 环境的核心(通常是一个存储区域网),其起价为 10,000 美元。

对于那些没有大笔现金但希望熟悉 Oracle RAC 10g 的人而言,本指南提供了一种低成本的替代方法来配置 Oracle RAC 10g 第 2 版系统,它使用现成的商用组件和可下载的软件,估计成本在 2,200 美元到 2,700 美元之间。该系统包括一个双节点集群(两个单处理器 i386 节点),这两个节点均运行适用于 x86 的 Oracle Enterprise Linux (OEL) 第 5 版 Update 3、适用于 Linux x86 的 Oracle10g 第 2 版、OCFS2 和 ASMLib 2.0。Oracle RAC 的所有共享磁盘存储将基于 iSCSI,iSCSI 使用在第三个节点上运行的 Openfiler 2.3 版 x86_64(在本文中称为网络存储服务器)。

尽管本文应与 Red Hat Enterprise Linux 一同使用,但 Oracle Enterprise Linux(免费提供)也可以满足需要(即使不能更为稳定),它包括 OCFS2 和 ASMLib 软件包(不包括 ASMLib 用户空间库,这个需要单独下载)。

由 rPath Linux 驱动的 Openfiler 是一个基于浏览器的免费网络存储管理实用程序,在单一框架中提供基于文件的网络连接存储 (NAS) 和基于块的存储区域网 (SAN)。整个软件包与开放源代码应用程序(例如 Apache、Samba、LVM2、ext3、Linux NFS 和 iSCSI Enterprise Target)连接。Openfiler 将这些随处可见的技术组合到一个易于使用的小型管理解决方案中,该解决方案通过一个基于 Web 且功能强大的管理界面实现。

Openfiler 支持 CIFS、NFS、HTTP/DAV 和 FTP,但是,我们仅使用它的 iSCSI 功能为 Oracle RAC 10g 需要的共享存储组件实现低成本的 SAN。操作系统和 Openfiler 应用程序将安装于同一个内置 SATA 磁盘上。第二个内置 73GB 15K SCSI 硬盘将被配置为一个“卷组”,该卷组用于所有共享磁盘存储之需。Openfiler 服务器将配置为使用该卷组进行基于 iSCSI 的存储,并且将在 Oracle RAC 10g 配置中用于存储 Oracle 集群件所需的共享文件以及所有 Oracle ASM 卷。

注:本文仅供教学使用,因此设置很简单,仅用于演示想法和概念。例如,本文仅在一个物理磁盘上设置了磁盘镜像,而实际上,应该在多个物理驱动器上设置磁盘镜像。另请注意,尽管本文提供了成功安装完整的 Oracle RAC 10g 系统的详细说明,但它绝不能替代 Oracle 官方文档。除本文以外,用户还应该参考以下 Oracle 文档,以便全面了解 Oracle RAC 10g 的其他配置选项、安装和管理。Oracle 的官方文档网站是 docs.oracle.com。

Oracle 集群件和 Oracle 真正应用集群安装指南 — 针对 Linux 的 10g 第 2 版 (10.2) Oracle 集群件和 Oracle 真正应用集群管理和部署指南 — 10g 第 2 版 (10.2) 两日速成和真正应用集群指南 — 10g 第 2 版 (10.2)

以前的 Oracle9i 和 Oracle 10g 第 1 版指南使用原始分区在共享的存储设备上存储文件,但此处我们将利用 Oracle 集群文件系统第 2 版 (OCFS2) 和 Oracle 自动存储管理 (ASM) 特性。两个 Oracle RAC 节点配置如下:

 

Oracle 数据库文件

RAC 节点名 实例名 数据库名称 $ORACLE_BASE 用于存储 DB 文件的文件系统/卷管理器

linux1 racdb1 racdb /u01/app/oracle ASM

linux2 racdb2 racdb /u01/app/oracle ASM

Oracle 集群件共享文件

文件类型 文件名 iSCSI 卷名 挂载点 文件系统

Oracle 集群注册表 /u02/oradata/racdb/OCRFile

/u02/oradata/racdb/OCRFile_mirror crs /u02 OCFS2

CRS 表决磁盘 /u02/oradata/racdb/CSSFile

/u02/oradata/racdb/CSSFile_mirror1

/u02/oradata/racdb/CSSFile_mirror2 crs /u02 OCFS2

注意,在 Oracle 数据库 10g 第 2 版 (10.2) 中,集群就绪服务(即 CRS)现在称作 Oracle 集群件。

Oracle 集群件软件将安装到构成该 RAC 集群的两个节点的 /u01/app/crs 目录中。自 Oracle 数据库 10g 第 2 版 (10.2) 起,不要将 Oracle 集群件安装到特定于版本的单独的 Oracle 集群件主目录(例如 /u01/app/oracle/product/10.2.0/...)中,并且该目录绝不能是 ORACLE_BASE 目录(例如 /u01/app/oracle)的子目录。这是对最佳灵活体系结构 (OFA) 规则所作的更改。注意,Oracle 提供的 Oracle 集群件和 Oracle 真正应用集群安装文档中表明 Oracle 集群件目录可以是 ORACLE_BASE 目录的子目录,这是错误的。例如,在第 2 章“安装前”的“Oracle 集群件主目录”部分中,该指南错误地将路径 /u01/app/oracle/product/crs 列为可能的 Oracle 集群件主目录(和 CRS 主目录)路径。这是错误的。默认的 ORACLE_BASE 路径是 /u01/app/oracle,Oracle 集群件主目录决不能是 ORACLE_BASE 目录的子目录。该问题已记录为 Oracle 文档错误“5843155”—(B14203-08 的 CRS_HOME 配置冲突)并在 Oracle 11g 中得到了修复。

尽管 Oracle 集群件软件将安装到构成 RAC 集群的两个节点上的 /u01/app/crs 中,但集群件软件要求与集群中的两个节点共享它的两个文件:“Oracle 集群注册表 (OCR)”文件和“表决磁盘”文件。这两个文件将安装到使用 Oracle 集群文件系统第 2 版 (OCFS2) 的共享存储设备中。还可以使用裸设备存储这些文件,但不能使用 ASM 存储这两个共享的集群件文件。

Oracle 10g 第 2 版数据库软件将安装到构成该 RAC 集群的两个节点的单独 Oracle 主目录中,该目录名为 /u01/app/oracle/product/10.2.0/db_1。所有 Oracle 物理数据库文件(数据、联机重做日志、控制文件、存档重做日志)将安装到由自动存储管理 (ASM) 管理的共享卷上。(用户可以将 Oracle 数据库文件轻松地存储到 OCFS2。而使用 ASM 使本文可以更有趣!)

注:本文仅作为绝对不可替代的文档。此处唯一的例外是供应商硬件的选择(即:计算机、网络设备和内置/外置硬盘驱动器)。确保您从供应商处购买的硬件在 Oracle Enterprise Linux(第 5 版 Update 3)上受支持。鉴于 Dell 硬件上乘的质量以及与 Linux 极佳的兼容性,我倾向于使用 Dell 硬件。对于这种性质的测试系统,我强烈建议从 Stallard Technologies, Inc. 等声誉好的公司购买二手 Dell 硬件。Stallard Technologies 在提供二手硬件的最佳价值方面一直做得很好,并承诺提供一流的客户服务。我之所以推荐该公司是基于我个人对该组织的良好体验。要了解有关 Stallard Technologies 的更多信息,请访问其网站或联系 John Brauer。

如果您要寻找一个使用 iSCSI 的带 OEL 的 Oracle RAC 11g 第 1 版示例,请单击此处。

如果您要寻找一个使用 FireWire 的带 RHEL 4 的 Oracle RAC 10g 第 2 版示例,请单击此处。

2. Oracle RAC 10g 概述

在介绍构建 RAC 集群的详细信息之前,首先阐明集群的定义将很有帮助。集群是一组两个或多个互连的计算机或服务器,对于最终用户和应用程序来说,它们就好像是一台服务器,通常共享同一组物理磁盘。集群的主要优势在于提供了一个具有高可用性的框架,在该框架中,一个节点(例如,数据库服务器)的故障不会影响整个应用程序。如果其中一个服务器出现故障,则其他运行良好的(一个或多个)服务器可以接管故障服务器的负载,并且应用程序继续正常运行,就好像什么都没有发生。

实际上,集群计算机的概念在几十年前就出现了。第一个成功的集群产品由 DataPoint 在 1977 年开发完成,该产品名为 ARCnet。ARCnet 产品在实验室的学术环境中获得了很大成功,但尚未真正投放到商业市场。直到 19 世纪 80 年代,Digital Equipment Corporation (DEC) 才发布了针对 VAX/VMS 操作系统的 VAX 集群产品。

随着针对 Digital VAX 集群产品的 Oracle 6 发布,Oracle Corporation 成为在数据库级别支持集群的第一个商业数据库。但是,不久之后,Oracle 意识到还需要一个更高效、可伸缩性更强的分布式锁管理器 (DLM),因为 VAX/VMS 集群产品中的锁管理器不太适合数据库应用程序。Oracle 决定为 VAX/VMS 集群产品设计并编写自己的 DLM,以提供数据库所需的细粒度块级锁定。Oracle 自己的 DLM 包含在 Oracle 6.2 中,这促使产生了 Oracle Parallel Server (OPS) — 运行并行服务器的第一个数据库。

在 Oracle 7 中,OPS 得到了扩展,它不仅支持 VAX/VMS 集群产品,还支持大多数 UNIX 形式。该框架不仅要求供应商提供的集群件运行良好,还要适用于复杂的环境,以设置并管理所涉及的多个给定层。在 Oracle 8 中,Oracle 引入了一个集成到 Oracle 内核中的通用锁管理器。在更高版本的 Oracle 中,这称为集成分布式锁管理器 (IDLM),并依赖于称为操作系统依赖 (OSD) 层的附加层。这个新模型为 Oracle 铺平了道路,使其不仅拥有自己的 DLM,还可以在未来版本中创建自己的集群件产品。

随 Oracle9i 一同推出的 Oracle 真正应用集群 (RAC) 是 Oracle Parallel Server 的后续版本。由于使用的是同一个 IDLM,Oracle 9i 仍然依赖于外部集群件,但它是包含自己的集群件产品(称为集群就绪服务 (CRS))的第一个版本。在 Oracle 9i 中,CRS 只能用于 Windows 和 Linux。到了 Oracle 10g,Oracle 的集群件产品可用于所有操作系统。随着 Oracle 数据库 10g 第 2 版 (10.2) 的发布,集群就绪服务被重命名为 Oracle 集群件。如果使用 Oracle 10g 或更高版本,则 Oracle 集群件是大多数运行 Oracle RAC 的平台所需的唯一集群件(不包括 Tru 集群,在这种情况下,您需要供应商集群件)。您也可以使用其他供应商提供的集群件,前提是该集群件需要经过 Oracle RAC 的认证。本指南使用 Oracle 集群件 10g。

与 OPS 一样,Oracle RAC 允许多个实例同时访问同一个数据库(存储)。通过允许系统进行扩展,RAC 提供了容错、负载平衡和性能优势。同时,由于所有实例都访问同一个数据库,因此一个节点出现故障不会导致无法访问数据库。

Oracle RAC 的核心部分是共享磁盘子系统。集群中的每个实例必须能够访问集群中所有其他实例的所有数据、重做日志文件、控制文件和参数文件。为了使所有实例都能够访问数据库,数据磁盘必须全局可用。每个实例都有自己的、可在本地读写的重做日志文件和 UNDO 表空间。集群中的其他实例必须能够访问这些文件(只读),以便在系统出现故障时恢复该实例。一个实例的重做日志文件只能由该实例写入,并且只能在系统故障期间由其他实例读取。另一方面,UNDO 可以在正常数据库操作(例如,CR 构建)期间随时读取。

Oracle RAC 与 OPS 之间的最大区别在于增加了缓存合并。使用 OPS 时,从一个实例到另一个实例的数据请求需要首先将数据写到磁盘,然后请求实例才能读取该数据(获得必需的锁之后)。而使用缓存合并,数据沿着使用复杂锁定算法的高速互连链路传递。

并非所有数据库集群解决方案都使用共享存储。某些供应商使用一种称为联合集群 的方法,在这种方法中,数据分布在多台计算机中,而不是由所有计算机共享。但是,对于 Oracle RAC,多个实例使用相同的磁盘集合来存储数据。Oracle 的集群方法利用集群中的所有节点的整体处理能力,同时可提供故障切换安全。

Dell、IBM 和 HP 等供应商提供了预先配置的面向生产环境的 Oracle RAC 解决方案。而本文将集中讨论如何使用 Linux 服务器和低成本的共享磁盘解决方案 iSCSI 来整合您自己的 Oracle RAC 10g 环境以进行开发和测试。

有关 Oracle RAC 的更多背景知识,请访问 OTN 上的 Oracle RAC 产品中心。

3. 共享存储概述

现在,光纤通道是最流行的共享存储解决方案之一。前面曾提到过,光纤通道是一种高速串行传输接口,用于在点到点 (FC-P2P)、仲裁环路 (FC-AL) 或交换式拓扑结构 (FC-SW) 中连接系统与存储设备。光纤通道支持的协议包括 SCSI 和 IP。光纤通道配置最多可以支持 127 个节点,每个方向上最高可以实现 2.12 GB 的吞吐量,预期可达到 4.25 GB。

但是,光纤通道非常昂贵。单是光纤通道交换机的起价就可能需要约 1,000 美元。这还不包括光纤通道存储阵列和高端驱动器,一个 36GB 驱动器的价格可高达约 300 美元。典型的光纤通道安装包括用于服务器的光纤通道卡。基本安装费用大约为 10,000 美元,还不包括构成集群的服务器的成本。

光纤通道的一种较为便宜的替代方法是 SCSI。SCSI 技术提供了可接受的共享存储性能。对于那些习惯了基于 GPL 的 Linux 价格的管理员和开发人员来说,即使是 SCSI(一个双节点集群的价格在 2,000 美元到 5,000 美元左右)也可能超出预算。

另一种流行的解决方案是基于 NAS 的 Sun NFS(网络文件系统)。只有在您使用网络设备或类似的设备时,它才可以用于共享存储。具体来说就是,您需要拥有能够保证在 NFS 上进行直接 I/O、将 TCP 作为传输协议并且读/写块大小为 32K 的服务器。参见 Oracle Metalink 上的 Certify 页面,以了解可用于 Oracle RAC 的受支持的网络连接存储 (NAS) 设备。其中一个主要缺陷限制了使用 NFS 和 NAS 进行数据库存储的优势,即,性能降低和复杂的配置要求。标准的 NFS 客户端软件(使用操作系统提供的 NFS 驱动程序的客户端系统)没有针对 Oracle 数据库文件 I/O 访问模式进行优化。随着 Oracle 11g 的引入,一个称为 Direct NFS Client 的新特性将 NFS 客户端功能直接集成到 Oracle 软件中。通过该集成,Oracle 可以优化 Oracle 软件与 NFS 服务器之间的 I/O 路径,从而显著提高性能。Direct NFS Client 可以为数据库负载简化(在许多情况下可以自动化)NFS 客户端配置的性能优化。要了解有关 Direct NFS Client 的更多信息,请参阅标题为“Oracle 数据库 11g Direct NFS Client”的 Oracle 白皮书。

本文将使用的共享存储基于使用网络存储服务器(随 Openfiler 安装)的 iSCSI 技术。该解决方案提供了一个低成本的光纤通道的替代方案,用于测试和教学目的。考虑到该方案使用低端硬件,不建议在生产环境中使用该方案。

4. iSCSI 技术

多年以来,光纤通道存储区域网 (FC SAN) 是唯一用于构建基于网络的存储解决方案的技术。基于以前的一组 ANSI 协议(称为光纤分布式数据接口 (FDDI)),开发光纤通道的目的是在存储网络上移动 SCSI 命令。

FC SAN 的优势包括提高了性能、磁盘利用率、可用性以及可扩展性等,但最重要的是支持服务器集群!但是,FC SAN 现在仍受三个主要缺点的限制。首先是价格。尽管构建 FC SAN 的成本在最近几年有所下降,但进入成本对于 IT 预算有限的小公司来说仍然是高的惊人。第二个缺点是硬件组件不兼容。采用 FC SAN 之后,许多产品制造商对光纤通道规范的解释各不相同,从而导致许多互连问题。如果从公共制造商购买光纤通道组件,这通常不是一个问题。第三个缺点是光纤通道网络不是以太网!它需要一种单独的网络技术,并要求数据中心人员具备另外一组技能。

随着千兆位以太网的普及以及对降低成本的需要,基于 iSCSI 的存储系统逐渐成为光纤通道的有力竞争对手。现在,iSCSI SAN 仍然是 FC SAN 的最大竞争者。

2003 年 2 月 11 日,经过 Internet 工程任务组 (IETF) 的批准,Internet 小型计算机系统接口(一般称为 iSCSI)成为一个基于 Internet 协议 (IP) 的存储网络标准,用于建立和管理基于 IP 的存储设备、主机和客户端之间的连接。iSCSI 是 SCSI-3 规范框架中定义的数据传输协议,它与光纤通道的类似之处在于其也负责在存储网络上运送块级数据。块级通信意味着数据以“块”的形式在主机和客户端之间传输。数据库服务器依赖这种类型的通信(而不是大多数 NAS 系统使用的文件级通信)来工作。与 FC SAN 一样,iSCSI SAN 是一个专用于存储的单独物理网络,但其组件与典型 IP 网络 (LAN) 中的组件基本相同。

尽管 iSCSI 拥有光明的前景,但早期的批评很快指出了其与性能有关的内在不足。iSCSI 的优势是能够利用大家熟悉的 IP 网络作为传输机制。但是,TCP/IP 协议非常复杂并且占用 CPU 资源过多。而使用 iSCSI,大部分对数据进行的处理(TCP 和 iSCSI)都由软件来执行,比完全通过硬件来处理的光纤通道慢得多。将每个 SCSI 命令映射到等价 iSCSI 事务所带来的开销过大。对许多公司来说,解决方案是取消 iSCSI 软件启动器,投资能够从服务器 CPU 中卸载 TCP/IP 和 iSCSI 处理的专用卡。这些专用卡有时称为 iSCSI 主机总线适配器 (HBA) 或 TCP 卸载引擎 (TOE) 卡。还要考虑到目前 10 GB 以太网是主流!

与其他新技术一样,iSCSI 具有一组自己的缩略语和术语。对于本文来说,用户只需要了解 iSCSI 启动器与 iSCSI 目标之间的区别即可。

iSCSI 启动器

从本质上说,iSCSI 启动器是一个连接并启动服务器提供的某一服务的请求(在本例中是 iSCSI 目标)的客户端设备。iSCSI 启动器软件需要安装在每个 Oracle RAC 节点(linux1 和 linux2)上。

iSCSI 启动器可以使用软件实现,也可以使用硬件实现。软件 iSCSI 启动器可用于大部分主要操作系统平台。对于本文,我们将使用 iscsi-initiator-utils RPM 中提供的免费 Linux Open-iSCSI 软件驱动程序。iSCSI 软件启动器通常与标准网络接口卡 (NIC)(大多数情况下是千兆位以太网卡)配合使用。硬件启动器是一个 iSCSI HBA(或 TCP 卸载引擎 (TOE) 卡),它在本质上只是一个专用以太网卡,其上的 SCSI ASIC 可以从系统 CPU 内卸载所有工作(TCP 和 SCSI 命令)。iSCSI HBA 可以从许多供应商处购买,包括 Adaptec、Alacritech、Intel 和 QLogic。

iSCSI 目标

iSCSI 目标是 iSCSI 网络的“服务器”组件。它通常是一个存储设备,包含您所需的信息并回应来自启动器(一个或多个)的请求。对于本文,节点 openfiler1 将是 iSCSI 目标。因此,根据有关 iSCSI 的所有这些讨论,是否意味着光纤通道很快就会消失?可能没有。多年以来,光纤通道通过其极快的速度、灵活性和强健的可靠性,为自己的能力提供了有力的证据。对高性能存储、大型复杂连接以及关键任务可靠性有严格要求的客户将毫不犹豫地继续选择光纤通道。

在结束本部分之前,我认为应该提供一个列表,以对各种类型的磁盘接口和网络技术的速度进行一番比较。对于每种接口,我提供了每秒千位 (kb)、千字节 (KB)、兆位 (Mb)、兆字节 (MB)、千兆位 (Gb) 以及千兆字节 (GB) 的最大传输速率,较常用的以灰色突出显示。

 

磁盘接口 / 网络 / 总线 速度

Kb KB Mb MB Gb GB

串行 115 14.375 0.115 0.014

并行(标准) 920 115 0.92 0.115

10Base-T 以太网 10 1.25

IEEE 802.11b 无线 Wi-Fi(2.4 GHz 频带) 11 1.375

USB 1.1 12 1.5

并行 (ECP/EPP) 24 3

SCSI-1 40 5

IEEE 802.11g 无线 WLAN(2.4 GHz 频带) 54 6.75

SCSI-2(快速 SCSI/快速窄带 SCSI) 80 10

100Base-T 以太网(高速以太网) 100 12.5

ATA/100(并行) 100 12.5

IDE 133.6 16.7

快速宽带 SCSI(宽带 SCSI) 160 20

Ultra SCSI(SCSI-3 / Fast-20 / Ultra 窄带) 160 20

Ultra IDE 264 33

宽带 Ultra SCSI(快速宽带 20) 320 40

Ultra2 SCSI 320 40

FireWire 400 — (IEEE1394a) 400 50

USB 2.0 480 60

宽带 Ultra2 SCSI 640 80

Ultra3 SCSI 640 80

FireWire 800 — (IEEE1394b) 800 100

千兆位以太网 1000 125 1

PCI —(33 MHz / 32 位) 1064 133 1.064

串行 ATA I — (SATA I) 1200 150 1.2

宽带 Ultra3 SCSI 1280 160 1.28

Ultra160 SCSI 1280 160 1.28

PCI —(33 MHz / 64 位) 2128 266 2.128

PCI —(66 MHz / 32 位) 2128 266 2.128

AGP 1x —(66 MHz / 32 位) 2128 266 2.128

串行 ATA II — (SATA II) 2400 300 2.4

Ultra320 SCSI 2560 320 2.56

FC-AL 光纤通道 3200 400 3.2

PCI-Express x1 —(双向) 4000 500 4

PCI —(66 MHz / 64 位) 4256 532 4.256

AGP 2x —(133 MHz / 32 位) 4264 533 4.264

串行 ATA III — (SATA III) 4800 600 4.8

PCI-X —(100 MHz / 64 位) 6400 800 6.4

PCI-X —(133 MHz / 64 位) 1064 8.512 1

AGP 4x —(266 MHz / 32 位) 1066 8.528 1

10G 以太网 — (IEEE 802.3ae) 1250 10 1.25

PCI-Express x4 —(双向) 2000 16 2

AGP 8x —(533 MHz / 32 位) 2133 17.064 2.1

PCI-Express x8 —(双向) 4000 32 4

PCI-Express x16 —(双向) 8000 64 8

5. 硬件及成本用于构建示例 Oracle RAC 10g 环境的硬件包括三个 Linux 服务器(两个 Oracle RAC 节点和一个网络存储服务器),以及可以在许多本地计算机商店或互联网上(即 Stallard Technologies, Inc.)购买到的组件。

Oracle RAC 节点 1 — (linux1)

Dimension 2400 系列

Intel(R) Pentium(R) 4 处理器 (2.80GHz)

2GB DDR SDRAM (333MHz)

40GB 7200 RPM 内置硬盘

集成的 Intel 3D AGP 图形卡

集成的 10/100 以太网卡 — (Broadcom BCM4401)

CDROM(48X 倍速)

3.5 英寸软盘驱动器

无键盘、显示器或鼠标 —(连接到 KVM 切换设备)

600 美元

1 — 以太网 LAN 卡

 

用于 linux2 与 Openfiler 网络存储的 RAC 互连。

 

Oracle RAC 的每个 Linux 服务器应该包含两个 NIC 适配器。Dell Dimension 包含一个将用于连接公共网络的集成的 10/100 以太网适配器。第二个 NIC 适配器将用于专用网络(RAC 互连和 Openfiler 网络存储)。选择与要用于专用网络的网络交换机的最大数据传输速度兼容且合适的 NIC 适配器。对于本文,我在专用网络中使用了千兆位以太网交换机(以及 1Gb 的以太网卡)。

千兆位以太网

Intel 10/100/1000Mbps PCI 桌面适配器 — (PWLA8391GT)

35 美元

Oracle RAC 节点 2 — (linux2)

Dimension 2400 系列

Intel(R) Pentium(R) 4 处理器 (2.80GHz)

2GB DDR SDRAM (333MHz)

40GB 7200 RPM 内置硬盘

集成的 Intel 3D AGP 图形卡

集成的 10/100 以太网卡 — (Broadcom BCM4401)

CDROM(48X 倍速)

3.5 英寸软盘驱动器

无键盘、显示器或鼠标 —(连接到 KVM 切换设备)

600 美元

1 — 以太网 LAN 卡

 

用于 linux1 与 Openfiler 网络存储的 RAC 互连。

 

Oracle RAC 的每个 Linux 服务器应该包含两个 NIC 适配器。Dell Dimension 包含一个将用于连接公共网络的集成的 10/100 以太网适配器。第二个 NIC 适配器将用于专用网络(RAC 互连和 Openfiler 网络存储)。选择与要用于专用网络的网络交换机的最大数据传输速度兼容且合适的 NIC 适配器。对于本文,我在专用网络中使用了千兆位以太网交换机(以及 1Gb 的以太网卡)。

千兆位以太网

Intel 10/100/1000Mbps PCI 桌面适配器 — (PWLA8391GT)

35 美元

网络存储服务器 — (openfiler1)

Dell PowerEdge 1800

双 3.0GHz Xeon/1MB 缓存/ 800FSB (SL7PE)

6GB 的 ECC 内存

500GB SATA 内置硬盘

73GB 15K SCSI 内置硬盘

单个嵌入式 Intel 10/100/1000 千兆位 NIC

无键盘、显示器或鼠标 —(连接到 KVM 切换设备)

注:操作系统和 Openfiler 应用程序将安装于 500GB 内置 SATA 磁盘上。将配置第二个内置 73GB 15K SCSI 硬盘用于数据存储。Openfiler 服务器将配置为使用第二个硬盘进行基于 iSCSI 的存储,并且将在 Oracle RAC 10g 配置中用于存储 Oracle 集群件所需的共享文件以及所有 Oracle ASM 卷。

请注意,任何类型的硬盘(内置或外置),只要网络存储服务器 (Openfiler) 能够识别并且该硬盘具有足够的空间,都可用于数据库存储。例如,我已在 500GB 内置 SATA 磁盘上建立了一个额外的分区用于 iSCSI 目标,但决定在此例中使用速度更快的 SCSI 磁盘。

800 美元

1 — 以太网 LAN 卡

 

用于专用网络上的网络存储。

 

网络存储服务器(Openfiler 服务器)应包含两个 NIC 适配器。Dell PowerEdge 1800 包含一个将用于连接公共网络的集成的 10/100/1000 以太网适配器。第二个 NIC 适配器将用于专用网络(Openfiler 网络存储)。选择与要用于专用网络的网络交换机的最大数据传输速度兼容且合适的 NIC 适配器。对于本文,我在专用网络中使用了千兆位以太网交换机(以及 1Gb 的以太网卡)。

千兆位以太网

Intel 10/100/1000Mbps PCI 桌面适配器 — (PWLA8391GT)

35 美元

其他组件

1 — 以太网交换机

 

用于 linux1-priv 和 linux2-priv 之间的互连。它还用于 Openfiler 的网络存储流量。对于本文,我在专用网络中使用了千兆位以太网交换机(以及 1Gb 的以太网卡)。

千兆位以太网

D-Link 8 端口 10/100/1000 桌面交换机 — (DGS-2208)

50 美元

6 — 网络电缆 6 类接线电缆 —(将 linux1 连接到公共网络) 6 类接线电缆 —(将 linux2 连接到公共网络) 6 类接线电缆 —(将 openfiler1 连接到公共网络) 6 类接线电缆 —(将 linux1 连接到以太网互联交换机) 6 类接线电缆 —(将 linux2 连接到以太网互联交换机) 6 类接线电缆 —(将 openfiler1 连接到以太网互联交换机)

10 美元

10 美元

10 美元

10 美元

10 美元

10 美元

可选组件

KVM 切换设备

 

为了安装操作系统并执行多项配置任务,本文需要访问所有节点(服务器)的控制台。管理少量服务器时,为了访问其控制台,将每台服务器与其自己的显示器、键盘和鼠标相连可能很有用。但是,随着需要管理的服务器数量越来越多,这一解决方案变得难以实施。一个更实际的解决方案是配置一台专用的计算机,其中包括可以直接访问每台服务器的控制台的一个显示器、键盘和鼠标。使用一台键盘、视频和鼠标切换设备(也称作 KVM 切换设备)可以实现该解决方案。KVM 切换设备是一台允许用户通过一个键盘、视频显示器和鼠标来控制多台计算机的硬件设备。Avocent 提供了一种带有 4 根 6 英尺电缆的优质、低成本 4 端口切换设备: SwitchView® 1000 — (4SV1000BND1-001)

有关 KVM 切换设备及其使用的详细说明和指南,请参阅“家用和企业 KVM 切换设备”一文。

340 美元

合计 2,555 美元

下面,我们将开始安装过程。既然已经讨论了将在本示例中使用的硬件,下面我们来对环境进行概念性的了解(单击下面的图形查看大图像):

 



图 1:体系结构

在开始详细说明安装过程之前,应该注意本文中的大部分任务都需要在这两个 Oracle RAC 节点(linux1 和 linux2)上执行。我将在每个部分的开始处指出是应该在这两个 Oracle RAC 节点上还是在网络存储服务器 (openfiler1) 上执行该任务。

6. 安装 Linux 操作系统

在集群中的两个 Oracle RAC 节点上执行下列安装步骤!

本部分概述了用于安装 Linux 操作系统的各个屏幕。本指南与适用于 x86 的 Oracle Enterprise Linux 第 5 版 Update 3 配合使用,并且遵循 Oracle 的如下建议:执行“默认 RPM”安装类型以确保拥有成功进行 Oracle RDBMS 安装所需的 Linux 操作系统程序包。

在两个 Oracle RAC 节点上安装 Oracle Enterprise Linux 操作系统之前,您应该先安装两个 NIC 接口(卡)。

根据您的硬件体系结构,下载适用于 x86 或 x86_64 的 Oracle Enterprise Linux 第 5 版 Update 3 的以下 ISO 映像。

针对 Oracle Enterprise Linux 的 Oracle E-Delivery 网站

32 位 (x86) 安装

V15417-01.zip (581 MB) V15418-01.zip (617 MB) V15419-01.zip (618 MB) V15420-01.zip (611 MB)

V15421-01.zip (253 MB)

下载 Oracle Enterprise Linux 操作系统之后,解压缩每个文件。您将获得以下 ISO 映像,需要将其刻录到 CD 上:

Enterprise-R5-U3-Server-i386-disc1.iso Enterprise-R5-U3-Server-i386-disc2.iso Enterprise-R5-U3-Server-i386-disc3.iso Enterprise-R5-U3-Server-i386-disc4.iso Enterprise-R5-U3-Server-i386-disc5.iso

 

注:如果 Linux RAC 节点安装有 DVD,您可能会发现使用如下的单个 DVD 映像更方便:

V15414-01.zip (2.7 GB)

 

解压缩该单个 DVD 映像文件后将其刻录到一张 DVD 中:

Enterprise-R5-U3-Server-i386-dvd.iso

 

64 位 (x86_64) 安装

V15427-01.zip (577 MB) V15428-01.zip (615 MB) V15429-01.zip (619 MB) V15430-01.zip (615 MB)

V15431-01.zip (620 MB)

V15432-01.zip (120 MB)

下载 Oracle Enterprise Linux 操作系统之后,解压缩每个文件。您将获得以下 ISO 映像,需要将其刻录到 CD 上:

Enterprise-R5-U3-Server-x86_64-disc1.iso Enterprise-R5-U3-Server-x86_64-disc2.iso Enterprise-R5-U3-Server-x86_64-disc3.iso Enterprise-R5-U3-Server-x86_64-disc4.iso Enterprise-R5-U3-Server-x86_64-disc5.iso Enterprise-R5-U3-Server-x86_64-disc6.iso

 

注:如果 Linux RAC 节点安装有 DVD,您可能会发现使用如下的单个 DVD 映像更方便:

V15416-01.zip (3.2 GB)

 

解压缩该单个 DVD 映像文件后将其刻录到一张 DVD 中:

Enterprise-R5-U3-Server-x86_64-dvd.iso

 

如果您将以上 ISO 文件下载到 MS Windows 计算机,可以使用多种方法将这些映像(ISO 文件)刻录到一张 CD/DVD。您可能很熟悉这个过程,甚至已经拥有合适的软件,可以将映像刻录到 CD/DVD。如果您不熟悉这个过程,并且没有将映像刻录到 CD/DVD 所需的软件,这里提供了两个软件程序包(实际上有许多个): UltraISO Magic ISO Maker

 

下载并将 Oracle Enterprise Linux 映像(ISO 文件)刻录到 CD/DVD 后,将 OEL 1 号盘插入第一个服务器(在本示例中是 linux1),打开电源,然后按照以下说明回应安装屏幕的提示。在第一个节点上安装完 Linux 后,在第二个节点上执行相同的 Linux 安装,但将节点名 linux1 替换为 linux2 并设定适当的不同 IP 地址。

引导屏幕

第一个屏幕是 Oracle Enterprise Linux 引导屏幕。在 boot: 提示符处按 [Enter] 键启动安装过程。

介质测试

当要求测试 CD 介质时,用 Tab 键切换到 [Skip] 并按 [Enter] 键。如果有错误,则介质刻录软件会向我们发出警告。在几秒钟后,安装程序将会检测视频卡、显示器和鼠标。然后安装程序进入 GUI 模式。

欢迎使用 Oracle Enterprise Linux

在欢迎屏幕上,单击 [Next] 继续。

语言 / 键盘选项

接下来的两个屏幕提示您设置语言和键盘设置。为您的配置作出合适的选择。

检测以前的安装

注意,如果安装程序检测到以前版本的 Oracle Enterprise Linux,它将询问您是“Install Enterprise Linux”还是“Upgrade an existing Installation”。请始终选择“Install Enterprise Linux”。

磁盘分区设置

保持 [Remove linux partitions on selected drives and create default layout] 的默认选中状态,选中 [Review and modify partitioning layout] 选项。单击 [Next] 继续。

此时会显示一个对话窗口,询问您是否真的要删除所有分区。单击 [Yes] 回复这一警告。

分区

随后安装程序将允许您查看(如果需要还可以更改)它自动选择的磁盘分区。对于大多数自动布局,安装程序将为 /boot 分配 100MB,为交换分区分配双倍数量的 RAM(系统 RAM <= 2,048MB 时)或同等数量的 RAM(系统 RAM > 2,048MB 时),而将剩余空间分配给根 (/) 分区。从 RHEL 4 开始,安装程序将创建与刚才提到的相同磁盘配置,但将使用逻辑卷管理器 (LVM) 创建它们。例如,它将把第一个硬盘驱动器(我的配置使用 /dev/hda)划分为两个分区 — 一个用于 /boot 分区 (/dev/hda1) ,而磁盘的剩余部分专用于 LVM 指定的 VolGroup00 (/dev/hda2)。然后,将 LVM 卷组 (VolGroup00) 划分为两个 LVM 分区 — 一个用于根文件系统 (/),另一个用于交换分区。

在分区阶段,我主要检查是否为 Oracle 分配了足够的交换空间(可用 RAM 的倍数)。下面是 Oracle 的交换空间要求:

可用 RAM 所需的交换空间

介于 1,024MB 和 2,048MB 之间 RAM 大小的 1.5 倍

介于 2,049MB 和 8,192MB 之间 与 RAM 大小相同

超过 8,192MB RAM 大小的 0.75 倍

就本安装而言,我将接受所有自动选用的大小。(包括 4,096MB 的交换空间,因为我安装了 2,048MB 的 RAM。)

如果出于任何原因,自动布局无法配置足够数量的交换空间,您可以通过此屏幕轻松地进行更改。要增加交换分区的大小,单击 [Edit] 编辑卷组 VolGroup00。这将显示“Edit LVM Volume Group:VolGroup00”对话框中的 [OK]。首先,单击 [Edit] 进行编辑,减少根文件系统 (/) 的大小(减少的数量是您要添加到交换分区的数量)。例如,要为交换分区添加 512MB 的空间,您需要将根文件系统的大小减少 512MB(即,36,032MB - 512MB = 35,520MB)。现在,将您从根文件系统减少的空间 (512MB) 添加到交换分区。完成后,单击“Edit LVM Volume Group:VolGroup00”对话框中的 [OK]。

如果您对磁盘布局满意,单击 [Next] 继续。

引导加载程序配置

安装程序将默认使用 GRUB 引导加载程序。要使用 GRUB 引导加载程序,接受所有默认值并单击 [Next] 继续。

网络配置

在启动操作系统安装之前,我已确认在每个 Linux 机器上安装了两个 NIC 接口(卡)。本屏幕应该已经成功地检测到每个网络设备。由于我们将使用该计算机宿主 Oracle 数据库,因此需要对网络配置进行一些更改。当然,您在此处的设置取决于您的网络配置。关键点是永远不要使用 DHCP 配置计算机,因为它将用于宿主 Oracle 数据库服务器。您需要使用静态 IP 地址配置计算机。您还需要使用实际主机名配置服务器。

首先,确保将每个网络设备设置为 [Active on boot]。默认情况下,安装程序可能选择不激活 eth1。

第二步,单击 [Edit] 按照以下方法对 eth0 和 eth1 进行编辑操作。验证已选中“Enable IPv4 support”选项。单击取消选中“Use dynamic IP configuration (DHCP)”选项,然后为您的环境配置一个静态 IP 地址和网络掩码。单击取消选中“Enable IPv6 support”选项。您可能要为本指南中说明的 eth0 和 eth1 使用不同的 IP 地址,这没有问题。可以将 eth1(互连)置于不同于 eth0(公共网络)的子网中:

eth0:

- 选中 [Enable IPv4 support] 选项

- 取消选中 [Use dynamic IP configuration (DHCP)] 选项 —(选择人工配置)

IPv4 地址:192.168.1.100

前缀(网络掩码):255.255.255.0

- 取消选中 [Enable IPv6 support] 选项

eth1:

- 选中 [Enable IPv4 support] 选项

- 取消选中 [Use dynamic IP configuration (DHCP)] 选项 —(选择人工配置)

IPv4 地址:192.168.2.100

前缀(网络掩码):255.255.255.0

- 取消选中 [Enable IPv6 support] 选项

接着,手动设置您的主机名。我对第一个节点使用“linux1”,第二个节点使用“linux2”。然后提供您的网关和 DNS 服务器,最后关闭该对话框。

时区选择

为您的环境选择适当的时区,然后单击 [Next] 继续。

设置根口令

选择一个根口令,然后单击 [Next] 继续。

程序包安装默认值

默认情况下,Oracle Enterprise Linux 将安装一台典型服务器所需的大部分软件。但成功安装 Oracle 数据库软件还需要若干其他程序包 (RPM)。运行安装程序时,您可以选择“Customize software”来添加 RPM 分组,如“Development Libraries”或“Legacy Library Support”。添加这样的 RPM 分组不成问题。然而,取消选择任何“默认的 RPM”分组或单个的 RPM 可能会导致 Oracle 集群件和 Oracle 数据库安装尝试失败。

对于本文,选择单选按钮 [Customize now],然后单击 [Next] 继续。

您可以在这里选择要安装的程序包。Oracle 软件需要的大部分程序包都集中在“程序包组”中(即 Application -> Editors)。由于这些节点将宿主 Oracle 集群件和 Oracle RAC 软件,请验证至少选择安装以下程序包组。注意,对于许多 Linux 程序包组,并不是所有与该组关联的程序包都被选择来进行安装。(选择程序包组之后,请注意“Optional packages”按钮。)因此,尽管选择了安装该程序包组,但 Oracle 需要的某些程序包还是没有得到安装。实际上,Oracle 需要的某些程序包可能不属于任何 可用的程序包组(即 libaio-devel)。不要担心。本部分结尾处将提供适用于 Oracle Enterprise Linux 5 的 Oracle 集群件 10g 和 Oracle RAC 10g 所需程序包的完整列表。安装操作系统之后,需要从 Oracle Enterprise Linux CD 手动安装这些程序包。现在,安装以下程序包组:

桌面环境 GNOME Desktop Environment

应用产品 编辑器 Graphical Internet Text-based Internet

开发 开发库 开发工具 原有软件开发

服务器 服务器配置工具

基本系统 管理工具 基本 Java 原有软件支持 系统工具 X Window 系统

 

除了上述程序包外,还可选择您希望为此节点安装的任何其他程序包,请记住,不要取消选择任何“默认”的 RPM 程序包。选择要安装的程序包之后,单击 [Next] 继续。

关于安装

本屏幕主要是一个确认屏幕。单击 [Next] 开始安装。如果您使用 CD 安装 Oracle Enterprise Linux,在安装过程中,系统会根据您选择安装的程序包来要求您更换 CD。

恭喜

大功告成。您已经在第一个节点 (linux1) 上成功安装了 Oracle Enterprise Linux。安装程序将从 CD-ROM 驱动器中弹出 CD/DVD。取出 CD/DVD,单击 [Reboot] 重新引导系统。

安装后向导欢迎屏幕

当系统第一次引导进入 Oracle Enterprise Linux 时,将为您显示另一个“安装后向导”的欢迎屏幕。安装后向导允许您进行最终的 O/S 配置设置。在“Welcome”屏幕上,单击 [Forward] 继续。

许可协议

阅读许可协议。选择“Yes, I agree to the License Agreement”,然后单击 [Forward] 继续。



防火墙

在该屏幕上,确保选中 [Disabled] 选项,然后单击 [Forward] 继续。

系统将显示一个警告对话框,提示您不要设置防火墙。显示该对话框之后,单击 [Yes] 继续。



SELinux

在 SELinux 屏幕上,选中 [Disabled] 选项,然后单击 [Forward] 继续。

系统将显示一个警告对话框,提示您更改 SELinux 设置需要重新引导系统以便重新标记整个文件系统。显示该对话框之后,单击 [Yes] 确认在第一次引导(安装后向导)完成后将重新引导系统。

Kdump

接受 Kdump 屏幕上的默认设置 (disabled),然后单击 [Forward] 继续。

日期和时间设置

如果需要,调整日期和时间设置,然后单击 [Forward] 继续。

创建用户

如果需要,创建其他(非 oracle)操作系统用户帐户,然后单击 [Forward] 继续。对于本文,我不会创建任何其他操作系统帐户。在本指南后面部分,我将在 Oracle 数据库安装期间创建“oracle”用户帐户。

如果您选择不定义任何其他操作系统用户帐户,单击 [Continue] 确认警告对话框。

声卡

如果向导检测到声卡,该屏幕将出现。在声卡屏幕上,单击 [Forward] 继续。

其他 CD

在“Additional CDs”屏幕上,单击 [Finish] 继续。

重新引导系统

假设我们更改了 SELinux 选项(更改为 disabled),系统将提示重新引导系统。单击 [OK] 重新引导系统以便正常使用。

登录屏幕

重新引导计算机之后,将为您显示登录屏幕。使用“root”用户帐户和在安装期间提供的口令登录。

在第二个节点上进行相同的安装

在第一个节点上完成 Linux 安装后,在第二个节点 (linux2) 上重复上述步骤。对机器名和网络进行正确配置。在我的安装中,linux2 配置如下:

首先,确保将每个网络设备设置为 [Active on boot]。安装程序可能选择不激活 eth1。

第二步,单击 [Edit] 按照以下方法对 eth0 和 eth1 进行编辑操作。验证已选中“Enable IPv4 support”选项。单击取消选中“Use dynamic IP configuration (DHCP)”选项,然后为您的环境配置一个静态 IP 地址和网络掩码。单击取消选中“Enable IPv6 support”选项。您可能要为本指南中说明的 eth0 和 eth1 使用不同的 IP 地址,这没有问题。可以将 eth1(互连)置于不同于 eth0(公共网络)的子网中:

eth0:

- 选中 [Enable IPv4 support] 选项

- 取消选中 [Use dynamic IP configuration (DHCP)] 选项 —(选择人工配置)

IPv4 地址:192.168.1.101

前缀(网络掩码):255.255.255.0

- 取消选中 [Enable IPv6 support] 选项

eth1:

- 选中 [Enable IPv4 support] 选项

- 取消选中 [Use dynamic IP configuration (DHCP)] 选项 —(选择人工配置)

IPv4 地址:192.168.2.101

前缀(网络掩码):255.255.255.0

- 取消选中 [Enable IPv6 support] 选项

接着,手动设置您的主机名。我对第二个节点使用“linux2”。然后提供您的网关和 DNS 服务器,最后关闭该对话框。

7. 为 Oracle RAC 安装必需的 Linux 程序包

在集群中的两个 Oracle RAC 节点上安装以下必需的 Linux 程序包!安装 Oracle Enterprise Linux 之后,下一步是验证并安装 Oracle 集群件和 Oracle RAC 所需的所有程序包 (RPM)。Oracle Universal Installer (OUI) 将在安装期间在计算机上执行检查,以检验是否满足相应的操作系统程序包要求。要确保这些检查成功完成,请在开始安装 Oracle 之前查看本部分中说明的软件要求。

尽管许多 Oracle 必需的程序包已经在第 6 部分(安装 Linux 操作系统)中安装。但还缺少一些程序包,原因是它们在程序包组中被视为可选项,或者根本不存在于任何程序包组中!

本部分中列出的程序包(或更高版本)是 Oracle Enterprise Linux 5 平台上运行的 Oracle 集群件 10g 第 2 版和 Oracle RAC 10g 第 2 版所必需的。

32 位 (x86) 安装

binutils-2.17.50.0.6-2.el5 compat-libstdc++-296-2.96-138 compat-libstdc++-33-3.2.3-61 elfutils-libelf-0.125-3.el5 elfutils-libelf-devel-0.125 gcc-4.10.1-52 gcc-c++-4.10.1-52 glibc-2.5-12 glibc-common-2.5-12 glibc-devel-2.5-12 glibc-headers-2.5-12 libaio-0.3.106 libaio-devel-0.3.106 libgcc-4.10.1-52 libstdc++-4.1.1 libstdc++-devel-4.1.1-52.e15 libXp-1.0.0-8 make-3.81-1.1 openmotif-2.2.3 sysstat-7.0.0 unixODBC-2.2.11 unixODBC-devel-2.2.11

 

注意,openmotif RPM 程序包在安装 Oracle 演示时需要。本文不包括 Oracle 演示的安装。

上面列出的每个程序包都可以在 Oracle Enterprise Linux 5 - (x86) CD 的 1 号 CD、2 号 CD 和 3 号 CD 中找到。尽管可以查询每个单独的程序包以确定缺少并需要安装哪个程序包,但更简单的方法是针对这五个 CD 运行 rpm -Uvh PackageName 命令,如下所示。对于已经存在并且是最新版本的程序包,RPM 命令将忽略安装,并在控制台上打印警告消息,表明该程序包已经安装。

# From Oracle Enterprise Linux 5.3 (x86)- [CD #1]mkdir -p /media/cdrommount -r /dev/cdrom /media/cdromcd /media/cdrom/Serverrpm -Uvh binutils-2.*rpm -Uvh elfutils-libelf-0.*rpm -Uvh glibc-2.*rpm -Uvh glibc-common-2.*rpm -Uvh libaio-0.*rpm -Uvh libgcc-4.*rpm -Uvh libstdc++-4.*rpm -Uvh make-3.*cd /eject# From Oracle Enterprise Linux 5.3 (x86) - [CD #2]mount -r /dev/cdrom /media/cdromcd /media/cdrom/Serverrpm -Uvh elfutils-libelf-devel-0.*rpm -Uvh glibc-devel-2.*rpm -Uvh glibc-headers-2.*rpm -Uvh gcc-4.*rpm -Uvh gcc-c++-4.*rpm -Uvh libstdc++-devel-4.*rpm -Uvh unixODBC-2.*cd /eject# From Oracle Enterprise Linux 5.3 (x86) - [CD #3]mount -r /dev/cdrom /media/cdromcd /media/cdrom/Serverrpm -Uvh compat-libstdc++-296*rpm -Uvh compat-libstdc++-33*rpm -Uvh libaio-devel-0.*rpm -Uvh libXp-1.*rpm -Uvh openmotif-2.*rpm -Uvh sysstat-7.*rpm -Uvh unixODBC-devel-2.*cd /eject

64 位 (x86_64) 安装

binutils-2.17.50.0.6-2.el5 compat-libstdc++-296-2.96-138 compat-libstdc++-33-3.2.3-61 compat-libstdc++-33-3.2.3-61(32 位) elfutils-libelf-0.125-3.el5 elfutils-libelf-devel-0.125 gcc-4.1.1 gcc-c++-4.1.1 glibc-2.5-12 glibc-2.5-12(32 位) glibc-common-2.5 glibc-devel-2.5-12 glibc-devel-2.5-12(32 位) glibc-headers-2.5-12 libaio-0.3.106 libaio-0.3.106(32 位) libaio-devel-0.3.106 libgcc-4.1.1 libgcc-4.1.1(32 位) libstdc++-4.1.1 libstdc++-4.1.1(32 位) libstdc++-devel-4.1.1-52.e15 libXp-1.0.0-8 make-3.81-1.1 openmotif-2.2.3 sysstat-7.0.0 unixODBC-2.2.11 unixODBC-2.2.11(32 位) unixODBC-devel-2.2.11

 

注意,openmotif RPM 程序包在安装 Oracle 演示时需要。本文不包括 Oracle 演示的安装。

上面列出的每个程序包都可以在 Oracle Enterprise Linux 5 - (x86_64) CD 的 1 号 CD、2 号 CD、3 号 CD 和 4 号 CD 中找到。尽管可以查询每个单独的程序包以确定缺少并需要安装哪个程序包,但更简单的方法是针对这五个 CD 运行 rpm -Uvh PackageName 命令,如下所示。对于已经存在并且是最新版本的程序包,RPM 命令将忽略安装,并在控制台上打印警告消息,表明该程序包已经安装。

# From Oracle Enterprise Linux 5.3 (x86_64)- [CD #1]mkdir -p /media/cdrommount -r /dev/cdrom /media/cdromcd /media/cdrom/Serverrpm -Uvh binutils-2.*rpm -Uvh elfutils-libelf-0.*rpm -Uvh glibc-2.*rpm -Uvh glibc-common-2.*rpm -Uvh libaio-0.*rpm -Uvh libgcc-4.*rpm -Uvh libstdc++-4.*rpm -Uvh make-3.*cd /eject# From Oracle Enterprise Linux 5.3 (x86_64) - [CD #2]mount -r /dev/cdrom /media/cdromcd /media/cdrom/Serverrpm -Uvh elfutils-libelf-devel-0.*rpm -Uvh glibc-devel-2.*rpm -Uvh glibc-headers-2.*rpm -Uvh gcc-4.*rpm -Uvh gcc-c++-4.*rpm -Uvh libstdc++-devel-4.*rpm -Uvh unixODBC-2.*cd /eject# From Oracle Enterprise Linux 5.3 (x86_64) - [CD #3]mount -r /dev/cdrom /media/cdromcd /media/cdrom/Serverrpm -Uvh compat-libstdc++-296*rpm -Uvh compat-libstdc++-33*rpm -Uvh libaio-devel-0.*rpm -Uvh libXp-1.*rpm -Uvh openmotif-2.*rpm -Uvh unixODBC-devel-2.*cd /eject# From Oracle Enterprise Linux 5.3 (x86_64) - [CD #4]mount -r /dev/cdrom /media/cdromcd /media/cdrom/Serverrpm -Uvh sysstat-7.*cd /eject

8. 网络配置

在集群中的两个 Oracle RAC 节点上执行下列网络配置!

注:虽然我们在 Oracle Enterprise Linux 安装过程中配置了几个网络设置,但千万不要跳过本部分,因为它包含了成功的 RAC 环境所需的关键步骤。

网络设置简介

在 Linux O/S 安装过程中,我们已经为这两个 Oracle RAC 节点配置了 IP 地址和主机名。现在,我们需要配置 /etc/hosts 文件,并调整几个互连的网络设置。

这两个 Oracle RAC 节点均应有一个用于公共网络的静态 IP 地址和一个用于专用集群互连的静态 IP 地址。不要为公共 IP 地址或互连使用 DHCP 命名;您需要静态 IP 地址!专用互连应该仅由 Oracle 用于传输与集群管理器和缓存融合相关的数据以及用于网络存储服务器 (Openfiler) 的数据。注意,Oracle 不支持使用公共网络接口进行互连。您必须对公共网络使用一个网络接口,对专用互连使用另一个网络接口。对于生产 RAC 实现,互连应该至少有千兆位(或更多)且仅由 Oracle 使用,并且在单独的千兆位网络上具有网络存储服务器 (Openfiler)。

配置公共网络和专用网络

在我们的双节点示例中,为了访问公共网络和专用互连,我们需要在两个 Oracle RAC 节点上配置网络。

在 Oracle Enterprise Linux 中配置网络设置的最简单方法是使用“网络配置”程序。您可以以“root”用户帐户从命令行启动网络配置程序,如下所示:

# su -

# /usr/bin/system-config-network &注:不要对公共 IP 地址或互连使用 DHCP 命名 — 我们需要静态 IP 地址!

使用 Network Configuration 应用程序时,您需要配置两个 NIC 设备以及 /etc/hosts 文件。您可以使用网络配置 GUI 完成这两个任务。注意,这两个节点的 /etc/hosts 设置相同,而且我删除了与 IPv6 相关的任一项(例如,::1 localhost6.localdomain6 localhost6)。

我们的示例配置将使用以下设置:

Oracle RAC 节点 1 — (linux1)

设备 IP 地址 子网 网关 目的

eth0 192.168.1.100 255.255.255.0 192.168.1.1 连接 linux1 与公共网络

eth1 192.168.2.100 255.255.255.0 将 linux1(互连)连接到 linux2 (linux2-priv)

/etc/hosts

127.0.0.1 localhost.localdomain localhost # Public Network - (eth0) 192.168.1.100 linux1 192.168.1.101 linux2 # Private Interconnect - (eth1) 192.168.2.100 linux1-priv 192.168.2.101 linux2-priv # Public Virtual IP (VIP) addresses - (eth0:1) 192.168.1.200 linux1-vip 192.168.1.201 linux2-vip # Private Storage Network for Openfiler - (eth1) 192.168.1.195 openfiler1 192.168.2.195 openfiler1-priv

 

Oracle RAC 节点 2 — (linux2)

设备 IP 地址 子网 网关 目的

eth0 192.168.1.101 255.255.255.0 192.168.1.1 连接 linux2 与公共网络

eth1 192.168.2.101 255.255.255.0 将 linux2(互连)连接到 linux1 (linux1-priv)

/etc/hosts

127.0.0.1 localhost.localdomain localhost # Public Network - (eth0) 192.168.1.100 linux1 192.168.1.101 linux2 # Private Interconnect - (eth1) 192.168.2.100 linux1-priv 192.168.2.101 linux2-priv # Public Virtual IP (VIP) addresses - (eth0:1) 192.168.1.200 linux1-vip 192.168.1.201 linux2-vip # Private Storage Network for Openfiler - (eth1) 192.168.1.195 openfiler1 192.168.2.195 openfiler1-priv

请注意,只需在两个 Oracle RAC 节点的 /etc/hosts 文件(或您的 DNS)中定义虚拟 IP 地址。当您运行 Oracle Universal Installer 时,该程序启动 Oracle 的虚拟互联网协议配置助手 (VIPCA),也就说 Oracle 集群件将自动配置公共虚拟 IP 地址。当运行 srvctl start nodeapps -n <node_name> 命令时,所有的虚拟 IP 地址将被激活。这就是将要在客户端 tnsnames.ora 文件中进行配置的主机名/IP 地址(后文详述)。尽管做的是超越自我的事情,但这个却是在客户端 tnsnames.ora 文件中将要对每个 Oracle Net 服务名称配置的主机名/IP 地址。本文后面将对此进行解释!

以下屏幕截图只显示了 Oracle RAC 节点 1 (linux1)。确保对两个 Oracle RAC 节点进行了所有适当的网络设置。



图 2:网络配置屏幕,节点 1 (linux1)



图 3:以太网设备屏幕,eth0 (linux1)



图 4:以太网设备屏幕,eth1 (linux1)



图 5:网络配置屏幕,/etc/hosts (linux1)

配置网络之后,您可以使用 ifconfig 命令验证一切是否正常。以下示例来自于 linux1:

# /sbin/ifconfig -aeth0 Link encap:Ethernet HWaddr 00:14:6C:76:5C:71inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0inet6 addr: fe80::214:6cff:fe76:5c71/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:474176 errors:0 dropped:0 overruns:0 frame:0TX packets:295424 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:646960868 (616.9 MiB) TX bytes:138068364 (131.6 MiB)Interrupt:177 Base address:0x6f00eth1 Link encap:Ethernet HWaddr 00:0E:0C:64:D1:E5inet addr:192.168.2.100 Bcast:192.168.2.255 Mask:255.255.255.0inet6 addr: fe80::20e:cff:fe64:d1e5/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:1452602 errors:0 dropped:0 overruns:0 frame:0TX packets:1804263 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:1165724771 (1.0 GiB) TX bytes:2205826792 (2.0 GiB)Base address:0xddc0 Memory:fe9c0000-fe9e0000lo Link encap:Local Loopbackinet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING MTU:16436 Metric:1RX packets:1371 errors:0 dropped:0 overruns:0 frame:0TX packets:1371 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:2169814 (2.0 MiB) TX bytes:2169814 (2.0 MiB)sit0 Link encap:IPv6-in-IPv4NOARP MTU:1480 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

关于虚拟 IP

10g 中为什么使用虚拟 IP (VIP)?为什么当它的主节点发生故障时它只是返回一个无效的连接?

这全是出于对应用程序可用性的考虑。当一个节点发生故障时,与其关联的 VIP 将被自动故障切换到另外某个节点上。当出现这种情况时,会发生两件事。

新的节点重新进行地址解析,显示该地址的一个新的 MAC 地址。对于直连客户端,这通常使它们在连接旧地址时出现错误。 到 VIP 的后续数据包将被传送到新的节点,该节点将把错误 RST 数据包返回客户端。这导致客户端立即收到错误信息。

这意味着,当客户端向故障节点发出 SQL 时,或者在连接状态下遍历地址列表时,客户端会接收到一个 TCP 重置信息,而不是等待很长的 TCP/IP 超时(大约 10 分钟)。发送 SQL 时,该信息为 ORA-3113。而连接时,使用 tnsname 中的下一个地址。

更进一步的操作是使用透明的应用程序故障切换 (TAF)。成功配置 TAF 后,就可以完全避免 ORA-3113 错误!第 31 节(“透明的应用程序故障切换 — (TAF)”)将更详细地介绍 TAF。

如果不使用 VIP,连接停用节点的客户端经常要等待 10 分钟的 TCP 超时,然后才收到错误信息。因此,如果没有 VIP, 用户将不能真正拥有一流的高可用性解决方案(来源 — Metalink 说明 220970.1)。

确保 RAC 节点名没有出现在环回地址中

确保在 /etc/hosts 文件的环回地址中不包含节点名(linux1 或 linux2)。如果机器名出现在环回地址条目中,如下所示:

127.0.0.1 linux1 localhost.localdomain localhost

需要按如下所示将其删除: 127.0.0.1 localhost.localdomain localhost

如果 RAC 节点名出现在环回地址中,您在 RAC 安装期间将接收到以下错误信息:

ORA-00603: ORACLE server session terminated by fatal error

或者 ORA-29702: error occurred in Cluster Group Service operation

验证 localhost 在 /etc/hosts 文件中定义为回送地址

确保 localhost.localdomain 和 localhost 项作为回送地址包含在每个 Oracle RAC 节点的 /etc/hosts 文件中: 127.0.0.1 localhost.localdomain localhost如果 /etc/hosts 文件中不存在 localhost 项,Oracle 集群件将无法启动应用程序资源 — 特别是 ONS 进程。该错误将指明“Failed to get IP for localhost”并写入 ONS 的日志文件。例如:CRS-0215 could not start resource 'ora.linux1.ons'. Check log file"/u01/app/crs/log/linux1/racg/ora.linux1.ons.log"for more details.ONS 日志文件包含类似以下内容的行:

 

Oracle Database 10g CRS Release 10.2.0.1.0 Production Copyright 1996, 2005 Oracle.保留所有权利。

2007-04-14 13:10:02.729: [ RACG][3086871296][13316][3086871296][ora.linux1.ons]:Failed to get IP for localhost (1)

Failed to get IP for localhost (1)

Failed to get IP for localhost (1)

onsctl:ons failed to start

...

调整网络设置

在 Oracle 9.2.0.1 以及更高版本中,Oracle 在 Linux 上使用 UDP 作为进行过程间通信 (IPC) 的默认协议,如在 RAC 集群中实例之间的缓存融合和集群管理器缓冲区传输。

Oracle 强烈建议将默认的和最大的接收缓冲区大小(SO_RCVBUF 套接字选项)调整为 1MB,并将默认的和最大的发送缓冲区大小(SO_SNDBUF 套接字选项)调整为 256KB。

接收缓冲区由 TCP 和 UDP 用于保留所接收的数据,直到应用程序读出这些数据为止。由于不允许对端设备发送超过缓冲区大小窗口的数据,因此接收缓冲区不会溢出。这意味着,不适合套接字接收缓冲区可能导致发送设备发送的信息淹没接收设备的数据报将会被丢弃。

您无需重新引导即可在 /proc 文件系统中更改默认的和最大的窗口大小:

# su - root# sysctl -w net.core.rmem_default=1048576net.core.rmem_default = 1048576# sysctl -w net.core.rmem_max=1048576net.core.rmem_max = 1048576# sysctl -w net.core.wmem_default=262144net.core.wmem_default = 262144# sysctl -w net.core.wmem_max=262144net.core.wmem_max = 262144以上命令更改正在运行的操作系统。现在,将以下各行程序添加到 RAC 集群中两个节点的 /etc/sysctl.conf 文件中,使以上更改永久生效(针对每次重新引导而言):

# +---------------------------------------------------------+# | ADJUSTING NETWORK SETTINGS |# +---------------------------------------------------------+# | With Oracle 9.2.0.1 and onwards, Oracle now makes use |# | of UDP as the default protocol on Linux for |# | inter-process communication (IPC), such as Cache Fusion |# | and Cluster Manager buffer transfers between instances |# | within the RAC cluster. Oracle strongly suggests to |# | adjust the default and maximum receive buffer size |# | (SO_RCVBUF socket option) to 1024 KB, and the default |# | and maximum send buffer size (SO_SNDBUF socket option) |# | to 256 KB. The receive buffers are used by TCP and UDP |# | to hold received data until it is read by the |# | application. The receive buffer cannot overflow because |# | the peer is not allowed to send data beyond the buffer |# | size window. This means that datagrams will be |# | discarded if they don't fit in the socket receive |# | buffer. This could cause the sender to overwhelm the |# | receiver. |# +---------------------------------------------------------+# +---------------------------------------------------------+# | Default setting in bytes of the socket "receive" buffer |# | which may be set by using the SO_RCVBUF socket option. |# +---------------------------------------------------------+net.core.rmem_default=1048576# +---------------------------------------------------------+# | Maximum setting in bytes of the socket "receive" buffer |# | which may be set by using the SO_RCVBUF socket option. |# +---------------------------------------------------------+net.core.rmem_max=1048576# +---------------------------------------------------------+# | Default setting in bytes of the socket "send" buffer |# | which may be set by using the SO_SNDBUF socket option. |# +---------------------------------------------------------+net.core.wmem_default=262144# +---------------------------------------------------------+# | Maximum setting in bytes of the socket "send" buffer |# | which may be set by using the SO_SNDBUF socket option. |# +---------------------------------------------------------+net.core.wmem_max=262144

检查并关闭 UDP ICMP 拒绝

在 Linux 安装期间,我指示不配置防火墙选项。默认情况下,配置防火墙的选项由安装程序选择。这使我吃了好几次苦头,因此我要仔细检查防火墙选项是否未配置,并确保 udp ICMP 过滤已关闭。

如果 UDP ICMP 被防火墙阻塞或拒绝,Oracle 集群件软件将在运行几分钟之后崩溃。如果 Oracle 集群件进程出现故障,您的 <machine_name>_evmocr.log 文件中将出现以下类似内容:

08/29/2005 22:17:19

oac_init:2: Could not connect to server, clsc retcode = 9

08/29/2005 22:17:19

a_init:12!: Client init unsuccessful : [32]

ibctx:1:ERROR: INVALID FORMAT

proprinit:problem reading the bootblock or superbloc 22如果遇到此类错误,解决方法是删除 udp ICMP (iptables) 拒绝规则,或者干脆关闭防火墙选项。之后,Oracle 集群件软件将开始正常工作,而不会崩溃。以下命令应该以 root 用户帐户的身份执行:

 

检查以确保防火墙选项关闭。如果防火墙选项已停用(如下面的示例所示),则不必继续执行以下步骤。 # /etc/rc.d/init.d/iptables status

Firewall is stopped.

 

如果防火墙选项已启用,您首先需要手动停用 UDP ICMP 拒绝: # /etc/rc.d/init.d/iptables stop

Flushing firewall rules: [ OK ]

Setting chains to policy ACCEPT: filter [ OK ]

Unloading iptables modules: [ OK ]

 

然后,针对下一次服务器重新引导关闭 UDP ICMP 拒绝(应该始终被关闭): # chkconfig iptables off

9. 安装 Openfiler在网络存储服务器 (openfiler1) 上执行以下安装!

在两个 Oracle RAC 节点上进行网络配置之后,下一步是将 Openfiler 软件安装到网络存储服务器 (openfiler1)。在本文的后面部分,会将网络存储服务器配置为 iSCSI 存储设备,以满足所有 Oracle RAC 10g 共享存储要求。

Openfiler 由 rPath Linux 驱动,它是一个基于浏览器的免费网络存储管理实用程序,可以在单一框架中提供基于文件的网络连接存储 (NAS) 和基于块的存储区域网 (SAN)。整个软件包与开放源代码应用程序(例如 Apache、Samba、LVM2、ext3、Linux NFS 和 iSCSI Enterprise Target)连接。Openfiler 将这些随处可见的技术组合到一个易于使用的小型管理解决方案中,该解决方案通过一个基于 Web 且功能强大的管理界面实现。

Openfiler 支持 CIFS、NFS、HTTP/DAV 和 FTP,但是,我们仅使用它的 iSCSI 功能为 Oracle RAC 10g 需要的共享存储组件实现低成本的 SAN。操作系统和 Openfiler 应用程序将安装于同一个内置 SATA 磁盘上。第二个内置 73GB 15K SCSI 硬盘将被配置为一个“卷组”,该卷组用于所有共享磁盘存储之需。Openfiler 服务器将配置为使用该卷组来进行基于 iSCSI 的存储,并且将在我们的 Oracle RAC 10g 配置中用于存储 Oracle 集群件所需的共享文件以及所有 Oracle ASM 卷。

请注意,只要网络存储服务器 (Openfiler) 能够识别并具有足够的空间,任何类型的硬盘(内置或外置)都可用于数据库存储。例如,我已在 500GB 内置 SATA 磁盘上建立了一个额外的分区用于 iSCSI 目标,但决定在此例中使用速度更快的 SCSI 磁盘。

要了解有关 Openfiler 的更多信息,请访问其网站 http://www.61k.com

下载 Openfiler

根据您的硬件体系结构,使用下面的链接下载适用于 x86 或 x86_64 的 Openfiler NAS/SAN Appliance 2.3 版(最终版)。本示例使用 x86_64。下载 Openfiler 之后,需要将 ISO 映像刻录到 CD。

Openfiler x86: openfiler-2.3-x86-disc1.iso (322 MB)



x86_64: openfiler-2.3-x86_64-disc1.iso (336 MB)

如果您将以上 ISO 文件下载到 MS Windows 计算机,可以使用多种方法将这些映像(ISO 文件)刻录到 CD。您可能很熟悉这个过程,甚至已经拥有合适的软件,可以将映像刻录到 CD。如果您不熟悉这个过程,并且没有将映像刻录到 CD 所需的软件,这里提供了两个软件程序包(实际上有许多个): UltraISO Magic ISO Maker

 

安装 Openfiler

本部分概述了用于安装 Openfiler 软件的各个屏幕。在本文中,我选择了使用所有默认选项安装 Openfiler。所需的唯一手动更改是为了配置本地网络设置。

安装完成之后,服务器将重新引导以确保启动并识别所需的所有组件、服务和驱动程序。重新引导之后,Openfiler 服务器将会发现所有外置硬盘驱动器(若已连接)。

有关更详细的安装说明,请访问 http://www.61k.comlearn/。但是,我建议使用下面提供的说明对该 Oracle RAC 10g 进行配置。

将 Openfiler 软件安装到网络存储服务器之前,应该先安装两个 NIC 接口(卡),连接并打开所有外置硬盘驱动器(如果您要使用外置硬盘驱动器)。

在下载并将 Openfiler ISO 映像(ISO 文件)刻录到 CD 之后,将该 CD 插入网络存储服务器(在本例中是 openfiler1),启动,并按照以下说明来回应安装屏幕的提示。

引导屏幕

第一个屏幕是 Openfiler 引导屏幕。在 boot: 提示符处按 [Enter] 键启动安装过程。

介质测试

当要求测试 CD 介质时,用 Tab 键切换到 [Skip] 并按 [Enter] 键。如果有错误,则介质刻录软件会向我们发出警告。在几秒钟后,安装程序将会检测视频卡、显示器和鼠标。然后安装程序进入 GUI 模式。

欢迎使用 Openfiler NSA

在该欢迎屏幕上,单击 [Next] 继续。

键盘配置

下一个屏幕将提示您进行键盘设置。为您的配置作出合适的选择。

磁盘分区设置

下一个屏幕将询问使用“Automatic Partitioning”还是“Manual Partitioning with Disk Druid”执行磁盘分区。虽然 Openfiler 官方文档建议使用手动分区,但我选择使用“自动分区”,因为我的示例配置较为简单。

选择 [Automatically partition] 并单击 [Next] 继续。

自动分区

如果以前在本机上安装了 Linux,则下一屏幕将询问您是要“删除”还是“保留”旧分区。选择 [Remove all partitions on this system] 选项。就我的示例配置而言,我选择了仅使用 500GB SATA 内置硬盘驱动器 [sdb] 来进行操作系统和 Openfiler 应用程序的安装。我取消选择了 73GB SCSI 内置硬盘驱动器,因为在下一部分中该磁盘将专门用于创建单个“卷组”,该卷组将用于 Oracle RAC 10g 的所有基于 iSCSI 的共享磁盘存储之需。

我还选中了 [Review (and modify if needed) the partitions created] 复选框。单击 [Next] 继续。

然后显示一个对话窗口,询问您是否真的要删除所有分区。单击 [Yes] 回复这一警告。

分区

随后安装程序将允许您查看(如果需要还可以更改)它为您在上一屏中选择的硬盘自动选择的磁盘分区。在绝大多数情况下,安装程序将为 /boot 分配 100MB,为交换分区分配足够数量的空间,而将剩余空间分配给这个(这些)磁盘的根 (/) 分区。在本示例中,我对安装程序针对 /dev/sdb 建议的分区感觉满意。

安装程序还将显示它所发现的任何其他内置硬盘。对于我的示例配置,安装程序发现了 73GB SCSI 内置硬盘作为 /dev/sda。现在,我将“删除”此驱动器上的任何及所有分区(只有一个分区,/dev/sda1)。在下一部分,我将为该特定硬盘创建所需分区。

网络配置

在启动 Openfiler 安装之前,我已确认在网络存储服务器上安装了两个 NIC 接口(卡)。本屏幕应该已经成功地检测到每个网络设备。

首先,确保将每个网络设备设置为 [Active on boot]。默认情况下,安装程序可能选择不激活 eth1。

第二步,单击 [Edit] 按照以下方法对 eth0 和 eth1 进行编辑操作。您可能要为 eth0 和 eth1 使用不同的 IP 地址,没问题。但是,您必须将 eth1(存储网络)配置为与 linux1 和 linux2 上的 eth1 位于同一子网中:

eth0:

- 取消选中 [Configure using DHCP] 选项

- 选中 [Activate on boot]

- IP 地址:192.168.1.195

- 网络掩码: 255.255.255.0

eth1:

- 取消选中 [Configure using DHCP] 选项

- 选中 [Activate on boot]

- IP 地址:192.168.2.195

- 网络掩码: 255.255.255.0

接着,手动设置您的主机名。我使用的主机名是“openfiler1”。然后提供您的网关和 DNS 服务器,最后关闭该对话框。

时区

下一个屏幕将允许您配置时区信息。为您的位置作出合适的选择。

设置根口令

选择一个根口令,然后单击 [Next] 继续。

关于安装

本屏幕主要是一个确认屏幕。单击 [Next] 开始安装。

恭喜

大功告成。您已经成功地在网络存储服务器上安装了 Openfiler。安装程序将从 CD-ROM 驱动器中弹出 CD。取出 CD,单击 [Reboot] 重新引导系统。

如果在重新引导后一切都已成功,您现在应该看到文本登录屏幕和用于管理 Openfiler 服务器的 URL。

在 Openfiler 服务器上修改 /etc/hosts 文件

虽然并非必要,但我通常会将 /etc/hosts 文件的内容从一个 Oracle RAC 节点复制到新的 Openfiler 服务器。在测试集群网络时,这可以实现方便的名称解析。

10. 使用 Openfiler 配置 iSCSI 卷在网络存储服务器 (openfiler1) 上执行以下配置任务!

可以使用 Openfiler Storage Control Center(一个基于浏览器的工具,通过端口 446 上的 https 连接实现)执行 Openfiler 管理。例如:

https://openfiler1.idevelopment.info:446/从 Openfiler Storage Control Center 主页,以管理员身份登录。Openfiler 的默认管理员登录凭证为:

 

Username: openfiler Password: password

 

管理员看到的第一个页面是 [Status] / [System Information] 屏幕。

要将 Openfiler 用作 iSCSI 存储服务器,我们需要执行六个主要任务:设置 iSCSI 服务、配置网络访问、指定物理存储并对其分区、创建新的卷组、创建所有逻辑卷、最后,为每个逻辑卷创建新的 iSCSI 目标。

服务

要控制服务,我们使用 Openfiler Storage Control Center 并导航到 [Services] / [Manage Services]:



图 6:启用 iSCSI Openfiler 服务

要启用 iSCSI 服务,单击“iSCSI target server”服务名称下面的“Enable”链接。之后,“iSCSI target server”状态应更改为“Enabled”。

ietd 程序将实现 iSCSI Enterprise Target 软件的用户级部分,以便在 Linux 上构建 iSCSI 存储系统。启用 iSCSI 目标之后,我们应该能够通过 SSH 进入 Openfiler 服务器,并看到 iscsi-target 服务正在运行:

[root@openfiler1 ~]# service iscsi-target statusietd (pid 14243) is running...

网络访问配置

下一步是配置 Openfiler 中的网络访问,识别需要通过存储(专用)网络访问 iSCSI 卷的两个 Oracle RAC 节点(linux1 和 linux2)。注意,本部分稍后将会创建 iSCSI 卷。另请注意,本步骤并不实际授予两个 Oracle RAC 节点访问 iSCSI 卷所需的相应权限。授予权限的操作将在本部分稍后通过更新每个新逻辑卷的 ACL 来进行。

在上一部分中,配置网络访问是通过使用 Openfiler Storage Control Center 导航到 [System] / [Network Setup] 来完成的。按照“网络访问配置”部分(在页面底部)讲述的步骤,管理员可以设置允许其访问 Openfiler 设备导出的资源的网络和/或主机。就本文而言,我们希望单独添加两个 Oracle RAC 节点,而不是允许整个 192.168.2.0 网络访问 Openfiler 资源。

输入每个 Oracle RAC 节点时,请注意“Name”域只是一个逻辑名称,仅供参考。根据输入节点的惯例,我仅使用了为该 IP 地址定义的节点名称。接下来,在“Network/Host”域中输入实际节点时,始终使用其 IP 地址,即使其主机名已经在 /etc/hosts 文件或 DNS 中定义。最后,在我们的 Class C 网络中输入实际主机时,应使用子网掩码 255.255.255.255。

记住,您要为集群中的每个 RAC 节点输入专用 网络 (eth1) 的 IP 地址,这一点很重要。

下图显示了添加两个 Oracle RAC 节点后的结果:



图 7:为 Oracle RAC 节点配置 Openfiler 网络访问

物理存储

在本部分中,我们将创建五个 iSCSI 卷,以供集群中的两个 Oracle RAC 节点用作共享存储。这将在连接到 Openfiler 服务器的内置 73GB 15K SCSI 硬盘驱动器上执行多个步骤。

存储设备(如内置 IDE/SATA/SCSI/SAS 磁盘、存储阵列、外置 USB 驱动器、外置 FireWire 驱动器或者任何其他存储设备)可以连接到 Openfiler 服务器,并供客户端使用。如果在 OS 级发现这些设备,就可以使用 Openfiler Storage Control Center 设置和管理所有这些存储设备。

在本例中,我们有一个 73GB 的内置 SCSI 硬盘驱动器用于满足共享存储之需。在 Openfiler 服务器上,该驱动器显示为 /dev/sdb (MAXTOR ATLAS15K2_73SCA)。要看到该驱动器并启动 iSCSI 卷的创建过程,请从 Openfiler Storage Control Center 导航到 [Volumes] / [Block Devices]:



图 8:Openfiler 物理存储 — 块设备管理

对物理磁盘进行分区

我们要执行的第一步是在 /dev/sdb 内置硬盘上创建一个主分区。单击 /dev/sdb 链接,我们会看到“Edit”和“Create”选项,分别用于编辑和创建分区。由于我们将创建一个跨整个磁盘的主分区,因此可以将大多数选项保留为默认设置,唯一的修改是将“Partition Type”由“Extended partition”更改为“Physical volume”。下面是我为了在 /dev/sdb 上创建主分区而指定的值:

模式: 主

分区类型:物理卷

开始柱面:1

结束柱面: 8924

现在,大小将显示 68.36 GB。要接受该设置,单击“Create”按钮。这将在我们的内置硬盘上生成一个新的分区 (/dev/sdb1):



图 9:对物理卷进行分区

卷组管理

下一步是创建卷组。我们将创建一个名为 rac1 的卷组,其中包含新创建的主分区。

从 Openfiler Storage Control Center 中导航到 [Volumes] / [Volume Groups]。我们将看到所有现有的卷组,或者什么也看不到(我们的情况就是这样)。使用 Volume Group Management 屏幕,输入新卷组的名称 (rac1),单击 /dev/sdb1 前面的复选框以选择该分区,最后单击“Add volume group”按钮。之后,我们会看到一个列表,其中将显示我们新创建的名为“rac1”的卷组:



图 10:创建了新卷组

逻辑卷

现在,我们可以在新创建的卷组 (rac1) 中创建五个逻辑卷。

从 Openfiler Storage Control Center 中导航到 [Volumes] / [Add Volume]。我们将看到新创建的卷组 (rac1) 及其块存储统计信息。在该屏幕底部还提供了一个选项,用于在选定的卷组中创建一个新卷 —(在“rac1”中创建一个卷)。使用该屏幕创建以下五个逻辑 (iSCSI) 卷。在创建每个逻辑卷之后,应用程序将转至“Manage Volumes”屏幕。然后,您需要单击后退到“Add Volume”选项卡以创建下一个逻辑卷,直至五个 iSCSI 卷全部创建完毕:

 

iSCSI / 逻辑卷

卷名 卷描述 所需空间 (MB) 文件系统类型

racdb-crs racdb - Oracle Clusterware 2,048 iSCSI

racdb-asm1 racdb - ASM Volume 1 16,984 iSCSI

racdb-asm2 racdb - ASM Volume 2 16,984 iSCSI

racdb-asm3 racdb - ASM Volume 3 16,984 iSCSI

racdb-asm4 racdb - ASM Volume 4 16,984 iSCSI

实际上,我们已经创建了五个 iSCSI 磁盘,现在可以将它们呈现给网络上的 iSCSI 客户端(linux1 和 linux2)。“Manage Volumes”屏幕应如下所示:



图 11:新的 iSCSI 逻辑卷

iSCSI 目标

现在,我们有了五个 iSCSI 逻辑卷。但是,为了使 iSCSI 客户端可以访问这些逻辑卷,首先需要为这五个卷中的每个卷创建一个 iSCSI 目标。每个 iSCSI 逻辑卷将会映射 到一个特定的 iSCSI 目标,并将为两个 Oracle RAC 节点授予对该目标的相应网络访问权限。对于本文,在 iSCSI 逻辑卷和 iSCSI 目标之间将会有一一映射的关系。

创建和配置 iSCSI 目标的过程包括三步:创建一个唯一的目标 IQN(基本上,是新的 iSCSI 目标的通用名称),将上一部分中创建的 iSCSI 逻辑卷之一映射到新创建的 iSCSI 目标,最后,授予两个 Oracle RAC 节点访问该新 iSCSI 目标的权限。请注意,需要对上一部分中创建的五个 iSCSI 逻辑卷中的每个卷都执行一次此过程。

对于本文,下表列出了新的 iSCSI 目标名称(目标 IQN)及其将映射到的 iSCSI 逻辑卷:

iSCSI 目标/逻辑卷映射

目标 IQN iSCSI 卷名 卷描述

iqn.2006-01.com.openfiler:racdb.crs racdb-crs racdb - Oracle Clusterware

iqn.2006-01.com.openfiler:racdb.asm1 racdb-asm1 racdb - ASM Volume 1

iqn.2006-01.com.openfiler:racdb.asm2 racdb-asm2 racdb - ASM Volume 2

iqn.2006-01.com.openfiler:racdb.asm3 racdb-asm3 racdb - ASM Volume 3

iqn.2006-01.com.openfiler:racdb.asm4 racdb-asm4 racdb - ASM Volume 4

现在我们来创建五个新的 iSCSI 目标 — 为每个 iSCSI 逻辑卷创建一个。下面的示例说明通过创建 Oracle 集群件/racdb-crs 目标 (iqn.2006-01.com.openfiler:racdb.crs) 来创建新的 iSCSI 目标时所需执行的三个步骤。这个三步过程需要对上表中列出的五个新 iSCSI 目标中的每一个都重复执行一遍。



创建新目标 IQN

从 Openfiler Storage Control Center 中导航到 [Volumes] / [iSCSI Targets]。确保选择了灰色子选项卡“Target Configuration”。您可在此选项卡页中创建一个新的 iSCSI 目标。会自动生成一个默认值,作为新 iSCSI 目标的名称(常称为“目标 IQN”)。下面是目标 IQN 的一个示例:“iqn.2006-01.com.openfiler:tsn.ae4683b67fd3”:



图 12:创建新 iSCSI 目标:默认目标 IQN

我喜欢用更具含义的字串来替换这个默认目标 IQN 最后一段。对于第一个 iSCSI 目标(Oracle 集群件/racdb-crs),我将这样来修改默认的目标 IQN:将字符串“tsn.ae4683b67fd3”替换为“racdb.crs”,如下面的图 13所示:

 



图 13:创建新 iSCSI 目标:替换默认目标 IQN

对新的目标 IQN 满意之后,单击“Add”按钮。这将会创建一个新的 iSCSI 目标,然后会出现一个页面,您可以在该页面中修改新 iSCSI 目标的一系列设置。对于本文,无需更改新 iSCSI 目标的任何设置。

LUN 映射

创建新 iSCSI 目标之后,下一步是将相应的 iSCSI 逻辑卷映射到该目标。在“Target Configuration”子选项卡下,验证选择了正确的 iSCSI 目标(“选择 iSCSI 目标”部分)。如果不是这样,使用下拉菜单选择正确的 iSCSI 目标,然后单击“Change”按钮。

接下来,单击名为“LUN Mapping”的灰色子选项卡(在“Target Configuration”子选项卡旁)。找到相应的 iSCSI 逻辑卷(本例中为 /dev/rac1/racdb-crs),然后单击“Map”按钮。您无需更改此页面中的任何设置。单击“Map”按钮后,您的屏幕应如图 14 所示:



图 14:创建新 iSCSI 目标:映射 LUN

网络 ACL

需要先授予 iSCSI 客户端相应的权限,它才能访问新创建的 iSCSI 目标。在前面,我们已通过 Openfiler 对两个主机(Oracle RAC 节点)配置网络访问。这两个节点需要通过存储(专用)网络访问新的 iSCSI 目标。现在,我们需要授予这两个 Oracle RAC 节点访问新 iSCSI 目标的权限。

单击名为“Network ACL”的灰色子选项卡(在“LUN Mapping”子选项卡旁)。对当前的 iSCSI 目标,将两个主机的“Access”值由“Deny”更改为“Allow”,然后单击“Update”按钮。



图 15:创建新 iSCSI 目标:更新网络 ACL

返回到创建新的目标 IQN 部分,对其余四个 ISCSI 逻辑卷执行这三个任务,同时替换“iSCSI 目标/逻辑卷映射”表中找到的值。

11. 在 Oracle RAC 节点上配置 iSCSI 卷

在集群中的两个 Oracle RAC 节点上配置 iSCSI 启动器!但是,创建分区应该只在 RAC 集群的一个节点上执行。

iSCSI 客户端可以是提供 iSCSI 支持(驱动程序)的任何系统(Linux、Unix、MS Windows、Apple Mac 等)。在我们的示例中,客户端是两个 Linux 服务器(linux1 和 linux2),它们运行的是 Oracle Enterprise Linux 5.3。

在本部分中,我们将在两个 Oracle RAC 节点上配置 iSCSI 软件启动器。Oracle Enterprise Linux 5.3 包含 Open-iSCSI iSCSI 软件启动器,该软件启动器位于 iscsi-initiator-utils RPM 中。这是早期版本 Oracle Enterprise Linux (4.x) 中的一个更改,它包含作为 Linux-iSCSI 项目的一部分而开发的 Linux iscsi-sfnet 软件驱动程序。所有 iSCSI 管理任务(如发现和登录)将使用 Open-iSCSI 中包含的命令行接口 iscsiadm。

iSCSI 软件启动器将配置为自动登录网络存储服务器 (openfiler1),并发现 上一部分中创建的 iSCSI 卷。之后,我们将说明使用 udev 为发现的每个 iSCSI 目标名称创建永久的本地 SCSI 设备名称(即 /dev/iscsi/asm1)的步骤。您需要拥有一致的本地 SCSI 设备名称及其映射到的 iSCSI 目标,才能知道要用于 OCFS2 的卷(设备)和属于 ASM 的卷。但是,在此之前,我们必须先安装 iSCSI 启动器软件!

安装 iSCSI(启动器)服务

使用 Oracle Enterprise Linux 5.3,默认情况下不会安装 Open-iSCSI iSCSI 软件启动器。该软件包含在 1 号 CD 上的 iscsi-initiator-utils 程序包中。要确定该程序包是否已安装(大多数情况下没有安装),在两个 Oracle RAC 节点上执行以下命令:

# rpm -qa | grep iscsi-initiator-utils如果 iscsi-initiator-utils 程序包未安装,将 1 号 CD 加载到每个 Oracle RAC 节点并执行以下命令:

# mount -r /dev/cdrom /media/cdrom# cd /media/cdrom/Server# rpm -Uvh iscsi-initiator-utils-6.2.0.868-0.18.el5.i386.rpm# cd /# eject配置 iSCSI(启动器)服务

验证 iscsi-initiator-utils 程序包已经安装到两个 Oracle RAC 节点之后,启动 iscsid 服务,并使其在系统引导时自动启动。我们还将配置 iscsi 服务自动启动,使其在系统启动时自动登录 iSCSI 目标。

# service iscsid startTurning off network shutdown. Starting iSCSI daemon: [ OK ][ OK ]# chkconfig iscsid on# chkconfig iscsi on既然 iSCSI 服务已经启动,下面使用 iscsiadm 命令行接口发现网络存储服务器上的所有可用目标。这应该在两个 Oracle RAC 节点上执行,以检验配置是否正常工作:

# iscsiadm -m discovery -t sendtargets -p openfiler1-priv192.168.2.195:3260,1 iqn.2006-01.com.openfiler:racdb.asm1192.168.2.195:3260,1 iqn.2006-01.com.openfiler:racdb.asm2192.168.2.195:3260,1 iqn.2006-01.com.openfiler:racdb.asm3192.168.2.195:3260,1 iqn.2006-01.com.openfiler:racdb.asm4192.168.2.195:3260,1 iqn.2006-01.com.openfiler:racdb.crs手动登录 iSCSI 目标

此时,iSCSI 启动器服务已经启动,每个 Oracle RAC 节点都能够从网络存储服务器中发现可用目标。下一步是手动登录每个可用目标,这可以使用 iscsiadm 命令行接口来完成。这需要在两个 Oracle RAC 节点上运行。注意,我必须指定 IP 地址而非网络存储服务器的主机名 (openfiler1-priv) — 我认为,如果上述发现使用 IP 地址显示目标,则这是必需的。

# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.asm1 -p 192.168.2.195 -l# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.asm2 -p 192.168.2.195 -l# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.asm3 -p 192.168.2.195 -l# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.asm4 -p 192.168.2.195 -l# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.crs -p 192.168.2.195 -l配置自动登录

下一步是确保在计算机引导(或 iSCSI 启动器服务启动/重新启动)时,客户端将自动登录上面列出的每个目标。正如上面描述的手动登录过程,在两个 Oracle RAC 节点上都执行以下命令:

# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.asm1 -p 192.168.2.195 --op update -n node.startup -v automatic# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.asm2 -p 192.168.2.195 --op update -n node.startup -v automatic# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.asm3 -p 192.168.2.195 --op update -n node.startup -v automatic# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.asm4 -p 192.168.2.195 --op update -n node.startup -v automatic# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.crs -p 192.168.2.195 --op update -n node.startup -v automatic创建永久性本地 SCSI 设备名称

在本部分中,我们将说明为每个 iSCSI 目标名称创建永久性本地 SCSI 设备名称的步骤。我们将使用 udev 来完成该任务。您需要拥有一致的本地 SCSI 设备名称及其映射到的 iSCSI 目标,才能知道要用于 OCFS2 的卷(设备)和属于 ASM 的卷。

如果任一个 Oracle RAC 节点引导并且 iSCSI 启动器服务启动,则它将自动登录到以随机方式配置的每个目标,并将这些目标映射到下一个可用的本地 SCSI 设备名称。例如,目标 iqn.2006-01.com.openfiler:racdb.asm1 可能会映射到 /dev/sda。实际上,我可以通过查看 /dev/disk/by-path 目录来确定所有目标的当前映射:

# (cd /dev/disk/by-path; ls -l *openfiler* | awk '{FS=" "; print $9 " " $10 " " $11}')ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm1-lun-0 -> ../../sdaip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm2-lun-0 -> ../../sdbip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm3-lun-0 -> ../../sdcip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm4-lun-0 -> ../../sddip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.crs-lun-0 -> ../../sde使用上述清单的输出,我们可以建立以下当前映射:

iSCSI 目标名称到本地 SCSI 设备名称的当前映射

iSCSI 目标名称 SCSI 设备名称

iqn.2006-01.com.openfiler:racdb.asm1 /dev/sda

iqn.2006-01.com.openfiler:racdb.asm2 /dev/sdb

iqn.2006-01.com.openfiler:racdb.asm3 /dev/sdc

iqn.2006-01.com.openfiler:racdb.asm4 /dev/sdd

iqn.2006-01.com.openfiler:racdb.crs /dev/sde

但是,每次重新引导 Oracle RAC 节点时,该映射都可能有所不同。例如,重新引导之后,可能会决定将 iSCSI 目标 iqn.2006-01.com.openfiler:racdb.asm1 映射到本地 SCSI 设备 /dev/sdd。因此,如果您无法预测重新引导后的 iSCSI 目标映射,依赖于使用本地 SCSI 设备名称是不现实的。

我们需要的是可以引用的、一致的设备名称(即 /dev/iscsi/asm1),该设备名称在重新引导后将始终指向正确的 iSCSI 目标。这就是引入名为 udev 的动态设备管理 工具的原因。udev 提供了一个动态设备目录,使用一组可配置的规则通过符号链接指向实际设备。当 udev 收到设备事件(例如,客户端登录到 iSCSI 目标)时,就会根据 sysfs 中提供的可用设备属性匹配其配置好的规则以便识别设备。匹配规则可以提供其他设备信息或指定设备节点名和多个符号链接名,并指示 udev 运行其他程序(例如,一个 SHELL 脚本)作为设备事件处理过程的一部分。

第一步是创建一个新的规则文件。该文件将命名为 /etc/udev/rules.d/55-openiscsi.rules,并且只包含一行用于接收我们感兴趣事件的名称-值对。它还将定义一个调出 SHELL 脚本 (/etc/udev/scripts/iscsidev.sh),用于处理事件。

在两个 Oracle RAC 节点上创建以下规则文件 /etc/udev/rules.d/55-openiscsi.rules:

..............................................# /etc/udev/rules.d/55-openiscsi.rulesKERNEL=="sd*", BUS=="scsi", PROGRAM="/etc/udev/scripts/iscsidev.sh %b",SYMLINK+="iscsi/%c/part%n"..............................................现在,我们需要创建在接收该事件时将调用的 UNIX SHELL 脚本。我们首先在两个 Oracle RAC 节点上创建一个单独的目录,用于存储 udev 脚本:

# mkdir -p /etc/udev/scripts接下来,在两个 Oracle RAC 节点上创建 UNIX shell 脚本 /etc/udev/scripts/iscsidev.sh:

..............................................#!/bin/sh# FILE: /etc/udev/scripts/iscsidev.shBUS=${1}HOST=${BUS%%:*}[ -e /sys/class/iscsi_host ] || exit 1file="/sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session*/targetname"target_name=$(cat ${file})# This is not an open-scsi driveif [ -z "${target_name}" ]; thenexit 1fiecho "${target_name##*.}"..............................................创建 UNIX SHELL 脚本后,将其更改为可执行文件:

# chmod 755 /etc/udev/scripts/iscsidev.sh既然已经配置了 udev,下面将在两个 Oracle RAC 节点上重新启动 iSCSI 服务:

# service iscsi stopLogging out of session [sid: 1, target: iqn.2006-01.com.openfiler:racdb.asm1, portal: 192.168.2.195,3260]Logging out of session [sid: 2, target: iqn.2006-01.com.openfiler:racdb.asm2, portal: 192.168.2.195,3260]Logging out of session [sid: 3, target: iqn.2006-01.com.openfiler:racdb.asm3, portal: 192.168.2.195,3260]Logging out of session [sid: 4, target: iqn.2006-01.com.openfiler:racdb.asm4, portal: 192.168.2.195,3260]Logging out of session [sid: 5, target: iqn.2006-01.com.openfiler:racdb.crs, portal: 192.168.2.195,3260]Logout of [sid: 1, target: iqn.2006-01.com.openfiler:racdb.asm1, portal: 192.168.2.195,3260]: successfulLogout of [sid: 2, target: iqn.2006-01.com.openfiler:racdb.asm2, portal: 192.168.2.195,3260]: successfulLogout of [sid: 3, target: iqn.2006-01.com.openfiler:racdb.asm3, portal: 192.168.2.195,3260]: successfulLogout of [sid: 4, target: iqn.2006-01.com.openfiler:racdb.asm4, portal: 192.168.2.195,3260]: successfulLogout of [sid: 5, target: iqn.2006-01.com.openfiler:racdb.crs, portal: 192.168.2.195,3260]: successfulStopping iSCSI daemon:# service iscsi startiscsid dead but pid file existsTurning off network shutdown. Starting iSCSI daemon: [ OK ][ OK ]Setting up iSCSI targets: Logging in to [iface: default, target: iqn.2006-01.com.openfiler:racdb.asm1, portal: 192.168.2.195,3260]Logging in to [iface: default, target: iqn.2006-01.com.openfiler:racdb.asm4, portal: 192.168.2.195,3260]Logging in to [iface: default, target: iqn.2006-01.com.openfiler:racdb.crs, portal: 192.168.2.195,3260]Logging in to [iface: default, target: iqn.2006-01.com.openfiler:racdb.asm3, portal: 192.168.2.195,3260]Logging in to [iface: default, target: iqn.2006-01.com.openfiler:racdb.asm2, portal: 192.168.2.195,3260]Login to [iface: default, target: iqn.2006-01.com.openfiler:racdb.asm1, portal: 192.168.2.195,3260]: successfulLogin to [iface: default, target: iqn.2006-01.com.openfiler:racdb.asm4, portal: 192.168.2.195,3260]: successfulLogin to [iface: default, target: iqn.2006-01.com.openfiler:racdb.crs, portal: 192.168.2.195,3260]: successfulLogin to [iface: default, target: iqn.2006-01.com.openfiler:racdb.asm3, portal: 192.168.2.195,3260]: successfulLogin to [iface: default, target: iqn.2006-01.com.openfiler:racdb.asm2, portal: 192.168.2.195,3260]: successful[ OK ]下面,我们来看一下我们的辛勤工作是否得到了回报:

# ls -l /dev/iscsi/*/dev/iscsi/asm1:total 0lrwxrwxrwx 1 root root 9 Jul 29 16:09 part -> ../../sdb/dev/iscsi/asm2:total 0lrwxrwxrwx 1 root root 9 Jul 29 16:09 part -> ../../sdd/dev/iscsi/asm3:total 0lrwxrwxrwx 1 root root 9 Jul 29 16:09 part -> ../../sdc/dev/iscsi/asm4:total 0lrwxrwxrwx 1 root root 9 Jul 29 16:09 part -> ../../sda/dev/iscsi/crs:total 0lrwxrwxrwx 1 root root 9 Jul 29 16:09 part -> ../../sde上面的清单显示,udev 所做的工作正是我们所期待的!现在,我们拥有了一组一致的本地设备名称,可用于引用 iSCSI 目标。例如,我们可以安全地假设设备名称 /dev/iscsi/asm1/part 将始终引用 iSCSI 目标 iqn.2006-01.com.openfiler:racdb.asm1。现在,我们拥有了一致的 iSCSI 目标名称到本地设备名称的映射,如下表所示:

iSCSI 目标名称到本地设备名称的映射

iSCSI 目标名称 本地设备名称

iqn.2006-01.com.openfiler:racdb.asm1 /dev/iscsi/asm1/part

iqn.2006-01.com.openfiler:racdb.asm2 /dev/iscsi/asm2/part

iqn.2006-01.com.openfiler:racdb.asm3 /dev/iscsi/asm3/part

iqn.2006-01.com.openfiler:racdb.asm4 /dev/iscsi/asm4/part

iqn.2006-01.com.openfiler:racdb.crs /dev/iscsi/crs/part

 

在 iSCSI 卷上创建分区

现在,我们需要在每个 iSCSI 卷上创建一个占用整个卷大小的主分区。正如本文前面提到的那样,我将使用 Oracle 的集群文件系统第 2 版 (OCFS2) 存储供 Oracle 集群件软件共享的两个文件。然后,我们将使用自动存储管理 (ASM) 创建四个 ASM 卷;其中,两个用于所有物理数据库文件(数据/索引文件、联机重做日志文件和控制文件),另两个用于闪回恢复区(RMAN 备份和存档重做日志文件)。

下表列出了五个 iSCSI 卷及其支持的文件系统:

Oracle 共享驱动器配置

文件系统类型 iSCSI 目标(短)名称 大小 挂载点 ASM 磁盘组名称 文件类型

OCFS2 crs 2GB /u02 Oracle 集群注册表 (OCR) 文件 — (~250MB)

表决磁盘 — (~20MB)

ASM asm1 17.8GB ORCL:VOL1 +RACDB_DATA1 Oracle 数据库文件

ASM asm2 17.8GB ORCL:VOL2 +RACDB_DATA1 Oracle 数据库文件

ASM asm3 17.8GB ORCL:VOL3 +FLASH_RECOVERY_AREA Oracle 闪回恢复区

ASM asm4 17.8GB ORCL:VOL4 +FLASH_RECOVERY_AREA Oracle 闪回恢复区

合计 73.2GB

如上表所示,我们需要在每个 iSCSI 卷(共 5 个)上创建一个 Linux 主分区。fdisk 命令在 Linux 中用于创建(和删除)分区。对于每个 iSCSI 卷(共 5 个),您都可以在创建主分区时使用默认值,因为默认操作是使用整个磁盘。您可以安全地忽略指出设备未包含有效 DOS 分区(或 Sun、SGI 或 OSF 磁盘标签)的任何警告。

在本例中,我将在 linux1 上运行 fdisk 命令,以使用 udev 在上一部分中创建的本地设备名称在每个 iSCSI 目标上创建一个主分区:

/dev/iscsi/asm1/part /dev/iscsi/asm2/part /dev/iscsi/asm3/part /dev/iscsi/asm4/part /dev/iscsi/crs/part

 

注:要在每个 iSCSI 卷上创建单个分区,只能从 Oracle RAC 集群中的一个节点上运行!(即 linux1)

# ---------------------------------------# fdisk /dev/iscsi/asm1/partCommand (m for help): nCommand actione extendedp primary partition (1-4)pPartition number (1-4): 1First cylinder (1-16992, default 1): 1Last cylinder or +size or +sizeM or +sizeK (1-16992, default 16992): 16992Command (m for help): pDisk /dev/iscsi/asm1/part: 17.8 GB, 17817403392 bytes64 heads, 32 sectors/track, 16992 cylindersUnits = cylinders of 2048 * 512 = 1048576 bytesDevice Boot Start End Blocks Id System/dev/iscsi/asm1/part1 1 16992 17399792 83 LinuxCommand (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.# ---------------------------------------# fdisk /dev/iscsi/asm2/partCommand (m for help): nCommand actione extendedp primary partition (1-4)pPartition number (1-4): 1First cylinder (1-16992, default 1): 1Last cylinder or +size or +sizeM or +sizeK (1-16992, default 16992): 16992Command (m for help): pDisk /dev/iscsi/asm2/part: 17.8 GB, 17817403392 bytes64 heads, 32 sectors/track, 16992 cylindersUnits = cylinders of 2048 * 512 = 1048576 bytesDevice Boot Start End Blocks Id System/dev/iscsi/asm2/part1 1 16992 17399792 83 LinuxCommand (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.# ---------------------------------------# fdisk /dev/iscsi/asm3/partCommand (m for help): nCommand actione extendedp primary partition (1-4)pPartition number (1-4): 1First cylinder (1-16992, default 1): 1Last cylinder or +size or +sizeM or +sizeK (1-16992, default 16992): 16992Command (m for help): pDisk /dev/iscsi/asm3/part: 17.8 GB, 17817403392 bytes64 heads, 32 sectors/track, 16992 cylindersUnits = cylinders of 2048 * 512 = 1048576 bytesDevice Boot Start End Blocks Id System/dev/iscsi/asm3/part1 1 16992 17399792 83 LinuxCommand (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.# ---------------------------------------# fdisk /dev/iscsi/asm4/partCommand (m for help): nCommand actione extendedp primary partition (1-4)pPartition number (1-4): 1First cylinder (1-16960, default 1): 1Last cylinder or +size or +sizeM or +sizeK (1-16960, default 16960): 16960Command (m for help): pDisk /dev/iscsi/asm4/part: 17.7 GB, 17783848960 bytes64 heads, 32 sectors/track, 16960 cylindersUnits = cylinders of 2048 * 512 = 1048576 bytesDevice Boot Start End Blocks Id System/dev/iscsi/asm4/part1 1 16960 17367024 83 LinuxCommand (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.# ---------------------------------------# fdisk /dev/iscsi/crs/partCommand (m for help): nCommand actione extendedp primary partition (1-4)pPartition number (1-4): 1First cylinder (1-1009, default 1): 1Last cylinder or +size or +sizeM or +sizeK (1-1009, default 1009): 1009Command (m for help): pDisk /dev/iscsi/crs/part: 2147 MB, 2147483648 bytes67 heads, 62 sectors/track, 1009 cylindersUnits = cylinders of 4154 * 512 = 2126848 bytesDevice Boot Start End Blocks Id System/dev/iscsi/crs/part1 1 1009 2095662 83 LinuxCommand (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.验证新分区

在 linux1 上创建所有必要分区之后,现在应使用以下命令以“root”用户帐户从 Oracle RAC 集群的所有其余节点 (linux2) 将分区更改通知给内核。注意,Openfiler 发现的 iSCSI 目标名称和本地 SCSI 设备名称的映射在两个 Oracle RAC 节点上将有所不同。不用担心,这不会导致任何问题,因为我们不使用本地 SCSI 设备名称,而使用 udev 在上一部分中创建的本地设备名称。

从 linux2 运行以下命令:

# partprobe# fdisk -lDisk /dev/hda: 40.0 GB, 40000000000 bytes255 heads, 63 sectors/track, 4863 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesDevice Boot Start End Blocks Id System/dev/hda1 * 1 13 104391 83 Linux/dev/hda2 14 4863 38957625 8e Linux LVMDisk /dev/sde: 2147 MB, 2147483648 bytes67 heads, 62 sectors/track, 1009 cylindersUnits = cylinders of 4154 * 512 = 2126848 bytesDevice Boot Start End Blocks Id System/dev/sde1 1 1009 2095662 83 LinuxDisk /dev/sdb: 17.7 GB, 17783848960 bytes64 heads, 32 sectors/track, 16960 cylindersUnits = cylinders of 2048 * 512 = 1048576 bytesDevice Boot Start End Blocks Id System/dev/sdb1 1 16960 17367024 83 LinuxDisk /dev/sda: 17.8 GB, 17817403392 bytes64 heads, 32 sectors/track, 16992 cylindersUnits = cylinders of 2048 * 512 = 1048576 bytesDevice Boot Start End Blocks Id System/dev/sda1 1 16992 17399792 83 LinuxDisk /dev/sdd: 17.8 GB, 17817403392 bytes64 heads, 32 sectors/track, 16992 cylindersUnits = cylinders of 2048 * 512 = 1048576 bytesDevice Boot Start End Blocks Id System/dev/sdd1 1 16992 17399792 83 LinuxDisk /dev/sdc: 17.8 GB, 17817403392 bytes64 heads, 32 sectors/track, 16992 cylindersUnits = cylinders of 2048 * 512 = 1048576 bytesDevice Boot Start End Blocks Id System/dev/sdc1 1 16992 17399792 83 Linux最后,您应该在两个 Oracle RAC 节点上运行以下命令,以验证 udev 为每个新分区创建了新的符号链接:

# (cd /dev/disk/by-path; ls -l *openfiler* | awk '{FS=" "; print $9 " " $10 " " $11}')ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm1-lun-0 -> ../../sdbip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm1-lun-0-part1 -> ../../sdb1ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm2-lun-0 -> ../../sddip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm2-lun-0-part1 -> ../../sdd1ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm3-lun-0 -> ../../sdcip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm3-lun-0-part1 -> ../../sdc1ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm4-lun-0 -> ../../sdaip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm4-lun-0-part1 -> ../../sda1ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.crs-lun-0 -> ../../sdeip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.crs-lun-0-part1 -> ../../sde1上面的清单显示,udev 确实为每个新分区创建了新的设备名称。在本指南后面部分,当我们为 OCFS2 和 ASMlib 配置卷时,将使用这些新的设备名称。

/dev/iscsi/asm1/part1 /dev/iscsi/asm2/part1 /dev/iscsi/asm3/part1 /dev/iscsi/asm4/part1 /dev/iscsi/crs/part1

四 : 基于iSCSI与Openfiler构建自己的Oracle RAC(一)

    

下载



    

    Oracle 数据库 10g





    

标签



    

  linux, rac, clustering, 全部





在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 集群

作者:Jeffrey Hunter

了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 10g 第 2 版开发集群。

本指南中的信息未经 Oracle 验证,且不受 Oracle 支持,您在使用时只能风险自负;本指南仅供教学使用。

2009 年 8 月更新

目录

简介 Oracle RAC 10g 概述 共享存储概述 iSCSI 技术 硬件及成本 安装 Linux 操作系统 为 Oracle RAC 安装必需的 Linux 程序包 网络配置 安装 Openfiler 使用 Openfiler 配置 iSCSI 卷 在 Oracle RAC 节点上配置 iSCSI 卷 创建“oracle”用户和目录 为 Oracle 配置 Linux 服务器 配置 hangcheck-timer 内核模块 使用 SSH 为远程访问配置 RAC 节点 适用于这两个 Oracle RAC 节点的所有启动命令 安装和配置 Oracle 集群文件系统 (OCFS2) 安装和配置自动存储管理 (ASMLib 2.0) 下载 Oracle RAC 10g 软件 Oracle 数据库 10g 第 2 版的安装前任务 安装 Oracle 10g 集群件软件 安装 Oracle 数据库 10g 软件 安装 Oracle 数据库 10g 随附 CD 软件 创建 TNS 监听器进程 创建 Oracle 集群数据库 安装后任务 —(可选) 验证 TNS 联网文件 创建/更改表空间 验证 RAC 集群与数据库配置 启动/停止集群 透明的应用程序故障切换 — (TAF) 疑难解答 结论 致谢

本指南相关下载:

  Oracle Enterprise Linux 第 5 版 Update 3 —(适用于 x86 和 x86_64)

  Oracle Database 10g 企业版第 2 版、集群件、随附 CD — (10.2.0.1.0) —(适用于 x86 和 x86_64)

  Openfiler 2.3 Respin (21-01-09) —(openfiler-2.3-x86-disc1.iso 或 openfiler-2.3-x86_64-disc1.iso)

  ASMLib 2.0 库 RHEL5 — (2.0.4-1) —(oracleasmlib-2.0.4-1.el5.i386.rpm 或 oracleasmlib-2.0.4-1.el5.x86_64.rpm)

  支持文件

 

单击此处查看该指南的 Oracle RAC 11g 第 1 版的版本

1. 简介

熟悉 Oracle 真正应用集群 (RAC) 10g 技术的最有效方法之一是访问一个实际的 Oracle RAC 10g 集群。没有什么方法比直接体验它们能够更好地理解其优势了,包括容错、安全性、负载平衡和可伸缩性。

遗憾的是,对于很多商家而言,典型的生产级 RAC 配置所需的硬件投入使它们无法实现这一目标。一个小型的两节点集群可能需要 10,000 美元到 20,000 美元以上。该价格还不包括生产级 RAC 环境的核心(通常是一个存储区域网),其起价为 10,000 美元。

对于那些没有大笔现金但希望熟悉 Oracle RAC 10g 的人而言,本指南提供了一种低成本的替代方法来配置 Oracle RAC 10g 第 2 版系统,它使用现成的商用组件和可下载的软件,估计成本在 2,200 美元到 2,700 美元之间。该系统包括一个双节点集群(两个单处理器 i386 节点),这两个节点均运行适用于 x86 的 Oracle Enterprise Linux (OEL) 第 5 版 Update 3、适用于 Linux x86 的 Oracle10g 第 2 版、OCFS2 和 ASMLib 2.0。Oracle RAC 的所有共享磁盘存储将基于 iSCSI,iSCSI 使用在第三个节点上运行的 Openfiler 2.3 版 x86_64(在本文中称为网络存储服务器)。

尽管本文应与 Red Hat Enterprise Linux 一同使用,但 Oracle Enterprise Linux(免费提供)也可以满足需要(即使不能更为稳定),它包括 OCFS2 和 ASMLib 软件包(不包括 ASMLib 用户空间库,这个需要单独下载)。

由 rPath Linux 驱动的 Openfiler 是一个基于浏览器的免费网络存储管理实用程序,在单一框架中提供基于文件的网络连接存储 (NAS) 和基于块的存储区域网 (SAN)。整个软件包与开放源代码应用程序(例如 Apache、Samba、LVM2、ext3、Linux NFS 和 iSCSI Enterprise Target)连接。Openfiler 将这些随处可见的技术组合到一个易于使用的小型管理解决方案中,该解决方案通过一个基于 Web 且功能强大的管理界面实现。

Openfiler 支持 CIFS、NFS、HTTP/DAV 和 FTP,但是,我们仅使用它的 iSCSI 功能为 Oracle RAC 10g 需要的共享存储组件实现低成本的 SAN。操作系统和 Openfiler 应用程序将安装于同一个内置 SATA 磁盘上。第二个内置 73GB 15K SCSI 硬盘将被配置为一个“卷组”,该卷组用于所有共享磁盘存储之需。Openfiler 服务器将配置为使用该卷组进行基于 iSCSI 的存储,并且将在 Oracle RAC 10g 配置中用于存储 Oracle 集群件所需的共享文件以及所有 Oracle ASM 卷。

注:本文仅供教学使用,因此设置很简单,仅用于演示想法和概念。例如,本文仅在一个物理磁盘上设置了磁盘镜像,而实际上,应该在多个物理驱动器上设置磁盘镜像。另请注意,尽管本文提供了成功安装完整的 Oracle RAC 10g 系统的详细说明,但它绝不能替代 Oracle 官方文档。除本文以外,用户还应该参考以下 Oracle 文档,以便全面了解 Oracle RAC 10g 的其他配置选项、安装和管理。Oracle 的官方文档网站是 docs.oracle.com。

Oracle 集群件和 Oracle 真正应用集群安装指南 — 针对 Linux 的 10g 第 2 版 (10.2) Oracle 集群件和 Oracle 真正应用集群管理和部署指南 — 10g 第 2 版 (10.2) 两日速成和真正应用集群指南 — 10g 第 2 版 (10.2)

以前的 Oracle9i 和 Oracle 10g 第 1 版指南使用原始分区在共享的存储设备上存储文件,但此处我们将利用 Oracle 集群文件系统第 2 版 (OCFS2) 和 Oracle 自动存储管理 (ASM) 特性。两个 Oracle RAC 节点配置如下:

 

Oracle 数据库文件

RAC 节点名 实例名 数据库名称 $ORACLE_BASE 用于存储 DB 文件的文件系统/卷管理器

linux1 racdb1 racdb /u01/app/oracle ASM

linux2 racdb2 racdb /u01/app/oracle ASM

Oracle 集群件共享文件

文件类型 文件名 iSCSI 卷名 挂载点 文件系统

Oracle 集群注册表 /u02/oradata/racdb/OCRFile

/u02/oradata/racdb/OCRFile_mirror crs /u02 OCFS2

CRS 表决磁盘 /u02/oradata/racdb/CSSFile

/u02/oradata/racdb/CSSFile_mirror1

/u02/oradata/racdb/CSSFile_mirror2 crs /u02 OCFS2

注意,在 Oracle 数据库 10g 第 2 版 (10.2) 中,集群就绪服务(即 CRS)现在称作 Oracle 集群件。

Oracle 集群件软件将安装到构成该 RAC 集群的两个节点的 /u01/app/crs 目录中。自 Oracle 数据库 10g 第 2 版 (10.2) 起,不要将 Oracle 集群件安装到特定于版本的单独的 Oracle 集群件主目录(例如 /u01/app/oracle/product/10.2.0/...)中,并且该目录绝不能是 ORACLE_BASE 目录(例如 /u01/app/oracle)的子目录。这是对最佳灵活体系结构 (OFA) 规则所作的更改。注意,Oracle 提供的 Oracle 集群件和 Oracle 真正应用集群安装文档中表明 Oracle 集群件目录可以是 ORACLE_BASE 目录的子目录,这是错误的。例如,在第 2 章“安装前”的“Oracle 集群件主目录”部分中,该指南错误地将路径 /u01/app/oracle/product/crs 列为可能的 Oracle 集群件主目录(和 CRS 主目录)路径。这是错误的。默认的 ORACLE_BASE 路径是 /u01/app/oracle,Oracle 集群件主目录决不能是 ORACLE_BASE 目录的子目录。该问题已记录为 Oracle 文档错误“5843155”—(B14203-08 的 CRS_HOME 配置冲突)并在 Oracle 11g 中得到了修复。

尽管 Oracle 集群件软件将安装到构成 RAC 集群的两个节点上的 /u01/app/crs 中,但集群件软件要求与集群中的两个节点共享它的两个文件:“Oracle 集群注册表 (OCR)”文件和“表决磁盘”文件。这两个文件将安装到使用 Oracle 集群文件系统第 2 版 (OCFS2) 的共享存储设备中。还可以使用裸设备存储这些文件,但不能使用 ASM 存储这两个共享的集群件文件。

Oracle 10g 第 2 版数据库软件将安装到构成该 RAC 集群的两个节点的单独 Oracle 主目录中,该目录名为 /u01/app/oracle/product/10.2.0/db_1。所有 Oracle 物理数据库文件(数据、联机重做日志、控制文件、存档重做日志)将安装到由自动存储管理 (ASM) 管理的共享卷上。(用户可以将 Oracle 数据库文件轻松地存储到 OCFS2。而使用 ASM 使本文可以更有趣!)

注:本文仅作为绝对不可替代的文档。此处唯一的例外是供应商硬件的选择(即:计算机、网络设备和内置/外置硬盘驱动器)。确保您从供应商处购买的硬件在 Oracle Enterprise Linux(第 5 版 Update 3)上受支持。鉴于 Dell 硬件上乘的质量以及与 Linux 极佳的兼容性,我倾向于使用 Dell 硬件。对于这种性质的测试系统,我强烈建议从 Stallard Technologies, Inc. 等声誉好的公司购买二手 Dell 硬件。Stallard Technologies 在提供二手硬件的最佳价值方面一直做得很好,并承诺提供一流的客户服务。我之所以推荐该公司是基于我个人对该组织的良好体验。要了解有关 Stallard Technologies 的更多信息,请访问其网站或联系 John Brauer。

如果您要寻找一个使用 iSCSI 的带 OEL 的 Oracle RAC 11g 第 1 版示例,请单击此处。

如果您要寻找一个使用 FireWire 的带 RHEL 4 的 Oracle RAC 10g 第 2 版示例,请单击此处。

2. Oracle RAC 10g 概述

在介绍构建 RAC 集群的详细信息之前,首先阐明集群的定义将很有帮助。集群是一组两个或多个互连的计算机或服务器,对于最终用户和应用程序来说,它们就好像是一台服务器,通常共享同一组物理磁盘。集群的主要优势在于提供了一个具有高可用性的框架,在该框架中,一个节点(例如,数据库服务器)的故障不会影响整个应用程序。如果其中一个服务器出现故障,则其他运行良好的(一个或多个)服务器可以接管故障服务器的负载,并且应用程序继续正常运行,就好像什么都没有发生。

实际上,集群计算机的概念在几十年前就出现了。第一个成功的集群产品由 DataPoint 在 1977 年开发完成,该产品名为 ARCnet。ARCnet 产品在实验室的学术环境中获得了很大成功,但尚未真正投放到商业市场。直到 19 世纪 80 年代,Digital Equipment Corporation (DEC) 才发布了针对 VAX/VMS 操作系统的 VAX 集群产品。

随着针对 Digital VAX 集群产品的 Oracle 6 发布,Oracle Corporation 成为在数据库级别支持集群的第一个商业数据库。但是,不久之后,Oracle 意识到还需要一个更高效、可伸缩性更强的分布式锁管理器 (DLM),因为 VAX/VMS 集群产品中的锁管理器不太适合数据库应用程序。Oracle 决定为 VAX/VMS 集群产品设计并编写自己的 DLM,以提供数据库所需的细粒度块级锁定。Oracle 自己的 DLM 包含在 Oracle 6.2 中,这促使产生了 Oracle Parallel Server (OPS) — 运行并行服务器的第一个数据库。

在 Oracle 7 中,OPS 得到了扩展,它不仅支持 VAX/VMS 集群产品,还支持大多数 UNIX 形式。该框架不仅要求供应商提供的集群件运行良好,还要适用于复杂的环境,以设置并管理所涉及的多个给定层。在 Oracle 8 中,Oracle 引入了一个集成到 Oracle 内核中的通用锁管理器。在更高版本的 Oracle 中,这称为集成分布式锁管理器 (IDLM),并依赖于称为操作系统依赖 (OSD) 层的附加层。这个新模型为 Oracle 铺平了道路,使其不仅拥有自己的 DLM,还可以在未来版本中创建自己的集群件产品。

随 Oracle9i 一同推出的 Oracle 真正应用集群 (RAC) 是 Oracle Parallel Server 的后续版本。由于使用的是同一个 IDLM,Oracle 9i 仍然依赖于外部集群件,但它是包含自己的集群件产品(称为集群就绪服务 (CRS))的第一个版本。在 Oracle 9i 中,CRS 只能用于 Windows 和 Linux。到了 Oracle 10g,Oracle 的集群件产品可用于所有操作系统。随着 Oracle 数据库 10g 第 2 版 (10.2) 的发布,集群就绪服务被重命名为 Oracle 集群件。如果使用 Oracle 10g 或更高版本,则 Oracle 集群件是大多数运行 Oracle RAC 的平台所需的唯一集群件(不包括 Tru 集群,在这种情况下,您需要供应商集群件)。您也可以使用其他供应商提供的集群件,前提是该集群件需要经过 Oracle RAC 的认证。本指南使用 Oracle 集群件 10g。

与 OPS 一样,Oracle RAC 允许多个实例同时访问同一个数据库(存储)。通过允许系统进行扩展,RAC 提供了容错、负载平衡和性能优势。同时,由于所有实例都访问同一个数据库,因此一个节点出现故障不会导致无法访问数据库。

Oracle RAC 的核心部分是共享磁盘子系统。集群中的每个实例必须能够访问集群中所有其他实例的所有数据、重做日志文件、控制文件和参数文件。为了使所有实例都能够访问数据库,数据磁盘必须全局可用。每个实例都有自己的、可在本地读写的重做日志文件和 UNDO 表空间。集群中的其他实例必须能够访问这些文件(只读),以便在系统出现故障时恢复该实例。一个实例的重做日志文件只能由该实例写入,并且只能在系统故障期间由其他实例读取。另一方面,UNDO 可以在正常数据库操作(例如,CR 构建)期间随时读取。

Oracle RAC 与 OPS 之间的最大区别在于增加了缓存合并。使用 OPS 时,从一个实例到另一个实例的数据请求需要首先将数据写到磁盘,然后请求实例才能读取该数据(获得必需的锁之后)。而使用缓存合并,数据沿着使用复杂锁定算法的高速互连链路传递。

并非所有数据库集群解决方案都使用共享存储。某些供应商使用一种称为联合集群 的方法,在这种方法中,数据分布在多台计算机中,而不是由所有计算机共享。但是,对于 Oracle RAC,多个实例使用相同的磁盘集合来存储数据。Oracle 的集群方法利用集群中的所有节点的整体处理能力,同时可提供故障切换安全。

Dell、IBM 和 HP 等供应商提供了预先配置的面向生产环境的 Oracle RAC 解决方案。而本文将集中讨论如何使用 Linux 服务器和低成本的共享磁盘解决方案 iSCSI 来整合您自己的 Oracle RAC 10g 环境以进行开发和测试。

有关 Oracle RAC 的更多背景知识,请访问 OTN 上的 Oracle RAC 产品中心。

3. 共享存储概述

现在,光纤通道是最流行的共享存储解决方案之一。前面曾提到过,光纤通道是一种高速串行传输接口,用于在点到点 (FC-P2P)、仲裁环路 (FC-AL) 或交换式拓扑结构 (FC-SW) 中连接系统与存储设备。光纤通道支持的协议包括 SCSI 和 IP。光纤通道配置最多可以支持 127 个节点,每个方向上最高可以实现 2.12 GB 的吞吐量,预期可达到 4.25 GB。

但是,光纤通道非常昂贵。单是光纤通道交换机的起价就可能需要约 1,000 美元。这还不包括光纤通道存储阵列和高端驱动器,一个 36GB 驱动器的价格可高达约 300 美元。典型的光纤通道安装包括用于服务器的光纤通道卡。基本安装费用大约为 10,000 美元,还不包括构成集群的服务器的成本。

光纤通道的一种较为便宜的替代方法是 SCSI。SCSI 技术提供了可接受的共享存储性能。对于那些习惯了基于 GPL 的 Linux 价格的管理员和开发人员来说,即使是 SCSI(一个双节点集群的价格在 2,000 美元到 5,000 美元左右)也可能超出预算。

另一种流行的解决方案是基于 NAS 的 Sun NFS(网络文件系统)。只有在您使用网络设备或类似的设备时,它才可以用于共享存储。具体来说就是,您需要拥有能够保证在 NFS 上进行直接 I/O、将 TCP 作为传输协议并且读/写块大小为 32K 的服务器。参见 Oracle Metalink 上的 Certify 页面,以了解可用于 Oracle RAC 的受支持的网络连接存储 (NAS) 设备。其中一个主要缺陷限制了使用 NFS 和 NAS 进行数据库存储的优势,即,性能降低和复杂的配置要求。标准的 NFS 客户端软件(使用操作系统提供的 NFS 驱动程序的客户端系统)没有针对 Oracle 数据库文件 I/O 访问模式进行优化。随着 Oracle 11g 的引入,一个称为 Direct NFS Client 的新特性将 NFS 客户端功能直接集成到 Oracle 软件中。通过该集成,Oracle 可以优化 Oracle 软件与 NFS 服务器之间的 I/O 路径,从而显著提高性能。Direct NFS Client 可以为数据库负载简化(在许多情况下可以自动化)NFS 客户端配置的性能优化。要了解有关 Direct NFS Client 的更多信息,请参阅标题为“Oracle 数据库 11g Direct NFS Client”的 Oracle 白皮书。

本文将使用的共享存储基于使用网络存储服务器(随 Openfiler 安装)的 iSCSI 技术。该解决方案提供了一个低成本的光纤通道的替代方案,用于测试和教学目的。考虑到该方案使用低端硬件,不建议在生产环境中使用该方案。

4. iSCSI 技术

多年以来,光纤通道存储区域网 (FC SAN) 是唯一用于构建基于网络的存储解决方案的技术。基于以前的一组 ANSI 协议(称为光纤分布式数据接口 (FDDI)),开发光纤通道的目的是在存储网络上移动 SCSI 命令。

FC SAN 的优势包括提高了性能、磁盘利用率、可用性以及可扩展性等,但最重要的是支持服务器集群!但是,FC SAN 现在仍受三个主要缺点的限制。首先是价格。尽管构建 FC SAN 的成本在最近几年有所下降,但进入成本对于 IT 预算有限的小公司来说仍然是高的惊人。第二个缺点是硬件组件不兼容。采用 FC SAN 之后,许多产品制造商对光纤通道规范的解释各不相同,从而导致许多互连问题。如果从公共制造商购买光纤通道组件,这通常不是一个问题。第三个缺点是光纤通道网络不是以太网!它需要一种单独的网络技术,并要求数据中心人员具备另外一组技能。

随着千兆位以太网的普及以及对降低成本的需要,基于 iSCSI 的存储系统逐渐成为光纤通道的有力竞争对手。现在,iSCSI SAN 仍然是 FC SAN 的最大竞争者。

2003 年 2 月 11 日,经过 Internet 工程任务组 (IETF) 的批准,Internet 小型计算机系统接口(一般称为 iSCSI)成为一个基于 Internet 协议 (IP) 的存储网络标准,用于建立和管理基于 IP 的存储设备、主机和客户端之间的连接。iSCSI 是 SCSI-3 规范框架中定义的数据传输协议,它与光纤通道的类似之处在于其也负责在存储网络上运送块级数据。块级通信意味着数据以“块”的形式在主机和客户端之间传输。数据库服务器依赖这种类型的通信(而不是大多数 NAS 系统使用的文件级通信)来工作。与 FC SAN 一样,iSCSI SAN 是一个专用于存储的单独物理网络,但其组件与典型 IP 网络 (LAN) 中的组件基本相同。

尽管 iSCSI 拥有光明的前景,但早期的批评很快指出了其与性能有关的内在不足。iSCSI 的优势是能够利用大家熟悉的 IP 网络作为传输机制。但是,TCP/IP 协议非常复杂并且占用 CPU 资源过多。而使用 iSCSI,大部分对数据进行的处理(TCP 和 iSCSI)都由软件来执行,比完全通过硬件来处理的光纤通道慢得多。将每个 SCSI 命令映射到等价 iSCSI 事务所带来的开销过大。对许多公司来说,解决方案是取消 iSCSI 软件启动器,投资能够从服务器 CPU 中卸载 TCP/IP 和 iSCSI 处理的专用卡。这些专用卡有时称为 iSCSI 主机总线适配器 (HBA) 或 TCP 卸载引擎 (TOE) 卡。还要考虑到目前 10 GB 以太网是主流!

与其他新技术一样,iSCSI 具有一组自己的缩略语和术语。对于本文来说,用户只需要了解 iSCSI 启动器与 iSCSI 目标之间的区别即可。

iSCSI 启动器

从本质上说,iSCSI 启动器是一个连接并启动服务器提供的某一服务的请求(在本例中是 iSCSI 目标)的客户端设备。iSCSI 启动器软件需要安装在每个 Oracle RAC 节点(linux1 和 linux2)上。

iSCSI 启动器可以使用软件实现,也可以使用硬件实现。软件 iSCSI 启动器可用于大部分主要操作系统平台。对于本文,我们将使用 iscsi-initiator-utils RPM 中提供的免费 Linux Open-iSCSI 软件驱动程序。iSCSI 软件启动器通常与标准网络接口卡 (NIC)(大多数情况下是千兆位以太网卡)配合使用。硬件启动器是一个 iSCSI HBA(或 TCP 卸载引擎 (TOE) 卡),它在本质上只是一个专用以太网卡,其上的 SCSI ASIC 可以从系统 CPU 内卸载所有工作(TCP 和 SCSI 命令)。iSCSI HBA 可以从许多供应商处购买,包括 Adaptec、Alacritech、Intel 和 QLogic。

iSCSI 目标

iSCSI 目标是 iSCSI 网络的“服务器”组件。它通常是一个存储设备,包含您所需的信息并回应来自启动器(一个或多个)的请求。对于本文,节点 openfiler1 将是 iSCSI 目标。因此,根据有关 iSCSI 的所有这些讨论,是否意味着光纤通道很快就会消失?可能没有。多年以来,光纤通道通过其极快的速度、灵活性和强健的可靠性,为自己的能力提供了有力的证据。对高性能存储、大型复杂连接以及关键任务可靠性有严格要求的客户将毫不犹豫地继续选择光纤通道。

在结束本部分之前,我认为应该提供一个列表,以对各种类型的磁盘接口和网络技术的速度进行一番比较。对于每种接口,我提供了每秒千位 (kb)、千字节 (KB)、兆位 (Mb)、兆字节 (MB)、千兆位 (Gb) 以及千兆字节 (GB) 的最大传输速率,较常用的以灰色突出显示。

 

磁盘接口 / 网络 / 总线 速度

Kb KB Mb MB Gb GB

串行 115 14.375 0.115 0.014

并行(标准) 920 115 0.92 0.115

10Base-T 以太网 10 1.25

IEEE 802.11b 无线 Wi-Fi(2.4 GHz 频带) 11 1.375

USB 1.1 12 1.5

并行 (ECP/EPP) 24 3

SCSI-1 40 5

IEEE 802.11g 无线 WLAN(2.4 GHz 频带) 54 6.75

SCSI-2(快速 SCSI/快速窄带 SCSI) 80 10

100Base-T 以太网(高速以太网) 100 12.5

ATA/100(并行) 100 12.5

IDE 133.6 16.7

快速宽带 SCSI(宽带 SCSI) 160 20

Ultra SCSI(SCSI-3 / Fast-20 / Ultra 窄带) 160 20

Ultra IDE 264 33

宽带 Ultra SCSI(快速宽带 20) 320 40

Ultra2 SCSI 320 40

FireWire 400 — (IEEE1394a) 400 50

USB 2.0 480 60

宽带 Ultra2 SCSI 640 80

Ultra3 SCSI 640 80

FireWire 800 — (IEEE1394b) 800 100

千兆位以太网 1000 125 1

PCI —(33 MHz / 32 位) 1064 133 1.064

串行 ATA I — (SATA I) 1200 150 1.2

宽带 Ultra3 SCSI 1280 160 1.28

Ultra160 SCSI 1280 160 1.28

PCI —(33 MHz / 64 位) 2128 266 2.128

PCI —(66 MHz / 32 位) 2128 266 2.128

AGP 1x —(66 MHz / 32 位) 2128 266 2.128

串行 ATA II — (SATA II) 2400 300 2.4

Ultra320 SCSI 2560 320 2.56

FC-AL 光纤通道 3200 400 3.2

PCI-Express x1 —(双向) 4000 500 4

PCI —(66 MHz / 64 位) 4256 532 4.256

AGP 2x —(133 MHz / 32 位) 4264 533 4.264

串行 ATA III — (SATA III) 4800 600 4.8

PCI-X —(100 MHz / 64 位) 6400 800 6.4

PCI-X —(133 MHz / 64 位) 1064 8.512 1

AGP 4x —(266 MHz / 32 位) 1066 8.528 1

10G 以太网 — (IEEE 802.3ae) 1250 10 1.25

PCI-Express x4 —(双向) 2000 16 2

AGP 8x —(533 MHz / 32 位) 2133 17.064 2.1

PCI-Express x8 —(双向) 4000 32 4

PCI-Express x16 —(双向) 8000 64 8

5. 硬件及成本用于构建示例 Oracle RAC 10g 环境的硬件包括三个 Linux 服务器(两个 Oracle RAC 节点和一个网络存储服务器),以及可以在许多本地计算机商店或互联网上(即 Stallard Technologies, Inc.)购买到的组件。

Oracle RAC 节点 1 — (linux1)

Dimension 2400 系列

Intel(R) Pentium(R) 4 处理器 (2.80GHz)

2GB DDR SDRAM (333MHz)

40GB 7200 RPM 内置硬盘

集成的 Intel 3D AGP 图形卡

集成的 10/100 以太网卡 — (Broadcom BCM4401)

CDROM(48X 倍速)

3.5 英寸软盘驱动器

无键盘、显示器或鼠标 —(连接到 KVM 切换设备)

600 美元

1 — 以太网 LAN 卡

 

用于 linux2 与 Openfiler 网络存储的 RAC 互连。

 

Oracle RAC 的每个 Linux 服务器应该包含两个 NIC 适配器。Dell Dimension 包含一个将用于连接公共网络的集成的 10/100 以太网适配器。第二个 NIC 适配器将用于专用网络(RAC 互连和 Openfiler 网络存储)。选择与要用于专用网络的网络交换机的最大数据传输速度兼容且合适的 NIC 适配器。对于本文,我在专用网络中使用了千兆位以太网交换机(以及 1Gb 的以太网卡)。

千兆位以太网

Intel 10/100/1000Mbps PCI 桌面适配器 — (PWLA8391GT)

35 美元

Oracle RAC 节点 2 — (linux2)

Dimension 2400 系列

Intel(R) Pentium(R) 4 处理器 (2.80GHz)

2GB DDR SDRAM (333MHz)

40GB 7200 RPM 内置硬盘

集成的 Intel 3D AGP 图形卡

集成的 10/100 以太网卡 — (Broadcom BCM4401)

CDROM(48X 倍速)

3.5 英寸软盘驱动器

无键盘、显示器或鼠标 —(连接到 KVM 切换设备)

600 美元

1 — 以太网 LAN 卡

 

用于 linux1 与 Openfiler 网络存储的 RAC 互连。

 

Oracle RAC 的每个 Linux 服务器应该包含两个 NIC 适配器。Dell Dimension 包含一个将用于连接公共网络的集成的 10/100 以太网适配器。第二个 NIC 适配器将用于专用网络(RAC 互连和 Openfiler 网络存储)。选择与要用于专用网络的网络交换机的最大数据传输速度兼容且合适的 NIC 适配器。对于本文,我在专用网络中使用了千兆位以太网交换机(以及 1Gb 的以太网卡)。

千兆位以太网

Intel 10/100/1000Mbps PCI 桌面适配器 — (PWLA8391GT)

35 美元

网络存储服务器 — (openfiler1)

Dell PowerEdge 1800

双 3.0GHz Xeon/1MB 缓存/ 800FSB (SL7PE)

6GB 的 ECC 内存

500GB SATA 内置硬盘

73GB 15K SCSI 内置硬盘

单个嵌入式 Intel 10/100/1000 千兆位 NIC

无键盘、显示器或鼠标 —(连接到 KVM 切换设备)

注:操作系统和 Openfiler 应用程序将安装于 500GB 内置 SATA 磁盘上。将配置第二个内置 73GB 15K SCSI 硬盘用于数据存储。Openfiler 服务器将配置为使用第二个硬盘进行基于 iSCSI 的存储,并且将在 Oracle RAC 10g 配置中用于存储 Oracle 集群件所需的共享文件以及所有 Oracle ASM 卷。

请注意,任何类型的硬盘(内置或外置),只要网络存储服务器 (Openfiler) 能够识别并且该硬盘具有足够的空间,都可用于数据库存储。例如,我已在 500GB 内置 SATA 磁盘上建立了一个额外的分区用于 iSCSI 目标,但决定在此例中使用速度更快的 SCSI 磁盘。

800 美元

1 — 以太网 LAN 卡

 

用于专用网络上的网络存储。

 

网络存储服务器(Openfiler 服务器)应包含两个 NIC 适配器。Dell PowerEdge 1800 包含一个将用于连接公共网络的集成的 10/100/1000 以太网适配器。第二个 NIC 适配器将用于专用网络(Openfiler 网络存储)。选择与要用于专用网络的网络交换机的最大数据传输速度兼容且合适的 NIC 适配器。对于本文,我在专用网络中使用了千兆位以太网交换机(以及 1Gb 的以太网卡)。

千兆位以太网

Intel 10/100/1000Mbps PCI 桌面适配器 — (PWLA8391GT)

35 美元

其他组件

1 — 以太网交换机

 

用于 linux1-priv 和 linux2-priv 之间的互连。它还用于 Openfiler 的网络存储流量。对于本文,我在专用网络中使用了千兆位以太网交换机(以及 1Gb 的以太网卡)。

千兆位以太网

D-Link 8 端口 10/100/1000 桌面交换机 — (DGS-2208)

50 美元

6 — 网络电缆 6 类接线电缆 —(将 linux1 连接到公共网络) 6 类接线电缆 —(将 linux2 连接到公共网络) 6 类接线电缆 —(将 openfiler1 连接到公共网络) 6 类接线电缆 —(将 linux1 连接到以太网互联交换机) 6 类接线电缆 —(将 linux2 连接到以太网互联交换机) 6 类接线电缆 —(将 openfiler1 连接到以太网互联交换机)

10 美元

10 美元

10 美元

10 美元

10 美元

10 美元

可选组件

KVM 切换设备

 

为了安装操作系统并执行多项配置任务,本文需要访问所有节点(服务器)的控制台。管理少量服务器时,为了访问其控制台,将每台服务器与其自己的显示器、键盘和鼠标相连可能很有用。但是,随着需要管理的服务器数量越来越多,这一解决方案变得难以实施。一个更实际的解决方案是配置一台专用的计算机,其中包括可以直接访问每台服务器的控制台的一个显示器、键盘和鼠标。使用一台键盘、视频和鼠标切换设备(也称作 KVM 切换设备)可以实现该解决方案。KVM 切换设备是一台允许用户通过一个键盘、视频显示器和鼠标来控制多台计算机的硬件设备。Avocent 提供了一种带有 4 根 6 英尺电缆的优质、低成本 4 端口切换设备: SwitchView® 1000 — (4SV1000BND1-001)

有关 KVM 切换设备及其使用的详细说明和指南,请参阅“家用和企业 KVM 切换设备”一文。

340 美元

合计 2,555 美元

下面,我们将开始安装过程。既然已经讨论了将在本示例中使用的硬件,下面我们来对环境进行概念性的了解(单击下面的图形查看大图像):

 



图 1:体系结构

在开始详细说明安装过程之前,应该注意本文中的大部分任务都需要在这两个 Oracle RAC 节点(linux1 和 linux2)上执行。我将在每个部分的开始处指出是应该在这两个 Oracle RAC 节点上还是在网络存储服务器 (openfiler1) 上执行该任务。

6. 安装 Linux 操作系统

在集群中的两个 Oracle RAC 节点上执行下列安装步骤!

本部分概述了用于安装 Linux 操作系统的各个屏幕。本指南与适用于 x86 的 Oracle Enterprise Linux 第 5 版 Update 3 配合使用,并且遵循 Oracle 的如下建议:执行“默认 RPM”安装类型以确保拥有成功进行 Oracle RDBMS 安装所需的 Linux 操作系统程序包。

在两个 Oracle RAC 节点上安装 Oracle Enterprise Linux 操作系统之前,您应该先安装两个 NIC 接口(卡)。

根据您的硬件体系结构,下载适用于 x86 或 x86_64 的 Oracle Enterprise Linux 第 5 版 Update 3 的以下 ISO 映像。

针对 Oracle Enterprise Linux 的 Oracle E-Delivery 网站

32 位 (x86) 安装

V15417-01.zip (581 MB) V15418-01.zip (617 MB) V15419-01.zip (618 MB) V15420-01.zip (611 MB)

V15421-01.zip (253 MB)

下载 Oracle Enterprise Linux 操作系统之后,解压缩每个文件。您将获得以下 ISO 映像,需要将其刻录到 CD 上:

Enterprise-R5-U3-Server-i386-disc1.iso Enterprise-R5-U3-Server-i386-disc2.iso Enterprise-R5-U3-Server-i386-disc3.iso Enterprise-R5-U3-Server-i386-disc4.iso Enterprise-R5-U3-Server-i386-disc5.iso

 

注:如果 Linux RAC 节点安装有 DVD,您可能会发现使用如下的单个 DVD 映像更方便:

V15414-01.zip (2.7 GB)

 

解压缩该单个 DVD 映像文件后将其刻录到一张 DVD 中:

Enterprise-R5-U3-Server-i386-dvd.iso

 

64 位 (x86_64) 安装

V15427-01.zip (577 MB) V15428-01.zip (615 MB) V15429-01.zip (619 MB) V15430-01.zip (615 MB)

V15431-01.zip (620 MB)

V15432-01.zip (120 MB)

下载 Oracle Enterprise Linux 操作系统之后,解压缩每个文件。您将获得以下 ISO 映像,需要将其刻录到 CD 上:

Enterprise-R5-U3-Server-x86_64-disc1.iso Enterprise-R5-U3-Server-x86_64-disc2.iso Enterprise-R5-U3-Server-x86_64-disc3.iso Enterprise-R5-U3-Server-x86_64-disc4.iso Enterprise-R5-U3-Server-x86_64-disc5.iso Enterprise-R5-U3-Server-x86_64-disc6.iso

 

注:如果 Linux RAC 节点安装有 DVD,您可能会发现使用如下的单个 DVD 映像更方便:

V15416-01.zip (3.2 GB)

 

解压缩该单个 DVD 映像文件后将其刻录到一张 DVD 中:

Enterprise-R5-U3-Server-x86_64-dvd.iso

 

如果您将以上 ISO 文件下载到 MS Windows 计算机,可以使用多种方法将这些映像(ISO 文件)刻录到一张 CD/DVD。您可能很熟悉这个过程,甚至已经拥有合适的软件,可以将映像刻录到 CD/DVD。如果您不熟悉这个过程,并且没有将映像刻录到 CD/DVD 所需的软件,这里提供了两个软件程序包(实际上有许多个): UltraISO Magic ISO Maker

 

下载并将 Oracle Enterprise Linux 映像(ISO 文件)刻录到 CD/DVD 后,将 OEL 1 号盘插入第一个服务器(在本示例中是 linux1),打开电源,然后按照以下说明回应安装屏幕的提示。在第一个节点上安装完 Linux 后,在第二个节点上执行相同的 Linux 安装,但将节点名 linux1 替换为 linux2 并设定适当的不同 IP 地址。

引导屏幕

第一个屏幕是 Oracle Enterprise Linux 引导屏幕。在 boot: 提示符处按 [Enter] 键启动安装过程。

介质测试

当要求测试 CD 介质时,用 Tab 键切换到 [Skip] 并按 [Enter] 键。如果有错误,则介质刻录软件会向我们发出警告。在几秒钟后,安装程序将会检测视频卡、显示器和鼠标。然后安装程序进入 GUI 模式。

欢迎使用 Oracle Enterprise Linux

在欢迎屏幕上,单击 [Next] 继续。

语言 / 键盘选项

接下来的两个屏幕提示您设置语言和键盘设置。为您的配置作出合适的选择。

检测以前的安装

注意,如果安装程序检测到以前版本的 Oracle Enterprise Linux,它将询问您是“Install Enterprise Linux”还是“Upgrade an existing Installation”。请始终选择“Install Enterprise Linux”。

磁盘分区设置

保持 [Remove linux partitions on selected drives and create default layout] 的默认选中状态,选中 [Review and modify partitioning layout] 选项。单击 [Next] 继续。

此时会显示一个对话窗口,询问您是否真的要删除所有分区。单击 [Yes] 回复这一警告。

分区

随后安装程序将允许您查看(如果需要还可以更改)它自动选择的磁盘分区。对于大多数自动布局,安装程序将为 /boot 分配 100MB,为交换分区分配双倍数量的 RAM(系统 RAM <= 2,048MB 时)或同等数量的 RAM(系统 RAM > 2,048MB 时),而将剩余空间分配给根 (/) 分区。从 RHEL 4 开始,安装程序将创建与刚才提到的相同磁盘配置,但将使用逻辑卷管理器 (LVM) 创建它们。例如,它将把第一个硬盘驱动器(我的配置使用 /dev/hda)划分为两个分区 — 一个用于 /boot 分区 (/dev/hda1) ,而磁盘的剩余部分专用于 LVM 指定的 VolGroup00 (/dev/hda2)。然后,将 LVM 卷组 (VolGroup00) 划分为两个 LVM 分区 — 一个用于根文件系统 (/),另一个用于交换分区。

在分区阶段,我主要检查是否为 Oracle 分配了足够的交换空间(可用 RAM 的倍数)。下面是 Oracle 的交换空间要求:

可用 RAM 所需的交换空间

介于 1,024MB 和 2,048MB 之间 RAM 大小的 1.5 倍

介于 2,049MB 和 8,192MB 之间 与 RAM 大小相同

超过 8,192MB RAM 大小的 0.75 倍

就本安装而言,我将接受所有自动选用的大小。(包括 4,096MB 的交换空间,因为我安装了 2,048MB 的 RAM。)

如果出于任何原因,自动布局无法配置足够数量的交换空间,您可以通过此屏幕轻松地进行更改。要增加交换分区的大小,单击 [Edit] 编辑卷组 VolGroup00。这将显示“Edit LVM Volume Group:VolGroup00”对话框中的 [OK]。首先,单击 [Edit] 进行编辑,减少根文件系统 (/) 的大小(减少的数量是您要添加到交换分区的数量)。例如,要为交换分区添加 512MB 的空间,您需要将根文件系统的大小减少 512MB(即,36,032MB - 512MB = 35,520MB)。现在,将您从根文件系统减少的空间 (512MB) 添加到交换分区。完成后,单击“Edit LVM Volume Group:VolGroup00”对话框中的 [OK]。

如果您对磁盘布局满意,单击 [Next] 继续。

引导加载程序配置

安装程序将默认使用 GRUB 引导加载程序。要使用 GRUB 引导加载程序,接受所有默认值并单击 [Next] 继续。

网络配置

在启动操作系统安装之前,我已确认在每个 Linux 机器上安装了两个 NIC 接口(卡)。本屏幕应该已经成功地检测到每个网络设备。由于我们将使用该计算机宿主 Oracle 数据库,因此需要对网络配置进行一些更改。当然,您在此处的设置取决于您的网络配置。关键点是永远不要使用 DHCP 配置计算机,因为它将用于宿主 Oracle 数据库服务器。您需要使用静态 IP 地址配置计算机。您还需要使用实际主机名配置服务器。

首先,确保将每个网络设备设置为 [Active on boot]。默认情况下,安装程序可能选择不激活 eth1。

第二步,单击 [Edit] 按照以下方法对 eth0 和 eth1 进行编辑操作。验证已选中“Enable IPv4 support”选项。单击取消选中“Use dynamic IP configuration (DHCP)”选项,然后为您的环境配置一个静态 IP 地址和网络掩码。单击取消选中“Enable IPv6 support”选项。您可能要为本指南中说明的 eth0 和 eth1 使用不同的 IP 地址,这没有问题。可以将 eth1(互连)置于不同于 eth0(公共网络)的子网中:

eth0:

- 选中 [Enable IPv4 support] 选项

- 取消选中 [Use dynamic IP configuration (DHCP)] 选项 —(选择人工配置)

IPv4 地址:192.168.1.100

前缀(网络掩码):255.255.255.0

- 取消选中 [Enable IPv6 support] 选项

eth1:

- 选中 [Enable IPv4 support] 选项

- 取消选中 [Use dynamic IP configuration (DHCP)] 选项 —(选择人工配置)

IPv4 地址:192.168.2.100

前缀(网络掩码):255.255.255.0

- 取消选中 [Enable IPv6 support] 选项

接着,手动设置您的主机名。我对第一个节点使用“linux1”,第二个节点使用“linux2”。然后提供您的网关和 DNS 服务器,最后关闭该对话框。

时区选择

为您的环境选择适当的时区,然后单击 [Next] 继续。

设置根口令

选择一个根口令,然后单击 [Next] 继续。

程序包安装默认值

默认情况下,Oracle Enterprise Linux 将安装一台典型服务器所需的大部分软件。但成功安装 Oracle 数据库软件还需要若干其他程序包 (RPM)。运行安装程序时,您可以选择“Customize software”来添加 RPM 分组,如“Development Libraries”或“Legacy Library Support”。添加这样的 RPM 分组不成问题。然而,取消选择任何“默认的 RPM”分组或单个的 RPM 可能会导致 Oracle 集群件和 Oracle 数据库安装尝试失败。

对于本文,选择单选按钮 [Customize now],然后单击 [Next] 继续。

您可以在这里选择要安装的程序包。Oracle 软件需要的大部分程序包都集中在“程序包组”中(即 Application -> Editors)。由于这些节点将宿主 Oracle 集群件和 Oracle RAC 软件,请验证至少选择安装以下程序包组。注意,对于许多 Linux 程序包组,并不是所有与该组关联的程序包都被选择来进行安装。(选择程序包组之后,请注意“Optional packages”按钮。)因此,尽管选择了安装该程序包组,但 Oracle 需要的某些程序包还是没有得到安装。实际上,Oracle 需要的某些程序包可能不属于任何 可用的程序包组(即 libaio-devel)。不要担心。本部分结尾处将提供适用于 Oracle Enterprise Linux 5 的 Oracle 集群件 10g 和 Oracle RAC 10g 所需程序包的完整列表。安装操作系统之后,需要从 Oracle Enterprise Linux CD 手动安装这些程序包。现在,安装以下程序包组:

桌面环境 GNOME Desktop Environment

应用产品 编辑器 Graphical Internet Text-based Internet

开发 开发库 开发工具 原有软件开发

服务器 服务器配置工具

基本系统 管理工具 基本 Java 原有软件支持 系统工具 X Window 系统

 

除了上述程序包外,还可选择您希望为此节点安装的任何其他程序包,请记住,不要取消选择任何“默认”的 RPM 程序包。选择要安装的程序包之后,单击 [Next] 继续。

关于安装

本屏幕主要是一个确认屏幕。单击 [Next] 开始安装。如果您使用 CD 安装 Oracle Enterprise Linux,在安装过程中,系统会根据您选择安装的程序包来要求您更换 CD。

恭喜

大功告成。您已经在第一个节点 (linux1) 上成功安装了 Oracle Enterprise Linux。安装程序将从 CD-ROM 驱动器中弹出 CD/DVD。取出 CD/DVD,单击 [Reboot] 重新引导系统。

安装后向导欢迎屏幕

当系统第一次引导进入 Oracle Enterprise Linux 时,将为您显示另一个“安装后向导”的欢迎屏幕。安装后向导允许您进行最终的 O/S 配置设置。在“Welcome”屏幕上,单击 [Forward] 继续。

许可协议

阅读许可协议。选择“Yes, I agree to the License Agreement”,然后单击 [Forward] 继续。



防火墙

在该屏幕上,确保选中 [Disabled] 选项,然后单击 [Forward] 继续。

系统将显示一个警告对话框,提示您不要设置防火墙。显示该对话框之后,单击 [Yes] 继续。



SELinux

在 SELinux 屏幕上,选中 [Disabled] 选项,然后单击 [Forward] 继续。

系统将显示一个警告对话框,提示您更改 SELinux 设置需要重新引导系统以便重新标记整个文件系统。显示该对话框之后,单击 [Yes] 确认在第一次引导(安装后向导)完成后将重新引导系统。

Kdump

接受 Kdump 屏幕上的默认设置 (disabled),然后单击 [Forward] 继续。

日期和时间设置

如果需要,调整日期和时间设置,然后单击 [Forward] 继续。

创建用户

如果需要,创建其他(非 oracle)操作系统用户帐户,然后单击 [Forward] 继续。对于本文,我不会创建任何其他操作系统帐户。在本指南后面部分,我将在 Oracle 数据库安装期间创建“oracle”用户帐户。

如果您选择不定义任何其他操作系统用户帐户,单击 [Continue] 确认警告对话框。

声卡

如果向导检测到声卡,该屏幕将出现。在声卡屏幕上,单击 [Forward] 继续。

其他 CD

在“Additional CDs”屏幕上,单击 [Finish] 继续。

重新引导系统

假设我们更改了 SELinux 选项(更改为 disabled),系统将提示重新引导系统。单击 [OK] 重新引导系统以便正常使用。

登录屏幕

重新引导计算机之后,将为您显示登录屏幕。使用“root”用户帐户和在安装期间提供的口令登录。

在第二个节点上进行相同的安装

在第一个节点上完成 Linux 安装后,在第二个节点 (linux2) 上重复上述步骤。对机器名和网络进行正确配置。在我的安装中,linux2 配置如下:

首先,确保将每个网络设备设置为 [Active on boot]。安装程序可能选择不激活 eth1。

第二步,单击 [Edit] 按照以下方法对 eth0 和 eth1 进行编辑操作。验证已选中“Enable IPv4 support”选项。单击取消选中“Use dynamic IP configuration (DHCP)”选项,然后为您的环境配置一个静态 IP 地址和网络掩码。单击取消选中“Enable IPv6 support”选项。您可能要为本指南中说明的 eth0 和 eth1 使用不同的 IP 地址,这没有问题。可以将 eth1(互连)置于不同于 eth0(公共网络)的子网中:

eth0:

- 选中 [Enable IPv4 support] 选项

- 取消选中 [Use dynamic IP configuration (DHCP)] 选项 —(选择人工配置)

IPv4 地址:192.168.1.101

前缀(网络掩码):255.255.255.0

- 取消选中 [Enable IPv6 support] 选项

eth1:

- 选中 [Enable IPv4 support] 选项

- 取消选中 [Use dynamic IP configuration (DHCP)] 选项 —(选择人工配置)

IPv4 地址:192.168.2.101

前缀(网络掩码):255.255.255.0

- 取消选中 [Enable IPv6 support] 选项

接着,手动设置您的主机名。我对第二个节点使用“linux2”。然后提供您的网关和 DNS 服务器,最后关闭该对话框。

7. 为 Oracle RAC 安装必需的 Linux 程序包

在集群中的两个 Oracle RAC 节点上安装以下必需的 Linux 程序包!安装 Oracle Enterprise Linux 之后,下一步是验证并安装 Oracle 集群件和 Oracle RAC 所需的所有程序包 (RPM)。Oracle Universal Installer (OUI) 将在安装期间在计算机上执行检查,以检验是否满足相应的操作系统程序包要求。要确保这些检查成功完成,请在开始安装 Oracle 之前查看本部分中说明的软件要求。

尽管许多 Oracle 必需的程序包已经在第 6 部分(安装 Linux 操作系统)中安装。但还缺少一些程序包,原因是它们在程序包组中被视为可选项,或者根本不存在于任何程序包组中!

本部分中列出的程序包(或更高版本)是 Oracle Enterprise Linux 5 平台上运行的 Oracle 集群件 10g 第 2 版和 Oracle RAC 10g 第 2 版所必需的。

32 位 (x86) 安装

binutils-2.17.50.0.6-2.el5 compat-libstdc++-296-2.96-138 compat-libstdc++-33-3.2.3-61 elfutils-libelf-0.125-3.el5 elfutils-libelf-devel-0.125 gcc-4.10.1-52 gcc-c++-4.10.1-52 glibc-2.5-12 glibc-common-2.5-12 glibc-devel-2.5-12 glibc-headers-2.5-12 libaio-0.3.106 libaio-devel-0.3.106 libgcc-4.10.1-52 libstdc++-4.1.1 libstdc++-devel-4.1.1-52.e15 libXp-1.0.0-8 make-3.81-1.1 openmotif-2.2.3 sysstat-7.0.0 unixODBC-2.2.11 unixODBC-devel-2.2.11

 

注意,openmotif RPM 程序包在安装 Oracle 演示时需要。本文不包括 Oracle 演示的安装。

上面列出的每个程序包都可以在 Oracle Enterprise Linux 5 - (x86) CD 的 1 号 CD、2 号 CD 和 3 号 CD 中找到。尽管可以查询每个单独的程序包以确定缺少并需要安装哪个程序包,但更简单的方法是针对这五个 CD 运行 rpm -Uvh PackageName 命令,如下所示。对于已经存在并且是最新版本的程序包,RPM 命令将忽略安装,并在控制台上打印警告消息,表明该程序包已经安装。

# From Oracle Enterprise Linux 5.3 (x86)- [CD #1]mkdir -p /media/cdrommount -r /dev/cdrom /media/cdromcd /media/cdrom/Serverrpm -Uvh binutils-2.*rpm -Uvh elfutils-libelf-0.*rpm -Uvh glibc-2.*rpm -Uvh glibc-common-2.*rpm -Uvh libaio-0.*rpm -Uvh libgcc-4.*rpm -Uvh libstdc++-4.*rpm -Uvh make-3.*cd /eject# From Oracle Enterprise Linux 5.3 (x86) - [CD #2]mount -r /dev/cdrom /media/cdromcd /media/cdrom/Serverrpm -Uvh elfutils-libelf-devel-0.*rpm -Uvh glibc-devel-2.*rpm -Uvh glibc-headers-2.*rpm -Uvh gcc-4.*rpm -Uvh gcc-c++-4.*rpm -Uvh libstdc++-devel-4.*rpm -Uvh unixODBC-2.*cd /eject# From Oracle Enterprise Linux 5.3 (x86) - [CD #3]mount -r /dev/cdrom /media/cdromcd /media/cdrom/Serverrpm -Uvh compat-libstdc++-296*rpm -Uvh compat-libstdc++-33*rpm -Uvh libaio-devel-0.*rpm -Uvh libXp-1.*rpm -Uvh openmotif-2.*rpm -Uvh sysstat-7.*rpm -Uvh unixODBC-devel-2.*cd /eject

64 位 (x86_64) 安装

binutils-2.17.50.0.6-2.el5 compat-libstdc++-296-2.96-138 compat-libstdc++-33-3.2.3-61 compat-libstdc++-33-3.2.3-61(32 位) elfutils-libelf-0.125-3.el5 elfutils-libelf-devel-0.125 gcc-4.1.1 gcc-c++-4.1.1 glibc-2.5-12 glibc-2.5-12(32 位) glibc-common-2.5 glibc-devel-2.5-12 glibc-devel-2.5-12(32 位) glibc-headers-2.5-12 libaio-0.3.106 libaio-0.3.106(32 位) libaio-devel-0.3.106 libgcc-4.1.1 libgcc-4.1.1(32 位) libstdc++-4.1.1 libstdc++-4.1.1(32 位) libstdc++-devel-4.1.1-52.e15 libXp-1.0.0-8 make-3.81-1.1 openmotif-2.2.3 sysstat-7.0.0 unixODBC-2.2.11 unixODBC-2.2.11(32 位) unixODBC-devel-2.2.11

 

注意,openmotif RPM 程序包在安装 Oracle 演示时需要。本文不包括 Oracle 演示的安装。

上面列出的每个程序包都可以在 Oracle Enterprise Linux 5 - (x86_64) CD 的 1 号 CD、2 号 CD、3 号 CD 和 4 号 CD 中找到。尽管可以查询每个单独的程序包以确定缺少并需要安装哪个程序包,但更简单的方法是针对这五个 CD 运行 rpm -Uvh PackageName 命令,如下所示。对于已经存在并且是最新版本的程序包,RPM 命令将忽略安装,并在控制台上打印警告消息,表明该程序包已经安装。

# From Oracle Enterprise Linux 5.3 (x86_64)- [CD #1]mkdir -p /media/cdrommount -r /dev/cdrom /media/cdromcd /media/cdrom/Serverrpm -Uvh binutils-2.*rpm -Uvh elfutils-libelf-0.*rpm -Uvh glibc-2.*rpm -Uvh glibc-common-2.*rpm -Uvh libaio-0.*rpm -Uvh libgcc-4.*rpm -Uvh libstdc++-4.*rpm -Uvh make-3.*cd /eject# From Oracle Enterprise Linux 5.3 (x86_64) - [CD #2]mount -r /dev/cdrom /media/cdromcd /media/cdrom/Serverrpm -Uvh elfutils-libelf-devel-0.*rpm -Uvh glibc-devel-2.*rpm -Uvh glibc-headers-2.*rpm -Uvh gcc-4.*rpm -Uvh gcc-c++-4.*rpm -Uvh libstdc++-devel-4.*rpm -Uvh unixODBC-2.*cd /eject# From Oracle Enterprise Linux 5.3 (x86_64) - [CD #3]mount -r /dev/cdrom /media/cdromcd /media/cdrom/Serverrpm -Uvh compat-libstdc++-296*rpm -Uvh compat-libstdc++-33*rpm -Uvh libaio-devel-0.*rpm -Uvh libXp-1.*rpm -Uvh openmotif-2.*rpm -Uvh unixODBC-devel-2.*cd /eject# From Oracle Enterprise Linux 5.3 (x86_64) - [CD #4]mount -r /dev/cdrom /media/cdromcd /media/cdrom/Serverrpm -Uvh sysstat-7.*cd /eject

8. 网络配置

在集群中的两个 Oracle RAC 节点上执行下列网络配置!

注:虽然我们在 Oracle Enterprise Linux 安装过程中配置了几个网络设置,但千万不要跳过本部分,因为它包含了成功的 RAC 环境所需的关键步骤。

网络设置简介

在 Linux O/S 安装过程中,我们已经为这两个 Oracle RAC 节点配置了 IP 地址和主机名。现在,我们需要配置 /etc/hosts 文件,并调整几个互连的网络设置。

这两个 Oracle RAC 节点均应有一个用于公共网络的静态 IP 地址和一个用于专用集群互连的静态 IP 地址。不要为公共 IP 地址或互连使用 DHCP 命名;您需要静态 IP 地址!专用互连应该仅由 Oracle 用于传输与集群管理器和缓存融合相关的数据以及用于网络存储服务器 (Openfiler) 的数据。注意,Oracle 不支持使用公共网络接口进行互连。您必须对公共网络使用一个网络接口,对专用互连使用另一个网络接口。对于生产 RAC 实现,互连应该至少有千兆位(或更多)且仅由 Oracle 使用,并且在单独的千兆位网络上具有网络存储服务器 (Openfiler)。

配置公共网络和专用网络

在我们的双节点示例中,为了访问公共网络和专用互连,我们需要在两个 Oracle RAC 节点上配置网络。

在 Oracle Enterprise Linux 中配置网络设置的最简单方法是使用“网络配置”程序。您可以以“root”用户帐户从命令行启动网络配置程序,如下所示:

# su -

# /usr/bin/system-config-network &注:不要对公共 IP 地址或互连使用 DHCP 命名 — 我们需要静态 IP 地址!

使用 Network Configuration 应用程序时,您需要配置两个 NIC 设备以及 /etc/hosts 文件。您可以使用网络配置 GUI 完成这两个任务。注意,这两个节点的 /etc/hosts 设置相同,而且我删除了与 IPv6 相关的任一项(例如,::1 localhost6.localdomain6 localhost6)。

我们的示例配置将使用以下设置:

Oracle RAC 节点 1 — (linux1)

设备 IP 地址 子网 网关 目的

eth0 192.168.1.100 255.255.255.0 192.168.1.1 连接 linux1 与公共网络

eth1 192.168.2.100 255.255.255.0 将 linux1(互连)连接到 linux2 (linux2-priv)

/etc/hosts

127.0.0.1 localhost.localdomain localhost # Public Network - (eth0) 192.168.1.100 linux1 192.168.1.101 linux2 # Private Interconnect - (eth1) 192.168.2.100 linux1-priv 192.168.2.101 linux2-priv # Public Virtual IP (VIP) addresses - (eth0:1) 192.168.1.200 linux1-vip 192.168.1.201 linux2-vip # Private Storage Network for Openfiler - (eth1) 192.168.1.195 openfiler1 192.168.2.195 openfiler1-priv

 

Oracle RAC 节点 2 — (linux2)

设备 IP 地址 子网 网关 目的

eth0 192.168.1.101 255.255.255.0 192.168.1.1 连接 linux2 与公共网络

eth1 192.168.2.101 255.255.255.0 将 linux2(互连)连接到 linux1 (linux1-priv)

/etc/hosts

127.0.0.1 localhost.localdomain localhost # Public Network - (eth0) 192.168.1.100 linux1 192.168.1.101 linux2 # Private Interconnect - (eth1) 192.168.2.100 linux1-priv 192.168.2.101 linux2-priv # Public Virtual IP (VIP) addresses - (eth0:1) 192.168.1.200 linux1-vip 192.168.1.201 linux2-vip # Private Storage Network for Openfiler - (eth1) 192.168.1.195 openfiler1 192.168.2.195 openfiler1-priv

请注意,只需在两个 Oracle RAC 节点的 /etc/hosts 文件(或您的 DNS)中定义虚拟 IP 地址。当您运行 Oracle Universal Installer 时,该程序启动 Oracle 的虚拟互联网协议配置助手 (VIPCA),也就说 Oracle 集群件将自动配置公共虚拟 IP 地址。当运行 srvctl start nodeapps -n <node_name> 命令时,所有的虚拟 IP 地址将被激活。这就是将要在客户端 tnsnames.ora 文件中进行配置的主机名/IP 地址(后文详述)。尽管做的是超越自我的事情,但这个却是在客户端 tnsnames.ora 文件中将要对每个 Oracle Net 服务名称配置的主机名/IP 地址。本文后面将对此进行解释!

以下屏幕截图只显示了 Oracle RAC 节点 1 (linux1)。确保对两个 Oracle RAC 节点进行了所有适当的网络设置。



图 2:网络配置屏幕,节点 1 (linux1)



图 3:以太网设备屏幕,eth0 (linux1)



图 4:以太网设备屏幕,eth1 (linux1)



图 5:网络配置屏幕,/etc/hosts (linux1)

配置网络之后,您可以使用 ifconfig 命令验证一切是否正常。以下示例来自于 linux1:

# /sbin/ifconfig -aeth0 Link encap:Ethernet HWaddr 00:14:6C:76:5C:71inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0inet6 addr: fe80::214:6cff:fe76:5c71/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:474176 errors:0 dropped:0 overruns:0 frame:0TX packets:295424 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:646960868 (616.9 MiB) TX bytes:138068364 (131.6 MiB)Interrupt:177 Base address:0x6f00eth1 Link encap:Ethernet HWaddr 00:0E:0C:64:D1:E5inet addr:192.168.2.100 Bcast:192.168.2.255 Mask:255.255.255.0inet6 addr: fe80::20e:cff:fe64:d1e5/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:1452602 errors:0 dropped:0 overruns:0 frame:0TX packets:1804263 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:1165724771 (1.0 GiB) TX bytes:2205826792 (2.0 GiB)Base address:0xddc0 Memory:fe9c0000-fe9e0000lo Link encap:Local Loopbackinet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING MTU:16436 Metric:1RX packets:1371 errors:0 dropped:0 overruns:0 frame:0TX packets:1371 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:2169814 (2.0 MiB) TX bytes:2169814 (2.0 MiB)sit0 Link encap:IPv6-in-IPv4NOARP MTU:1480 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

关于虚拟 IP

10g 中为什么使用虚拟 IP (VIP)?为什么当它的主节点发生故障时它只是返回一个无效的连接?

这全是出于对应用程序可用性的考虑。当一个节点发生故障时,与其关联的 VIP 将被自动故障切换到另外某个节点上。当出现这种情况时,会发生两件事。

新的节点重新进行地址解析,显示该地址的一个新的 MAC 地址。对于直连客户端,这通常使它们在连接旧地址时出现错误。 到 VIP 的后续数据包将被传送到新的节点,该节点将把错误 RST 数据包返回客户端。这导致客户端立即收到错误信息。

这意味着,当客户端向故障节点发出 SQL 时,或者在连接状态下遍历地址列表时,客户端会接收到一个 TCP 重置信息,而不是等待很长的 TCP/IP 超时(大约 10 分钟)。发送 SQL 时,该信息为 ORA-3113。而连接时,使用 tnsname 中的下一个地址。

更进一步的操作是使用透明的应用程序故障切换 (TAF)。成功配置 TAF 后,就可以完全避免 ORA-3113 错误!第 31 节(“透明的应用程序故障切换 — (TAF)”)将更详细地介绍 TAF。

如果不使用 VIP,连接停用节点的客户端经常要等待 10 分钟的 TCP 超时,然后才收到错误信息。因此,如果没有 VIP, 用户将不能真正拥有一流的高可用性解决方案(来源 — Metalink 说明 220970.1)。

确保 RAC 节点名没有出现在环回地址中

确保在 /etc/hosts 文件的环回地址中不包含节点名(linux1 或 linux2)。如果机器名出现在环回地址条目中,如下所示:

127.0.0.1 linux1 localhost.localdomain localhost

需要按如下所示将其删除: 127.0.0.1 localhost.localdomain localhost

如果 RAC 节点名出现在环回地址中,您在 RAC 安装期间将接收到以下错误信息:

ORA-00603: ORACLE server session terminated by fatal error

或者 ORA-29702: error occurred in Cluster Group Service operation

验证 localhost 在 /etc/hosts 文件中定义为回送地址

确保 localhost.localdomain 和 localhost 项作为回送地址包含在每个 Oracle RAC 节点的 /etc/hosts 文件中: 127.0.0.1 localhost.localdomain localhost如果 /etc/hosts 文件中不存在 localhost 项,Oracle 集群件将无法启动应用程序资源 — 特别是 ONS 进程。该错误将指明“Failed to get IP for localhost”并写入 ONS 的日志文件。例如:CRS-0215 could not start resource 'ora.linux1.ons'. Check log file"/u01/app/crs/log/linux1/racg/ora.linux1.ons.log"for more details.ONS 日志文件包含类似以下内容的行:

 

Oracle Database 10g CRS Release 10.2.0.1.0 Production Copyright 1996, 2005 Oracle.保留所有权利。

2007-04-14 13:10:02.729: [ RACG][3086871296][13316][3086871296][ora.linux1.ons]:Failed to get IP for localhost (1)

Failed to get IP for localhost (1)

Failed to get IP for localhost (1)

onsctl:ons failed to start

...

调整网络设置

在 Oracle 9.2.0.1 以及更高版本中,Oracle 在 Linux 上使用 UDP 作为进行过程间通信 (IPC) 的默认协议,如在 RAC 集群中实例之间的缓存融合和集群管理器缓冲区传输。

Oracle 强烈建议将默认的和最大的接收缓冲区大小(SO_RCVBUF 套接字选项)调整为 1MB,并将默认的和最大的发送缓冲区大小(SO_SNDBUF 套接字选项)调整为 256KB。

接收缓冲区由 TCP 和 UDP 用于保留所接收的数据,直到应用程序读出这些数据为止。由于不允许对端设备发送超过缓冲区大小窗口的数据,因此接收缓冲区不会溢出。这意味着,不适合套接字接收缓冲区可能导致发送设备发送的信息淹没接收设备的数据报将会被丢弃。

您无需重新引导即可在 /proc 文件系统中更改默认的和最大的窗口大小:

# su - root# sysctl -w net.core.rmem_default=1048576net.core.rmem_default = 1048576# sysctl -w net.core.rmem_max=1048576net.core.rmem_max = 1048576# sysctl -w net.core.wmem_default=262144net.core.wmem_default = 262144# sysctl -w net.core.wmem_max=262144net.core.wmem_max = 262144以上命令更改正在运行的操作系统。现在,将以下各行程序添加到 RAC 集群中两个节点的 /etc/sysctl.conf 文件中,使以上更改永久生效(针对每次重新引导而言):

# +---------------------------------------------------------+# | ADJUSTING NETWORK SETTINGS |# +---------------------------------------------------------+# | With Oracle 9.2.0.1 and onwards, Oracle now makes use |# | of UDP as the default protocol on Linux for |# | inter-process communication (IPC), such as Cache Fusion |# | and Cluster Manager buffer transfers between instances |# | within the RAC cluster. Oracle strongly suggests to |# | adjust the default and maximum receive buffer size |# | (SO_RCVBUF socket option) to 1024 KB, and the default |# | and maximum send buffer size (SO_SNDBUF socket option) |# | to 256 KB. The receive buffers are used by TCP and UDP |# | to hold received data until it is read by the |# | application. The receive buffer cannot overflow because |# | the peer is not allowed to send data beyond the buffer |# | size window. This means that datagrams will be |# | discarded if they don't fit in the socket receive |# | buffer. This could cause the sender to overwhelm the |# | receiver. |# +---------------------------------------------------------+# +---------------------------------------------------------+# | Default setting in bytes of the socket "receive" buffer |# | which may be set by using the SO_RCVBUF socket option. |# +---------------------------------------------------------+net.core.rmem_default=1048576# +---------------------------------------------------------+# | Maximum setting in bytes of the socket "receive" buffer |# | which may be set by using the SO_RCVBUF socket option. |# +---------------------------------------------------------+net.core.rmem_max=1048576# +---------------------------------------------------------+# | Default setting in bytes of the socket "send" buffer |# | which may be set by using the SO_SNDBUF socket option. |# +---------------------------------------------------------+net.core.wmem_default=262144# +---------------------------------------------------------+# | Maximum setting in bytes of the socket "send" buffer |# | which may be set by using the SO_SNDBUF socket option. |# +---------------------------------------------------------+net.core.wmem_max=262144

检查并关闭 UDP ICMP 拒绝

在 Linux 安装期间,我指示不配置防火墙选项。默认情况下,配置防火墙的选项由安装程序选择。这使我吃了好几次苦头,因此我要仔细检查防火墙选项是否未配置,并确保 udp ICMP 过滤已关闭。

如果 UDP ICMP 被防火墙阻塞或拒绝,Oracle 集群件软件将在运行几分钟之后崩溃。如果 Oracle 集群件进程出现故障,您的 <machine_name>_evmocr.log 文件中将出现以下类似内容:

08/29/2005 22:17:19

oac_init:2: Could not connect to server, clsc retcode = 9

08/29/2005 22:17:19

a_init:12!: Client init unsuccessful : [32]

ibctx:1:ERROR: INVALID FORMAT

proprinit:problem reading the bootblock or superbloc 22如果遇到此类错误,解决方法是删除 udp ICMP (iptables) 拒绝规则,或者干脆关闭防火墙选项。之后,Oracle 集群件软件将开始正常工作,而不会崩溃。以下命令应该以 root 用户帐户的身份执行:

 

检查以确保防火墙选项关闭。如果防火墙选项已停用(如下面的示例所示),则不必继续执行以下步骤。 # /etc/rc.d/init.d/iptables status

Firewall is stopped.

 

如果防火墙选项已启用,您首先需要手动停用 UDP ICMP 拒绝: # /etc/rc.d/init.d/iptables stop

Flushing firewall rules: [ OK ]

Setting chains to policy ACCEPT: filter [ OK ]

Unloading iptables modules: [ OK ]

 

然后,针对下一次服务器重新引导关闭 UDP ICMP 拒绝(应该始终被关闭): # chkconfig iptables off

9. 安装 Openfiler在网络存储服务器 (openfiler1) 上执行以下安装!

在两个 Oracle RAC 节点上进行网络配置之后,下一步是将 Openfiler 软件安装到网络存储服务器 (openfiler1)。在本文的后面部分,会将网络存储服务器配置为 iSCSI 存储设备,以满足所有 Oracle RAC 10g 共享存储要求。

Openfiler 由 rPath Linux 驱动,它是一个基于浏览器的免费网络存储管理实用程序,可以在单一框架中提供基于文件的网络连接存储 (NAS) 和基于块的存储区域网 (SAN)。整个软件包与开放源代码应用程序(例如 Apache、Samba、LVM2、ext3、Linux NFS 和 iSCSI Enterprise Target)连接。Openfiler 将这些随处可见的技术组合到一个易于使用的小型管理解决方案中,该解决方案通过一个基于 Web 且功能强大的管理界面实现。

Openfiler 支持 CIFS、NFS、HTTP/DAV 和 FTP,但是,我们仅使用它的 iSCSI 功能为 Oracle RAC 10g 需要的共享存储组件实现低成本的 SAN。操作系统和 Openfiler 应用程序将安装于同一个内置 SATA 磁盘上。第二个内置 73GB 15K SCSI 硬盘将被配置为一个“卷组”,该卷组用于所有共享磁盘存储之需。Openfiler 服务器将配置为使用该卷组来进行基于 iSCSI 的存储,并且将在我们的 Oracle RAC 10g 配置中用于存储 Oracle 集群件所需的共享文件以及所有 Oracle ASM 卷。

请注意,只要网络存储服务器 (Openfiler) 能够识别并具有足够的空间,任何类型的硬盘(内置或外置)都可用于数据库存储。例如,我已在 500GB 内置 SATA 磁盘上建立了一个额外的分区用于 iSCSI 目标,但决定在此例中使用速度更快的 SCSI 磁盘。

要了解有关 Openfiler 的更多信息,请访问其网站 http://www.61k.com

下载 Openfiler

根据您的硬件体系结构,使用下面的链接下载适用于 x86 或 x86_64 的 Openfiler NAS/SAN Appliance 2.3 版(最终版)。本示例使用 x86_64。下载 Openfiler 之后,需要将 ISO 映像刻录到 CD。

Openfiler x86: openfiler-2.3-x86-disc1.iso (322 MB)



x86_64: openfiler-2.3-x86_64-disc1.iso (336 MB)

如果您将以上 ISO 文件下载到 MS Windows 计算机,可以使用多种方法将这些映像(ISO 文件)刻录到 CD。您可能很熟悉这个过程,甚至已经拥有合适的软件,可以将映像刻录到 CD。如果您不熟悉这个过程,并且没有将映像刻录到 CD 所需的软件,这里提供了两个软件程序包(实际上有许多个): UltraISO Magic ISO Maker

 

安装 Openfiler

本部分概述了用于安装 Openfiler 软件的各个屏幕。在本文中,我选择了使用所有默认选项安装 Openfiler。所需的唯一手动更改是为了配置本地网络设置。

安装完成之后,服务器将重新引导以确保启动并识别所需的所有组件、服务和驱动程序。重新引导之后,Openfiler 服务器将会发现所有外置硬盘驱动器(若已连接)。

有关更详细的安装说明,请访问 http://www.61k.comlearn/。但是,我建议使用下面提供的说明对该 Oracle RAC 10g 进行配置。

将 Openfiler 软件安装到网络存储服务器之前,应该先安装两个 NIC 接口(卡),连接并打开所有外置硬盘驱动器(如果您要使用外置硬盘驱动器)。

在下载并将 Openfiler ISO 映像(ISO 文件)刻录到 CD 之后,将该 CD 插入网络存储服务器(在本例中是 openfiler1),启动,并按照以下说明来回应安装屏幕的提示。

引导屏幕

第一个屏幕是 Openfiler 引导屏幕。在 boot: 提示符处按 [Enter] 键启动安装过程。

介质测试

当要求测试 CD 介质时,用 Tab 键切换到 [Skip] 并按 [Enter] 键。如果有错误,则介质刻录软件会向我们发出警告。在几秒钟后,安装程序将会检测视频卡、显示器和鼠标。然后安装程序进入 GUI 模式。

欢迎使用 Openfiler NSA

在该欢迎屏幕上,单击 [Next] 继续。

键盘配置

下一个屏幕将提示您进行键盘设置。为您的配置作出合适的选择。

磁盘分区设置

下一个屏幕将询问使用“Automatic Partitioning”还是“Manual Partitioning with Disk Druid”执行磁盘分区。虽然 Openfiler 官方文档建议使用手动分区,但我选择使用“自动分区”,因为我的示例配置较为简单。

选择 [Automatically partition] 并单击 [Next] 继续。

自动分区

如果以前在本机上安装了 Linux,则下一屏幕将询问您是要“删除”还是“保留”旧分区。选择 [Remove all partitions on this system] 选项。就我的示例配置而言,我选择了仅使用 500GB SATA 内置硬盘驱动器 [sdb] 来进行操作系统和 Openfiler 应用程序的安装。我取消选择了 73GB SCSI 内置硬盘驱动器,因为在下一部分中该磁盘将专门用于创建单个“卷组”,该卷组将用于 Oracle RAC 10g 的所有基于 iSCSI 的共享磁盘存储之需。

我还选中了 [Review (and modify if needed) the partitions created] 复选框。单击 [Next] 继续。

然后显示一个对话窗口,询问您是否真的要删除所有分区。单击 [Yes] 回复这一警告。

分区

随后安装程序将允许您查看(如果需要还可以更改)它为您在上一屏中选择的硬盘自动选择的磁盘分区。在绝大多数情况下,安装程序将为 /boot 分配 100MB,为交换分区分配足够数量的空间,而将剩余空间分配给这个(这些)磁盘的根 (/) 分区。在本示例中,我对安装程序针对 /dev/sdb 建议的分区感觉满意。

安装程序还将显示它所发现的任何其他内置硬盘。对于我的示例配置,安装程序发现了 73GB SCSI 内置硬盘作为 /dev/sda。现在,我将“删除”此驱动器上的任何及所有分区(只有一个分区,/dev/sda1)。在下一部分,我将为该特定硬盘创建所需分区。

网络配置

在启动 Openfiler 安装之前,我已确认在网络存储服务器上安装了两个 NIC 接口(卡)。本屏幕应该已经成功地检测到每个网络设备。

首先,确保将每个网络设备设置为 [Active on boot]。默认情况下,安装程序可能选择不激活 eth1。

第二步,单击 [Edit] 按照以下方法对 eth0 和 eth1 进行编辑操作。您可能要为 eth0 和 eth1 使用不同的 IP 地址,没问题。但是,您必须将 eth1(存储网络)配置为与 linux1 和 linux2 上的 eth1 位于同一子网中:

eth0:

- 取消选中 [Configure using DHCP] 选项

- 选中 [Activate on boot]

- IP 地址:192.168.1.195

- 网络掩码: 255.255.255.0

eth1:

- 取消选中 [Configure using DHCP] 选项

- 选中 [Activate on boot]

- IP 地址:192.168.2.195

- 网络掩码: 255.255.255.0

接着,手动设置您的主机名。我使用的主机名是“openfiler1”。然后提供您的网关和 DNS 服务器,最后关闭该对话框。

时区

下一个屏幕将允许您配置时区信息。为您的位置作出合适的选择。

设置根口令

选择一个根口令,然后单击 [Next] 继续。

关于安装

本屏幕主要是一个确认屏幕。单击 [Next] 开始安装。

恭喜

大功告成。您已经成功地在网络存储服务器上安装了 Openfiler。安装程序将从 CD-ROM 驱动器中弹出 CD。取出 CD,单击 [Reboot] 重新引导系统。

如果在重新引导后一切都已成功,您现在应该看到文本登录屏幕和用于管理 Openfiler 服务器的 URL。

在 Openfiler 服务器上修改 /etc/hosts 文件

虽然并非必要,但我通常会将 /etc/hosts 文件的内容从一个 Oracle RAC 节点复制到新的 Openfiler 服务器。在测试集群网络时,这可以实现方便的名称解析。

10. 使用 Openfiler 配置 iSCSI 卷在网络存储服务器 (openfiler1) 上执行以下配置任务!

可以使用 Openfiler Storage Control Center(一个基于浏览器的工具,通过端口 446 上的 https 连接实现)执行 Openfiler 管理。例如:

https://openfiler1.idevelopment.info:446/从 Openfiler Storage Control Center 主页,以管理员身份登录。Openfiler 的默认管理员登录凭证为:

 

Username: openfiler Password: password

 

管理员看到的第一个页面是 [Status] / [System Information] 屏幕。

要将 Openfiler 用作 iSCSI 存储服务器,我们需要执行六个主要任务:设置 iSCSI 服务、配置网络访问、指定物理存储并对其分区、创建新的卷组、创建所有逻辑卷、最后,为每个逻辑卷创建新的 iSCSI 目标。

服务

要控制服务,我们使用 Openfiler Storage Control Center 并导航到 [Services] / [Manage Services]:



图 6:启用 iSCSI Openfiler 服务

要启用 iSCSI 服务,单击“iSCSI target server”服务名称下面的“Enable”链接。之后,“iSCSI target server”状态应更改为“Enabled”。

ietd 程序将实现 iSCSI Enterprise Target 软件的用户级部分,以便在 Linux 上构建 iSCSI 存储系统。启用 iSCSI 目标之后,我们应该能够通过 SSH 进入 Openfiler 服务器,并看到 iscsi-target 服务正在运行:

[root@openfiler1 ~]# service iscsi-target statusietd (pid 14243) is running...

网络访问配置

下一步是配置 Openfiler 中的网络访问,识别需要通过存储(专用)网络访问 iSCSI 卷的两个 Oracle RAC 节点(linux1 和 linux2)。注意,本部分稍后将会创建 iSCSI 卷。另请注意,本步骤并不实际授予两个 Oracle RAC 节点访问 iSCSI 卷所需的相应权限。授予权限的操作将在本部分稍后通过更新每个新逻辑卷的 ACL 来进行。

在上一部分中,配置网络访问是通过使用 Openfiler Storage Control Center 导航到 [System] / [Network Setup] 来完成的。按照“网络访问配置”部分(在页面底部)讲述的步骤,管理员可以设置允许其访问 Openfiler 设备导出的资源的网络和/或主机。就本文而言,我们希望单独添加两个 Oracle RAC 节点,而不是允许整个 192.168.2.0 网络访问 Openfiler 资源。

输入每个 Oracle RAC 节点时,请注意“Name”域只是一个逻辑名称,仅供参考。根据输入节点的惯例,我仅使用了为该 IP 地址定义的节点名称。接下来,在“Network/Host”域中输入实际节点时,始终使用其 IP 地址,即使其主机名已经在 /etc/hosts 文件或 DNS 中定义。最后,在我们的 Class C 网络中输入实际主机时,应使用子网掩码 255.255.255.255。

记住,您要为集群中的每个 RAC 节点输入专用 网络 (eth1) 的 IP 地址,这一点很重要。

下图显示了添加两个 Oracle RAC 节点后的结果:



图 7:为 Oracle RAC 节点配置 Openfiler 网络访问

物理存储

在本部分中,我们将创建五个 iSCSI 卷,以供集群中的两个 Oracle RAC 节点用作共享存储。这将在连接到 Openfiler 服务器的内置 73GB 15K SCSI 硬盘驱动器上执行多个步骤。

存储设备(如内置 IDE/SATA/SCSI/SAS 磁盘、存储阵列、外置 USB 驱动器、外置 FireWire 驱动器或者任何其他存储设备)可以连接到 Openfiler 服务器,并供客户端使用。如果在 OS 级发现这些设备,就可以使用 Openfiler Storage Control Center 设置和管理所有这些存储设备。

在本例中,我们有一个 73GB 的内置 SCSI 硬盘驱动器用于满足共享存储之需。在 Openfiler 服务器上,该驱动器显示为 /dev/sdb (MAXTOR ATLAS15K2_73SCA)。要看到该驱动器并启动 iSCSI 卷的创建过程,请从 Openfiler Storage Control Center 导航到 [Volumes] / [Block Devices]:



图 8:Openfiler 物理存储 — 块设备管理

对物理磁盘进行分区

我们要执行的第一步是在 /dev/sdb 内置硬盘上创建一个主分区。单击 /dev/sdb 链接,我们会看到“Edit”和“Create”选项,分别用于编辑和创建分区。由于我们将创建一个跨整个磁盘的主分区,因此可以将大多数选项保留为默认设置,唯一的修改是将“Partition Type”由“Extended partition”更改为“Physical volume”。下面是我为了在 /dev/sdb 上创建主分区而指定的值:

模式: 主

分区类型:物理卷

开始柱面:1

结束柱面: 8924

现在,大小将显示 68.36 GB。要接受该设置,单击“Create”按钮。这将在我们的内置硬盘上生成一个新的分区 (/dev/sdb1):



图 9:对物理卷进行分区

卷组管理

下一步是创建卷组。我们将创建一个名为 rac1 的卷组,其中包含新创建的主分区。

从 Openfiler Storage Control Center 中导航到 [Volumes] / [Volume Groups]。我们将看到所有现有的卷组,或者什么也看不到(我们的情况就是这样)。使用 Volume Group Management 屏幕,输入新卷组的名称 (rac1),单击 /dev/sdb1 前面的复选框以选择该分区,最后单击“Add volume group”按钮。之后,我们会看到一个列表,其中将显示我们新创建的名为“rac1”的卷组:



图 10:创建了新卷组

逻辑卷

现在,我们可以在新创建的卷组 (rac1) 中创建五个逻辑卷。

从 Openfiler Storage Control Center 中导航到 [Volumes] / [Add Volume]。我们将看到新创建的卷组 (rac1) 及其块存储统计信息。在该屏幕底部还提供了一个选项,用于在选定的卷组中创建一个新卷 —(在“rac1”中创建一个卷)。使用该屏幕创建以下五个逻辑 (iSCSI) 卷。在创建每个逻辑卷之后,应用程序将转至“Manage Volumes”屏幕。然后,您需要单击后退到“Add Volume”选项卡以创建下一个逻辑卷,直至五个 iSCSI 卷全部创建完毕:

 

iSCSI / 逻辑卷

卷名 卷描述 所需空间 (MB) 文件系统类型

racdb-crs racdb - Oracle Clusterware 2,048 iSCSI

racdb-asm1 racdb - ASM Volume 1 16,984 iSCSI

racdb-asm2 racdb - ASM Volume 2 16,984 iSCSI

racdb-asm3 racdb - ASM Volume 3 16,984 iSCSI

racdb-asm4 racdb - ASM Volume 4 16,984 iSCSI

实际上,我们已经创建了五个 iSCSI 磁盘,现在可以将它们呈现给网络上的 iSCSI 客户端(linux1 和 linux2)。“Manage Volumes”屏幕应如下所示:



图 11:新的 iSCSI 逻辑卷

iSCSI 目标

现在,我们有了五个 iSCSI 逻辑卷。但是,为了使 iSCSI 客户端可以访问这些逻辑卷,首先需要为这五个卷中的每个卷创建一个 iSCSI 目标。每个 iSCSI 逻辑卷将会映射 到一个特定的 iSCSI 目标,并将为两个 Oracle RAC 节点授予对该目标的相应网络访问权限。对于本文,在 iSCSI 逻辑卷和 iSCSI 目标之间将会有一一映射的关系。

创建和配置 iSCSI 目标的过程包括三步:创建一个唯一的目标 IQN(基本上,是新的 iSCSI 目标的通用名称),将上一部分中创建的 iSCSI 逻辑卷之一映射到新创建的 iSCSI 目标,最后,授予两个 Oracle RAC 节点访问该新 iSCSI 目标的权限。请注意,需要对上一部分中创建的五个 iSCSI 逻辑卷中的每个卷都执行一次此过程。

对于本文,下表列出了新的 iSCSI 目标名称(目标 IQN)及其将映射到的 iSCSI 逻辑卷:

iSCSI 目标/逻辑卷映射

目标 IQN iSCSI 卷名 卷描述

iqn.2006-01.com.openfiler:racdb.crs racdb-crs racdb - Oracle Clusterware

iqn.2006-01.com.openfiler:racdb.asm1 racdb-asm1 racdb - ASM Volume 1

iqn.2006-01.com.openfiler:racdb.asm2 racdb-asm2 racdb - ASM Volume 2

iqn.2006-01.com.openfiler:racdb.asm3 racdb-asm3 racdb - ASM Volume 3

iqn.2006-01.com.openfiler:racdb.asm4 racdb-asm4 racdb - ASM Volume 4

现在我们来创建五个新的 iSCSI 目标 — 为每个 iSCSI 逻辑卷创建一个。下面的示例说明通过创建 Oracle 集群件/racdb-crs 目标 (iqn.2006-01.com.openfiler:racdb.crs) 来创建新的 iSCSI 目标时所需执行的三个步骤。这个三步过程需要对上表中列出的五个新 iSCSI 目标中的每一个都重复执行一遍。



创建新目标 IQN

从 Openfiler Storage Control Center 中导航到 [Volumes] / [iSCSI Targets]。确保选择了灰色子选项卡“Target Configuration”。您可在此选项卡页中创建一个新的 iSCSI 目标。会自动生成一个默认值,作为新 iSCSI 目标的名称(常称为“目标 IQN”)。下面是目标 IQN 的一个示例:“iqn.2006-01.com.openfiler:tsn.ae4683b67fd3”:



图 12:创建新 iSCSI 目标:默认目标 IQN

我喜欢用更具含义的字串来替换这个默认目标 IQN 最后一段。对于第一个 iSCSI 目标(Oracle 集群件/racdb-crs),我将这样来修改默认的目标 IQN:将字符串“tsn.ae4683b67fd3”替换为“racdb.crs”,如下面的图 13所示:

 



图 13:创建新 iSCSI 目标:替换默认目标 IQN

对新的目标 IQN 满意之后,单击“Add”按钮。这将会创建一个新的 iSCSI 目标,然后会出现一个页面,您可以在该页面中修改新 iSCSI 目标的一系列设置。对于本文,无需更改新 iSCSI 目标的任何设置。

LUN 映射

创建新 iSCSI 目标之后,下一步是将相应的 iSCSI 逻辑卷映射到该目标。在“Target Configuration”子选项卡下,验证选择了正确的 iSCSI 目标(“选择 iSCSI 目标”部分)。如果不是这样,使用下拉菜单选择正确的 iSCSI 目标,然后单击“Change”按钮。

接下来,单击名为“LUN Mapping”的灰色子选项卡(在“Target Configuration”子选项卡旁)。找到相应的 iSCSI 逻辑卷(本例中为 /dev/rac1/racdb-crs),然后单击“Map”按钮。您无需更改此页面中的任何设置。单击“Map”按钮后,您的屏幕应如图 14 所示:



图 14:创建新 iSCSI 目标:映射 LUN

网络 ACL

需要先授予 iSCSI 客户端相应的权限,它才能访问新创建的 iSCSI 目标。在前面,我们已通过 Openfiler 对两个主机(Oracle RAC 节点)配置网络访问。这两个节点需要通过存储(专用)网络访问新的 iSCSI 目标。现在,我们需要授予这两个 Oracle RAC 节点访问新 iSCSI 目标的权限。

单击名为“Network ACL”的灰色子选项卡(在“LUN Mapping”子选项卡旁)。对当前的 iSCSI 目标,将两个主机的“Access”值由“Deny”更改为“Allow”,然后单击“Update”按钮。



图 15:创建新 iSCSI 目标:更新网络 ACL

返回到创建新的目标 IQN 部分,对其余四个 ISCSI 逻辑卷执行这三个任务,同时替换“iSCSI 目标/逻辑卷映射”表中找到的值。

11. 在 Oracle RAC 节点上配置 iSCSI 卷

在集群中的两个 Oracle RAC 节点上配置 iSCSI 启动器!但是,创建分区应该只在 RAC 集群的一个节点上执行。

iSCSI 客户端可以是提供 iSCSI 支持(驱动程序)的任何系统(Linux、Unix、MS Windows、Apple Mac 等)。在我们的示例中,客户端是两个 Linux 服务器(linux1 和 linux2),它们运行的是 Oracle Enterprise Linux 5.3。

在本部分中,我们将在两个 Oracle RAC 节点上配置 iSCSI 软件启动器。Oracle Enterprise Linux 5.3 包含 Open-iSCSI iSCSI 软件启动器,该软件启动器位于 iscsi-initiator-utils RPM 中。这是早期版本 Oracle Enterprise Linux (4.x) 中的一个更改,它包含作为 Linux-iSCSI 项目的一部分而开发的 Linux iscsi-sfnet 软件驱动程序。所有 iSCSI 管理任务(如发现和登录)将使用 Open-iSCSI 中包含的命令行接口 iscsiadm。

iSCSI 软件启动器将配置为自动登录网络存储服务器 (openfiler1),并发现 上一部分中创建的 iSCSI 卷。之后,我们将说明使用 udev 为发现的每个 iSCSI 目标名称创建永久的本地 SCSI 设备名称(即 /dev/iscsi/asm1)的步骤。您需要拥有一致的本地 SCSI 设备名称及其映射到的 iSCSI 目标,才能知道要用于 OCFS2 的卷(设备)和属于 ASM 的卷。但是,在此之前,我们必须先安装 iSCSI 启动器软件!

安装 iSCSI(启动器)服务

使用 Oracle Enterprise Linux 5.3,默认情况下不会安装 Open-iSCSI iSCSI 软件启动器。该软件包含在 1 号 CD 上的 iscsi-initiator-utils 程序包中。要确定该程序包是否已安装(大多数情况下没有安装),在两个 Oracle RAC 节点上执行以下命令:

# rpm -qa | grep iscsi-initiator-utils如果 iscsi-initiator-utils 程序包未安装,将 1 号 CD 加载到每个 Oracle RAC 节点并执行以下命令:

# mount -r /dev/cdrom /media/cdrom# cd /media/cdrom/Server# rpm -Uvh iscsi-initiator-utils-6.2.0.868-0.18.el5.i386.rpm# cd /# eject配置 iSCSI(启动器)服务

验证 iscsi-initiator-utils 程序包已经安装到两个 Oracle RAC 节点之后,启动 iscsid 服务,并使其在系统引导时自动启动。我们还将配置 iscsi 服务自动启动,使其在系统启动时自动登录 iSCSI 目标。

# service iscsid startTurning off network shutdown. Starting iSCSI daemon: [ OK ][ OK ]# chkconfig iscsid on# chkconfig iscsi on既然 iSCSI 服务已经启动,下面使用 iscsiadm 命令行接口发现网络存储服务器上的所有可用目标。这应该在两个 Oracle RAC 节点上执行,以检验配置是否正常工作:

# iscsiadm -m discovery -t sendtargets -p openfiler1-priv192.168.2.195:3260,1 iqn.2006-01.com.openfiler:racdb.asm1192.168.2.195:3260,1 iqn.2006-01.com.openfiler:racdb.asm2192.168.2.195:3260,1 iqn.2006-01.com.openfiler:racdb.asm3192.168.2.195:3260,1 iqn.2006-01.com.openfiler:racdb.asm4192.168.2.195:3260,1 iqn.2006-01.com.openfiler:racdb.crs手动登录 iSCSI 目标

此时,iSCSI 启动器服务已经启动,每个 Oracle RAC 节点都能够从网络存储服务器中发现可用目标。下一步是手动登录每个可用目标,这可以使用 iscsiadm 命令行接口来完成。这需要在两个 Oracle RAC 节点上运行。注意,我必须指定 IP 地址而非网络存储服务器的主机名 (openfiler1-priv) — 我认为,如果上述发现使用 IP 地址显示目标,则这是必需的。

# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.asm1 -p 192.168.2.195 -l# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.asm2 -p 192.168.2.195 -l# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.asm3 -p 192.168.2.195 -l# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.asm4 -p 192.168.2.195 -l# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.crs -p 192.168.2.195 -l配置自动登录

下一步是确保在计算机引导(或 iSCSI 启动器服务启动/重新启动)时,客户端将自动登录上面列出的每个目标。正如上面描述的手动登录过程,在两个 Oracle RAC 节点上都执行以下命令:

# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.asm1 -p 192.168.2.195 --op update -n node.startup -v automatic# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.asm2 -p 192.168.2.195 --op update -n node.startup -v automatic# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.asm3 -p 192.168.2.195 --op update -n node.startup -v automatic# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.asm4 -p 192.168.2.195 --op update -n node.startup -v automatic# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.crs -p 192.168.2.195 --op update -n node.startup -v automatic创建永久性本地 SCSI 设备名称

在本部分中,我们将说明为每个 iSCSI 目标名称创建永久性本地 SCSI 设备名称的步骤。我们将使用 udev 来完成该任务。您需要拥有一致的本地 SCSI 设备名称及其映射到的 iSCSI 目标,才能知道要用于 OCFS2 的卷(设备)和属于 ASM 的卷。

如果任一个 Oracle RAC 节点引导并且 iSCSI 启动器服务启动,则它将自动登录到以随机方式配置的每个目标,并将这些目标映射到下一个可用的本地 SCSI 设备名称。例如,目标 iqn.2006-01.com.openfiler:racdb.asm1 可能会映射到 /dev/sda。实际上,我可以通过查看 /dev/disk/by-path 目录来确定所有目标的当前映射:

# (cd /dev/disk/by-path; ls -l *openfiler* | awk '{FS=" "; print $9 " " $10 " " $11}')ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm1-lun-0 -> ../../sdaip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm2-lun-0 -> ../../sdbip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm3-lun-0 -> ../../sdcip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm4-lun-0 -> ../../sddip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.crs-lun-0 -> ../../sde使用上述清单的输出,我们可以建立以下当前映射:

iSCSI 目标名称到本地 SCSI 设备名称的当前映射

iSCSI 目标名称 SCSI 设备名称

iqn.2006-01.com.openfiler:racdb.asm1 /dev/sda

iqn.2006-01.com.openfiler:racdb.asm2 /dev/sdb

iqn.2006-01.com.openfiler:racdb.asm3 /dev/sdc

iqn.2006-01.com.openfiler:racdb.asm4 /dev/sdd

iqn.2006-01.com.openfiler:racdb.crs /dev/sde

但是,每次重新引导 Oracle RAC 节点时,该映射都可能有所不同。例如,重新引导之后,可能会决定将 iSCSI 目标 iqn.2006-01.com.openfiler:racdb.asm1 映射到本地 SCSI 设备 /dev/sdd。因此,如果您无法预测重新引导后的 iSCSI 目标映射,依赖于使用本地 SCSI 设备名称是不现实的。

我们需要的是可以引用的、一致的设备名称(即 /dev/iscsi/asm1),该设备名称在重新引导后将始终指向正确的 iSCSI 目标。这就是引入名为 udev 的动态设备管理 工具的原因。udev 提供了一个动态设备目录,使用一组可配置的规则通过符号链接指向实际设备。当 udev 收到设备事件(例如,客户端登录到 iSCSI 目标)时,就会根据 sysfs 中提供的可用设备属性匹配其配置好的规则以便识别设备。匹配规则可以提供其他设备信息或指定设备节点名和多个符号链接名,并指示 udev 运行其他程序(例如,一个 SHELL 脚本)作为设备事件处理过程的一部分。

第一步是创建一个新的规则文件。该文件将命名为 /etc/udev/rules.d/55-openiscsi.rules,并且只包含一行用于接收我们感兴趣事件的名称-值对。它还将定义一个调出 SHELL 脚本 (/etc/udev/scripts/iscsidev.sh),用于处理事件。

在两个 Oracle RAC 节点上创建以下规则文件 /etc/udev/rules.d/55-openiscsi.rules:

..............................................# /etc/udev/rules.d/55-openiscsi.rulesKERNEL=="sd*", BUS=="scsi", PROGRAM="/etc/udev/scripts/iscsidev.sh %b",SYMLINK+="iscsi/%c/part%n"..............................................现在,我们需要创建在接收该事件时将调用的 UNIX SHELL 脚本。我们首先在两个 Oracle RAC 节点上创建一个单独的目录,用于存储 udev 脚本:

# mkdir -p /etc/udev/scripts接下来,在两个 Oracle RAC 节点上创建 UNIX shell 脚本 /etc/udev/scripts/iscsidev.sh:

..............................................#!/bin/sh# FILE: /etc/udev/scripts/iscsidev.shBUS=${1}HOST=${BUS%%:*}[ -e /sys/class/iscsi_host ] || exit 1file="/sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session*/targetname"target_name=$(cat ${file})# This is not an open-scsi driveif [ -z "${target_name}" ]; thenexit 1fiecho "${target_name##*.}"..............................................创建 UNIX SHELL 脚本后,将其更改为可执行文件:

# chmod 755 /etc/udev/scripts/iscsidev.sh既然已经配置了 udev,下面将在两个 Oracle RAC 节点上重新启动 iSCSI 服务:

# service iscsi stopLogging out of session [sid: 1, target: iqn.2006-01.com.openfiler:racdb.asm1, portal: 192.168.2.195,3260]Logging out of session [sid: 2, target: iqn.2006-01.com.openfiler:racdb.asm2, portal: 192.168.2.195,3260]Logging out of session [sid: 3, target: iqn.2006-01.com.openfiler:racdb.asm3, portal: 192.168.2.195,3260]Logging out of session [sid: 4, target: iqn.2006-01.com.openfiler:racdb.asm4, portal: 192.168.2.195,3260]Logging out of session [sid: 5, target: iqn.2006-01.com.openfiler:racdb.crs, portal: 192.168.2.195,3260]Logout of [sid: 1, target: iqn.2006-01.com.openfiler:racdb.asm1, portal: 192.168.2.195,3260]: successfulLogout of [sid: 2, target: iqn.2006-01.com.openfiler:racdb.asm2, portal: 192.168.2.195,3260]: successfulLogout of [sid: 3, target: iqn.2006-01.com.openfiler:racdb.asm3, portal: 192.168.2.195,3260]: successfulLogout of [sid: 4, target: iqn.2006-01.com.openfiler:racdb.asm4, portal: 192.168.2.195,3260]: successfulLogout of [sid: 5, target: iqn.2006-01.com.openfiler:racdb.crs, portal: 192.168.2.195,3260]: successfulStopping iSCSI daemon:# service iscsi startiscsid dead but pid file existsTurning off network shutdown. Starting iSCSI daemon: [ OK ][ OK ]Setting up iSCSI targets: Logging in to [iface: default, target: iqn.2006-01.com.openfiler:racdb.asm1, portal: 192.168.2.195,3260]Logging in to [iface: default, target: iqn.2006-01.com.openfiler:racdb.asm4, portal: 192.168.2.195,3260]Logging in to [iface: default, target: iqn.2006-01.com.openfiler:racdb.crs, portal: 192.168.2.195,3260]Logging in to [iface: default, target: iqn.2006-01.com.openfiler:racdb.asm3, portal: 192.168.2.195,3260]Logging in to [iface: default, target: iqn.2006-01.com.openfiler:racdb.asm2, portal: 192.168.2.195,3260]Login to [iface: default, target: iqn.2006-01.com.openfiler:racdb.asm1, portal: 192.168.2.195,3260]: successfulLogin to [iface: default, target: iqn.2006-01.com.openfiler:racdb.asm4, portal: 192.168.2.195,3260]: successfulLogin to [iface: default, target: iqn.2006-01.com.openfiler:racdb.crs, portal: 192.168.2.195,3260]: successfulLogin to [iface: default, target: iqn.2006-01.com.openfiler:racdb.asm3, portal: 192.168.2.195,3260]: successfulLogin to [iface: default, target: iqn.2006-01.com.openfiler:racdb.asm2, portal: 192.168.2.195,3260]: successful[ OK ]下面,我们来看一下我们的辛勤工作是否得到了回报:

# ls -l /dev/iscsi/*/dev/iscsi/asm1:total 0lrwxrwxrwx 1 root root 9 Jul 29 16:09 part -> ../../sdb/dev/iscsi/asm2:total 0lrwxrwxrwx 1 root root 9 Jul 29 16:09 part -> ../../sdd/dev/iscsi/asm3:total 0lrwxrwxrwx 1 root root 9 Jul 29 16:09 part -> ../../sdc/dev/iscsi/asm4:total 0lrwxrwxrwx 1 root root 9 Jul 29 16:09 part -> ../../sda/dev/iscsi/crs:total 0lrwxrwxrwx 1 root root 9 Jul 29 16:09 part -> ../../sde上面的清单显示,udev 所做的工作正是我们所期待的!现在,我们拥有了一组一致的本地设备名称,可用于引用 iSCSI 目标。例如,我们可以安全地假设设备名称 /dev/iscsi/asm1/part 将始终引用 iSCSI 目标 iqn.2006-01.com.openfiler:racdb.asm1。现在,我们拥有了一致的 iSCSI 目标名称到本地设备名称的映射,如下表所示:

iSCSI 目标名称到本地设备名称的映射

iSCSI 目标名称 本地设备名称

iqn.2006-01.com.openfiler:racdb.asm1 /dev/iscsi/asm1/part

iqn.2006-01.com.openfiler:racdb.asm2 /dev/iscsi/asm2/part

iqn.2006-01.com.openfiler:racdb.asm3 /dev/iscsi/asm3/part

iqn.2006-01.com.openfiler:racdb.asm4 /dev/iscsi/asm4/part

iqn.2006-01.com.openfiler:racdb.crs /dev/iscsi/crs/part

 

在 iSCSI 卷上创建分区

现在,我们需要在每个 iSCSI 卷上创建一个占用整个卷大小的主分区。正如本文前面提到的那样,我将使用 Oracle 的集群文件系统第 2 版 (OCFS2) 存储供 Oracle 集群件软件共享的两个文件。然后,我们将使用自动存储管理 (ASM) 创建四个 ASM 卷;其中,两个用于所有物理数据库文件(数据/索引文件、联机重做日志文件和控制文件),另两个用于闪回恢复区(RMAN 备份和存档重做日志文件)。

下表列出了五个 iSCSI 卷及其支持的文件系统:

Oracle 共享驱动器配置

文件系统类型 iSCSI 目标(短)名称 大小 挂载点 ASM 磁盘组名称 文件类型

OCFS2 crs 2GB /u02 Oracle 集群注册表 (OCR) 文件 — (~250MB)

表决磁盘 — (~20MB)

ASM asm1 17.8GB ORCL:VOL1 +RACDB_DATA1 Oracle 数据库文件

ASM asm2 17.8GB ORCL:VOL2 +RACDB_DATA1 Oracle 数据库文件

ASM asm3 17.8GB ORCL:VOL3 +FLASH_RECOVERY_AREA Oracle 闪回恢复区

ASM asm4 17.8GB ORCL:VOL4 +FLASH_RECOVERY_AREA Oracle 闪回恢复区

合计 73.2GB

如上表所示,我们需要在每个 iSCSI 卷(共 5 个)上创建一个 Linux 主分区。fdisk 命令在 Linux 中用于创建(和删除)分区。对于每个 iSCSI 卷(共 5 个),您都可以在创建主分区时使用默认值,因为默认操作是使用整个磁盘。您可以安全地忽略指出设备未包含有效 DOS 分区(或 Sun、SGI 或 OSF 磁盘标签)的任何警告。

在本例中,我将在 linux1 上运行 fdisk 命令,以使用 udev 在上一部分中创建的本地设备名称在每个 iSCSI 目标上创建一个主分区:

/dev/iscsi/asm1/part /dev/iscsi/asm2/part /dev/iscsi/asm3/part /dev/iscsi/asm4/part /dev/iscsi/crs/part

 

注:要在每个 iSCSI 卷上创建单个分区,只能从 Oracle RAC 集群中的一个节点上运行!(即 linux1)

# ---------------------------------------# fdisk /dev/iscsi/asm1/partCommand (m for help): nCommand actione extendedp primary partition (1-4)pPartition number (1-4): 1First cylinder (1-16992, default 1): 1Last cylinder or +size or +sizeM or +sizeK (1-16992, default 16992): 16992Command (m for help): pDisk /dev/iscsi/asm1/part: 17.8 GB, 17817403392 bytes64 heads, 32 sectors/track, 16992 cylindersUnits = cylinders of 2048 * 512 = 1048576 bytesDevice Boot Start End Blocks Id System/dev/iscsi/asm1/part1 1 16992 17399792 83 LinuxCommand (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.# ---------------------------------------# fdisk /dev/iscsi/asm2/partCommand (m for help): nCommand actione extendedp primary partition (1-4)pPartition number (1-4): 1First cylinder (1-16992, default 1): 1Last cylinder or +size or +sizeM or +sizeK (1-16992, default 16992): 16992Command (m for help): pDisk /dev/iscsi/asm2/part: 17.8 GB, 17817403392 bytes64 heads, 32 sectors/track, 16992 cylindersUnits = cylinders of 2048 * 512 = 1048576 bytesDevice Boot Start End Blocks Id System/dev/iscsi/asm2/part1 1 16992 17399792 83 LinuxCommand (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.# ---------------------------------------# fdisk /dev/iscsi/asm3/partCommand (m for help): nCommand actione extendedp primary partition (1-4)pPartition number (1-4): 1First cylinder (1-16992, default 1): 1Last cylinder or +size or +sizeM or +sizeK (1-16992, default 16992): 16992Command (m for help): pDisk /dev/iscsi/asm3/part: 17.8 GB, 17817403392 bytes64 heads, 32 sectors/track, 16992 cylindersUnits = cylinders of 2048 * 512 = 1048576 bytesDevice Boot Start End Blocks Id System/dev/iscsi/asm3/part1 1 16992 17399792 83 LinuxCommand (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.# ---------------------------------------# fdisk /dev/iscsi/asm4/partCommand (m for help): nCommand actione extendedp primary partition (1-4)pPartition number (1-4): 1First cylinder (1-16960, default 1): 1Last cylinder or +size or +sizeM or +sizeK (1-16960, default 16960): 16960Command (m for help): pDisk /dev/iscsi/asm4/part: 17.7 GB, 17783848960 bytes64 heads, 32 sectors/track, 16960 cylindersUnits = cylinders of 2048 * 512 = 1048576 bytesDevice Boot Start End Blocks Id System/dev/iscsi/asm4/part1 1 16960 17367024 83 LinuxCommand (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.# ---------------------------------------# fdisk /dev/iscsi/crs/partCommand (m for help): nCommand actione extendedp primary partition (1-4)pPartition number (1-4): 1First cylinder (1-1009, default 1): 1Last cylinder or +size or +sizeM or +sizeK (1-1009, default 1009): 1009Command (m for help): pDisk /dev/iscsi/crs/part: 2147 MB, 2147483648 bytes67 heads, 62 sectors/track, 1009 cylindersUnits = cylinders of 4154 * 512 = 2126848 bytesDevice Boot Start End Blocks Id System/dev/iscsi/crs/part1 1 1009 2095662 83 LinuxCommand (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.验证新分区

在 linux1 上创建所有必要分区之后,现在应使用以下命令以“root”用户帐户从 Oracle RAC 集群的所有其余节点 (linux2) 将分区更改通知给内核。注意,Openfiler 发现的 iSCSI 目标名称和本地 SCSI 设备名称的映射在两个 Oracle RAC 节点上将有所不同。不用担心,这不会导致任何问题,因为我们不使用本地 SCSI 设备名称,而使用 udev 在上一部分中创建的本地设备名称。

从 linux2 运行以下命令:

# partprobe# fdisk -lDisk /dev/hda: 40.0 GB, 40000000000 bytes255 heads, 63 sectors/track, 4863 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesDevice Boot Start End Blocks Id System/dev/hda1 * 1 13 104391 83 Linux/dev/hda2 14 4863 38957625 8e Linux LVMDisk /dev/sde: 2147 MB, 2147483648 bytes67 heads, 62 sectors/track, 1009 cylindersUnits = cylinders of 4154 * 512 = 2126848 bytesDevice Boot Start End Blocks Id System/dev/sde1 1 1009 2095662 83 LinuxDisk /dev/sdb: 17.7 GB, 17783848960 bytes64 heads, 32 sectors/track, 16960 cylindersUnits = cylinders of 2048 * 512 = 1048576 bytesDevice Boot Start End Blocks Id System/dev/sdb1 1 16960 17367024 83 LinuxDisk /dev/sda: 17.8 GB, 17817403392 bytes64 heads, 32 sectors/track, 16992 cylindersUnits = cylinders of 2048 * 512 = 1048576 bytesDevice Boot Start End Blocks Id System/dev/sda1 1 16992 17399792 83 LinuxDisk /dev/sdd: 17.8 GB, 17817403392 bytes64 heads, 32 sectors/track, 16992 cylindersUnits = cylinders of 2048 * 512 = 1048576 bytesDevice Boot Start End Blocks Id System/dev/sdd1 1 16992 17399792 83 LinuxDisk /dev/sdc: 17.8 GB, 17817403392 bytes64 heads, 32 sectors/track, 16992 cylindersUnits = cylinders of 2048 * 512 = 1048576 bytesDevice Boot Start End Blocks Id System/dev/sdc1 1 16992 17399792 83 Linux最后,您应该在两个 Oracle RAC 节点上运行以下命令,以验证 udev 为每个新分区创建了新的符号链接:

# (cd /dev/disk/by-path; ls -l *openfiler* | awk '{FS=" "; print $9 " " $10 " " $11}')ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm1-lun-0 -> ../../sdbip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm1-lun-0-part1 -> ../../sdb1ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm2-lun-0 -> ../../sddip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm2-lun-0-part1 -> ../../sdd1ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm3-lun-0 -> ../../sdcip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm3-lun-0-part1 -> ../../sdc1ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm4-lun-0 -> ../../sdaip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.asm4-lun-0-part1 -> ../../sda1ip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.crs-lun-0 -> ../../sdeip-192.168.2.195:3260-iscsi-iqn.2006-01.com.openfiler:racdb.crs-lun-0-part1 -> ../../sde1上面的清单显示,udev 确实为每个新分区创建了新的设备名称。在本指南后面部分,当我们为 OCFS2 和 ASMlib 配置卷时,将使用这些新的设备名称。

/dev/iscsi/asm1/part1 /dev/iscsi/asm2/part1 /dev/iscsi/asm3/part1 /dev/iscsi/asm4/part1 /dev/iscsi/crs/part1
本文标题:oracle rac-详解Oracle RAC入门和提高(1)
本文地址: http://www.61k.com/1087916.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1