新笔记本内存比较大(新款T420),硬盘也比较充裕,还没好好压榨过,最近打算用RAC折腾一下,在本地创建了环境,顺便将过程记录下来。
PS: 回想起当年用E41一共2g内存,双核cpu(且不支持虚拟化)用vmware跑rac时的情景,稍有不慎 机器就会卡死,或者虚拟机崩溃,真是折腾至极啊~~~
OS: OLE 5.8x64
Cluster Software :10.2.0.1 x64
Database Software: 10.2.0.1 x64
Patch: 10.2.0.5 x64
一.安装必要rpm包,配置内核参数,环境变量
[root@rac1 ~]# mkdir /media/disk[root@rac1 ~]# mount /dev/cdrom /media/disk
mount: block device /dev/cdrom is write-protected, mounting read-only
touch /etc/yum.repos.d/public-yum-el5.repo,并加入以下内容
[redhat5]
name = Enterprise Linux 5.8 DVD
baseurl=file:///media/disk/Server/
gpgcheck=0
enabled=1
yum install oracle-validated
二.节点1配置hosts文件,再拷贝至节点2
[root@rac1 ~] vi /etc/hosts
10.0.0.63 rac1
10.0.0.64 rac2
10.0.0.84 rac1-vip
10.0.0.98 rac2-vip
11.0.0.63 rac1-priv
11.0.0.64 rac2-priv
[root@rac1 ~]# scp /etc/hosts root@rac2:/etc/hosts
hosts 100% 306 0.3KB/s 00:00
~
三.配置SSH 用户等价,可全部在第一个节点操作完成
--root用户 等价
# /usr/bin/ssh-keygen -t rsa
# /usr/bin/ssh-keygen -t dsa
# ssh rac2 /usr/bin/ssh-keygen -t rsa
# ssh rac2 /usr/bin/ssh-keygen -t dsa
# touch ~/.ssh/authorized_keys
# cd ~/.ssh
# ls
ssh rac1 cat /root/.ssh/id_rsa.pub >> authorized_keys
ssh rac1 cat /root/.ssh/id_dsa.pub >> authorized_keys
ssh rac2 cat /root/.ssh/id_rsa.pub >> authorized_keys
ssh rac2 cat /root/.ssh/id_dsa.pub >> authorized_keys
scp authorized_keys rac2:/root/.ssh/
--oracle用户等价
$ /usr/bin/ssh-keygen -t rsa
$ /usr/bin/ssh-keygen -t dsa
$ ssh rac2 /usr/bin/ssh-keygen -t rsa
$ ssh rac2 /usr/bin/ssh-keygen -t dsa
$ touch ~/.ssh/authorized_keys
$ cd ~/.ssh
$ ls
ssh rac1 cat /home/oracle/.ssh/id_rsa.pub >> authorized_keys
ssh rac1 cat /home/oracle/.ssh/id_dsa.pub >> authorized_keys
ssh rac2 cat /home/oracle/.ssh/id_rsa.pub >> authorized_keys
ssh rac2 cat /home/oracle/.ssh/id_dsa.pub >> authorized_keys
scp authorized_keys rac2:/home/oracle/.ssh/
注:此时authorized_keys权限应为611. 注意在其他场景例如hadoop场景中,可能要调整为600.
分别测试ssh rac1, ssh rac1-priv, ssh rac2, ssh rac2-priv ,确保已经不需要密码。
四.在每个节点创建cluster software 与database software根目录,并更改owner与group。
[root@rac1 ~]# mkdir -p /u01/crs_1[root@rac1 ~]# mkdir -p /u01/db_1
[root@rac1 ~]# chown -R oracle:oinstall /u01
[root@rac2 ~]# mkdir -p /u01/crs_1
[root@rac2 ~]# mkdir -p /u01/db_1
[root@rac2 ~]# chown -R oracle:oinstall /u01
五.预先配置好oracle用户环境变量
[root@rac1 ~]# vi .bash_profile
ORACLE_BASE=/u01
ORACLE_HOME=$ORACLE_BASE/db_1
CRS_HOME=$ORACLE_BASE/crs_1
PATH=$CRS_HOME/bin:$ORACLE_HOME/bin:$PATH
export ORACLE_BASE ORACLE_HOME CRS_HOME PATH
然后直接拷贝至其他节点
六.使用udev绑定raw 设备
10g的ocr votingdisk 不能放在asm,只能放在裸设备上。
本实验中将sdb(3g)划分两个分区,分别做OCR DISK与VOTING DISK,后面安装crs时均使用external redundancy.
[root@rac1 ~]# ls -l /dev/sd*
brw-r----- 1 root disk 8, 0 Sep 25 06:57 /dev/sda
brw-r----- 1 root disk 8, 1 Sep 25 06:58 /dev/sda1
brw-r----- 1 root disk 8, 2 Sep 25 06:57 /dev/sda2
brw-r----- 1 root disk 8, 3 Sep 25 06:58 /dev/sda3
brw-r----- 1 root disk 8, 16 Sep 25 06:57 /dev/sdb #ocr
brw-r----- 1 root disk 8, 32 Sep 25 06:57 /dev/sdc #sharedisk1
brw-r----- 1 root disk 8, 48 Sep 25 06:57 /dev/sdd #sharedisk2
brw-r----- 1 root disk 8, 64 Sep 25 06:57 /dev/sde #sharedisk3
brw-r----- 1 root disk 8, 80 Sep 25 06:57 /dev/sdf #sharedisk4
[root@rac1 ~]#fdisk /dev/sdb
....[root@rac1 ~]#partprobe /dev/sdb
....
[root@rac1 ~]# ls -l /dev/sd* 可以显示主设备号与从设备号
brw-r----- 1 root disk 8, 0 Sep 25 06:57 /dev/sda
brw-r----- 1 root disk 8, 1 Sep 25 06:58 /dev/sda1
brw-r----- 1 root disk 8, 2 Sep 25 06:57 /dev/sda2
brw-r----- 1 root disk 8, 3 Sep 25 06:58 /dev/sda3
brw-r----- 1 root disk 8, 16 Sep 25 09:56 /dev/sdb
brw-r----- 1 root disk 8, 17 Sep 25 09:56 /dev/sdb1
brw-r----- 1 root disk 8, 18 Sep 25 09:56 /dev/sdb2
brw-r----- 1 root disk 8, 32 Sep 25 06:57 /dev/sdc
brw-r----- 1 root disk 8, 48 Sep 25 06:57 /dev/sdd
brw-r----- 1 root disk 8, 64 Sep 25 06:57 /dev/sde
brw-r----- 1 root disk 8, 80 Sep 25 06:57 /dev/sdf
vi /etc/udev/rules.d/vi 60-raw.rules
参照文件内的示例,增加6条udev绑定记录,同时增加一条指定raw设备owner与group的记录:
ACTION=="add", KERNEL=="sdb2", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="sdc", RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", KERNEL=="sdd", RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add", KERNEL=="sde", RUN+="/bin/raw /dev/raw/raw5 %N"
ACTION=="add", KERNEL=="sdf", RUN+="/bin/raw /dev/raw/raw6 %N"
ACTION=="add" KERNEL=="raw*", OWNER=="oracle" GROUP=="oinstall" MODE=="600"
在节点1启动udev服务:
Starting udev: [ OK ]
将rule文件拷贝至其他节点,可直接启动udev服务
[root@rac1 ~]# scp /etc/udev/rules.d/60-raw.rules root@rac2:/etc/udev/rules.d/
60-raw.rules 100% 776 0.8KB/s 00:00
Starting udev: [ OK ]
[root@rac1 ~]# ls -l /dev/raw/raw*
crw-r----- 1 root oinstall 162, 1 Sep 28 08:09 /dev/raw/raw1
crw-r--r-- 1 oracle oinstall 162, 2 Sep 28 09:44 /dev/raw/raw2
crw------- 1 oracle oinstall 162, 3 Sep 28 09:44 /dev/raw/raw3
crw------- 1 oracle oinstall 162, 4 Sep 28 09:44 /dev/raw/raw4
crw------- 1 oracle oinstall 162, 5 Sep 28 09:44 /dev/raw/raw5
crw------- 1 oracle oinstall 162, 6 Sep 28 09:44 /dev/raw/raw6
另一种udev绑定裸设备的方式,10g rac部署中,可以不用此方式:
[root@rac1 raw]# ls -l /dev/sd*brw-r----- 1 root disk 8, 0 Sep 25 06:57 /dev/sda
brw-r----- 1 root disk 8, 1 Sep 25 06:58 /dev/sda1
brw-r----- 1 root disk 8, 2 Sep 25 06:57 /dev/sda2
brw-r----- 1 root disk 8, 3 Sep 25 06:58 /dev/sda3
brw-r----- 1 root disk 8, 16 Sep 25 09:56 /dev/sdb
brw-r----- 1 root disk 8, 17 Sep 25 09:56 /dev/sdb1
brw-r----- 1 root disk 8, 18 Sep 25 09:56 /dev/sdb2
brw-r----- 1 root disk 8, 32 Sep 25 06:57 /dev/sdc
brw-r----- 1 root disk 8, 48 Sep 25 06:57 /dev/sdd
brw-r----- 1 root disk 8, 64 Sep 25 06:57 /dev/sde
brw-r----- 1 root disk 8, 80 Sep 25 06:57 /dev/sdf
使用脚本完成(仅限linux5,10g),每个设备的scsi_id是唯一的,将其绑定为固定名字的设备:
for i in c d e f;
do
echo "KERNEL==\"sd*\", BUS==\"scsi\", PROGRAM==\"/sbin/scsi_id -g -u -s %p\", RESULT==\"`scsi_id -g -u -s /block/sd$i`\", NAME=\"asm-disk$i\", OWNER=\"oracle\", GROUP=\"oinstall\", MODE=\"0660\""
done
输出:
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="SATA_VBOX_HARDDISK_VB23c84fd5-c4321613_", NAME="asm-diskc", OWNER="oracle", GROUP="oinstall", MODE="0660"
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="SATA_VBOX_HARDDISK_VBcb7f3dcc-44253b14_", NAME="asm-diskd", OWNER="oracle", GROUP="oinstall", MODE="0660"
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="SATA_VBOX_HARDDISK_VB7ec1ee7a-46773dc5_", NAME="asm-diske", OWNER="oracle", GROUP="oinstall", MODE="0660"
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="SATA_VBOX_HARDDISK_VB7af95ed6-546ee8c0_", NAME="asm-diskf", OWNER="oracle", GROUP="oinstall", MODE="0660"
cd /etc/udev/rules.d/
touch 99-oracle-asmdevices.rules
将以上输出加入进去,就能创建绑定4个裸设备的盘符,名字分别为asm-diskc,asm-diskd,asm-diske,asm-diskf
[root@rac1 rules.d]# start_udev
Starting udev: [ OK ]
[root@rac1 rules.d]# ls -l /dev/asm* 就能看见4个asm开头的磁盘
brw-rw---- 1 oracle oinstall 8, 32 Sep 25 10:30 /dev/asm-diskc
brw-rw---- 1 oracle oinstall 8, 48 Sep 25 10:30 /dev/asm-diskd
brw-rw---- 1 oracle oinstall 8, 64 Sep 25 10:30 /dev/asm-diske
brw-rw---- 1 oracle oinstall 8, 80 Sep 25 10:30 /dev/asm-diskf
至此,4个磁盘,2个裸设备在rac1配置完毕,然后将两个规则文件scp到rac2,在rac2上start_udev.
[root@rac1 rules.d]# scp 60-raw.rules root@rac2:/etc/udev/rules.d/60-raw.rules
[root@rac1 rules.d]# scp 99-oracle-asmdevices.rules root@rac2:/etc/udev/rules.d/99-oracle-asmdevices.rules
[root@rac2 ~]# start_udev
Starting udev: [ OK ]
[root@rac2 ~]# ls -l /dev/raw
total 0
crw-rw---- 1 oracle oinstall 162, 1 Sep 25 10:36 raw1
crw-rw---- 1 oracle oinstall 162, 2 Sep 25 10:36 raw2
[root@rac2 ~]# ls -l /dev/asm-disk*
brw-rw---- 1 oracle oinstall 8, 32 Sep 25 10:32 /dev/asm-diskc
brw-rw---- 1 oracle oinstall 8, 48 Sep 25 10:32 /dev/asm-diskd
brw-rw---- 1 oracle oinstall 8, 64 Sep 25 10:32 /dev/asm-diske
brw-rw---- 1 oracle oinstall 8, 80 Sep 25 10:32 /dev/asm-diskf
七 .配置节点间时间同步
先比较两个节点的时间,如果节点之间时间不同步,可以利用配置好的root用户等价,将两台机器设置为相同时间, 这样起码可以保证crs安装成功
[root@rac1 ~]# date -s 13:21:11;ssh rac2 date -s 13:21:11
[root@rac1 ~]# vi /etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 stratum 11
driftfile /var/lib/ntp/drift
broadcastdelay 0.008
[root@rac1 ~]# /etc/init.d/ntpd start
Starting ntpd: [ OK ]
[root@rac1 ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*LOCAL(0) .LOCL. 11 l 19 64 377 0.000 0.000 0.031
[root@rac2 ~]# vi /etc/ntp.conf
server 10.0.0.31 prefer
driftfile /var/lib/ntp/drift
broadcastdelay 0.008
[root@rac2 ~]# ntpdate 10.0.0.31 #注意这里可能需要等待几分钟,再执行才会成功
4 Jan 13:33:31 ntpdate[21367]: adjust time server 10.0.0.31 offset -0.005956 sec
在Node2 每分钟自动同步时间
[root@rac2 ~]# crontab -e
*/1 * * * * /usr/sbin/ntpdate 10.0.0.31
八.安装10.2.0.1 crs软件
注意不要装到ORACLE_HOME里面去了!且再三确认每个node均创建好了目录,owner与group正确!否则安装途中报错浪费时间。
[root@rac1 ~]# /media/cdrom/clusterware/rootpre/rootpre.sh
No OraCM running
必须安装的(官方文档上没有注明)
libXau-devel-1.0.1-3.1.i386.rpm
libXp-1.0.0-8.1.el5.i386.rpm
libXp-devel-1.0.0-8.1.el5.i386.rpm
两个sh脚本,注意所有脚本在rac1上执行完后,再去rac2执行。
1. 创建目录
2. 格式化voting disk,并启动css服务
在安装10.2.0.1时,特别注意的几个问题:
a. 在第二个节点,执行root.sh的最后阶段,遇到以下错误,先不要点ok关闭“脚本运行提示窗口”,
"Running vipca(silent) for configuring nodeapps
/u01/crs/oracle/product/10.2.0/crs/jdk/jre//bin/java: error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory"
解决方法是是: 先在每个节点上,修改$CRS_HOME/bin目录下的srvctl和vipca文件,在srvctl文件的export LD_ASSUME_KERNEL行之后 与 vipca文件ARGUMENTS=""行之前增加 unset LD_ASSUME_KERNEL 。 然后再点击ok关闭“脚本运行提示窗口”。
b. 紧接着下一个验证界面,第三项验证会失败,可以直接ok忽略。如果第一项验证失败。例如“/racgons add_config rac1:6200 rac2:6200”,目前不知道如何修正,只能重新安装CRS。重装过程见第13章
c. 最后再手动执行一次vipca,并确保填入正确的vip别名,再三检查自动填充的ip地址是否正确。因为UI自动填充的值是默认将数值加1,很有可能不正确!
在OCM考试场景中可能会出现以上错误,只能手动解决,并且不能通过打10.2.0.5补丁解决。
九.打10.2.0.5 crs patch
Checking for file-max=101365; found file-max=65536. Failed <<<<Checking for ip_local_port_range=9000 - 65500; found ip_local_port_range=1024 - 65000. Failed
Checking for rmem_default=1048576; found rmem_default=262144. Failed <<<<
Checking for rmem_max=1048576; found rmem_max=262144. Failed <<<<
这些内核参数虽然在官方文档中没有提到,但是可以按照它的建议进行修正。没有warning ,妥妥的。
To complete the installation of this patchset, you must perform the following tasks on each node:
1. Log in as the root user.
2. As the root user, perform the following tasks:
a. Shutdown the CRS daemons by issuing the following command:
/u01/crs_1/bin/crsctl stop crs
b. Run the shell script located at:
/u01/crs_1/install/root102.sh
This script will automatically start the CRS daemons on the
patched node upon completion.
3. After completing this procedure, proceed to the next node and repeat.
查询crs软件版本与生效的版本。注意只有在两个节点跑完上面的脚本后,生效版本才会变为10.2.0.5
$crsctl check crs
$crsctl query crs softwareversion
root手动执行/u01/app/oracle/product/10.2.0/crs_1/bin/vipca
十.安装数据库软件10.2.0.1 并打上10.2.0.5 patch
database software必须安装在/u01/db_1
十一.创建监听
netca 创建监听
十二.创建数据库
只能用custom模式创建十三. 重装crs
掌握手动重装crs的方法,还是很有必要,逼近真实环境不会提供虚拟机闪回的功能。
a) 以root执行 /u01/crs_1/install//u01/crs_1/install/rootdeinstall.sh
b) 每个节点使用root用户删除,并重建crs与db跟目录
mkdir -p /u01/crs_1
mkdir -p /u01/db_1
chown -R oracle:oinstall /u01
c) 删除oraInventory 与 /etc/oracle/
d) 使用root用户清空raw设备,主要是ocr disk与voting disk
dd if=/dev/zero of=/dev/raw/raw1 bs=1M count=256
dd if=/dev/zero of=/dev/raw/raw1 bs=1M count=256
e) 建议重启机器
f) 再次安装crs .....