Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1146467
  • 博文数量: 251
  • 博客积分: 8431
  • 博客等级: 中将
  • 技术积分: 2699
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-22 16:24
文章分类

全部博文(251)

文章存档

2016年(2)

2015年(5)

2014年(4)

2013年(10)

2012年(8)

2011年(14)

2010年(20)

2009年(33)

2008年(51)

2007年(104)

分类: Oracle

2014-01-09 16:34:09

Oracle11gR2 RAC实时应用集群(3)在Redhat Enterprise Linux6.3 x86_64下的集群(ASM篇)
(Oracle11gR2 11.2.0.3 + Grid + RHEL6.3 + ASM)

    RAC(Real Application Clusters,实时应用集群),是多台主机组成的集群计算环境,是Oracle数据库支持网格计算环境的核心技术。
    普通Oracle数据库,只能在一台主机上运行,数据库的实例和数据库文件都在一台主机上,是单实例单数据库。
    RAC实时应用集群,可以在多台主机上运行,每台节点主机上运行一个数据库实例,通过共享存储磁盘访问相同的数据库文件,是多实例单数据库,单一节点故障不影响数据库的使用,负载能力也会随节点主机的增加而加强。

    RAC集群的关键点:
    1.共享存储
    2.节点间需要内部通讯,以协调集群正常运行,所以每个节点需要提供外部网络与内部网络.
    3.CRS集群软件: 需要集群软件(Grid)协调各节点.
    4.集群注册文件(OCR): 需要注册集群,保存在共享磁盘上.
    5.仲裁磁盘(Voting Disk): 需要协调各节点决定控制权,做为表决器,保存在共享磁盘上.
    6.虚拟IP(Virturl IP): 提供客户端连接,IP由集群软件接管,当集群就绪时,虚拟IP可以连接,11gR2改为用SCAN IP连接.
    7.SCAN IP: 11gR2有增加的新特性,用于客户端连接,不需要再在客户端tnsname.ora中添加各节点状态,SCAN IP可以调节负载平衡.

    共享存储访问方式(存储系统):
    1.集群文件系统(CFS:Cluster File System)
    2.自动存储管理(ASM:Automatic Storage Management)
    3.网络文件系统(NFS)
    单机文件系统FAT32,NTFS,ext3不能作为共享存储,Oracle11g不再支持裸设备做共享存储

    选择以下储存方案来建立集群系统:
    项目                    存储系统            存储位置
    ClusterWare软件(Grid)   本地文件系统        本地磁盘
    voting disk(Grid)       ASM                 共享磁盘
    OCR(Grid)               ASM                 共享磁盘
    数据库软件              本地文件系统        本地磁盘
    数据库                  ASM                 共享磁盘

    下面说说Oracle RAC在Redhat Enterprise Linux6 x86_64下的安装过程。
    一.配置多主机节点环境
    主要为学习测试之用,可以使用虚拟机模拟来实现多台主机,比较好的选择是VMware Workstation8.0.4.
    1.使用VMware Virtual Network Editor添加网络适配器(VMnet1,VMnet2),生成两个网段,VMnet1的网段用于节点外部通讯(PublicNet),VMnet2网段用于节点间通讯(PrivateNet).

    2.使用VMware创建两台主机,在每台主机上安装Redhat Enterprise Linux6 x86_64系统,每台需要虚拟两张网卡,IP分配如下:
    节点主机  主机公网IP       虚拟IP          私网IP(内部网络)
    rac01     192.168.89.166   192.168.89.66   192.168.234.166
    rac02     192.168.89.167   192.168.89.67   192.168.234.167
    公网与私网IP设置在网卡上,虚拟IP不用设置.
    另外还需要一个SCAN IP,作为客户端连接集群用,客户端不必在tnsname.ora配置多个节点.
    SCAN名称: rac-scan,  SCAN IP: 192.168.89.91

    3.设置DNS解析,修改2台虚拟机rac01,rac02上的/etc/hosts文件,添加以下内容:
    192.168.89.166  rac01
    192.168.89.167  rac02
    192.168.89.66   rac01v
    192.168.89.67   rac02v
    192.168.234.166 rac01p
    192.168.234.167 rac02p
    192.168.89.91   rac-scan

    4.在各节点上检查和安装需要用到的软件包
    根据Oracle官方文档,需要以下软件包:
    binutils-2.17.50.0.6
    compat-libstdc++-33-3.2.3
    compat-libstdc++-33-3.2.3 (32 bit)
    elfutils-libelf-0.125
    elfutils-libelf-devel-0.125
    gcc-4.1.2
    gcc-c++-4.1.2
    glibc-2.5-24
    glibc-2.5-24 (32 bit)
    glibc-common-2.5
    glibc-devel-2.5
    glibc-devel-2.5 (32 bit)
    glibc-headers-2.5
    ksh-20060214
    libaio-0.3.106
    libaio-0.3.106 (32 bit)
    libaio-devel-0.3.106
    libaio-devel-0.3.106 (32 bit)
    libgcc-4.1.2
    libgcc-4.1.2 (32 bit)
    libstdc++-4.1.2
    libstdc++-4.1.2 (32 bit)
    libstdc++-devel 4.1.2
    make-3.81
    numactl-devel-0.9.8.x86_64
    sysstat-7.0.2
    以root用户登录系统,执行以下语句检查软件包是否安装
    # rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel gcc gcc-c++
    # rpm -q glibc glibc-common glibc-devel glibc-headers ksh libaio libaio-devel
    # rpm -q libgcc libstdc++ libstdc++-devel make numactl-devel sysstat unixODBC unixODBC-devel
    找到Redhat Enterprise Linux5 x86_64安装光盘的Server目录,安装没有安装的软件包
    # rpm -ivh compat-db-4.2.52-5.1.x86_64.rpm

    5.各节点内核参数修改.
    修改文件/etc/sysctl.conf,添加以下内容:
    # /etc/sysctl.conf
    # for oracle
    fs.aio-max-nr = 1048576
    fs.file-max = 6815744
    kernel.shmall = 2097152
    kernel.shmmax = 1245165568
    kernel.shmmni = 4096
    kernel.sem = 250 32000 100 128
    net.ipv4.ip_local_port_range = 9000 65500
    net.core.rmem_default = 262144
    net.core.rmem_max = 4194304
    net.core.wmem_default = 262144
    net.core.wmem_max = 1048586
    执行以下语句生效:
    # /sbin/sysctl -p

    修改文件/etc/security/limits.conf,添加以下内容:
    # /etc/security/limits.conf
    # for oracle
    oracle              soft    nproc   2047
    oracle              hard    nproc   16384
    oracle              soft    nofile  1024
    oracle              hard    nofile  65536
    oracle              soft    stack   10240
    grid                soft    nproc   2047
    grid                hard    nproc   16384
    grid                soft    nofile  1024
    grid                hard    nofile  65536
    grid                soft    stack   10240

    6.在各节点上添加组和用户
    # groupadd -g 1000 oinstall
    # groupadd -g 1031 dba
    # useradd -u 1101 -g oinstall -G dba oracle
    # passwd oracle
    # useradd -u 1100 -g oinstall -G dba grid
    # passwd grid

    7.在各节点上创建文件夹
    # mkdir -p /u01/app/grid
    # mkdir -p /u01/app/11.2.0/grid
    # mkdir -p /u01/app/oracle
    # chown -R root:dba /u01
    # chown -R oracle:oinstall /u01/app/oracle
    # chown -R grid:oinstall /u01/app/grid
    # chmod -R 775 /u01/

    8.创建共享磁盘
    关闭主机后建共享磁盘,Disk Mode 选择Independent Persistent,不用缓存,以便多机访问共享.
    磁盘总线选择SCSI 1:1或1:x,与本地磁盘(SCSI 0:0)分开
    另外需要修改各虚拟机目录中的vmx文件,解除锁并取消缓存,以便多机访问,添加
    disk.locking="false"
    diskLib.dataCacheMaxSize = "0"
    disk.EnableUUID = "TRUE"
    创建后另一台主机也挂载同一个磁盘.
    注意如果用虚拟机创建的磁盘,需要选择立即分配磁盘空间,否则另一台机不能读取共享磁盘的分区表.

    10.磁盘分区
    启动主机后使用fdisk命令给共享磁盘分区。
    指定为扩展分区,分成三个逻辑分区
    # fdisk -l               //查看分区
    # fdisk /dev/sdb         //分区sdb硬盘,逻辑盘sdb5,sdb6,sdb7
    第一个分区将配置ASM实例,存放集群注册(ocr)文件和表决磁盘(votedisk)文件.
    第二个分区将配置为ASM磁盘,存放数据库文件.
    第三个分区将配置为ASM磁盘,存放快速恢复区文件.
    分区后重新启动

    12.配置ASM磁盘
    在Linux中,加载设备时,因加载顺序问题,共享磁盘在各节点的设备名可能会不一致.
    为解决这个问题,保证各节点的设备名一致,有两种方法:
    一种是使用asmlib创建asm磁盘,将会在各分区上做asm磁盘标识,以保证设备名称的唯一性
    一种是使用udev管理,将从磁盘获得scsi_id,然后根据scsi_id加载成易读的设备名,保证设备名的唯一性.
    目前Oracle不再支持在Redhat Enterprise Linux下使用asmlib.所以只能使用udev来配置磁盘.

    使用udev管理配置磁盘方式如下:
    如果使用虚拟机,首先需在虚拟主机的配置文件vmx文件中设置下列参数
    disk.EnableUUID = "TRUE"
    如果虚拟主机有通过设定更改任何参数,这个参数会自动更改为FALSE,需要重设.
    启动主机后确认udev是否已安装
    # rpm -qa | grep udev
    udev-095-14.27.el5_7.1
    执行以下命令获得scsi id信息
    # /sbin/scsi_id -g -u -d /dev/sdb
    36000c29fd07c14fdb1ca780130a5ad8e
    配置udev配置文件,添加rules文件(在目录/etc/udev/rules.d/下)并授权.
    # cd /etc/udev/rules.d/
    # vi 99-x-asmdisk.rules
    添加以下参数,注意一个行为一条规则,并且逗号(,)与下一个关键词之间有空格.
    KERNEL=="sd?5", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="36000c29fd07c14fdb1ca780130a5ad8e", NAME="asmdisk1", OWNER="grid", GROUP="dba", MODE="0660"
    KERNEL=="sd?6", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="36000c29fd07c14fdb1ca780130a5ad8e", NAME="asmdisk2", OWNER="oracle", GROUP="dba", MODE="0660"
    KERNEL=="sd?7", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="36000c29fd07c14fdb1ca780130a5ad8e", NAME="asmdisk3", OWNER="oracle", GROUP="dba", MODE="0660"
    KERNEL=="sd?5", BUS=="scsi", NAME=="asmdisk1", OWNER="grid", GROUP="dba", MODE="0660"
    重新启动udev或重启节点.
    # start_udev
    验证是否配置正常
    # ls -al /dev/asmdisk*
    后续创建磁盘组时可以将搜索字符串ASM_DISKSTRING参数指向‘/dev/asmdisk*'就可以了

    二.安装RAC.

    1.安装RAC集群软件Grid.
    由于Redhat Enterprise Linux6的启动初始化已由init改用upstart的方式,inittab只保留和支持运行级别的配置,其它配置放到了别的地方,oracle 11.2.0.1

