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-devel rpm -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 OceanI 192.168.1.11 OceanI-vip #未非配IP 10.10.10.10 OceanI-pri 192.168.1.50 OceanV 192.168.1.51 OceanV-vip #未非配IP 10.10.10.50 OceanV-pri 192.168.1.99 Ocean-rac #未非配IP
2.3、集群时间同步服务:
利用linux本身对时间进行同步
service ntpd stop chkconfig ntpd off mv /etc/ntp.conf /etc/ntp.conf.org rm /var/run/ntpd.pid
这步需要做 否则会影响rac稳定运行
2.4、创建任务角色划分操作系统权限组、用户和目录:
创建以下 O/S 组:
2.4.1 添加Oracle用户组
groupadd -g 1001 oinstall groupadd -g 1002 asmadmin groupadd -g 1003 asmdba groupadd -g 1004 asmoper groupadd -g 1005 dba groupadd -g 1006 oper
2.4.2添加Oracle用户
useradd oracle -u 600 useradd 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_SID ORACLE_BASE=/u01/app/grid; export ORACLE_BASE ORACLE_HOME=/u01/app/11.2.0/grid; export ORACLE_HOME export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib export TMP=/tmp export 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_SID ORACLE_UNQNAME=oceandb; export ORACLE_UNQNAME ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib export TMP=/tmp export CLASSPATH=$CLASSPATH:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib source /home/oracle/.bash_profile
2.7 创建Oracle 基目录路径[两节点均执行相同操作]:
mkdir -p /u01/app/grid mkdir -p /u01/app/11.2.0/grid chown -R grid.oinstall /u01/ mkdir -p /u01/app/oracle chown -R oracle.oinstall /u01/app/oracle/ chmod -R 775 /u01/
2.8 为 Oracle 软件安装用户设置资源限制:
A:修改/etc/security/limits.conf文件,加入以下内容:
#add by lcs for oracle grid soft nproc 2047 grid hard nproc 16384 grid soft nofile 1024 grid hard nofile 65536 oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle 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 文件:
#oracle if [ $USER = "oracle" ] || [ $USER = "grid" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi umask 022 fi
2.9 为 Oracle 配置 Linux 服务器:
配置内核参数:
向/etc/sysctl.conf,添加
#kernel.shmall = 2097152(已有可不修改) #kernel.shmmax = 2147483648(已有可不修改) kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 net.ipv4.ip_local_port_range = 9000 65500 fs.suid_dumpable = 1 fs.file-max = 6815744 fs.aio-max-nr = 1048576
/sbin/sysctl -p #是修改参数立即生效
2.10 配置系统安全设置[两节点均执行]
iptables -F /etc/init.d/iptables save chkconfig iptables off vim /etc/selinux/config SELINUX=disabled
2.11 修改tmpfs的大小
umount tmpfs mount -t tmpfs shmfs -o size=3000m /dev/shm 修改/etc/fstab文件,增加tmpfs大小 vi /etc/fstab tmpfs /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_udev Starting udev: [OK] 接着验证udev是否成功生成 [root@OceanI ~]# ls -l /dev/raw total 0 crw-rw---- 1 grid asmadmin 162, 1 Sep 27 05:04 raw1 crw-rw---- 1 grid asmadmin 162, 2 Sep 27 05:04 raw2 crw-rw---- 1 grid asmadmin 162, 3 Sep 27 05:04 raw3 crw-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 的安装 。