序言
一开始我是选择CentOS7安装Oracle11g R2群集的,因为在安装途中经常出些莫名其妙的问题,后来查阅资料获知Oracle11g真的是很老的版本了,对于最新操作系统的支持不怎么好,所以就选用CentOS6.5安装群集。
文章参考了:https://blog.51cto.com/12926024/2153332
https://www.cnblogs.com/yuky/p/9304212.html
一. 网络设计
#Public IP
#公有IP是数据库服务器真实IP,一般DBA用此IP登录服务器做管理工作
192.168.247.21 RAC1
192.168.247.31 RAC2
#Private IP
# 私用IP群集内部使用,用于心跳检测,数据传输等等
192.168.68.11 RAC1-priv
192.168.68.21 RAC2-priv
#Virtual IP
#虚拟IP是群集负载均衡IP,当用户登录数据库,群集会根据负载随机分配一个IP让你登录
192.168.68.32 RAC1-vip
192.168.68.42 RAC2-vip
#Scan IP
#监听IP是客户使用的IP,也是我们平常登录数据库应填的IP,群集会随机分配一个真实的节点让你登录
192.168.247.51 RAC-scan
# Virtual IP和Scan IP都是不存在的IP,是群集软件(Grid)虚拟出来的IP,方便用户操作数据库
二.安装操作系统
使用VMware安装CentOS6.5系统,注意选择:自定安装-->稍后安装操作系统,在安装操作系统前先添加一张网卡再安装操作系统,这样安装完系统之后网卡2就会自动配有UUID(设备编号),不然自己找UUID,你会怀疑人生的。
三.配置网络
3.1.配置网络之设置静态IP
因为使用的是VMware虚拟机,虚拟机默认IP都是DHCP浮动的,先把虚拟机IP设置为静态.
进入cmd---->ipconfig
可以看到VMware给我们分配的虚拟网卡是VMnet1和VMnet8
将虚拟网卡IP改为静态IP ↑
编辑VMware网络设置 ↓
NAT网络用于Public IP
主机网络用于Private IP,主机网络跟NAT类似,模式选择仅主机模式就行了
3.2 配置网络之设置系统IP
cd /etc/sysconfig/network-scripts
ls
vim ifcfg-eth0
vim ifcfg-eth1
3.3 配置网络之添加DNS
vim /etc/resolv.conf
3.4 配置网络之添加路由
vim /etc/sysconfig/static-routes (Centos6在这里文件)
vim /etc/sysconfig/network-scripts/route-eth0 (CentOS7在这个文件,并且这只是网卡1的路由文件,还要编辑网卡2)
3.5 配置网络之重启网卡
service network restart
3.6 配置网络之配置域名
vim /etc/hosts
至此网络配置完毕,注意RAC1节点与RAC2节点两个节点都应配置网络。且我RAC1节点的主机名为RAC1,RAC2节点的主机名为RAC2,我是安装系统的时候就指定了主机名,没设置主机名的同学设置一下主机名。
四.关闭不必要软件
4.1 关闭selinux(RAC1,RAC2都执行)
setenforce 0 #立即生效,临时关闭,重启恢复
vim /etc/selinux/config
设置SELINUX=disabled #永久关闭,重启生效
4.2 关闭防火墙(RAC1,RAC2都执行)
CentOS6关闭防火墙
service iptables stop
chkconfig ip6tables off
chkconfig iptables off
CentOS7关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
4.3 停用NTP服务(RAC1,RAC2都执行)
Grid软件自带时钟同步服务,我们停用系统时钟同步,使用群集自带的时钟同步服务
service ntpd status
chkconfig ntpd off
mv /etc/ntp.conf /etc/ntp.conf.bak
五.配置Oracle系统参数
5.1 配置内核参数(RAC1,RAC2都执行)
vi /etc/sysctl.conf
# for oracle 11g
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2147483648
kernel.shmmax = 68719476736
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
立即生效: /sbin/sysctl –p
5.2 更改文件限制参数(RAC1,RAC2都执行)
vi /etc/security/limits.conf
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
5.3 更改login文件(RAC1,RAC2都执行)
vi /etc/pam.d/login
session required pam_limits.so
5.4 更改profile文件(RAC1,RAC2都执行)
vi /etc/profile
#set oracle rac env
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
5.5 创建用户和组(RAC1,RAC2都执行)
groupadd -g 601 oinstall
groupadd -g 602 dba
groupadd -g 603 oper
groupadd -g 604 asmadmin
groupadd -g 605 asmoper
groupadd -g 606 asmdba
useradd -g oinstall -G dba,asmdba,oper oracle
useradd -g oinstall -G asmadmin,asmdba,asmoper,oper,dba grid
设置密码
passwd grid
passwd oracle
5.6 创建grid用户环境变量(RAC1,RAC2都执行)
su - grid
vim .bash_profile
export ORACLE_SID=+ASM1 #注意RAC2设置为 +ASM2
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/11.2.0/grid
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"
export PATH=$ORACLE_HOME/bin:$PATH
export LANG=en_US
umask 022
5.7 创建Oracle用户环境变量(RAC1,RAC2都执行)
su - oracle
vim ~/.bash_profile
export ORACLE_SID=rac1 # 注意RAC2节点设置为 rac2
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"
export TMP=/tmp
export TMPDIR=$TMP
export PATH=$PATH:$ORACLE_HOME/bin
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
umask 022
5.8 创建安装目录(RAC1,RAC2都执行)
mkdir -p /u01/app/oracle
mkdir -p /u01/app/grid
mkdir -p /u01/app/11.2.0/grid
chown -R grid:oinstall /u01/app/grid
chown -R grid:oinstall /u01/app/11.2.0
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01
mkdir -p /u01/app/oraInventory
chown -R grid:oinstall /u01/app/oraInventory
chmod -R 775 /u01/app/oraInventory
6. 配置节点互信
在安装群集时,只需要在一个节点安装软件即可,节点互信会自动把安装的软件复制到其他节点
首先配置RAC1,RAC2 Oracle用户的节点互信
su - oracle
mkdir ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t rsa (全回车,默认即可)
ssh-keygen -t dsa (全回车,默认即可)
(以上节点互信命令,RAC1,RAC2均要执行)
返回RAC1,执行(下面互信命令 RAC2不执行)
cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys
ssh RAC2 cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
ssh RAC2 cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys oracle@RAC2:~/.ssh/authorized_keys
再配置RAC1,RAC2 grid用户的节点互信
su - grid
mkdir ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t rsa (全回车,默认即可)
ssh-keygen -t dsa (全回车,默认即可)
(以上节点互信命令,RAC1,RAC2均要执行)
返回RAC1,执行(下面互信命令 RAC2不执行)
cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys
ssh RAC2 cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
ssh RAC2 cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys grid@RAC2:~/.ssh/authorized_keys
7.安装群集依赖软件
yum install -y binutils* compat-libstdc* elfutils-libelf* gcc* glibc* ksh* libaio* libgcc* libstdc* make* sysstat* unixODBC* libaio-devel* glibc-devel.i686 libaio.i686 libaio-devel.i686 libstdc++-devel.i686 unixODBC-devel.i686 compat-libcap1* compat-libcap1.i686 expat*
确认一下两个节点RPM包cvuqdisk-1.0.9-1.rpm是否安装。
su - root
cd /home/grid/grid/rpm/
rpm -ivh cvuqdisk-1.0.9-1.rpm
scp /home/grid/grid/rpm/cvuqdisk-1.0.9-1.rpm root@rac-2:/root
rpm -ivh cvuqdisk-1.0.9-1.rpm
(确保RAC1,RAC2都安装)
8.添加共享硬盘
虚拟机编辑设置,添加三块盘,分别叫:
ocr_vote.vmdk data.vmdk fra.vmdk(注意磁盘的大小)
这样在RAC1依次建立三块盘,分别名为ocr_vote.vmdk data.vmdk fra.vmdk
再看编辑这里就会多3块盘
双击编辑硬盘
硬盘添加好后,编辑虚拟机vmx文件
添加
disk.EnableUUID="TRUE"
disk.locking = "false"
scsi1.shared="TRUE"
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
diskLib.DataCacheMinReadAheadSize = "0"
diskLib.dataCachePageSize = "4096"
diskLib.maxUnsyncedWrites = "0"
scsi1:1.deviceType = "disk"
scsi1:2.deviceType = "disk"
scsi1:3.deviceType = "disk"
scsi1:4.deviceType = "disk"
scsi1:5.deviceType = "disk"
scsi1:1.shared = "true"
scsi1:2.shared = "true"
scsi1:3.shared = "true"
scsi1:4.shared = "true"
scsi1:5.shared = "true"
然后在RAC2添加共享硬盘,因为RAC1已经创建了硬盘,RAC2只需使用已创建硬盘即可
依次添加ocr_vote.vmdk data.vmdk fra.vmdk
然后设置为永久硬盘,注意选区应与RAC1一致 ocr_vote 1:1 data 1:2 fra 1:3
开启虚拟机,查看磁盘时候挂载
fdisk -l
因为我已经装了群集,使用了盘符,所以这里只显示/dev/sdb,正常应该显示3块盘
/dev/sdb ,/dev/sdc,/dev/sdd 分别对应ocr_vite,data,fra
查询磁盘UUID(RAC1和RAC2)
如果uuid查询不到,检查添加的虚拟机文件是否正确
虚拟机的vmx文件增加了disk.enableUUID = "TRUE"
scsi_id --whitelisted --replace-whitespace --device=/dev/sdb
scsi_id --whitelisted --replace-whitespace --device=/dev/sdc
scsi_id --whitelisted --replace-whitespace --device=/dev/sdd
正常情况下,RAC1与RAC2的UUID应该是一致的,如果不一致,检查一下盘区(ocr_vote1:1,data1:2,fra1:3)是不是设置错了?
配置裸设备文件(RAC1和RAC2):
vi /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c2970a7c751fb10b2b412f57d5f1", NAME="asm-OCR", OWNER="grid", GROUP="asmdba", MODE="0660"
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c29307291b23a98996cd0ec62022", NAME="asm-DATA", OWNER="grid", GROUP="asmdba", MODE="0660"
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c29991d458a7f089fe668a4a492f", NAME="asm-FRA", OWNER="grid", GROUP="asmdba", MODE="0660"
注意,每条命令一行,不能换行.
加载裸设备
start_udev
查看是否加载成功
ls /dev/asm*
9.安装前检查
su - grid
cd grid软件解压目录
./runcluvfy.sh stage -pre crsinst -n rac-1,rac-2 -fixup -verbose
我检查有这些不成功
i386是32位软件,因为Oracle11g是非常老的数据库了,它风靡全球的时候,主流计算机都是32位的,我们yum安装的时候已经装了64位的对应软件,就算你单独下载这些软件也是安装不上的,会提示与64位的冲突。这些i386错误安装时忽略掉即可。
pdksh在oracle11g已经被ksh取代,提示这个是oracle11g的一个BUG
可以使用:wget http://vault.centos.org/5.11/os/x86_64/CentOS/pdksh-5.2.14-37.el5_8.1.x86_64.rpm 下载pdksh-5.2.14
不用试了,装不上的,提示与KSH冲突.
NTPD检查不成功是因为我关闭了NTPD服务,但配置文件没删除,被检测到了,删除配置文件即可。
10.安装grid软件
su - root
xhost +
su - grid
export DISPLAY=192.168.247.31:0.0
export LANG=en_US
cd /home/grid/grid
./runInstaller
出来的盘,选择/dev/asm-OCR
后面检查i386错误,忽略即可。
执行第二个脚本的时候会遇到错误:
Adding daemon to inittab
CRS-4124: Oracle High Availability Services startup failed.
CRS-4000: Command Start failed, or completed with errors.
ohasd failed to start: Inappropriate ioctl for device
ohasd failed to start at /u01/app/11.2.0/grid/crs/install/rootcrs.pl line 443.
或
ADVM/ACFS is not supported on redhat-release-server-6Server-6.5.0.1.el6.x86_64
oracle官网说是bug;
解决办法:
回退脚本执行
/u01/app/11.2.0/grid/crs/install/roothas.pl -deconfig -force -verbose
然后再执行第二个脚本
/u01/app/11.2.0/grid/root.sh
当执行到 Adding daemon to inittab 这句话出来的时候
新开一个终端执行:
/bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1
一直执行直到不出现/bin/dd: opening`/var/tmp/.oracle/npohasd': No such file or directory
然后等待即可
导致这个错误的原因是在/etc/hosts中配置了SCAN的地址,尝试ping这个地址信息,如果可以成功,则这个错误可以忽略。
我尝试ping scan ip可以ping通,所以也就忽略了这个错误。
11.确认群集是否安装成功
su - grid
检查群集运行状态
crsctl check crs
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
注:
oc4j、gsd默认服务是禁用的
检查群集节点
olsnodes -n
检查两个节点上的oracle tms监听
ps -ef|grep lsnr|grep -v 'grep'
ps -ef|grep lsnr|grep -v 'grep'|awk '{print $9}'
确定针对oracle Clusterware文件的oracle ASM功能:
检查oracle群集注册表(OCR):
[grid@RAC1 ~]$ ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 3
Total space (kbytes) : 262120
Used space (kbytes) : 2568
Available space (kbytes) : 259552
ID : 1748729178
Device/File Name : +ocr_vote
Device/File integrity check succeeded
Device/File not configured
Device/File not configured
Device/File not configured
Device/File not configured
Cluster registry integrity check succeeded
Logical corruption check bypassed due to non-privileged user
检查表决磁盘
[grid@RAC1 ~]$ crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE 6c1c6ab59d554ff9bfb24e7a9e2e3d86 (/dev/asm-OCR) [OCR_VOTE]
Located 1 voting disk(s).
[grid@RAC1 ~]$
12.配置ASM磁盘
su - grid
asmca
13.安装Oracle软件
su - root
xhost +
su - oracle
export DISPLAY=192.168.247.31:0.0
export LANG=en_US
cd /home/oracle/database
./runInstaller
然后使用DBCA创建数据库
至此,安装全部完成。
14.ORACLE11G 群集关闭
---RAC1
su - oracle
sqlplus / as sysdba
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
---RAC2
su - oracle
sqlplus / as sysdba
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
---RAC1
cd /u01/app/11.2.0/grid/bin/
./crsctl stop cluster -all
查看集群状态
[grid@rac1 ~]$ crs_stat -t
CRS-0184: Cannot communicate with the CRS daemon.
15.重启后群集开启
cd /u01/app/11.2.0/grid/bin/
./crsctl start cluster -n RAC1 RAC2
可能会遇到:
CRS-4639: Could not contact Oracle High Availability Services
CRS-4000: Command Start failed, or completed with errors.
[root@RAC1 bin]# ps -ef|grep has
root 2632 1 0 20:10 ? 00:00:00 /u01/app/11.2.0/grid/bin/ohasd.bin reboot
root 65805 1 0 22:25 ? 00:00:00 /u01/app/11.2.0/grid/bin/ohasd.bin reboot
root 102710 5956 0 22:29 pts/0 00:00:00 grep has
[root@RAC1 bin]# kill -9 2632 65805
执行:
[root@b1 grid]# cd /u01/app/11.2.0/grid/crs/install
[root@b1 install]# ./roothas.pl -deconfig -force -verbose
[root@b1 install]# cd /u01/app/11.2.0/grid/
[root@b1 grid]# ./root.sh
当执行到 Adding daemon to inittab 这句话出来的时候
新开一个终端执行:
/bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1
一直执行直到不出现/bin/dd: opening`/var/tmp/.oracle/npohasd': No such file or directory
然后等待即可(记住,RAC1可执行的时候,需到RAC2执行同样的语句.)
[grid@b1 ~]$ crs_stat -t
16.设置群集开机自启动
[root@host1 ~]# cd /u01/app/11.2.0/grid/bin/crsctl enable crs
[root@host1 ~]# cd /u01/app/11.2.0/grid/bin/crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy