Copyright to Jeffrey.Su
前言:
文档编写日期追溯到13年10月,那时的自己还是一枚学生。基本上是三无人员 。听老湿说RAC很高大上,遂弄之。那是啥也不太懂 神马udev 神马 block 什么 ASM 等等 。一切从零开始 , 开始网上收集文档 补充知识 。借鉴了很多文档 。向开源的前辈致敬! 再说说装备之简陋 ,可以称之为小米加***。整体装备 i5 2450 Ram 4G disk 5400/r . @_@
这里内存是最要命的 官方说明rac 单机 物理内存至少是1.5G 。 都分1.5 的话 再加一个 openfiler 机器不就成蜗牛了吗? 后通过实践 virtual box 的共享磁盘还是蛮方便的,就用它了 。 一点一点网上加内存呀 !! 最终 还是弄到 1.5G 囧囧囧 , 之前是各种报错 。 历时 一周半 从无到有 测试环境算是出来了 , 但是仅做了简单的测试 。 Cpu 风扇 都开始 往外吐灰尘了 。 这是什么节奏呀 @_@
文中难免出现纰漏,欢迎大家拍砖 。
下面回到正文:
一、配置oracle 11g r2 RAC
1、环境介绍:
Node Name | Oracle_SID | Databasename | MEM | OS |
OceanI | oceandb1 | oceandb | 1.5G | Rhel5.4 |
OceanV | oceandb2 | 1.5G | Rhel5.4 | |
这里系统安装建议对node2 不是clone system |
网络配置 | ||||||
Node Name | Public IP | Private IP | Virtual IP | Scan Name | Scan IP | 解析方式 |
OceanI | 192.168.1.10 | 10.10.10.10 | 192.168.1.11 | Ocean-rac | 192.168.1.99 | hosts |
OceanV | 192.168.1.20 | 10.10.10.20 | 192.168.1.21 |
Oracle 软件组件 | |||||
软件组件 | 用户 | 主组 | 辅组 | 主目录 | Oracl基本目/Oracle主目录 |
Grid | grid | oinstall | asmadmin、asmdba、asmoper | /home/grid | /u01/app/grid /u01/app/11.2.0/grid |
Oracle Rac | grid | oinstall | dba、oper、asmdba | /home/oracle | /u01/app/oracle /u01/app/oracle/product/11.2.0/db_1 |
存储组件 | |||||
存储组件 | 文件系统 | 卷大小 | ASM卷组名 | ASM 冗余 | Raw 卷名 |
OCR表决磁盘 | ASM | 2GB | +CRSV1 | External | raw1 |
数据库文件 | ASM | 10GB | +DATEV1 | External | raw2 |
快速恢复区 | ASM | 5GB | +FRAV1 | External | raw3 |
在这里存储系统使用的是ASM,在 ASM 上存储 OCR 和表决磁盘文件,具体是存储在一个名为 +CRS 的磁盘组中,该磁盘组使用外部冗余配置,只有一个 OCR 位置和一个表决磁盘位置。ASM 磁盘组应在共享存储器上创建,大小至少为 2GB。Oracle 物理数据库文件(数据、联机重做日志、控制文件、存档重做日志)将安装在 ASM 上一个名为 +DATElv1 的 ASM 磁盘组中,而快速恢复区将在一个名为 +FRAlv1 的 ASM 磁盘组上创建。
2、系统配置:
2.1、安装oracle RAC所需的linux软件包:
查看安装的包
rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc-common glibc-develrpm -q glibc-headers ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel make numactl-devel sysstat yum -y install binutils compat-libstdc++ elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel
2.2、网络配置:
分配IP地址:
这里的 SCAN ip地址必须通过GNS或者DNS来解析的,这里使用的是DNS解析.其他地址都在hosts文件里定义。
[root@OceanI ~]# cat /etc/hosts# Do not remove the following line, or various programs# that require network functionality will fail.127.0.0.1OceanI localhost.localdomain localhost#::1localhost6.localdomain6 localhost6 192.168.1.10 OceanI192.168.1.11 OceanI-vip #未非配IP10.10.10.10 OceanI-pri 192.168.1.50 OceanV192.168.1.51 OceanV-vip #未非配IP10.10.10.50 OceanV-pri 192.168.1.99 Ocean-rac #未非配IP
2.3、集群时间同步服务:
利用linux本身对时间进行同步
service ntpd stopchkconfig ntpd offmv /etc/ntp.conf /etc/ntp.conf.orgrm /var/run/ntpd.pid
这步需要做 否则会影响rac稳定运行
2.4、创建任务角色划分操作系统权限组、用户和目录:
创建以下 O/S 组:
2.4.1 添加Oracle用户组
groupadd -g 1001 oinstallgroupadd -g 1002 asmadmingroupadd -g 1003 asmdbagroupadd -g 1004 asmopergroupadd -g 1005 dbagroupadd -g 1006 oper
2.4.2添加Oracle用户
useradd oracle -u 600useradd grid -u 601
2.4.3 修改Oracle用户所属组
useradd -g oinstall -G dba,asmadmin,asmdba,asmoper grid useradd -g oinstall -G dba,oper,asmdba oracle
分别在两节点使用 id grid /id oracle 查看用户ID、组ID 是否一致[之前未指定用户ID、组ID]
2.4.4 设置密码
passwd oracle (oracle)passwd grid (grid)
2.5为 grid 用户帐户创建登录脚本
vi /home/grid/.bash_profile
注:在为每个 Oracle RAC 节点设置 Oracle 环境变量时,确保为每个 RAC 节点指定唯一的 Oracle SID。对于此示例,我使用:
o OceanI:ORACLE_SID=+ASM1
o OceanV:ORACLE_SID=+ASM2
ORACLE_SID=+ASM1; export ORACLE_SIDORACLE_BASE=/u01/app/grid; export ORACLE_BASEORACLE_HOME=/u01/app/11.2.0/grid; export ORACLE_HOMEexport PATH=$ORACLE_HOME/bin:$PATHexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/libexport TMP=/tmpexport CLASSPATH=$CLASSPATH:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib source /home/grid/.bash_profile
2.6为 oracle 用户帐户创建登录脚本
vi /home/oracle/.bash_profile
注:在为每个 Oracle RAC 节点设置 Oracle 环境变量时,确保为每个 RAC 节点指定唯一的 Oracle SID。对于此示例,我使用:
o OceanI:ORACLE_SID=oceandb1
o OceanV:ORACLE_SID=oceandb2
加入.bash_profile
ORACLE_SID=oceandb1; export ORACLE_SIDORACLE_UNQNAME=oceandb; export ORACLE_UNQNAMEORACLE_BASE=/u01/app/oracle; export ORACLE_BASEORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOMEexport PATH=$ORACLE_HOME/bin:$PATHexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/libexport TMP=/tmpexport CLASSPATH=$CLASSPATH:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlibsource /home/oracle/.bash_profile
2.7 创建Oracle 基目录路径[两节点均执行相同操作]:
mkdir -p /u01/app/gridmkdir -p /u01/app/11.2.0/gridchown -R grid.oinstall /u01/mkdir -p /u01/app/oraclechown -R oracle.oinstall /u01/app/oracle/chmod -R 775 /u01/
2.8 为 Oracle 软件安装用户设置资源限制:
A:修改/etc/security/limits.conf文件,加入以下内容:
#add by lcs for oraclegrid soft nproc 2047grid hard nproc 16384grid soft nofile 1024grid hard nofile 65536oracle soft nproc 2047oracle hard nproc 16384oracle soft nofile 1024oracle hard nofile 65536
B:vi /etc/pam.d/login ,加入以下内容:
session required pam_limits.so
C:根据您的 shell 环境,对默认的 shell 启动文件进行以下更改,以便更改所有 Oracle 安装所有者的 ulimit 设置(注意这里的示例显示 oracle 和 grid 用户):
对于 Bourne、Bash 或 Korn shell,通过运行以下命令将以下行添加到 /etc/profile 文件:
#oracleif [ $USER = "oracle" ] || [ $USER = "grid" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi umask 022fi
2.9 为 Oracle 配置 Linux 服务器:
配置内核参数:
向/etc/sysctl.conf,添加
#kernel.shmall = 2097152(已有可不修改)#kernel.shmmax = 2147483648(已有可不修改)kernel.shmmni = 4096kernel.sem = 250 32000 100 128net.core.rmem_default = 262144net.core.rmem_max = 4194304net.core.wmem_default = 262144net.core.wmem_max = 1048576net.ipv4.ip_local_port_range = 9000 65500fs.suid_dumpable = 1fs.file-max = 6815744fs.aio-max-nr = 1048576
/sbin/sysctl -p #是修改参数立即生效
2.10 配置系统安全设置[两节点均执行]
iptables -F/etc/init.d/iptables savechkconfig iptables offvim /etc/selinux/configSELINUX=disabled
2.11 修改tmpfs的大小
umount tmpfsmount -t tmpfs shmfs -o size=3000m /dev/shm修改/etc/fstab文件,增加tmpfs大小vi /etc/fstabtmpfs /dev/shm tmpfs defaults,size=3G 0 0
2.12 配置RAC 节点以便可以使用 SSH 进行远程访问
略………
2.13、共享磁盘配置:
[注]:这里的共享磁盘选择固定大小 添加方式和添加其他虚拟硬盘方式一样 这里不做过多的说明。
在共享磁盘上创建分区:
只创建一个分区,在一个节点上执行即可,如下:
2.14使用u_dev绑定裸设备:
[root@OceanI ~]# vim /etc/udev/rules.d/60-raw.rules # Enter raw device bindings here.## An example would be:# ACTION=="add", KERNEL=="sda", RUN+="/bin/raw /dev/raw/raw1 %N"# to bind /dev/raw/raw1 to /dev/sda, or# ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw2 %M %m"# to bind /dev/raw/raw2 to the device with major 8, minor 1. ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"ACTION=="add", KERNEL=="sdc1", RUN+="/bin/raw /dev/raw/raw2 %N"ACTION=="add", KERNEL=="sdd1", RUN+="/bin/raw /dev/raw/raw3 %N"ACTION=="add", KERNEL=="sde1", RUN+="/bin/raw /dev/raw/raw4 %N" KERNEL=="raw1", OWNER=="grid", GROUP=="asmadmin", MODE="660"KERNEL=="raw2", OWNER=="grid", GROUP=="asmadmin", MODE="660"KERNEL=="raw3", OWNER=="grid", GROUP=="asmadmin", MODE="660"KERNEL=="raw4", OWNER=="grid", GROUP=="asmadmin", MODE="660"然后启动udev服务生成RAW设备[root@OceanI /]# start_udevStarting udev: [OK]接着验证udev是否成功生成[root@OceanI ~]# ls -l /dev/rawtotal 0crw-rw---- 1 grid asmadmin 162, 1 Sep 27 05:04 raw1crw-rw---- 1 grid asmadmin 162, 2 Sep 27 05:04 raw2crw-rw---- 1 grid asmadmin 162, 3 Sep 27 05:04 raw3crw-rw---- 1 grid asmadmin 162, 4 Sep 27 05:04 raw4 [root@OceanI ~]# scp /etc/udev/rules.d/60-raw.rules OceanV:/etc/udev/rules.d/60-raw.rules # start_udev
2.15 重新启动系统
Reboot
检查之前配置
到这里基本上环境都准备好了 ,下篇讲解 GRID 的安装 。