在 VMWare ESX4/Sever 2 中以 CentOS5.5 安装 Oracle 11.2 RAC
(原创: flexitime ,转载请注明出处,谢谢)
1. 规划 IP :
RAC1 IP 10.1.1.201
RAC1 VIP 10.1.1.211
RAC1 Priv-IP 10.0.0.1
RAC2 IP 10.1.1.202
RAC2 VIP 10.1.1.212
RAC1 Priv-IP 10.0.0.2
SCAN IP 10.1.1.254
2. 设置一个新的虚拟机,设置内存为 2G ,硬盘为 20G ,增加一个网卡后安装 CentOS55 ,全部默认安装。关闭 SELinux ,关闭防火墙。
3. 增加组及用户
groupadd -g 1000 oinstall
groupadd -g 1200 dba
useradd -u 1100 -g oinstall -G dba oracle
passwd oracle
4. 检查 rpm 包
# rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})/n"|/
egrep "binutils|compat-libstdc++|elfutils-libelf|gcc|glibc|kernel-headers|ksh|libaio|libgcc|libgomp|libstdc|make|sysstat|unixODBC|pdksh"|sort
安装 rpm 包,在 VM 中连接上 CentOS55 的 DVD
执行以下命令(注,如所缺的不止这些包,请另行再安装,所要的包可以参考 Oracle 的标准安装文档)
mount -r -t iso9660 /dev/cdrom /media
cd /media/CentOS
rpm -ivh compat-libstdc++-33-3.2.3-61.i386.rpm
rpm -ivh elfutils-libelf-devel-0.137-3.el5.i386.rpm elfutils-libelf-devel-static-0.137-3.el5.i386.rpm
rpm -ivh libstdc++-devel-4.1.2-48.el5.i386.rpm
rpm -ivh kernel-headers-2.6.18-194.el5.i386.rpm
rpm -ivh glibc-headers-2.5-49.i386.rpm
rpm -ivh glibc-devel-2.5-49.i386.rpm
rpm -ivh libgomp-4.4.0-6.el5.i386.rpm
rpm -ivh glibc-devel-2.5-49.i386.rpm
rpm -ivh gcc-4.1.2-48.el5.i386.rpm
rpm -ivh gcc-c++-4.1.2-48.el5.i386.rpm
rpm -ivh libaio-devel-0.3.106-5.i386.rpm
rpm -ivh sysstat-7.0.2-3.el5.i386.rpm
rpm -ivh unixODBC-2.2.11-7.1.i386.rpm
rpm -ivh unixODBC-devel-2.2.11-7.1.i386.rpm
rpm -ivh pdksh-5.2.14-36.el5.i386.rpm
安装 Oracle 的 asm 包,可在 Oracle 网站上下载
rpm -ivh oracleasm-2.6.18-194.el5-2.0.5-1.el5.i686.rpm /
oracleasm-support-2.1.4-1.el5.i386.rpm /
oracleasmlib-2.0.4-1.el5.i386.rpm
进入 grid (在 Oracle 网站上下载)的安装目录,进行 rpm 目录
rpm -Uvh cvuqdisk*
5. 编辑 /etc/hosts
# Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost # Public Network -(eth0) 10.1.1 .201 rac1.localdomain rac1 10.1.1 .202 rac2.localdomain rac2 #Private Network -(eht1) 10.0.0 .1 rac1-priv.localdomain rac1-priv 10.0.0 .2 rac2-priv.localdomain rac2-priv #Public Virtual IP -(eth0:1) 10.1.1 .211 rac1-vip.localdomain rac1-vip 10.1.1 .212 rac2-vip.localdomain rac2-vip
#Note. The SCAN address should not really be defined in the hosts file. #Instead is should be defined on the DNS to round-robin #between 3 addresses on the same subnet as the public IPs. #For this installation, we will compromise and use the hosts file. #Single Client Access Name(SCAN) 10.1.1 .254 rac-scan.localdomain rac-scan |
修改网络设置中的 DNS - > HostName 改为 rac1.localdomain
增加 ip , priv-ip 地址
6. 编辑 /etc/sysctl.conf ,在文件最后加上(下同)
fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 1054504960 kernel.shmmni = 4096 # semaphores: semmsl, semmns, semopm, semmni 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
7. 编辑 /etc/security/limits.conf
oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 |
编辑 /etc/pam.d/login
session required pam_limits.so |
8. 关闭 ntpd 服务,准备使用 Oracle 的 ctssd 服务进行时间的同步
# service ntpd stop
# chkconfig ntpd off
# mv /etc/ntp.conf /etc/ntp.conf.org
# rm /var/run/ntpd.pid
9. 建立安装目录
mkdir -p /u01/app/11.2.0/grid
mkdir -p /u01/app/oracle/product/11.2.0/db_1
chown -R oracle:oinstall /u01
chmod -R 775 /u01/
10. 修改 Oracle 用户配置文件
su - oracle
cd ~
nano .bash_profile
# Oracle Settings TMP=/tmp; export TMP TMPDIR=$TMP; export TMPDIR
ORACLE_HOSTNAME=rac1.localdomain; export ORACLE_HOSTNAME ORACLE_UNQNAME=RAC; export ORACLE_UNQNAME ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME ORACLE_SID=RAC1; export ORACLE_SID ORACLE_TERM=xterm; export ORACLE_TERM PATH=/usr/sbin:$PATH; export PATH PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
if [ $USER = "oracle" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi
|
11. 在图形界面下运行
./usr/bin/vmware-toolbox
在时间同步位置上打勾
12. 关机,建立共享磁盘
VMWare Server 2.X 的设置
scsi 1
Allocate all disk space now
"Independent" and "Persistent"
asm1.vmdk
Virtual Device Node: SCSI 1:0
Mode: Independent and Persistent
asm2.vmdk
Virtual Device Node: SCSI 1:1
Mode: Independent and Persistent
asm3.vmdk
Virtual Device Node: SCSI 1:2
Mode: Independent and Persistent
asm4.vmdk
Virtual Device Node: SCSI 1:3
Mode: Independent and Persistent
asm5.vmdk
Virtual Device Node: SCSI 1:4
Mode: Independent and Persistent
编辑 VM 的配置文件如: RAC1.vmx
在每个 scsiX:X 配置中增加以下内容:(如 scsi1:5 中)
scsi1:5.redo = ""
并在最后加上
disk.locking = "false"
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
diskLib.DataCacheMinReadAheadSize = "0"
diskLib.dataCachePageSize = "4096"
diskLib.maxUnsyncedWrites = "0"
在 ESX 4.1 的设置 -----------------------------------
用 SSH 登录 ESX Server ,如果不知如何打开 ssh 功能,请参考我 blog 上的文章
cd /vmfs ..,
直到进行 datastore 的目录
mkdir RACShare
cd RACShare
1 、创建磁盘
vmkfstools -d eagerzeroedthick -a lsilogic -c 10G asm1.vmdk
vmkfstools -d eagerzeroedthick -a lsilogic -c 10G asm2.vmdk
vmkfstools -d eagerzeroedthick -a lsilogic -c 10G asm3.vmdk
vmkfstools -d eagerzeroedthick -a lsilogic -c 10G asm4.vmdk
vmkfstools -d eagerzeroedthick -a lsilogic -c 10G asm5.vmdk
2 、添加到需要的 vm 上,选择不同的通道,如 scsi1:0
3 、 SCSI 控制器选择物理(虚拟磁盘可以在不同 server 上的虚拟机之间共享)。
13. 起动后,为新增的磁盘分区
fdisk /dev/sdb
...fdisk /dev/sdc 到 sdf
每次进入命令提示时,依次输入 "n", "p", "1", "Return", "Return", "p" and "w".
chown oracle:oinstall /dev/sdb1
chown oracle:oinstall /dev/sdc1
chown oracle:oinstall /dev/sdd1
chown oracle:oinstall /dev/sde1
chown oracle:oinstall /dev/sdf1
chmod 600 /dev/sdb1
chmod 600 /dev/sdc1
chmod 600 /dev/sdd1
chmod 600 /dev/sde1
chmod 600 /dev/sdf1
14. 设置 oracle asm lib
# oracleasm configure -i
Configuring the Oracle ASM library driver. Default user to own the driver interface []: oracle Default group to own the driver interface []: dba Start Oracle ASM library driver on boot (y/n) [n]: y Scan for Oracle ASM disks on boot (y/n) [y]: y |
加载 asm 模块
/usr/sbin/oracleasm init
15. 创建 asm 磁盘
/usr/sbin/oracleasm createdisk DISK1 /dev/sdb1
/usr/sbin/oracleasm createdisk DISK2 /dev/sdc1
/usr/sbin/oracleasm createdisk DISK3 /dev/sdd1
/usr/sbin/oracleasm createdisk DISK4 /dev/sde1
/usr/sbin/oracleasm createdisk DISK5 /dev/sdf1
检查 asm 磁盘(非必要)
/usr/sbin/oracleasm scandisks
显示所有 asm 磁盘 ( 非必要)
/usr/sbin/oracleasm listdisks
16. 复制虚拟机
将 RAC1 关机,将 RAC1 的内容复制到 RAC2 中,并加载此虚拟机,加载后,进入图形界面,注意要更新网卡的 MAC 地址。
加载 x window ,更新 mac ,修改 ip 、 priv-ip 及 dns ->hostname 名字: rac2.localdomain
进入 提示符
su - oracle
cd ~
nano .bash_profile
修改
ORACLE_SID=RAC2; export ORACLE_SID ORACLE_HOSTNAME=rac2.localdomain; export ORACLE_HOSTNAME |
修改 RAC1 及 RAC2 的 VM 网卡设置,将 RAC1 、 RAC2 的 eth0 配在同一虚拟交换机上,将两者的 eth1 配在另一交换机上
17. 检查网络是否准备好
ping -c 3 rac1
ping -c 3 rac1-priv
ping -c 3 rac2
ping -c 3 rac2-priv
18. 配置 SSH 用户等效性
第一步:
在每一台机上用 root 登录,运行以下脚本
su - oracle
mkdir ~/.ssh
chmod 700 ~/.ssh
/usr/bin/ssh-keygen -t rsa # 使用默认值就行了
第二步:
在 RAC1 上运行
su - oracle
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
scp authorized_keys rac2:/home/oracle/.ssh/
在 RAC2 上运行
su - oracle
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
scp authorized_keys rac1:/home/oracle/.ssh/
注:以上的解释
比如要从 node A 上的 abc 用户, ssh 到 host B 上的 def 用户
那就要在 A 上的 abc 用户下面
#ssh-keygen -t rsa
把生成的 id_rsa.pub 放到 B 上 def 下的 authorized_keys 里
最好是 >> 而不是 cp ,这样不会抹掉之前的记录
在这里其实就是在 RAC1 上先产生一个 pub 的 rsa 密钥,并将其放在 RAC2 上,这样 RAC1 的用户登录到 RAC2 上时就不需要认证了,接着, RAC2 也产生一个 pub 的 rsa 密钥并 追加 到 RAC1 刚刚传过来的 authorized_keys 文件中,同时又将此密钥放到 RAC1 中。如果用 nano 打开这个文件,就会看到有两条记录了,如果要做多个的认证,步骤就有点复杂了,但必须保证所有机器上的 authorized_keys 内容都一样,且此文件包括所有机的 prsa pub key 。
第三步
在各台机上逐一运行
ssh rac1 date
ssh rac2 date
ssh rac1.localdomain date
ssh rac2.localdomain date
ssh rac1-priv date
ssh rac2-priv date
ssh rac1-priv.localdomain date
ssh rac2-priv.localdomain date
exec /usr/bin/ssh-agent $SHELL
/usr/bin/ssh-add
这时会在 ~/.ssh 目录中产生一个 known_hosts 的文件,里面会有主机的加密串
验证:
重新开机后(最好是这样),在各节点上能够连续运行以下命令的(不提示输入密码)就算安装成功了
ssh rac1 date
ssh rac2 date
ssh rac1.localdomain date
ssh rac2.localdomain date
ssh rac1-priv date
ssh rac2-priv date
ssh rac1-priv.localdomain date
ssh rac2-priv.localdomain date
19. 检查 Clusterware 的安装环境是否准备好
下载 Oracle 11R2 的 Grid 软件包,解压后运行
./runcluvfy.sh stage -pre crsinst -n rac1,rac2 –verbose
运行上述包时,必须用 oracle 用户,不能用 root ,同时,运行时可能会报一个 /tmp/bootstrap 不能被删除的错误,用 root 账号将此目录删除或改名即可。
20. 下载 11G 的 grid 安装包,准备安装
以 oracle 用户登录,运行
./runInstaller
一路选下去,选择典型,
下一页
scan 名称那里要填 rac-scan( 与 /etc/hosts 文件中对应)
添加一个 rac 节点
主机名: rac2.localdomain
虚拟主机名: rac2-vip.localdomain
下一页
集群注册表储存类型:自动储存管理 (ASM)
软件位置: /u01/app/11.2.0/grid
集群注册表位置:
sysasm 口令: 123456
osasm 组: dba
下一页
redunancy (冗余) : external
选全部的磁盘
下一页
清单目录: /u01/app/oraInventory
下一页
检测等,自行决定修复错误,然后安装
安装最后一步后,分别在两台上运行以下脚本
按提示分别在两节点上依次执行脚本
rac1
cd /u01/app/oraInventory/
./orainstRoot.sh
rac2
cd /u01/app/oraInventory/
./orainstRoot.sh
rac1
cd /u01/app/11.2.0/grid/
./root.sh
rac2
cd /u01/app/11.2.0/grid/
./root.sh
最后点击 OK ,
////// 安装完成后,可能会报错,先不用管它
检查 crs
su - oracle
cd /u01/app/11.2.0/grid/bin
检查 crs 状态:
./crsctl check crs
检查 Clusterware 资源 :
./crs_stat -t -v
检查集群节点:
./olsnodes -n
检查两个节点上的 ORACLE TNS 监听器进程:
./srvctl status listener
使用下面的命令语法来确认当前正在运行已安装的 Oracle ASM
./srvctl status asm -a
检查 集群注册表
./ocrcheck
检查表决磁盘
./crsctl query css votedisk
重启,重新再检查一次是否正常
21. 安装 Oracle 软件
用典型,选服务器类,选 RAC
在 典型安装配置 页:
软件位置 /u01/app/oracle/product/11.2.0/db_1
gobal database name ( 全局数据库名) : RAC.localdomain
storage type Automatic Storage Manager
最后需要再用 root 身份运行脚本
cd /u01/app/oracle/product/11.2.0/db_1/
./root.sh
22. 检查 RAC
在任一节点上以 oracle 用户登录
1. 运行:
srvctl config database -d RAC
数据库唯一名称 : RAC
数据库名 : RAC
Oracle 主目录 : /u01/app/oracle/product/11.2.0/db_1
Oracle 用户 : oracle
Spfile: +DATA/RAC/spfileRAC.ora
域 : localdomain
启动选项 : open
停止选项 : immediate
数据库角色 : PRIMARY
管理策略 : AUTOMATIC
服务器池 : RAC
数据库实例 : RAC1,RAC2
磁盘组 : DATA
服务 :
数据库是管理员管理的
2.
$ sqlplus / as sysdba
SQL> SELECT inst_name FROM v$active_instances;
INST_NAME
--------------------------------------------------------------------------------
rac1.localdomain:RAC1
rac2.localdomain:RAC2
3.
https://10.1.1.201:1152/em
https://10.1.1.211:1152/em
https://10.1.1.212:1152/em