分类: Oracle
2011-04-26 15:08:17
ORACLE RAC集群搭建——基于RedHat 5.4与10gR2
首先集群需要个共享的储存结构——比如说集群有2个节点,2个节点都连接在同一个阵列柜上,如果没有阵列柜,那么一般都用一台机器(非集群节点)做iscsitarget端提供共享存储设备,节点使用iscsi-initiator连接target端。安装iscsi连接软件的rpm包在系统光盘中包含
iscsi-initiator-utils-6.2.0.871-0.10.el5
143.168.1.100是target服务器
另外两台机器分别是节点1,节点2
配置文件
/etc/iscsi/iscsid.conf
DiscoveryAddress = 143.168.1.100
链接target端(第一次连接时,sendtargets必须执行一次以便第一次发现节点)
iscsiadm -m discovery -t sendtargets -p 143.168.1.100
/etc/init.d/iscsi restart
chkconfig --level 345 iscsi on
在每个节点上安装好jdk1.6,不装也可以,但是oracle的各种java工具都会在中文环境乱码——包括em,安装界面都会乱码,建议安装。
一般都会缺少libXp这个rpm包,安装前可以装上
安装oracle块设备支持包(不安装的话就需要使用裸设备划分ASM)
oracleasmlib-2.0.4-1.el5.i386.rpm
oracleasm-2.6.18-164.el5-2.0.5-1.el5.i686.rpm
oracleasm-support-2.1.3-1.el5.i386.rpm
设定hostname
如果安装的时候没有设定机器名使用了默认的localhost,则需要修改
/etc/sysconfig/network中hostname
节点1修改成node1.lolita.com
节点2修改成node2.lolita.com
需要执行脚本
chkconfig --level 345 iscsi on
groupadd -g 1000 oinstall
groupadd -g 1001 dba
useradd -u 1000 -g oinstall -G dba oracle
cat >> /etc/security/limits.conf <
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft nofile 65536
oracle hard nofile 65536
EOF
cat > /etc/profile.d/java.sh <
export JAVA_HOME=/opt/jdk1.6.0_07
export JBOSS_HOME=/opt/jboss-4.2.3.GA
export JRE_HOME=\$JAVA_HOME/jre
export PATH=\$JAVA_HOME/bin:\$PATH
export CLASSPATH=.:\$JAVA_HOME/lib:\$JAVA_HOME/jre/lib
EOF
cat >> /etc/sysctl.conf <
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
EOF
sysctl -p
cat >> /home/oracle/.bash_profile <
umask 022
export ORACLE_BASE=/opt/oracle/app
export ORA_CRS_HOME=/opt/oracle/app/product/10/crs
export ORACLE_HOME=/opt/oracle/app/product/10/db
#export ORACLE_SID=gamedb
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
export PATH=\$ORACLE_HOME/bin:\$ORA_CRS_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib:/usr/include/linux
export TNS_ADMIN=\$ORACLE_HOME/network/admin
export CLASSPATH=\$CLASSPATH:\$ORACLE_HOME/jre/1.4.2/lib
EOF
每个节点以root运行上述脚本,创建用户设置环境变量(不要用网上千篇一律的脚本去修改/etc/profile文件,修改自身的profile文件即可....)。
注意:环境变量已经预先要注释掉OID,增加设置ORA_CRS_HOME环境变量,注意,创建的用户指定了uid与gid(rac要求uid gid在所有节点必须一致),如果有冲突就统一修改成其他uid gid
修改/etc/hosts文件
#回环中不能有本机hostname,如果有就删掉
127.0.0.1 localhost.localdomain localhost
#集群节点服务器ip。10201版crs有bug,如果eth0网卡使用10、192、172这三个内网ip安装中会出问题,之后版本这个问题修正
#必须先设置为任意外网ip段,之后再修改回内网段。RAC默认eth0为公共网卡(也就是对外提供数据库服务的网卡)
143.168.1.112 node2.lolita.com node2
143.168.1.111 node1.lolita.com node1
#两个节点的心跳网卡地址
192.168.56.111 node1-priv.lolita.com node1-priv
192.168.56.112 node2-priv.lolita.com node2-priv
#对外服务用虚拟ip、启动后是eth0:1
143.168.1.102 node2-vip.lolita.com node2-vip
143.168.1.101 node1-vip.lolita.com node1-vip
#disk为阵列柜服务器。生产环境阵列柜与oracle集群服务器链接应该与数据库服务用的网卡分开
#测试中只用了2块网卡所以就直接用eth0连接阵列柜(target端可以不写入hosts,target端可以用心跳网线)
143.168.1.100 disk.lolita.com disk
配置oracle的ssh等效
以Oracle身份运行(弹出提示都直接确定)
在node1
/usr/bin/ssh-keygen -t rsa
/usr/bin/ssh-keygen -t dsa
cat /home/oracle/.ssh/id_dsa.pub >>/home/oracle/.ssh/authorized_keys
cat /home/oracle/.ssh/id_rsa.pub >> /home/oracle/.ssh/authorized_keys
cp ~/.ssh/ authorized_keys ~/authorized.node1
scp ~/ authorized.node1 143.168.1.112:/home/oracle/
在node2
/usr/bin/ssh-keygen -t rsa
/usr/bin/ssh-keygen -t dsa
cat /home/oracle/.ssh/id_dsa.pub >>/home/oracle/.ssh/authorized_keys
cat /home/oracle/.ssh/id_rsa.pub >> /home/oracle/.ssh/authorized_keys
cp ~/.ssh/ authorized_keys ~/authorized.node2
scp ~/ authorized.node2 143.168.1.111:/home/oracle/
cat ~/authorized.node1 >> ~/.ssh/ authorized_keys
在node1
cat ~/ authorized.node2 >> /.ssh/ authorized_keys
以root身份修改每个节点ssh服务配置配置
/etc/ssh/sshd_conf
取消这两行的注释
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
在每个节点以oracle身份运行(输入yes后直接回车,作用是执行一次远程指令初始化ssh连接)
ssh node1 date date
ssh node2 date date
ssh node1-priv date
ssh node2-priv date
进入安装目录中有测试程序,下面指令测试连接与ssh等效
./runcluvfy.sh comp nodecon -n node1,node2
如果有提示根据错误提示做配置修改
对阵列柜共享磁盘进行分区
fdisk –l /dev/sdb(这个磁盘不是本地磁盘而是iscsi-initiator连接的C盘)
添加2个主分区,大小都给200M,多点也没关系(如果需要冗余仲裁磁盘和crs文件磁盘,可以在多个硬盘上建立多建立2~4个200M大小的分区,不要格式化分区!,由于target端肯定要做raid1,所以一般不需要多个冗余磁盘)
说明下这2个200m的分区作用
第一个是做仲裁磁盘,仲裁磁盘就用来判断节点连接硬盘状态的,需要裸设备。
第二个是做crs文件磁盘,crs文件其实就是集群的相关配置文件(不是实例的配置文件,实例的配置文件在asm磁盘中中),比如说节点数量、节点状态等。这里面的内容是当节点状态变化时更新的。由于crs会被多个节点同时读写,所以crs要么放在集群文件系统上,要么放再裸设备中(其实裸设备就是绕过文件系统自己实现读写锁功能)
每个节点使用root修改(启动裸设备、给仲裁磁盘和crs用!!注意不要增加再多的raw设备了,因为ASM通过oracle官方工具直接使用块设备,新加磁盘组不需要raw管理)
/etc/sysconfig/rawdevices
添加内容(就是刚才分出来的200M大小到分区)
/dev/raw/raw1 /dev/sdb1
/dev/raw/raw2 /dev/sdb2
运行
/etc/init.d/rawdevice restart
修改udev,如果raw多,匹配里需要增加相应raw盘
/etc/udev/rules.d/60-raw.rules
添加
ACTION=="add", KERNEL=="raw[1-2]", OWNER="oracle", GROUP="oinstall", MODE="0660"
运行刷新udev设置
start_udev
附注:redhat5系列取消了rawdevices这个服务,5.4又加了回来,5.0-5.3版本都只能在udev里设置裸设备,4系列redhat都有这个服务
如果之前硬盘做过crs盘,需要用dd清0盘上的信息!!!一定要,不然出麻烦的!
开始安装rac,参数表明指定使用新安装的jdk(oracle自带jdk中文乱码!,安装数据库也是用同样参数显示中文)
./runInstall -jreLoc /opt/ jdk1.6.0_07/jre
rac的安装路径记得修改,然后基本都是点next,ip填好,rcs和仲裁磁盘指定到已经生成的裸设备的字符设备文件(也就是/dev/raw/raw1、2两个文件)
安装结尾运行runRoot.sh最后会报错,原因是设置vip失败,因为oracle的vipa脚本有bug,查看后面bug部分修改脚本,修改完后以root在x窗口下运行次这个脚本,然后在图形界面中确定完成安装。
安装完成,测试节点情况
运行olsnodes,出现node1 node2则2节点已经在线
查看集群应用服务(nodeapps)状态n表示节点机器名
srvctl status nodeapps -n node1
srvctl status nodeapps -n node2
[bug]
在安装rac以root运行脚本时vipca脚本出现错误
/app/oracle/product/10.2.0/crs/bin/crsctl.bin: error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory
修改出错的vipca这个脚本,找到
arch=`uname -m`
if [ "$arch" = "i686" -o "$arch" = "ia64" -o "$arch" = "x86_64" ]
then
LD_ASSUME_KERNEL=2.4.19
export LD_ASSUME_KERNEL
fi
注释掉if与fi之间的内容或者修改为2.6.18,再在x界面中用root运行
注:乱码的话修改JREDIR为JREDIR=$JRE_HOME
同样srvctl工具运行也有这个错误(数据库和rac的bin中都有这个脚本,最好都修改)
srvctl status database -d orcl
/ora/app/oracle/product/10.2/db_1/jdk/jre/bin/java: error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory
修改这个脚本文件,找到
LD_ASSUME_KERNEL=2.4.19
export LD_ASSUME_KERNEL
注释掉这两行或者把内核改成2.6.18
如果执行vipca报如下错误
Error 0(Native: listNetInterfaces:[3])
[Error 0(Native: listNetInterfaces:[3])]
重设公共IP和私有IP即可解决
oifcfg setif -global eth0/143.168.1.0:public
oifcfg setif -global eth1/192.168.56.0:cluster_interconnect
[修改RAC IP]
ORACLE RAC修改IP地址,直接在一个节点执行oracle命令即可,但是网卡中的ip和/etc/hosts中的内容需要在每个节点修改
1.修改public ip
先查看当前的public ip
oifcfg getif
eth0 143.168.1.0 global public
删除旧ip
oifcfg delif -global eth0
添加新ip
oifcfg setif -global eth0/192.168.1.0:public
2.修改vip
查看当前vip信息
srvctl config nodeapps -n node1 -a
srvctl config nodeapps -n node2 -a
停库(初装没有数据库不需要运行)
srvctl stop database -d dbname
停资源 (这里停止vip等节点资源)
srvctl stop nodeapps -n node1
srvctl stop nodeapps -n node2
修改vip(root执行)
srvctl modify nodeapps -n node1 -A newvip/255.255.255.0/eth0
srvctl modify nodeapps -n node2 -A newvip/255.255.255.0/eth0
安装oracle数据库
单个节点进入安装目录,./runInstall –jreLoc /opt/ jdk1.6.0_07/jre,安装结尾会报错,因为重复复制了/opt/oracle/app/oraInventory/中的内容(安装rac的时候已经每个节点生成了,安装数据库的时候又复制一次),这个错误不必理会,直接确定。注意,只安装数据库软件不安装数据库!
附注:如果没有分配专门的oracle分区,遇上根分区空间不够的情况,临时格式化一个共享硬盘,把安装文件都移动到此分区。
遇到临时文件夹不足的情况。还可以通过export TEMP,export TEMPDIR临时修改tmp位置来保证oracle安装的临时空间足够
升级到版本,升级前删除数据库和集群文件的安装文件夹和压缩包
解压补丁包
在补丁包中运行./runInstall –jreLoc /opt/ jdk1.6.0_07/jre
首先升级RAC
升级完成后提示关闭程序
首先停止节点的的集群应用程序
srvctl stop nodeapps -n node1
srvctl stop nodeapps -n node2
再在每个节点用root用户关闭集群服务
/etc/init.d/init.crs stop
每个节点运行升级脚本
完成后再运行./runInstall –jreLoc /opt/ jdk1.6.0_07/jre
选择升级数据库,根据提示完成操作
oracleasm配置ASM实例使用的磁盘(不配置就只能使用裸设备)
单个节点上以root用户为共享磁盘分区,假设分区/dev/sdb1 /dev/sdb2
每个节点以root都运行一次
/etc/init.d/oracleasm configure
输入oracle用户和oinstall组,其他都确定
/etc/init.d/oracleasm enable
然后单个节点上运行
/etc/init.d/oracleasm createdisk DISK1 /dev/sdb1
/etc/init.d/oracleasm createdisk DISK2 /dev/sdb2
每个节点运行
/etc/init.d/oracleasm scandisks识别asm磁盘
添加到自动启动
chkconfig --level 345 oracleasm on
创建ASM实例
dbca创建asm磁盘组
查看asm实例运行状态
srvctl status asm -n node1
srvctl status asm -n node1
vipca的问题其实很容易解决,可以不使用vipca来配置,直接用集群相关脚本配置,下面脚本其实就使用来修改集群ip配置的(比如你某个节点要换ip),直接用下面方法设置ip即可
注意修改前必须停掉整个rac
查看配置
oifcfg getif
eth0 192.168.1.0 global public
eth0 192.168.18.0 global cluster_interconnect
删除所有节点的私有(心跳用)、共有(app连接用)网卡配置(globa可以改成node然后指定节点比如oifcfg delif -node node1 eth1/x.x.x.0)
oifcfg delif -global public
oifcfg delif -global private
设置eth0对外网卡(即应用服务连接的网卡以及IP)
oifcfg setif -global eth0/192.168.1.0:prive
设置eth1心跳网卡
oifcfg setif -global eth1/192.168.18.0:cluster_interconnect
增加vip(修改vip就是modify)
srvctl add nodeapps -n node1 -o /opt/oracle/app/product/10/crs -A 192.168.1.4/255.255.255.0/eth0
srvctl add nodeapps -n node2 -o /opt/oracle/app/product/10/crs -A 192.168.1.6/255.255.255.0/eth0
附上个资料(里面ip和我上面的不一样,只是用来做说明的):ocr里一共有10处涉及到地址和掩码的:
1、[SYSTEM.css.interfaces.global.public.192|d169|d5|d0]
UNDEF :
2、[SYSTEM.css.interfaces.global.public.192|d169|d5|d0.1]
ORATEXT : public
3、[SYSTEM.css.interfaces.global.private.192|d168|d0|d0]
UNDEF :
4、[SYSTEM.css.interfaces.global.private.192|d168|d0|d0.1]
ORATEXT : cluster_interconnect
5、[CRS.CUR.ora!node1!vip.USR_ORA_VIP]
ORATEXT : 192.169.5.106
6、[CRS.CUR.ora!node2!vip.USR_ORA_VIP]
ORATEXT : 192.169.5.107
7、[DATABASE.NODEAPPS.node1.VIP.NETMASK]
ORATEXT : 255.255.255.0
8、[DATABASE.NODEAPPS.node2.VIP.NETMASK]
ORATEXT : 255.255.255.0
9、[CRS.CUR.ora!node1!vip.USR_ORA_NETMASK]
ORATEXT : 255.255.255.0
10、[CRS.CUR.ora!node2!vip.USR_ORA_NETMASK]
ORATEXT : 255.255.255.0
涉及到修改地址的命令分别会修改:
ifcfg setif -global public/192.169.5.0:public 会修改1-4,其中这四项分别是public和心跳线的网段以及接口
srvctl add nodeapps -n node1 -A 192.169.5.106/255.255.255.0/public会更改5-10一共6项的地址和掩码(srvctl modify nodeapps也可以,不过是修改而不是增加)