Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1125593
  • 博文数量: 170
  • 博客积分: 1603
  • 博客等级: 上尉
  • 技术积分: 1897
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-09 15:54
文章分类

全部博文(170)

文章存档

2016年(27)

2015年(21)

2014年(27)

2013年(21)

2012年(7)

2011年(67)

我的朋友

分类: 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也可以,不过是修改而不是增加)

阅读(3745) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~