主机环境:双节点,浪潮850
操作系统:REDHAT 6.3
内核版本:2.6.32-279.el6.x86_64
ORACLE数据库版本:11.2.0.3.0
网卡两块:bond0,bond0:1 均为多块eth网卡捆绑后的网卡
共享存储连光纤交换机
一 操作系统准备
1 系统软件包
binutils-2.17.50.0.6
compat-libstdc++-33-3.2.3
compat-libstdc++-33-3.2.3 (32 bit)
elfutils-libelf-0.125
elfutils-libelf-devel-0.125
# gcc-4.1.2
gcc-c++-4.1.2
# glibc-2.5-24
# glibc-common-2.5
# glibc-devel-2.5
# glibc-headers-2.5
ksh-20060214
libaio-0.3.106
libaio-0.3.106 (32 bit)
libaio-devel-0.3.106
libaio-devel-0.3.106 (32 bit)
# libgcc-4.1.2
libstdc++-4.1.2
libstdc++-4.1.2 (32 bit)
libstdc++-devel 4.1.2
make-3.81
numactl-devel-0.9.8.x86_64
sysstat-7.0.2
numactl-devel
unixODBC
unixODBC-devel
安装gcc软件时需要上述“#”号后面软件包按一定顺序安装,否则在安装GI时(测试完成之后)会
报错:"error in inroking target 'mkldflags ntcontab.o nnfgt' of makefile ' /u01/app/11.2.0/grid/network/lib/ins-net-client.mk' "
安装顺序如下:
glibc-common-2
kernel-header-2
libgcc-4
glibc-2
libgomp-4
nscd-2
glib-headers-2
glibc-devel-2
mpfr-2.4
ppl-0.
cloop-ppl-0.
cpp-4
gcc-4
报错时上网查询,有给出CPP包没安的解释,但如果不按顺序把GCC按上的话仍然会报次错误。
( 配置操作系统参数 )
2 网络参数
由于不使用DNS,直接在/etc/host
#public
192.168.20.17 lc01 lc01.localdomain
192.168.20.18 lc02 lc02.localdomain
#private
10.10.10.17 lc01-priv lc01-priv.localdomain
10.10.10.18 lc02-priv lc02-priv.localdomain
#virtual
192.168.20.22 lc01-vip lc01-vip.localdomain
192.168.20.21 lc02-vip lc02-vip.localdomain
#scan
192.168.20.19 data-scan
3 修改操作系统内核
在/etc/sysctl.conf文件中添加修改
# 信息队列的最大值
kernel.msgmnb = 65536
# 一条信息的最大值
kernel.msgmax = 65536
# 用于定义单个共享内存的最大值,应能在一个共享内存段下容纳下整个SGA,设置过低会导致需创建多个共享导致系统性能下降
kernel.shmmax = 687194767360
# 可使用共享内存总页数,单位 pages,一般为shmmax/shmmin
kernel.shmall = 167772160
#共享内存段的最大数量,一般为4096
kernel.shmmni = 4096
#semaphores:semmsl,semmns,semopm,semmni
kernel.sem = 5200 665600 5200 128
#semmsl 信号量集合中能包含的信号量最大数目
#semmns 系统内可许可的信号量最大数目
#semopm 表示单个semopm()调用在一个信号集合上可以执行的操作数量
#semmni 表示系统信号量集合总数
#系统许可的文件句柄的最大数,linux系统中可以打开文件的数量
fs.file-max = 6815744
#同时可拥有异步IO请求数目
fs.aio-max-nr = 1048576
#套接字接收缓冲区大小的缺省值
net.core.rmem_default = 262144
#套接字接收缓冲区大小的最大值
net.core.rmem_max = 4194304
#套接字发送缓冲区大小的缺省值
net.core.wmem_default = 262144
#套接字发送缓冲区大小的最大值
net.core.wmem_max = 1048586
#应用程序可使用的ipv4端口范围
net.ipv4.ip_local_port_range = 9000 65500
修改完后使用/sbin/sysctl -p使参数生效
4 修改/etc/security/limits.conf
加入
#nproc 单个用户可用最大进程数量,nofile 可打开文件的最大数量
* soft nproc 6000
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536
5 禁用selinux和firewall
在 /etc/selinux/config 文件中把SELINUX=enable改为SELINUX=disable
service iptables stop
chkconfig iptables off
#如果不按firewall安装GI时会报错
6 建立用户和组
groupadd -g 500 oninstall
groupadd -g 501 dba
groupadd -g 502 oper
useradd -u 600 -g oinstall -G dba,oper oracle
passwd oracle
7 创建文件夹
mkdir -p /u01/app/grid
mkdir -p /u01/app/11.2.0/grid
mkdir -p /u01/app/oracle
chown -R root:dba /u01
chown -R oracle:oinstall /u01/app/oracle
chown -R grid:oinstall /u01/app/grid
chmod -R 755 /U01
8 添加环境变量
su - oracle
在 .bash_profile中
#ORACLE_SETTING
export DIAPLAY=:0.0
TMP=/tmp;export TMP
TMPDIR=$TMP;export TMPDIR
ORACLE_BASE=/u01/app/oracle;export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1;export ORACLE_HOME
ORACLE_SID=db_1;export ORACLE_SID
export ORACLE_UNQNAME=db
ORA_CRS_HOME=$ORACLE_BASE/product/11.2.0/crs;export ORA_CRS_HOME
ORACLE_TERM=xterm;export ORACLE_TERM
PATH=/user/sbin/:$PATH;export PATH
PATH=$ORACLE_HOME/bin:$PATH;export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
export CLASSPATH
su - grid
在.bash_profile
# for oracle
export DISPLAY=:0.0
export TMP=/tmp;
export TMPDIR=$TMP;
export ORACLE_BASE=/u01/app/grid;
export ORACLE_HOME=/u01/app/11.2.0/grid;
export ORACLE_TERM=xterm;
export PATH=/usr/sbin:$PATH;
export PATH=$ORACLE_HOME/bin:$PATH;
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
9 设置ssh互信
设置grid用户互信
在grid用户下 mkdir .ssh
chmod 755 .ssh
ssh-keygen -t rsa 在.ssh目录下生成id_rsa.pub,id_rsa
ssh-keyget -t dsa 在.ssh目录下生成id_dsa.pub,id_dsa
都在.ssh目录下
把节点1 的.pub文件全部拷贝到authorized_key文件中,cat id_rsa.pub>>authorized_key,cat id_dsa.pub>>authorized_key;
节点2的.pub文件全部拷贝到authorized_keys文件中, cat id_rsa.pub>>authorized_key,cat id_dsa.pub>>authorized_keys.
把节点1的authorized_key文件拷贝到节点2的.ssh目录下
scp authorized_key 节点2:.ssh/
在节点2 把authorized_key追加到authorized_keys文件中 cat authorized_key>>authorized_keys,
这时authorized_keys中包含所有节点的公钥。
把节点2下的authorized_keys拷贝回节点1.ssh目录下
scp authorized_keys 节点1:.ssh/
这时两个节点都有全部的公钥。
测试:ssh 节点1 date;
ssh 节点1-priv date;
ssh 节点1-vip date;
ssh 节点2 date;
ssh 节点2-priv date;
ssh 节点2-vip date;
测试在.ssh目录下生成known_hosts文件记录连接的主机信息,第一次连接选择yes即可。
同样步骤在oracle用户下设置互信
二 设置共享存储
共享存储是rac集群能够实现的关键,而网络上大部分都是用虚拟机环境设置的,在真实环境下设置有点胆战心惊。
首先请存储工程师挂载共享存储
挂在完成后在/dev下发现sd*等文件共70张。
第一个考虑的问题用不用向正常访问一样分区,格式化。
因为要使用ASM,考虑ASM的一个目的是绕过操作系统直接操作存储,如果格式化了又把磁盘的操作交给操作系统,一旦操作系统出了问题可能会影响读写性能,也可能成为性能瓶颈,最后决定不分区也不格式化直接用裸盘。
这时问题来了,通过redhat6.3的磁盘实用程序查看磁盘时,磁盘都有报警:“Warning:Several paths to this drive has been detected but no corresponding multipath device was found.You OS may be misconfigured.”
与存储工程师联系确认发现,那边只挂载了10块盘,而我这边却显示为70块这是怎么回事?
原来存储工程师在挂在存储时使用了多路劲技术,这种技术能实现:1 故障的切换和恢复 2 IO流量的负载均衡 3 磁盘虚拟化
测了一下磁盘的IO确实有巨大的提升
那多路径形成的sd*盘能否直接使用?感觉如果直接使用就可能失去故障切换恢复和IO流量负载均衡的优势,在挂载ASM磁盘时也不好挂在(70多张盘)。
最后决定使用linux下的多路径软件multipath解决
1 安装multipath
在操作系统光盘目录下安装以下软件
device-mapper-event-libs
device-mapper-multipath
device-mapper-libs
device-mapper-multipath-libs
device-mapperevent
device-mapper-persistent-data
device-mapper
2 加载
查看多路径状态 multipath -ll
返回结果有:DM multipath kernel driver not loaded 说明DM模块没有加载
初始化DM: modprobe dm-multipath
modprobe dm-round-robin
service multipath start
multipath -v2
这时再通过 multipath -ll 查看
返回 /etc/multipath.conf does not exist 说明多路径软件的配置文件还没有配置
3 配置文件
在/etc下建立文件multipath.conf加入
#默认策略
defaults {
udev_dir /dev #默认使用的目录
user_friendly_names yes
path_grouping_policy multibus #默认的路径组策略
failback immediae #故障恢复的模式
no_path_retry fail #在路径不可用下尝试失效路径的次数(不尝试)
getuid_callout "/sbin/scsi_id -g -u --whitelisted --device=/dev/%n"
#获得唯一设备号的默认程序,通过唯一设备号把同一个盘识别出来
}
#如果不想让某些磁盘被多路径软件识别出来而是作为虚拟磁盘使用可以加入
# blacklist { devnode "^sdh"}
#因为使用多路径挂载的每次重启系统后同一块盘的显示磁盘会发生变化,这样如果按名称来可能出错,因此按路径来
#使用multipath -v3 查询出每块磁盘的wwid
multipaths {
multipath {
wwid3600507680180870dd0000000000003d0
alias OCR01
}
multipath {
wwid 3600507680180870dd0000000000003d1
alias OCR02
}
multipath {
wwid 3600507680180870dd0000000000003cf
alias OCR03
}
multipath {
wwid 3600507680180870dd0000000000003ce
alias DG01
}
multipath {
wwid 3600507680180870dd0000000000003d7
alias DG02
}
multipath {
wwid 3600507680180870dd0000000000003d6
alias DG03
}
multipath {
wwid 3600507680180870dd0000000000003d5
alias ARCHDG01
}
multipath {
wwid 3600507680180870dd0000000000003d3
alias VOTE01
}
multipath {
wwid 3600507680180870dd0000000000003d4
alias VOTE02
}
multipath {
wwid 3600507680180870dd0000000000003d2
aliasVOTE03
}
}
#这时无论重启时某块磁盘在系统中显示是:/dev/sda,/dev/sdaa,/dev/sdab,
#还是/dev/sda,/dev/sds,/dev/sdj
#在/dev/mapper目录下都是DG1
4 使配置文件生效
每次修改配置文件都得重启,或重新加载服务
service multipathd restart/ service multipathd reload
重新配置策略 :multipath -F 清空以前的策略,这时在/dev/mapper下除了control文件外没有其他文件
multipath -v2 加载新的策略,这时在/dev/mapper下出现 OCR1,OCR2,OCR3等文件
使用设备时直接使用/dev/mapper/OCR1等就可以
5 权限
/dev下默认属主为:root,属组为 disk
在安装GI时会显示不出来磁盘,必须修改磁盘权限
但直接修改 /dev/mapper/OCR1等文件不会生效,该目录不能修改属主(可能因为都是link文件)
但该目录下的control文件可以修改,chown grid:oinstall /dev/mapper/control
修改完成后在安装GI时确实能显示磁盘/dev/mapper/*,但仍有报错,而且重启后权限又变回root:disk.
通过multipath -l 查询
查询结果处理说明 /dev/mapper/OCR*是由哪几块/dev/sd*组成,后面还显示了这时dm-*,
感觉dm-*为链接文件的真实文件,查找后发现dm-*就在/dev下
修改权限 chown grid:oinstall /dev/dm-*
修改后 GI运行没有报关于ASM存储的错误
三 安装GI
1 解压
将软件包p10404530_112030_Linux-x86-64_3of7.zip解压到节点rac01.
# unzip p10404530_112030_Linux-x86-64_3of7.zip
2 安装cvuadisk包
在Grid的安装包grid/rpm/cvuqdisk-1.0.9-1.rpm,以root用户安装
# export CVUQDISK_GRP=oinstall
# rpm -ivh cvuqdisk-1.0.9-1.rpm
3 以grid用户在grid目录下执行./runInstall名令
export LANG=C #这种语言变量,否则在出现的图形界面为乱码
./runInstall
如果使用./runInstall 出现错误:"无法使用命令 /usr/bin/xdpyinfo自动检查显示器颜色,是否设置DISPLAY"
解决办法:1 在root用户下执行:xhost +
返回信息为:"access control disabled,clients can connect from any host"
2 在 grid 用下,export DISPLAY=远程来源IP:0.0
即可
4 过程
安装选项: 安装和配置集群的网格基础结构.
安装类型: 高级安装
语言: 简体中文
网格即插即用: 集群名称: rac-cluster
SCAN名称: rac-scan (此名称应该与/ETC/HOSTS文件中sanip的对应名称一致)
SCAN端口: 1521
不配置GNS,如果需要自动生成虚拟IP,需配置GNS
GNS子域: racgrid
GNS VIP地址: 192.168.89.91
集群节点信息: 编辑和添加主机和虚拟IP名称
主机名 虚拟IP名
rac01 rac01v
rac02 rac02v
点ssh按钮配置节点ssh互信(需要输入grid用户密码)
注:第一次安装时肯能是缺少了某些包,出现一个小问题
当进行下一步时,提示错误"该主机名(节点-vip)已经被使用" 的错误,只有在两个节点的/etc/hosts文件中把vip的信息注释掉才能通过。如果在这之前注释掉vip仍然会报错,得把vip信息加上,再碰到错误"该主机名(节点-vip)已经被使用",才能进行下一步。怀疑是某个软件包(GCC等)没有安好。安装好后不会有次怪异的问题。
网络接口使用情况: 接口名称 子网 接口类型
PublicNet 192.168.20.0 公共
PrivateNet 10.10.10.0 专用
存储选项: 自动存储管理(ASM)
创建ASM磁盘组: 当选择存储选项:自动存储管理(ASM)后,需要创建ASM磁盘.
设置ASM磁盘搜索路径/dev/mapper/* #这时如果没有应注意/dev/dm*的权限
设置磁盘组名,使用normal,勾选出现的磁盘
#这时选择的磁盘作为OCR和vote盘使用
ASM口令: 设置SYS和ASMSNMP的口令,是用相同口令
故障隔离: 不使用智能平台管理接口(IPMI).
安装位置: 设置安装位置默认:Oracle基目录/u01/app/grid,软件位置/u01/app/11.2.0/grid
先决条件检查: 自动检查先决条件
/* 第一次检查时有几个报错 1 缺少包 cvuqdisk
(在grid/rpm目录下安装即可)
2 device check for asm
(应该是磁盘的顺序或权限有问题,顺序问题通过绑定wwid解决,权限问题修改/dev/dm*属主与属组)
3 NTP failed
NTP服务失败。因为两个节点都没做NTP服务,时间同步服务器在其他主机上,把/etc/ntp.conf改成/etc/ntp.conf.bak即可。
4 task resolv.conf Intergrity 因为没有使用DNS服务器,直接用/etc/hosts,该错误可以忽略。
*/
安装
/* 安装时报错
KFOD-070311
ORA-027472
都是因为共享磁盘权限的问题
OUI-10066
PRCI-1108
PRCI-1003
都是因为缺少包 libcap
*/
按提示在各节点上以root用户执行脚本.
/* 执行脚本时一定要先在第一个主机,即运行./runInstall程序的主机上执行,然后再在另一个上执行,否则会导致错误。
# /u01/app/oraInventory/orainstRoot.sh
# /u01/app/11.2.0/grid/root.sh
完成
检查: olsnodes
crsctl check crs (次命令只有root可以执行)
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
crs_stat -t -v
srvctl status listener
重新启动节点后,如果集群服务不能启动.crsctl check crs
需要检查设备权限的问题,重启后磁盘设备owner会被修改为root.
或者没有设置crs随系统启动.
/u01/app/11.2.0/grid/bin/crsctl stop crs # 停止CRS服务
/u01/app/11.2.0/grid/bin/crsctl start crs # 启动CRS服务
/u01/app/11.2.0/grid/bin/crsctl disable crs # 禁止随系统启动
/u01/app/11.2.0/grid/bin/crsctl enable crs # 允许随系统启动
/u01/app/11.2.0/grid/bin/crsctl stop cluster -all # 停止所有节点上运行的全部集群资源
/u01/app/11.2.0/grid/bin/crsctl start cluster -all # 启动所有节点上运行的全部集群资源
四 安装ORACLE软件
1 将oracle数据库软件解压到节点rac01.
unzip p10404530_112030_Linux-x86-64_1of7.zip
unzip p10404530_112030_Linux-x86-64_2of7.zip
2 以oracle登入系统,运行database下的runInstaller文件
配置安全更新 不需要接收更新
安装选项 选择仅安装数据库软件,后续再通过dbca创建数据库.
网格选项 Real Application Clusters数据库安装
节点全选 #如果CRS没有自动重启,就看不到节点,重新后得重新runInstall才能看到节点
点按钮SSH Connectivity.配置oracle下ssh互信.
产品语言 根据需要选择:英语、简体中文
数据库版本 企业版
安装位置 默认(根据.bash_profile中的全局变量设置)
Oracle基目录: /u01/app/oracle
软件位置: /u01/app/oracle/product/11.2.0/db_1
操作系统组 oinstall
先决条件检查 忽略警告
安装
按提示在每个节点上执行脚本/u01/app/oracle/product/11.2.0/db_1/root.sh
点OK完成安装
五 配置ASM
以grid用户运行asmca.
设置ASM磁盘搜索路径/dev/mapper/*,出现multipath配置的磁盘
创建磁盘时报错,因为每块磁盘不能超过两T,需要把超过2T的磁盘进行分区。
分区之后/dev/mapper下不会有变化,只有在fdisk -l 时能看到分区的盘,通过ASM也不会看到。
只有通过 multipath -F 清空多路径,再 multipath -v2 重新连接多路径才能看到,这时在ASM里也能选磁盘的分区了。
六 创建数据库
以oracle用户运行dbca.(为方便管理应该在第一个节点上执行,否则可能会出现sid_1在节点2上运行,sid_2在节点1上运行的情况)
数据库类型 Oracle Real Application Clusters数据库
操作 创建数据库
数据库模板 一般用途
数据库标识 设置全局数据库名和SID前缀,节点全选
管理选项 默认
数据库身份 设置密码
数据库文件位置 存储类型:自动存储管理,使用Oracle-Managed files,数据库区:设置之前创建的磁盘组+DATA
恢复区:+FLASH_AREA
字符集
安装
出现提示在节点rac02上启动database control出错,在节点rac02执行以下命令:
[oracle@rac02 ~]$ export ORACLE_UNQNAME=astt
[oracle@rac02 ~]$ /u01/app/oracle/product/11.2.0/db_1/bin/emctl start dbconsole
点OK安装完成.
安装后可能不能连接
如果出现错误ORA-12537: TNS:connection closed,可能是权限的问题,执行以下可以解决:
# chown -R oracle:oinstall /u01/app/oracle
# chown -R grid:oinstall /u01/app/grid
# chmod -R 755 /u01/app/oracle
# chmod -R 755 /u01/app/grid
七 测试数据库
运行sqlplus,以dba权限登录Oracle系统后执行以下语句查询集群节点状态:
$ ./crs_stat -t -v
$ sqlplus / as sysdba;
SQL> select instance_name,host_name,status from v$instance;
SQL> select instance_name,host_name,status from gv$instance;
$ srvctl stop database -d db -o immediate;
$ srvctl start database -d db;