在项目组用了一个星期的时间配置好了RAC。因为之前没有经验,所以中间走了很多的弯路。也是从GOOGLE上使劲使劲在使劲才磕磕绊绊的弄好了。想想不容易。现在得记录下遇到的问题和解决办法
环境: 两台LINUX AS4.4服务器,一个2T磁盘阵列
采用OCFS2集群文件系统配置,相对比较简单的一种
第一,要不系统自带的开发软件包都装全,然后再安装 compat-gcc-7.3-2.96.122.i386.rpm compat-libstdc++-7.3-2.96.122.i386.rpm compat-libstdc++-devel-7.3-2.96.122.i386.rpm compat-gcc-c++-7.3-2.96.122.i386.rpm 安装要按顺序,其中有一个冲突的。要把冲突的那个卸载再装
第二,配置内核参数等等。按标准文档配置即可。注意在配置/etc/profile时候 if [ $USER = "oracle" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi 一定要把空格给空好,不然会报错。。。
第三,配置IP,每个机器都需要一个真实IP 虚拟IP 私有IP,在/etc/hosts文件中 xx.xx.0.1 rac01 xx.xx.0.2 rac02 xx.xx.0.3 vip01 xx.xx.0.4 vip02 192.168.0.1 priv01 192.168.0.2 priv02 名字最好简单点,我之前弄了些比较复杂的,走了一些弯路。。
第四,配置密钥SSH,按文档配置。配置完成后检查一下known_hosts是不是包含两个节点的信息。有时候网卡的优先级问题会造成错误:节点不能集群化
第五,安装ocfs2 ocfs2-tools-1.2.7-1.el4.i386.rpm ocfs2-2.6.9-42.ELsmp-1.2.9-1.el4.i686.rpm ocfs2console-1.2.7-1.el4.i386.rpm 这个要和系统内核版本对应。同过uname -a 可查内核版本。可到oracle网站下载
第六,配置磁盘阵列。fdisk -l都能访问到,然后分区。我分了两个 一个4G 用来存ORACLE_HOME 剩下的一个 用来存放 ORACLE_DATA
第七,启动ocfs2console 格式化,建cluster,propagate configuration. 这里,如果点cluster的时候弹出对话框,让设置什么enable那就按照弹出信息设置一下,设置完之后,别忘去了/etc/ocfs2/把cluster.conf删掉。不然还会报另一个错误。
第八,建立文件,挂接分区。注意,如果挂不上就用/etc/init.d/o2cb status 检查一下。有没加载的或者没在线的 就加载一下 或者 更改成在线单机检查是否挂接上 df -h 检查ocfs2文件系统 mounted.ocfs2 -f
第九,安装oralce clusterware。这个从网上下载之后,如果不是服务器下的,就别解压缩,直接把压缩包传到服务器,在服务器上解开。不然会出现安装过程中停在百分之几不动了,10有89是安装介质问题(后面安装oracle也同样)。 在指定OCR位置的时候,如果提示分区不是共享的。那么就是磁盘阵列没有挂接好。重新搞到快安装结束的时候 会提醒你去在两个节点上执行两个SH。可能在执行第2个root.sh的时候会有错误。比如 -bash: ulimit: open files: cannot modify limit: Operation not permitted 这个错误不用理会(反正我没理会),还有一个就是说eth1或者eth0之类的不是什么公共接口什么的,那就得自己手动去设置虚拟IP。设置方法是:到/bin中运行vipca按照提示进行即可。
第十,就是安装oracle 和 创建实例了。这里基本上没出什么问题 最后安装成功之后,比如你在创建实例的时候SID是orcl 那么两个节点上的SID名分别为orcl1 和 orcl2 这个可以通过配置文件看到。
JAVA访问的话JDBC连接字符串就应该这么写了: jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = [b]node1_vip[/b])(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = [b]node2_vip[/b])(PORT = 1521)) (LOAD_BALANCE = yes)(FAILOVER = ON) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = [b]service_name[/b]) (FAILOVER_MODE=(TYPE = SELECT)(METHOD = BASIC)(RETIRES = 20)(DELAY = 15))))
关闭集群 crs_stop -all
启动集群 crs_start -all
查看集群状态 crs_stat -t
如果有例如: ora....CL1.srv application ONLINE UNKNOWN rac1 ora....CL2.srv application ONLINE UNKNOWN rac2 ora....TEST.cs application ONLINE UNKNOWN rac2 的时候,要先把都停掉 crs_stop -all 然后停掉unknown的。crs_stop ora...CL1.srv 同步时间 修改时间命令 date -s 12:00:00 同步到CMOS clock -w 要用root用户来执行然后全部启动
crs_start -all [oracle@rac1 ~]$ crs_stat -t Name Type Target State Host ------------------------------------------------------------ ora....CL1.srv application ONLINE ONLINE rac1 ora....CL2.srv application ONLINE ONLINE rac2 ora....TEST.cs application ONLINE ONLINE rac2 ora....L1.inst application ONLINE ONLINE rac1 ora....L2.inst application ONLINE ONLINE rac2 ora.ORCL.db application ONLINE ONLINE rac1 ora....SM1.asm application ONLINE ONLINE rac1 ora....C1.lsnr application ONLINE ONLINE rac1 ora.rac1.gsd application ONLINE ONLINE rac1 ora.rac1.ons application ONLINE ONLINE rac1 ora.rac1.vip application ONLINE ONLINE rac1 ora....SM2.asm application ONLINE ONLINE rac2 ora....C2.lsnr application ONLINE ONLINE rac2 ora.rac2.gsd application ONLINE ONLINE rac2 ora.rac2.ons application ONLINE ONLINE rac2 ora.rac2.vip application ONLINE ONLINE rac2