的grid在安装时执行root.sh脚本还是使用的init方式,会写启动配置到inittab,这样就会出错.
    #/u01/app/11.2.0/grid/root.sh
    ...
    Adding daemon to inittab
    CRS-4124: Oracle High Availability Services startup failed.
    CRS-4000: Command Start failed, or completed with errors.
    ohasd failed to start: Inappropriate ioctl for device
    ohasd failed to start at/u01/app/11.2.0/grid/crs/install/rootcrs.pl line 443.

    oracle 11.2.0.3则改用了upstart方式,不会有问题,这里我选用oracle 11.2.0.3安装。由于oracle 11.2.0.3补丁本身就是一个完整的安装包,不需要从11.2.0.1安装后在升级到11.2.0.3,所以直接使用oracle 11.2.0.3。

    <<1>>将软件包p10404530_112030_Linux-x86-64_3of7.zip解压到节点rac01.
    # unzip p10404530_112030_Linux-x86-64_3of7.zip

    <<2>>安装cvuadisk包
    在Grid的安装包grid/rpm/cvuqdisk-1.0.9-1.rpm,以root用户安装
    # export CVUQDISK_GRP=oinstall
    # rpm -ivh cvuqdisk-1.0.9-1.rpm

    <<3>>首先修改目录权限
    # chown -R root:oinstall /u01/app/grid
    # chmod -R 775 /u01/app/grid
    # chown -R oracle:oinstall /u01/app/oracle
    # chmod -R 775 /u01/app/oracle

    <<4>>配置grid用户环境变量.
    # su - grid
    $ vi .bash_profile
    添加以下内容
    # For Oracle
    export DISPLAY=:0.0
    export TMP=/tmp;
    export TMPDIR=$TMP;
    export ORACLE_BASE=/u01/app/grid;
    export ORACLE_HOME=/u01/app/11.2.0/grid;
    export ORACLE_TERM=xterm;
    export PATH=/usr/sbin:$PATH;
    export PATH=$ORACLE_HOME/bin:$PATH;
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
    export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
    
    <<5>>以grid用户执行目录grid下的runInstaller命令:
    $ export LANG=C
    $ ./runInstaller
    执行runInstaller,启动安装图形界面.

    1>设置网格基础结构
    安装选项:          安装和配置集群的网格基础结构.
    安装类型:          高级安装
    语言:              简体中文
    网格即插即用:      集群名称:    rac-cluster
                       SCAN名称:    rac-scan
                       SCAN端口:    1521
                       不配置GNS,如果需要自动生成虚拟IP,需配置GNS
                       GNS子域:     racgrid
                       GNS VIP地址: 192.168.89.91
    集群节点信息:      编辑和添加主机和虚拟IP名称
                       主机名   虚拟IP名
                       rac01    rac01v
                       rac02    rac02v
                       点ssh按钮配置节点ssh互信(需要输入grid用户密码)
    网络接口使用情况:  接口名称    子网           接口类型
                       PublicNet   192.168.89.0   公共
                       PrivateNet  192.168.234.0  专用
    存储选项:          自动存储管理(ASM)
    创建ASM磁盘组:     当选择存储选项:自动存储管理(ASM)后,需要创建ASM磁盘.
                       设置ASM磁盘搜索路径/dev/asmdisk*,出现udev配置的磁盘.
                       设置磁盘组名,使用外部冗余,勾选出现的磁盘
    ASM口令:           设置SYS和ASMSNMP的口令,是用相同口令
    故障隔离:          不使用智能平台管理接口(IPMI).
    安装位置:          设置安装位置默认:Oracle基目录/u01/app/grid,软件位置/u01/app/11.2.0/grid
    先决条件检查:      自动检查先决条件
    安装

    按提示在各节点上以root用户执行脚本.
    # /u01/app/oraInventory/orainstRoot.sh
    # /u01/app/11.2.0/grid/root.sh
    如果执行出错,须检查各节点的磁盘权限,之前需要配置磁盘权限.
    # chown grid:dba /dev/asmdisk1

    执行完脚本,点ok后继续配置
    最后验证时出现错误[INS-20802]Oracle Cluster Verification Utility failed.
    是因为在Hosts配置文件里配置了SCAN,未启用DNS解析,不影响RAC正常运行
    点ok后完成安装.

    <<6>>执行完后检查CRS是否成功
    [grid@rac01 grid]$ olsnodes
    rac01
    rac02

    [grid@rac01 grid]$ crsctl check crs
    CRS-4638: Oracle High Availability Services is online
    CRS-4537: Cluster Ready Services is online
    CRS-4529: Cluster Synchronization Services is online
    CRS-4533: Event Manager is online

    [grid@rac01 grid]$ crs_stat -t -v
    Name           Type           R/RA   F/FT   Target    State     Host        
    ----------------------------------------------------------------------
    ora....ER.lsnr ora....er.type 0/5    0/     ONLINE    ONLINE    rac01       
    ora....N1.lsnr ora....er.type 0/5    0/0    ONLINE    ONLINE    rac01       
    ora.VOTE.dg    ora....up.type 0/5    0/     ONLINE    ONLINE    rac01       
    ora.asm        ora.asm.type   0/5    0/     ONLINE    ONLINE    rac01       
    ora.eons       ora.eons.type  0/3    0/     ONLINE    ONLINE    rac01       
    ora.gsd        ora.gsd.type   0/5    0/     OFFLINE   OFFLINE               
    ora....network ora....rk.type 0/5    0/     ONLINE    ONLINE    rac01       
    ora.oc4j       ora.oc4j.type  0/5    0/0    OFFLINE   OFFLINE               
    ora.ons        ora.ons.type   0/3    0/     ONLINE    ONLINE    rac01       
    ora....SM1.asm application    0/5    0/0    ONLINE    ONLINE    rac01       
    ora....01.lsnr application    0/5    0/0    ONLINE    ONLINE    rac01       
    ora.rac01.gsd  application    0/5    0/0    OFFLINE   OFFLINE               
    ora.rac01.ons  application    0/3    0/0    ONLINE    ONLINE    rac01       
    ora.rac01.vip  ora....t1.type 0/0    0/0    ONLINE    ONLINE    rac01       
    ora....SM2.asm application    0/5    0/0    ONLINE    ONLINE    rac02       
    ora....02.lsnr application    0/5    0/0    ONLINE    ONLINE    rac02       
    ora.rac02.gsd  application    0/5    0/0    OFFLINE   OFFLINE               
    ora.rac02.ons  application    0/3    0/0    ONLINE    ONLINE    rac02       
    ora.rac02.vip  ora....t1.type 0/0    0/0    ONLINE    ONLINE    rac02       
    ora....ry.acfs ora....fs.type 0/5    0/     ONLINE    ONLINE    rac01       
    ora.scan1.vip  ora....ip.type 0/0    0/0    ONLINE    ONLINE    rac01

    [grid@rac01 ~]$ srvctl status listener
    监听程序 LISTENER 已启用
    监听程序 LISTENER 正在节点上运行: rac01,rac02

    表示CRS已成功.

    重新启动节点后,如果集群服务不能启动.
    # ./crsctl check crs
    Failure 1 contacting CSS daemon
    Cannot communicate with CRS
    Cannot communicate with EVM 
    需要检查设备权限的问题,如果没有使用udev的rules文件配置设备文件权限,重启后磁盘设备owner会被修改为root.
    或者没有设置crs随系统启动.
    # /u01/app/11.2.0/grid/bin/crsctl stop crs            # 停止CRS服务
    # /u01/app/11.2.0/grid/bin/crsctl start crs           # 启动CRS服务
    # /u01/app/11.2.0/grid/bin/crsctl disable crs         # 禁止随系统启动
    # /u01/app/11.2.0/grid/bin/crsctl enable crs          # 允许随系统启动
    # /u01/app/11.2.0/grid/bin/crsctl stop cluster -all   # 停止所有节点上运行的全部集群资源
    # /u01/app/11.2.0/grid/bin/crsctl start cluster -all  # 启动所有节点上运行的全部集群资源

    2.安装Oracle数据库软件.
    <<1>>.编辑Oracle用户环境,编辑.bash_profile文件
    # su - oracle
    $ vi .bash_profile
    添加以下内容
    # For Oracle
    export DISPLAY=:0.0
    export TMP=/tmp;
    export TMPDIR=$TMP;
    export ORACLE_BASE=/u01/app/oracle;
    export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1;
    export ORACLE_UNQNAME=astt;
    export ORACLE_SID=astt1;  # 在节点rac02上 export ORACLE_SID=astt2
    export ORACLE_TERM=xterm;
    export PATH=/usr/sbin:$PATH;
    export PATH=$ORACLE_HOME/bin:$PATH;
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
    export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;

    <<2>>.将oracle数据库软件解压到节点rac01.
    # unzip p10404530_112030_Linux-x86-64_1of7.zip
    # unzip p10404530_112030_Linux-x86-64_2of7.zip

    <<3>>.修改目录权限。
    # chown -R oracle:oinstall /u01/app/oracle
    # chmod -R 775 /u01/app/oracle

    <<4>>.以oracle登入系统,运行database下的runInstaller文件。
    $ ./runInstaller
    配置安全更新   不需要接收更新    
    安装选项       选择仅安装数据库软件,后续再通过dbca创建数据库.
    网格选项       Real Application Clusters数据库安装
                   节点全选
                   点按钮SSH Connectivity.配置oracle下ssh互信.
                   此时11.2.0.1好像有bug,无法输入oracle用户密码,先选单实例,下一步直到输入路径,然后后退,再选择集群数据库可以解决.
                   11.2.0.3已经没有这个bug.
    产品语言       根据需要选择:英语、简体中文
    数据库版本     企业版    
    安装位置       默认(根据.bash_profile中的全局变量设置)
                   Oracle基目录: /u01/app/oracle
                   软件位置: /u01/app/oracle/product/11.2.0/db_1
    操作系统组     oinstall
    先决条件检查   忽略警告
    安装

    按提示在每个节点上执行脚本/u01/app/oracle/product/11.2.0/db_1/root.sh
    点OK完成安装

    3.配置ASM磁盘添加磁盘组
    以grid用户运行asmca.
    设置ASM磁盘搜索路径/dev/asmdisk,出现开始用udev配置的磁盘.
    设置磁盘组名,勾选出现的磁盘
    装载磁盘到各节点.

    4.创建数据库.
    首先更改目录权限,不然后面可能会出错.
    # chown -R oracle:oinstall /u01/app/oracle
    # chown -R grid:oinstall /u01/app/grid
    # chmod -R 755 /u01/app/oracle
    # chmod -R 755 /u01/app/grid

    以oracle用户运行dbca.
    数据库类型     Oracle Real Application Clusters数据库
    操作           创建数据库
    数据库模板     一般用途
    数据库标识     设置全局数据库名和SID前缀,节点全选
    管理选项       默认
    数据库身份     设置密码
    数据库文件位置 存储类型:自动存储管理,使用Oracle-Managed files,数据库区:设置之前创建的磁盘组+DATA
                                                                    恢复区:+FLASH_AREA
    字符集
    安装
    
    出现提示在节点rac02上启动database control出错,在节点rac02执行以下命令:
    [oracle@rac02 ~]$ export ORACLE_UNQNAME=astt
    [oracle@rac02 ~]$ /u01/app/oracle/product/11.2.0/db_1/bin/emctl start dbconsole

    点OK安装完成.

    安装后可能不能连接
    如果出现错误ORA-12537: TNS:connection closed,可能是权限的问题,执行以下可以解决:
    # chown -R oracle:oinstall /u01/app/oracle
    # chown -R grid:oinstall /u01/app/grid
    # chmod -R 755 /u01/app/oracle
    # chmod -R 755 /u01/app/grid


    5.测试数据库
    运行sqlplus,以dba权限登录Oracle系统后执行以下语句查询集群节点状态:
    $ ./crs_stat -t -v
    $ sqlplus ;
    SQL> select instance_name,host_name,status from v$instance;
    SQL> select instance_name,host_name,status from gv$instance;
    $ srvctl stop database -d astt -o immediate;
    $ srvctl start database -d astt;

阅读(3515) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~