这次试验并没有用复制另一台虚拟机的系统的方式完成rac的安装,是在完全安装的两个操作系统进行的oracle clusterware,oracle RAC的配置。
硬件:一台2U PC机器,cpu: Intel(R) Xeon X5650 共24核心 内存:24G 两个板载千兆以太网卡 。
软件:windows7旗舰版,VMware-server-1.0.3,CentOS release 4.4,orace10g
(10201_clusterware_linux32,10201_database_linux32),xmanager,
============================================================
一. 基础软件安装(详细步骤省略,请参照操作系统安装的相关文档)
1.安装win7操作系统,打开远程桌面管理,配置一个合适的网络(15.0.5.200),可以在局域网内使用
远程桌面访问win7.
2.在win7上安装VMware server,安装过程中提示缺少程序签名的错误,忽略掉继续进行安装即可。
3.带安装好后,重启动操作系统,启动时按F8选择用“禁用驱动程序签名强制”模式进入系统。
4.测试是否能通过远程桌面访问到win7系统,并运行VMware server,看是否可以使用。如果没有进入
“禁用驱动程序签名强制”模式,则无法进入local选项使用VMware。如果测试都通过,则可以通过远程来操作完成实验。
使用远程桌面连接,开始以后的实验
1. 在VMware server上构建两个虚拟机,分别为node1和node2。
正常设置完一个虚拟机后,添加共享存储硬盘:
设置如下图片所示,具体原因请查看VMware文档或其他文档
点击Edit virtual machine settings,进行添加硬盘盘的设置
点击Add
下一步
选中Hard Disk,点击下一步
选择‘Create a new virtual disk’,下一步
选择SCSI (Recommended),下一步
在Disk size(GB):输入0.5,即为硬盘大小为0.5G,可以选择分配Allocate all disk space now,也可以选择Split disk into 2 GB files,区别为一次分配还是每次在使用的时候每次分配2GB的空间给你设置的硬盘。这可能在0.5G硬盘的大小设置上没有区别。点击‘下一步’
点击‘Browse’,手动选择硬盘存放路径,此处就是与先前创建的虚拟机系统硬盘不同的地方。下一步;
点击向上的图标,进行选择
选择shareddisk,这个文件夹为先前创建好的,为存放共享硬盘准备的。
手工输入硬盘名字,ocrdisk1.vmdk,意思作为oracle clusterware的OCR使用。
点击Advanced,进行硬盘通道选择;
选择SCSI 1:0,完成。
选择Independent,点击完成。
按照这种方法,创建剩下的六块虚拟硬盘,名字分别叫做:ocrdisk2.vmdk,votingdisk1.vmdk,votingdisk2.vmdk,votingdisk3.vmdk,这五块盘为512M容量,asmdisk1.vmdk,asmdisk2.vmdk,这两块盘为10G容量。用途如硬盘的名字所示,分别有两块OCR,三块votting disk盘,两块用作ASM存储。
在第一个虚拟机上设置完成后,编辑第二个虚拟机的配置文件Red Hat Enterprise Linux 4.vmx:
将第二个虚拟机的配置文件备份,然后把第一个虚拟机的Red Hat Enterprise Linux 4.vmx复制到第二个虚拟机陪置文件的位置;并打开这个Red Hat Enterprise Linux 4.vmx,按照备份的配置修改相应项:
scsi0:0.fileName = "node1disk.vmdk" 修改成scsi0:0.fileName = "node2disk.vmdk"
将displayName = "node1"修改成displayName = "node2"
uuid.location = "56 4d c7 a0 45 ca 8c ed-03 fd 14 3f ab fe 81 cd"
uuid.bios = "56 4d c7 a0 45 ca 8c ed-03 fd 14 3f ab fe 81 cd"
ethernet0.generatedAddress = "00:0c:29:fe:81:cd"
ethernet1.generatedAddress = "00:0c:29:fe:81:d7"
以上四项都是将等号右边的内容修改成原来node2配置文件的内容。
2.安装操作系统,其中node1和node2安装CentOS 4.4(32bit)的系统。
具体安装细节请查看安装操作系统相关文档。
===================================================
二. 基本环境配置:
安装好操作系统后,准备安装oracle RAC相关的环境;
1. 创建相关用户组和oracle用户
分别在node1和node2上创建:
[root@node1 ~]# groupadd -g 500 oinstall
[root@node1 ~]# groupadd -g 501 dba
[root@node1 ~]# groupadd -g 502 oper
[root@node1 /home]# useradd -g oinstall -G dba,oper -u 500 oracle
[root@node1 /home]# passwd oracle
Changing password for user oracle.
New UNIX password:
BAD PASSWORD: it is too simplistic/systematic
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
2. 配置/etc/hosts
由于没有配置dns服务,所以/etc/hosts文件暂时配置如下
[root@node1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
15.0.5.201 node1
15.0.5.211 node1-vip
10.0.0.1 node1-priv
15.0.5.202 node2
15.0.5.212 node2-vip
10.0.0.2 node2-priv
node2与node1的/etc/hosts文件相同。
3.配置SSH互信任
[oracle@node1 ~]$ mkdir~/ .ssh
(或者使用ssh node2,成功登陆后既可以在oracle目录下创建一个.ssh目录。)
[oracle@node1 ~]$ chmod 700 ~/ .ssh
[oracle@node1 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_rsa.
Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.
The key fingerprint is:
3a:8d:57:83:66:5f:69:c0:fd:95:c3:64:7d:ce:1a:de oracle@node1
[oracle@node1 ~]$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_dsa.
Your public key has been saved in /home/oracle/.ssh/id_dsa.pub.
The key fingerprint is:
ed:27:e9:43:8f:a6:35:6f:d3:13:85:fa:ef:76:fe:66 oracle@node1
[oracle@node1 ~/.ssh]$ ssh node1 cat /home/oracle/.ssh/id_rsa.pub >>authorized_keys
[oracle@node1 ~/.ssh]$ ssh node1 cat /home/oracle/.ssh/id_dsa.pub >>authorized_keys
在node2上重复上面的步骤创建:
[oracle@node2 ~]$ ssh-keygen -t rsa
[oracle@node2 ~]$ ssh-keygen -t dsa
继续在node1上:
[oracle@node1 ~/.ssh]$ ssh node2 cat /home/oracle/.ssh/id_rsa.pub >>authorized_keys
[oracle@node1 ~/.ssh]$ ssh node2 cat /home/oracle/.ssh/id_dsa.pub >>authorized_keys
[oracle@node1 ~/.ssh]$ scp authorized_keys node2:/home/oracle/.ssh/
进行ssh登录测试:
[oracle@node1 ~/.ssh]$ ssh node2
[oracle@node1 ~/.ssh]$ ssh node2-priv
[oracle@node2 ~]$ ssh node1
[oracle@node2 ~]$ ssh node1-priv
4. 设置oracle用户的环境
1.检查x window
[oracle@node1 ~]$ xhost +
15.0.5.201 being added to access control list
2.检查并保证/tmp空间大于400M。因为安装系统是指划了一个根分区,所以/tmp空间与/ 共享使用空间。
5.检查硬件条件
分别在node1和node2上:
[root@node1 ~]# free -m
total used free shared buffers cached
Mem: 2026 293 1733 0 48 130
-/+ buffers/cache: 113 1912
Swap: 4094 0 4094
[root@node1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 16G 2.7G 13G 18% /
/dev/sda1 99M 12M 83M 12% /boot
none 1014M 0 1014M 0% /dev/shm
centos:/apps/ 28G 9.8G 16G 38% /apps
(/apps为另一个nfs服务器提供的目录,所有的oracle相关软件都存放在该目录下。node1和node2都
挂在使用该目录安装需要的软件。)
6. 检查软件情况
oracle要求集群中的节点必须使用相同版本的操作系统!
为避免安装数据库软件时的麻烦,将node1和node2的centos改为redhat:
[root@node1 ~]# cat /etc/redhat-release
CentOS release 4.4 (Final)
[root@node1 ~]# cp /etc/redhat-release /etc/redhat-release.bak
[root@node1 ~# echo "Red Hat Enterprise Linux AS release 4 (Nahant Update
4)">/etc/redhat-release
注:实际测试,不做此操作也没有任何问题。
内核版本:
[root@node1 ~]# uname -r
2.6.9-42.ELsmp
检查软件包:
binutils-2.15.92.0.2-10.EL4
compat-db-4.1.25-9
control-center-2.8.0-12
gcc-3.4.3-9.EL4
gcc-c++-3.4.3-9.EL4
glibc-2.3.4-2
glibc-common-2.3.4-2
gnome-libs-1.4.1.2.90-44.1
libstdc++-3.4.3-9.EL4
libstdc++-devel-3.4.3-9.EL4
make-3.80-5
openmotif21-2.1.30-11.RHEL4.2
在node1和node2中使用rpm工具分别对上列出的软件包检查,并安装没有的包;本次安装操作系统选择了所有的软件包,所以在检查包时全都安装了。
7. 配置系统内核参数
在node1和node2的/etc/sysctl.conf文件添加内容:
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
#fs.file-max = 65536 --注释掉是由于系统默认的值大于65536,使用默认值。
net.ipv4.ip_local_port_range = 32768 65000
net.core.rmem_default = 262144
net.core.rmem_max = 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
然后运行/sbin/sysctl -p使其生效。(不运行也行,最后要安装oracle clusterware时重启动操作系统。)
在node1和node2的/etc/pam.d/login 文件添加内容:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
在node1和node2的/etc/security/limits.conf 文件添加内容:
session required /lib/security/pam_limits.so
创建oracle的相关目录
[root@node1 ~]# mkdir -p /u01/app/oracle/oraInventory
[root@node1 ~]# mkdir -p /u01/app/oracle/product/crs
[root@node1 ~]# mkdir -p /u01/app/oracle/product/10.2.0/db_1
[root@node1 ~]# chown -R oracle:oinstall /u01
[root@node1 ~]# chmod -R 755 /u01
验证hangcheck-timer模块:
[oracle@node1 ~]$ /sbin/lsmod | grep hang
hangcheck_timer 7641 0
如果无输出结果证明内核没有载入模块,需要手工导入
[root@node1 ~]# insmod /lib/modules/`uname -r`/kernel/drivers/char/hangcheck-timer.ko
hangcheck_tick=30 hangcheck_margin=180
并将这条导入命令添加到/etc/rc.d/rc.local中,保证重启动系统后会导入该模块。
基本环境配置就告一段落,下面开始配置存储相关内容
================================================
三. 配置oracle RAC环境的存储环境:
根据创建虚拟机时配置好的硬盘,共享存储的硬盘有7块,分别为五块512M容量的
ocrdisk1,ocrdisk2,votingdisk1,votingdisk2,votingdisk3
和两块10G容量的asmdisk1,asmdisk2.
---------------------------
使用fdisk工具为共享存储创建分区
[root@node1 ~]# fdisk -l
Disk /dev/sda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 535 4192965 82 Linux swap
/dev/sda3 536 2610 16667437+ 83 Linux
Disk /dev/sdb: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Disk /dev/sdb doesn't contain a valid partition table
Disk /dev/sdc: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Disk /dev/sdc doesn't contain a valid partition table
Disk /dev/sdd: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Disk /dev/sdd doesn't contain a valid partition table
Disk /dev/sde: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Disk /dev/sde doesn't contain a valid partition table
Disk /dev/sdf: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Disk /dev/sdf doesn't contain a valid partition table
Disk /dev/sdg: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdg doesn't contain a valid partition table
Disk /dev/sdh: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdh doesn't contain a valid partition table
依上面的显示,需要为/dev/sdb,/dev/sdc,/dev/sdd,dev/sde,/dev/sdf,/dev/sdg,/dev/sdh创建分区
[root@node1 ~]# fdisk /dev/sdb
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-512, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-512, default 512):
Using default value 512
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
按照上面的方法,将在余下的设备上都创建一个分区。分区尺寸为该设备的大小。创建后的结果在
node1和node2上都应该是:
[root@node2 ~]# fdisk -l
Disk /dev/sda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 535 4192965 82 Linux swap
/dev/sda3 536 2610 16667437+ 83 Linux
Disk /dev/sdb: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 512 524272 83 Linux
Disk /dev/sdc: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sdc1 1 512 524272 83 Linux
Disk /dev/sdd: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sdd1 1 512 524272 83 Linux
Disk /dev/sde: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sde1 1 512 524272 83 Linux
Disk /dev/sdf: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sdf1 1 512 524272 83 Linux
Disk /dev/sdg: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdg1 1 1305 10482381 83 Linux
Disk /dev/sdh: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdh1 1 1305 10482381 83 Linux
为oracle clusterware文件绑定分区到raw devices:
在node1和node2上编辑/etc/sysconfig/rawdevices文件加入下面行:
/dev/raw/raw1 /dev/sdb1
/dev/raw/raw2 /dev/sdc1
/dev/raw/raw3 /dev/sdd1
/dev/raw/raw4 /dev/sde1
/dev/raw/raw5 /dev/sdf1
/dev/raw/raw6 /dev/sdg1
/dev/raw/raw7 /dev/sdh1
然后启动rawdevices服务:
[root@node1 ~]# /etc/init.d/rawdevices start
改变属性和权限:
[root@node1 ~]# chown root:oinstall /dev/raw/raw1
[root@node1 ~]# chown root:oinstall /dev/raw/raw2
[root@node1 ~]# chown oracle:oinstall /dev/raw/raw3
[root@node1 ~]# chown oracle:oinstall /dev/raw/raw4
[root@node1 ~]# chown oracle:oinstall /dev/raw/raw5
[root@node1 ~]# chown oracle:oinstall /dev/raw/raw6
[root@node1 ~]# chown oracle:oinstall /dev/raw/raw7
[root@node1 ~]# chmod 640 /dev/raw/raw*
[root@node1 ~]# chmod 660 /dev/raw/raw6
[root@node1 ~]# chmod 660 /dev/raw/raw7
注:实验中在node1上面对共享的硬盘建完分区,并绑定raw后,在node2上使用fdisk -l可以正常显示所有硬盘的状态,但是绑定raw系统还是无法识别分区。需要重新启动操作系统才能正常识别。
在/etc/udev/permissions.d/目录下创建文件oracle.permissions并添加内容如下:
#OCR
raw/raw[12]:root:oinstall:0640
#Voting Disks
raw/raw[3-5]:oracle:oinstall:0660
#ASM
raw/raw[67]:oracle:oinstall:0660
这样可以保证在系统重启后,这些raw绑定的分区的权限依然如我们前面所设置的那样。如果不设置这
个文件,也可以在/etc/rc.d/rc.local文件中添加前面的chown和chmod设置。
============================
四. 安装oracle clusterware
解压10201_clusterware_linux32完成后名为clusterware的目录。进入该目录开始安装:
[root@node1 /apps/soft-oracle]# cd clusterware/
[root@node1 /apps/soft-oracle/clusterware]# ./runInstaller
Next
Next
在安装的path中,默认会是在.bash_profile中设置好的ORACLE_HOME的目录,点击Browse,选择ORA_CRS_HOME的目录,Next。
这里检查系统的相关环境,看是否符合oracle clusterware的安装。如果有不符合条件的检查结果会报告,根据报告进行相应的修复,在Retry,直至验证通过为止。
会给出所在安装节点的IP,需要手工添加另外的所有节点,这里手动添加了node2.
系统能正确识别网卡和所对应的网络,说明对网络的配置没有问题。
根据硬盘的规划,选择Normal Redundancy。并输入/dev/raw/raw1和/dev/raw/raw2两块raw。
同样,Voting Disk也使用Normal Reducdancy。并输入规划的raw。
总览一下所有设置,确认后点击Install。
按照安装完后弹出的对话框的要求,root用户分别执行/u01/app/oracle/orainventory/orainstRoot.sh和/u01/app/oracle/product/crs/root.sh。现在node1上执行,执行完毕后,再在node2上执行。
如果执行脚本成功,会启动crs,css,evm服务。结束安装。
============================================
五. 安装oracle Database 10g 软件:
可以先验证一下集群的状态:
[oracle@node1 ~]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.node1.gsd application ONLINE ONLINE node1
ora.node1.ons application ONLINE ONLINE node1
ora.node1.vip application ONLINE ONLINE node1
ora.node2.gsd application ONLINE ONLINE node2
ora.node2.ons application ONLINE ONLINE node2
ora.node2.vip application ONLINE ONLINE node2
也可以使用runcluvfy.sh工具进行验证,只是每次我验证的时候,包括在安装oracle clusterware软件的时候,总会报告需要,compat-gcc-7.3-2.96.128,compat-gcc-c++-7.3-2.96.128,compat-libstdc++-7.3-2.96.128这几个软件包,而实际上系统已经有相应替代的软件包了,如果在安装这些软件包,系统又会报告软件包有冲突。
解压10201_database_linux32.zip后为database目录,将该目录所有者和组设置为oracle:oinstall。
进入目录,使用oracle用户运行runInstaller
[oracle@node1 /apps/soft-oracle/database]$ ./runInstaller
Next
选择Enterprise Edition,Next
这个目录默认为$ORACLE_HOME变量设置的目录,Next。
勾选node2后,Next
警告为ip_local_port_range设置问题,编辑/etc/sysctl.conf文件,改为要求的设置net.ipv4.ip_local_port_range = 1024 65000,Retry,通过后,Next。
点击Insall.等待安装完成,在node1上运行/u01/app/oracle/product/10.2.0/db_1/root.sh,运行完毕后,再在node2上相同的目录下运行root.sh。
运行完脚本后,系统检测集群环境,报错启动vip失败,查看日志的原因为没有设置默认网关,解决方法为编辑$CRS_ORA_HOME/bin/racgvip文件,设置FAIL_WHEN_DEFAULTGW_NOT_FOUND=0,再Retry后,则系统会启动vip,并成功运行oracle clusterware.
结束安装,退出。
=======================================
五.创建数据库:
这里使用DBCA创建数据库
1.在$ORACLE_HOME/bin下,运行dbca
[oracle@node1 /u01/app/oracle/product/10.2.0/db_1/bin]$ ./dbca
如果安装了集群软件,则DBCA会自动检测出并给出选项,是创建oracle Real Application Clusters database还是Oracle single instance database。选择1,Next
选择Create a Database,Next.
Select All,让node1和node2都选中。Next.
用途选择General Purpose,Next.
输入数据库的名字,Next
可以选择是否自动备份否,Next。
设置密码,Next
选择Automatic Storage Management(ASM),Next
识别出前面设置好的ASM,勾选后Next.
Use Oracle-Managed files
设置flash recovery area位置和大小,也可以不设置,Next。
使用sample schemas,Next。
改变一下Character Sets
使用Use Unicode(AL32UTF8),Next
Next
开始创建数据库
创建完成后退出。Exit.
==============================
总结:
在实验过程中,遇到最多的是网络和共享硬盘的问题。可能由于在VMware Server上运行带来复杂性,有时候node2中运行ifconfig命令后,网卡都没有了,重启网络服务又恢复正常。有时候提示没有足够的存储空间。fdisk -l 查看硬盘数量不少,重启rawservices服务后有能识别到。可能这些问题在实际的生产系统中不会遇到,但是网络和存储的设置对RAC能否成功实施至关重要。如果前期的准备工作到位,硬件,软件,相关的包,网络,内核的设置,共享存储都满足oracle RAC的要求,则安装过程是水到渠成的事情。