虚拟机VMware安装OracleRAC.环境综述
草木瓜 20080226
一、重要提示
构建RAC最好能有实际的硬件环境,这样不仅能有实战经验,也会获得稳定的环境!
用虚拟机安装是万不得已的选择,安装问题比较多而且不稳定,也不能获得ORACLE的技术
帮助。虚拟机的单机Oracle还可以,但是安装RAC就差强人意了。
二、虚拟机环境
虚拟机VMware小常识:
VMware Workstation 用于个人桌面系统,VMware GSX Server 与 VMWare ESX Server
用于企业服务器。VMware Workstation与VMware GSX Server需要操作系统的支持,但
VMWare ESX Server不需要操作系统支持,可以在主机无操作系统的情况下也可安装。
VMware GSX Server界于VMware Workstation与VMWare ESX Server之间。
可以说,ESX是企业级,GSX工作组级,Workstation个人单机级。
VMware Workstation和VMware GSX是操作系统上(Windows/Linux)的一个应用程序,必须
先安装主机操作系统后才能安装,之后再虚拟新的系统。
VMware ESX则是独立的,可在一台裸机上进行安装。比VMware GSX,VMware ESX性能
有很大提升。
安装Oracle RAC可以使用VMware GSX Server,也可使用Workstation。VMware GSX Server
并不支持share folder,这一点需要注意。
事实表明,个人用户不需要安装VMware GSX Server,推荐使用VMware Workstation。VMware
GSX Server 运行速度较慢。
三、虚拟机Linux操作系统
操作系统的安装介质(安装光盘等...)很重要,要尽力保证介质的可用性。
不良介质会导致如下问题:
读取安装包问题发生致命错误
复制完安装包不能引导
驱动设备不能识别
其他意外问题
安装RAC环境,不推荐使用Red Hat Enterprise Linux AS 4安装Oracle 9i RAC,BUG较多。
安装操作系统,选择安装包时可根据自已需要,不必盲目全选(当然如果你空间够大另当别论),
即便后面过程需要别的组件,也可从光盘上十分方便地RPM。
有些情况下,正常安装企业版,复制完所有文件包后,系统提示重启,然而重启后从硬盘引导
却无法启动,光标停留在左上角或者打印一些信息再停留在左上角。这个问题是由于grub引导被
破坏,或者grub引导安装失败,解决方案就是手工再进行安装(详细方法在《服务器配置实例(一).
HP Prolient ML570 服务器》也描述过,请查看):
即使用Red Hat Linux 启动光盘,在boot下输入linux rescure回车,加载完一堆镜象,会出现提示
符,可进行命令行操作。
注意:有时在boot下输入linux rescure回车,加载一些东西后,不提示命令行,这时多半与引导
介质有关,请更换可靠的安装介质。使用不同版本的安装介质引导后,在命令行下输入fdisk -l 会
无任何反应,尽量使用相同版本的介质引导修复。
四、使用虚拟机Linux操作系统
系统启动运行日志记录在/var/log/messages,对于日常问题可以查看详细原因。这里列举
一些常见问题:
1. smart 服务启动失败,日志里显示 Device: /dev/sda, Bad IEC (SMART) mode page,
err=-5, skip device
解答:SMART是硬盘生产商建立的一个工业标准,这个标准就是在硬盘上保存一些实时情况。
如读写情况,可靠程度,错误率等属性。每个属性都有一个1字节(bytes,大小1-253)的标准值,其
中还有另一个字节保存关键值,如果此时硬盘某个属性值接近小于或达到关键值,那你硬盘你就
差不多该报废了。SMART一般用于查看硬盘的健康情况,也还需要实际的硬盘支持。虚拟机是没
有任何必要去启动这个服务的。
另系统启动的服务一定要筛选一些,没有必要启动一大堆服务占用大量的时间与内存,尤其在
虚拟机这个有限资源下,这里列出笔者服务列表:
gpm
network
readahead
readahead_early
rexec
rlogin
rsh
sshd
syslog
xinetd
rexec rlogin rsh,这三个属于rsh相关服务,如服务列表没有显示,可以去安装光盘里查找
rsh-server RPM包进行安装。这个服务的作用以后会提到。
第四张光盘上 rsh-server-0.17-25.3.i386.rpm
[root@linuxrac6 RPMS]# rpm -ivh rsh-server-0.17-25.3.i386.rpm
[root@linuxrac6 RPMS]# chkconfig rsh on
[root@linuxrac6 RPMS]# chkconfig rlogin on
[root@linuxrac6 RPMS]# chkconfig rexec on
[oracle@linuxrac9 ~]$ rpm -qa | grep rsh
rsh-0.17-25.3
rsh-server-0.17-25.3
[root@linuxrac6 RPMS]# chkconfig --list
...
xinetd based services:
rsh: on
chargen-udp: off
finger: off
rlogin: on
chargen: off
krb5-telnet: off
rexec: on
rsync: off
安装其他服务方面,方法相似。
2. 在Linux环境下点击菜单项(如teminal),不能弹出窗口
解答:图省事的话重启就能解决,没有小bug的操作系统是不存在的。
五、配置两台虚拟机
安装好一台虚拟机操作系统后,可以通过复制方法,构建另一台环境。
示例:
LinuxRac6.vmdk
LinuxRac6-s001.vmdk
LinuxRac6-s002.vmdk
LinuxRac6-s003.vmdk
LinuxRac6-s004.vmdk
LinuxRac6-s005.vmdk
nvram
rhel4.vmx
LinuxRac6是虚拟机的名称,全部复制完成后,不要修改文件名,只需要单机启动修改
主机名和IP地址即可,复制后网卡会有冲突,可从VM -> VM Setttings -> 删除并重新添加
网卡即可。
六、配置双机环境
这里假设有两台主机 linuxrac9 与 linuxrac6。
---A.双网卡
RAC里每个节点机都需要两块网卡并使用固定IP,其中一个作为两个节点机内部互相通信之用,
另外一个网卡作为外部网络连接之用。
添加多个网卡,可从虚拟机软件菜单 VM -> VM Setttings -> 添加,要选择 Ethernet Adapter,
然后一直缺省并点击NEXT直到结束。
两台节点机全部添加完成后,分别启动两台节点机,在System Setting -> Network 配置网络。
具体配置示例如下(因为是复制的,虚拟机名称一样是没有关系的):
虚拟机1名:LinuxRac6
主机名:linuxrac9
eth0:134.98.105.70 <外部通信>
eth1:192.168.0.6 <内部通信>
虚拟机2名:LinuxRac6
主机名:linuxrac6
eth0:134.98.105.71 <外部通信>
eth1:192.168.0.9 <内部通信>
---B.节点间hosts文件配置
RAC节点机互相不能通过IP来访问,而必须使用主机名。因此需要设定hosts内容。另外
需要确保RAC节点名没有出现在回送地址中。
即在 /etc/hosts 文件的回送地址中不包含节点名(linuxrac9 或 linuxrac6)。
如下所示:
127.0.0.1 linuxrac9 localhost.localdomain localhost
在 RAC 安装期间将接收到以下错误信息:
ORA-00603:ORACLE server session terminated by fatal error
ORA-29702:error occurred in Cluster Group Service operation
下面是两台节点机的 /etc/hosts 内容:
$ cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
134.98.105.170 linuxrac9
134.98.105.171 linuxrac6
192.168.0.9 linuxrac9-priv
192.168.0.6 linuxrac6-priv
设置完成后,可在多个节点上ping linuxrac9 ,ping linuxrac6, ping linuxrac9-priv ... 来测试是否
正确。
---C.节点间访问配置
在节点上运行Oracle Universal Installer进行RAC安装时,它会使用 rsh(或 ssh)命令将
Oracle软件复制到RAC集群的其他节点上。运行Oracle Installer (runInstaller) 的节点必须为
RAC集群的其他节点所信任。
即你可以在任一台节点,通过rsh(或ssh)访问其他所有节点,而不需要输入密码。
(1) 配置(rsh)
rsh 使用 /etc/hosts.equiv 文件 或 用户目录下 .rhosts 文件进行验证。
rsh安装配置见上面<四、使用虚拟机Linux操作系统>一节。
下面是两台节点机的 /etc/hosts.equiv 内容:
$ cat /etc/hosts.equiv
linuxrac9
linuxrac6
linuxrac9-priv
linuxrac6-priv
或者
root用户设置
$ cat /root/.rhosts
linuxrac9
linuxrac6
linuxrac9-priv
linuxrac6-priv
root用户需要使用/etc/hosts.equiv文件,另外须修改/etc/pam.d/rsh验证。
#%PAM-1.0
# For root login to succeed here with pam_securetty, "rsh" must be
# listed in /etc/securetty.
auth required pam_nologin.so
#auth required pam_securetty.so
auth required pam_env.so
auth required pam_rhosts_auth.so
account required pam_stack.so service=system-auth
session required pam_stack.so service=system-auth
oracle用户设置
$ cat /home/oracle/.rhosts
linuxrac9
linuxrac6
linuxrac9-priv
linuxrac6-priv
测试:
正确效果:在linuxrac6节点通过rsh访问linuxrac9节点(注意最后一行):
[root@linuxrac6 ~]# rsh linuxrac9 date
connect to address 134.98.105.170: Connection refused
Trying krb4 rsh...
connect to address 134.98.105.170: Connection refused
trying normal rsh (/usr/bin/rsh)
Fri Mar 14 18:40:12 CST 2008
错误效果:在linuxrac9节点通过rsh访问linuxrac6节点(注意最后一行):
[root@linuxrac9 ~]# rsh linuxrac6 date
connect to address 134.98.105.171: Connection refused
Trying krb4 rsh...
connect to address 134.98.105.171: Connection refused
trying normal rsh (/usr/bin/rsh)
Permission denied.
(2) 配置(ssh)
但在实际安装Oracle10g过程中,发现rsh系列的rcp操作会失败,Oracle10g还是最好配置ssh
方式。Oracle9i还没有发现这个问题。
设置oracle用户的互相信任机制,分别在所有节点机下以oracle用户运行:
$ /usr/bin/ssh-keygen -t rsa
命令会
将公共密钥写入 ~/.ssh/id_rsa.pub 文件
将私有密钥写入 ~/.ssh/id_rsa 文件
$ /usr/bin/ssh-keygen -t dsa
命令会
将公共密钥写入 ~/.ssh/id_dsa.pub 文件
将私有密钥写入 ~/.ssh/id_dsa 文件
两个命令都会提示确认生成文件的路径和密码,密码可为空。这些密钥不能随意传递给其它
机器。
[oracle@linuxrac9 .ssh]$ /usr/bin/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:
99:0d:1e:cb:7c:12:09:02:15:78:3e:f9:55:e7:12:38 oracle@linuxrac9
[oracle@linuxrac9 .ssh]$ /usr/bin/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:
3e:43:04:7e:23:1c:87:25:74:9b:ef:53:42:17:af:79 oracle@linuxrac9
确定所有节点上是否已经存在授权密钥文件 (~/.ssh/authorized_keys),我们将在所有节点机上
重新创建,同样在某台节点机(如linuxrac9)的oracle用户下运行:
$ touch ~/.ssh/authorized_keys
$ ssh linuxrac9 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ ssh linuxrac9 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ ssh linuxrac6 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ ssh linuxrac6 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
命令执行会提示一些信息,按提示执行即可。
在linuxrac9上,我们在授权密钥文件 (~/.ssh/authorized_keys) 中已经获得了来自集群中各个节点
的 RSA 和 DSA 公共密钥内容。现在将其复制到集群中的其余节点。双节点集群中,剩下的节点就是
linuxrac6。使用 scp 命令将授权密钥文件复制到集群中的其余所有节点:
$ scp ~/.ssh/authorized_keys linuxrac6:~/.ssh/authorized_keys
最后在所有节点下测试ssh,第一次需要密码,以后不用,方法与rsh相同:
$ ssh linuxrac9 date
$ ssh linuxrac6 hostname
$ ssh linuxrac9-priv date
$ ssh linuxrac6-priv hostname
---D.节点间时间同步
RAC不能容忍有时间不同步的现象发生,否则在安装和运行过程会出现各类严重错误。
然而虚拟机经常会出现每个节点机时间步调不一致的现象,很有必要每隔一段时间同步所有节点
机的时间。笔者这里图省事,使用简单的rsh linuxrac6 date -s的方法,通过crontab调用保存shell进行
同步,这种方法不推荐,调用频繁会产生僵尸进程。
[root@linuxrac9 liwei]# cat setdate.sh
#!/bin/bash
SETVALUE=`date +'%H:%M:%S'`
rsh linuxrac6 date -s $SETVALUE
echo "linuxrac9:" `date` >> /root/liwei/setdate.log
echo "linuxrac6:" `rsh linuxrac6 date` >> /root/liwei/setdate.log
[root@linuxrac9 liwei]# crontab -e
* * * * * /root/liwei/setdate.sh
方法很多可以使用ntp之类的工具。
七、设置共享磁盘
很多网上文章提及plainmaker.exe去创建共享磁盘,是以前的版本,新版本使用vm-diskmanager。
命令行下进行目录 E:/Program Files/VMware/VMware GSX Server使用vmware-vdiskmanager
创建共享磁盘。
如:
E:/Program Files/VMware/VMware GSX Server>vmware-vdiskmanager -c -s 4Gb -a lsilogic -t 1
"E:/LinuxRacShareDisk/LinuxShareDisk.vmdk"
Using log file C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/vdiskmanager.log
Creating a split disk 'E:/LinuxRacShareDisk/LinuxShareDisk.vmdk'
Virtual disk creation successful.
实际使用中,发现共享磁盘极不稳定,复制文件会突然关机,后重新创建,仍然如此。试了不少
次,这里列出最后创建语句,也许是运气吧,一直比较稳定:
E:/Program Files/VMware/VMware GSX Server>vmware-vdiskmanager -c -s 1Gb -a lsilogic -t 2 "E:/VMDISK/LinuxShareDisk.vmdk"
Using log file C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/vdiskmanager.log
Creating monolithic preallocated disk 'E:/VMDISK/LinuxShareDisk.vmdk'
Create: 100% done.
Virtual disk creation successful.
笔者认为,在虚拟机硬盘的设置中,“动态增加大小”和“分割成小文件”两个选项不仅降低了性能,也
是系统很不稳定的重要因素。推荐不要使用!
命令的具体参数含义,可以输入vmware-vdiskmanager详细查看,不再说明。
共享磁盘创建后,需要将它分别添加到两台节点机上。
方法:
Edit Vitrual Machine -> Hard Disk -> Add -> Next -> 选择Hard Disk Next ->Using an exsit virtual
disk Next-> Browse 选择 E:/LinuxRacShareDisk/LinuxShareDisk.vmdk 注意这里必须设置 Advance
SCSI 1:0。具体为何设置为SCSI 1:0,可以仔细研读配置文件rhel4.vmx,便可知晓。
确定后会在配置文件rhel4.vmx中体现,另一台节点机同样处理。
注意,添加完共享磁盘后,必须在各自rhel4.vmx文件中添加如下内容,不可重复添加:
disk.locking = "FALSE"
scsi1.sharedBus = "virtual"
scsi1:0.mode = "persistent"
这样两台节点机才可以正常使用共享磁盘。
测试方法,可以在两台节点机上通过fdisk -l查看。以下是已经分好区的示例:
[root@linuxrac9 ~]# fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 978 7855753+ 83 Linux
/dev/sda2 979 1043 522112+ 82 Linux swap
Disk /dev/sdb: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 522 4192933+ 83 Linux
八、最后
本文主要综述RAC环境的基本条件,后续文章会介绍实际操作的示例。安装配置RAC是比较复杂
的,须要有足够的耐心一点一点的克服下去。