来源:Linux社区 作者:雷宇
实验环境:
笔记本一台(2GB内存,320GB硬盘)
Vmware Server 1.0.6版
Linux Enterprise 5.1版
Oracle 10g for linux(10.2.0.1)
前言:
最开始的实验环境其实不是这样的,虚拟机用的是vmware workstation,用了一段时间之后发现用vmware workstation版本建不了共享磁盘,也就没法构建ORACLE RAC实验环境,所以把vmware workstation换成了vmware server2.0。装完vmware server2.0之后连启动web界面都成问题,重装仍然如此,无奈之下启用了vmware server1.0.6版本。
在使用哪一款linux操作系统也几经选择,开始用的是linux enterprise 4.0版本,到建立共享磁盘的时候始终有问题,过不去,后来在ITPUB意外的发现了君三思的学习笔记《手把手教你用VMware在linux下安装 oracle10g RAC》,看他在里面用的是linux 5.1版本的操作系统,为了实验过程顺利一些,我也采用了这个版本的操作系统。
在使用介质的时候也碰到些小问题,搭建ORACLE RAC需要用到的两个重要介质,一是clusterware,也就是oracle集群软件,一是oracle software for linux,可能是网络的因素,在下载完10201_database_linux32.zip这个文件并上传到linux操作系统中却非常意外的发现无 法解压,究其原因可能是下载得不够健全,一部分字节出了问题,导致整个文件都不能用,于是只有重新下载,非常消耗时间。
在这个实验过程中,碰到很多问题,有的是和虚拟机相关的,有的是和linux操作系统相关的,有的是和oracle数据库相关的,因为这众多的问题 出现,导致实验进度过长,从开始准备到实验最终完成花了大概两个星期时间,光重装操作系统就不下五次。不过也亏得碰到这些小问题,随着实验的继续进行,每 个问题都得到了解决,每个问题也都备了案,在第二次重做的时候因为前期问题的积累,就进行得非常顺利。这也说明人家总结出来的文档不能完全照搬,因为实验 过程究竟会碰到什么问题都是不可预知的。
为了能做好这个实验,特地驱车到中关村购得组装250GB移动硬盘一块,之后所有实验都在移动硬盘上进行(本机60GB硬盘被各种文件资料撑得满满 的,实在没有空间来存放实验所用文件)。就在这样的情况下也碰到一些意外,比如正在移动硬盘上风风火火安装linux操作系统时,连接移动硬盘和电脑的 USB线缆突然走位,整个过程不得不重头再来。
千难万难,实验终归是成功了,为了表示纪念,也为了后来的同仁们少走弯路,特地记录于此,供大家参考。特别感谢ITPUB的君三思,如果没有他的文档帮助,我的实验不可能成功。
新建虚拟机
配置虚拟机
17,所有设备创建完毕,现在我们可以来看看具体清单:512MB内存、5块磁盘(分别位于两条SCSI总线)、三块网卡、光驱以及处理器:
安装Linux
主节点的设置
在配置linux 系统之前,首先到主节点RAC1目录下,打开.vmx 文件,添加下列内容:
disk.locking = "false"
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
diskLib.DataCacheMinReadAheadSize = "0"
diskLib.dataCachePageSize = "4096"
diskLib.maxUnsyncedWrites = "0"
scsi1:1.deviceType = "disk"
scsi1:2.deviceType = "disk"
scsi1:3.deviceType = "disk"
scsi1:4.deviceType = "disk"
2,编辑/etc/hosts文件,添加如下内容:
192.168.1.100 rac1
192.168.1.101 rac2
192.168.1.200 rac1-vip
192.168.1.201 rac2-vip
192.168.2.100 rac1-priv
192.168.2.101 rac2-priv
这里简 要说一下,192.168.1.100/101是在安装操作系统时在第一块网卡上配置好的,192.168.2.100/101是在安装操作系统时在第二 块网卡上配置好的,至于192.168.1.200/201地址只用在/etc/hosts文件中指定即可,不用编辑到任何网卡,因为它只是作为虚拟IP 地址在ORACLE RAC中使用。至于第三块网卡,因为我设定的动态IP获取方式,所以在这里用不到。
3,创建组oinstall,dba,用户oracle
[root@rac1 ~]# groupadd oinstall
[root@rac1 ~]# groupadd dba
[root@rac1 ~]# useradd -d /home/oracle -g oinstall -G dba oracle
设置oracle 用户密码(密码也设为oracle)
[root@rac1 ~]# passwd oracle
Changing password for user oracle.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
4,开通FTP功能(因为系统默认并没有打开FTP功能,这里需要人为的设置一番,在这个地方,就要用到我们前面添加的第三块网卡的动态获取IP功能)
4.1,启用第三块网卡功能:
通过ifconfig eth2可以看到第三块网卡自动获取的IP地址10.10.10.150,和我所使用笔记本的 IP地址处于同一网段,且默认路由都设置为10.10.10.254,ping路由没有问题,在这种情况下,就能实现从本机到虚拟机的FTP互访。可能有 人觉得奇怪,为什么要设定为动态获取,直接指定10.10.10.0网段的IP地址不就可以了吗?因为整个实验进度会很长,实验环境会随时发生变化,有时 候在单位做实验,有时候在家里做实验,有时候又是在外面的茶楼、酒吧做实验,本机的IP地址跟路由都是不断变化的,有时候是10.10.10.0网段,有 时候是192.168.1.0网段,有时候是其他网段,为了每次跟本机自适应来实现FTP功能的互访,所以设置第三块网卡为自动获取IP显得尤为重要。至 于默认网关也经常发生变化,其实只需要通过一条命令route add/delete default gw x.x.x.x来进行默认路由的修改就可以了。
4.2,通过执行service vsftpd start来启动ftp功能,然后来到/etc/vsftpd目录,这里我们要编辑两个文件,分别是ftpusers和user_list:
4.3,下面这幅图显示的是/etc/ftpusers的内容,我们需要做的是在“root”字样前面添加注释符,通过这种手段来打开root用户对ftp功能的使用。同理,需要编辑的文件还有user_list:
通过编辑这两个文件,我们就可以在windows下以root用户登陆到虚拟机里同一网段的linux系统下,第三块网卡的使命就在于此。
4.4,FTP功能演示,这里我们简单上传一个文本文件:
[root@rac1 ~]# vi /home/oracle/.bash_profile
增加如下内容:
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_BASE=/opt/ora10g
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORACLE_SID=RACDB1
export ORACLE_TERM=xterm
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin/
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
umask 022
2,创建/opt/ora10g目录,要注意该目录所有者或oracle用户的权限
[root@rac1 ~]# mkdir /opt/ora10g
由于该目录主要由oracle 用户操作,因此我们将其所有者改为oracle
[root@rac1 ~]# chown oracle.oinstall /opt/ora10g
3,配置内核参数
[root@rac1 ~]# vi /etc/sysctl.conf
增加或修改下列内容
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 1048576
net.core.rmem_max = 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 262144
[root@rac1 ~]# sysctl -p 让设置生效 4,提高Oracle用户的shell限制 设置oracle 使用的文件数权限 [root@rac1 ~]# vi /etc/security/limits.conf 增加下列内容 oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 修改安全限制 [root@rac1 ~]# vi /etc/pam.d/login 增加: session required /lib/security/pam_limits.so 配置Hangcheck 计时器 [root@rac1 ~]# vi /etc/rc.local 增加: modprobe hangcheck-timer hangcheck-tick=30 hangcheck_margin=180 5,磁盘分区 通 过fdisk -l可以看看所有磁盘的状态,如果前期裸设备规划正确的话,在诸如/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde下面是看不到 任何分区信息的,这也表明这些磁盘都是干净的磁盘,不像/dev/sda那样不干净(有了文件系统)。下面我们要对/dev/sdb到/dev/sde的 四块磁盘进行分区,分区过程如下图所示(这里以/dev/sdb为例,其他磁盘操作类似): 经过这样的步骤,裸设备就创建好了。之所以称之为裸设备,就是因为自身不带任何文件系统,如下图所示: 到这个地方,要跟前面的文章首尾呼应一下了。把前面的那副图片专门提出来说明一下: 在 这个地方,我取消了/dev/sdb到/dev/sde前面小方框里面的勾,之所以这样做,就是为这个地方的磁盘分区做准备的。取消那个地方的勾和不取消 是有着很大关系的,如果不取消的话,在磁盘分区的时候会出现什么状况?系统会提示你这块盘上面已经分好区不用你再分了!如果你强行要分区,那么就必须把之 前的分区信息给删除掉重新分配。如果这时采取这样的动作,那么危险就来了,在下一刻你关闭系统、重新启动的时候系统会报告一个严重错误,说系统磁盘所属卷 组受到了严重破坏,然后系统无法启动。 分 析一下为什么会出现这样的情况,如果我们在系统安装的时候没有取消掉/dev/sdb到/dev/sde前面小方框里面的勾,那么相当于我们用于安装操作 系统的磁盘从一个变成了五个,虽然/dev/sdb到/dev/sde没有直接参与操作系统部分的安装,但是他们已经和/dev/sda这块盘被一起划分 到了同一个卷组,因此也自动的获得了分区信息。在磁盘分区这个阶段,如果再对包括/dev/sdb到/dev/sde这几块盘进行分区信息的重建,那么就 破坏了原有卷组信息。举个简单的例子,一个银行有一个金库,打开这个金库大门需要五把钥匙,五把钥匙分别放在五个人手里,这五个人都是银行的核心职工,这 样做当然是为了提高安全性。试想假如有一天同时丢了四把钥匙,那仅剩的一把钥匙自然是不能打开金库大门的。在安装linux操作系统的时候我们本来只需要 一块硬盘来与之发生关联,但是现在我们让其他四块磁盘也参与了进来,在实验过程中又变相的毁掉了那四块磁盘,自然系统就发生紊乱了。
http://oss.oracle.com/projects/compat-oracle/files/Enterprise_Linux/
由于RHEL5 中取消了rawdevices,如果不想将映射命令放到rc.local 中的话,我们就需要将其配置到/etc/udev/rules.d/文件夹中
修改文件
[root@rac1 ~]# vi /etc/udev/rules.d/60-raw.rules,添加内容如下图所示:
5,重启服务以及验证:
这样,主节点的设置过程完毕,下面就要开始副节点的设置了。
副节点的设置
集群的配置
故障处理过程
clusterware的配置在整个实验过程中是最为核心的步骤,而ASM磁盘的创建过程又是核心中的核 心。如果这一步走对了,接下来就轻松很多。反之,如果这一步始终过不去,那不仅后面的实验没法进行,而且很打击人的积极性。我就在这一步踯躅了很长时间, 因为所遭遇的故障久久无法解决,比如无法创建VOL1/VOL2的问题,比如在主节点上创建了VOL1/VOL2,但是在副节点上无法识别到的问题等等。 还好,搜索引擎足够强大,很多问题我碰到的,人家也碰到了,而且也给出了解决方案,顺着一个个的解决方案总算是过了这一关,下面来具体探讨一下所遭遇的故 障们。Default group to own the driver interface []: dba
Start Oracle ASM library driver on boot (y/n) [n]: y
Fix permissions of Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: [ OK ]
Loading module "oracleasm": [ OK ]
Mounting ASMlib driver filesystem: [ OK ]
Scanning system for ASM disks: [ OK ]
clusterware安装
先告一段落,后续再接上。
arch=`uname -m`
then
LD_ASSUME_KERNEL=2.4.19
export LD_ASSUME_KERNEL
fi
#End workaround
在fi 后新添加一行:
unset LD_ASSUME_KERNEL
LD_ASSUME_KERNEL=2.4.19
export LD_ASSUME_KERNEL
同样在其后新增加一行:
unset LD_ASSUME_KERNEL
cannot open shared object file: No such file or directory
这个地方安装完之后就可以点击“ok”退出了。这个步骤执行完了之后我们还需要执行一个收尾的步骤,还记得 clusterware的安装是在RAC1上进行的吗?上一篇文章给出最后一幅图片是到各个节点上运行脚本,这里我们手工运行完vipca之后,如果成 功,那么相当于RAC2的root.sh也顺利完成使命,下一步需要做的就是返回到RAC1节点,执行剩下的步骤,如下图所示:
执行完毕之后退出整个clusterware的安装过程。
辛辛苦苦安装完clusterware之后,为的就是能在各自节点上看到CRS进程,如果这个也没问题,那才表示clusterware软件彻底安装成功:
到这里,可以看到RAC1和RAC2上各自对应的CRS进程都已经起来,可以放心了,clusterware安装过程结束。
安装database
12,在安装进行到尾声的时候,在弹出来的对话框中按要求执行几个脚本程序,和clusterware安装阶段类似:
可见这一步主要是给oraInventory目录赋予正确的权限和属主,即使系统没有要求,我们也需要到RAC2上执行类似的操作,给与oraInventory目录真确的权限和属主,否则在最后阶段会有报错信息。
11,分别到各个节点执行root.sh脚本:
12,点击“next”进行退出,database软件部分安装结束:
11,在/opt/ora10g/product/10.2.0/crs_1/bin下运行命令crs_stat -t,可以看到刚配置好的两个监听进程已经启动:
到这里,监听部分的配置过程结束,接下来是要进行ORACLE RAC环节中的最后一步,也就是实例的创建过程。
实验总结
网上写实验过程的多,写实验总结的少,然而实验总结就像舞台上那一分钟,与之对应的是台下十年功啊。我写 “vmware+linux+oracle rac 全过程”专题写了两天,但做这个实验却花了我大约两个星期的时间,所以再花上那么三、四十分钟写一份总结,稍带把整个实验过程给回顾一遍,顺利的、不顺利 的,统统走上那么一遭,也是非常值得的。
首先,我要数数那数十次重配虚拟机+重装linux操作系统的经历,其中有几次重复,皆是没有找到解决某个具体问题的办法,不得已而为之,剩下的都是不得不做。
第一次,在新建虚拟机时选择SCSI为I/O适配器类型,在选择适配器驱动的时候错选了BUS类型,导致安装linux操作系统的时候找不到可用的磁盘,系统报错,重装;
第二次,新建虚拟机时选择IDE为I/O适配器类型,也安装了linux操作系统,结果在创建裸设备的时候突然发现可用磁盘不够,因为系统默认只能 创建四个IDE设备,光驱占去一块,本地磁盘占去一块,ocr和vote磁盘占去一块,这样一来没有足够的裸设备用来安装ORACLE数据库了,重装;
第三次,安装linux操作系统过程中(安装在移动硬盘上的某个分区),因为移动硬盘与笔记本电脑的USB连线发生意外故障,导致安装过程中断,操作无法继续进行,重装;
第四次,给系统打补丁时因为系统版本不一致,补丁打完重启系统后直接进入黑屏时代,怎么拨弄都毫无反应,重装;
第五次,安装linux操作系统时把裸设备和本地磁盘放到同一卷组里面,在对裸设备强制分区,重启后系统报严重错误,无法启动,重装;
第六次,因为没有找到问题所在,所有操作按第五次同样进行,到磁盘分区时又出现相同问题,故障发生后找到了问题所在,但系统已经无法拯救,重装;
第七次,一直没有注意新建虚拟机时将本地磁盘和裸设备放在了同一个文件夹,系统克隆的时候原封不动的拷贝了本地磁盘和裸设备文件,导致配置共享磁盘的时候无法识别到主节点创建的卷VOL1/VOL2,以为跟ASM的配置过程有关,重装;
第八次,重复第七次所有操作,到配置ASM磁盘的时候仍然无法识别到主节点创建的卷VOL1/VOL2,没有找到问题所在,重装;
第九次,注意到了克隆系统时候的问题,在RAC2节点上fdisk -l,也出来四块磁盘(相当于RAC2所独有的设备文件)。创建共享磁盘的时候果然失败,但庆幸的是总算是找到问题所在了,很高兴的重装;
第十次,这次严格意义上不算是一次故障,而是为了二次实验特地挑了移动硬盘上另一个50GB大小的分区把实验从头到尾做了一遍,又全程截图,这次操作很顺利,因为之前遇到的所有故障都清扫了。
其实出现的这些故障当中,有些故障是不需要重装系统的,但为了保证实验质量,毅然决然的采取了最极端的方式,牺牲一些时间,为的是得到一个比较良好 的实验状态。每一次故障解决都是一次经验的积累,技术的提升,这样想来,花那么长时间在linux系统下做一个ORACLE RAC实验也是值得的。
这次实验时间开销大,是因为之前没有用过linux的系统,这次索性从安装操作系统做起,通过实验的进行也熟悉了linux下怎么设置FTP、 telnet,怎么设置静态、动态IP地址,怎么打补丁,怎么磁盘分区,怎么时间同步,怎么创建文件系统,怎么创建ASM磁盘等等,获益匪浅。其实 linux系统学起来也不难,没有必要对着一堆又一堆的参考资料、官方文档从头到尾的看,关键还是多动手,通过动手来获取知识,这便是最好的方法论。
总结起来,在vmware下使用linux操作系统为介质来搭建ORACLE RAC环境,主要注意以下几点:
1,新建虚拟机时选择SCSI为I/O适配器类型,使用LSI logic驱动,这样可以拥有实验用足够的磁盘(针对vmware 1.0.6版本);
2,本地磁盘和裸设备文件分而置之,避免系统克隆时把裸设备文件也拷贝过去;
3,安装linux操作系统时,切勿将本地磁盘和裸设备文件划分到同一个卷组当中;
4,打补丁时切记对应正确操作系统版本,否则得不偿失;
5,对任何磁盘做“删除分区”这个动作前多想想此操作是否得当;
6,面对vip漂移的问题,先考虑是否拥有默认网关;
7,无论是安装clusterware还是安装database的时候,遇到报错信息,一定要学会看日志,虽然有的时候不一定管用;
8,足够的耐心。
(全文完)
No comments:
Post a Comment