一、安装前规划
1、网络配置
| 项目 | 节点一服务器 | 节点二服务器 |
|---|---|---|
| 主机名 | hostrac1 | hostrac2 |
| 操作系统 | centos7.9_x64 | centos7.9_x64 |
| 集群和数据库软件 | Oracle 11.2.0.4 | Oracle 11.2.0.4 |
| 公共网络 | 192.168.11.22 | 192.168.11.23 |
| 私有网络 | 10.10.10.22 | 10.10.10.23 |
| 虚拟VIP | 192.168.11.24 | 192.168.11.25 |
| SCANIP | 192.168.11.26 |
备注:整个集群两个节点共享一个SCANIP地址。
2、共享存储规划
fdisk -l命令查看
fdisk -l|grep sd
Disk /dev/sdb: 1073 MB
Disk /dev/sdc: 1073 MB
Disk /dev/sdd: 1073 MB
Disk /dev/sde: 1073 MB
Disk /dev/sdf: 1073 MB
Disk /dev/sdg: 1073 MB
/dev/sdb,c,d三个盘用于orc磁盘组,/dev/sde,f,g三个盘用于data数据磁盘组
备注:共享存储磁盘,就是安装集群中的两台服务器都可以读写这些磁盘
3、内存、根目录大小规划
内存至少4GB,根目录用于GI集群软件和Oracle软件目录安装,建议50G以上
二、安装前准备工作
1、配置主机名
节点一服务器
hostnamectl set-hostname hostrac1
节点二服务器
hostnamectl set-hostname hostrac2
2、/etc/hosts文件配置
两个节点服务器都需执行
cat >> /etc/hosts <<EOF
10.10.10.22 hostrac1-priv
10.10.10.23 hostrac2-priv
192.168.11.22 hostrac1
192.168.11.23 hostrac2
192.168.11.24 hostrac1-vip
192.168.11.25 hostrac2-vip
192.168.11.26 hostrac-scan
EOF
3、集群GI和Oracle数据库安装用户创建
两个节点服务器都需执行
cat /etc/passwd
cat /etc/group
/usr/sbin/groupadd -g 1001 dba
/usr/sbin/groupadd -g 1000 oinstall
/usr/sbin/groupadd -g 1002 asmadmin
/usr/sbin/groupadd -g 1003 asmdba
/usr/sbin/groupadd -g 1005 oper
/usr/sbin/groupadd -g 1004 asmoper
useradd -u 1000 -g oinstall -G dba,asmadmin,asmdba,asmoper grid
useradd -u 1001 -g oinstall -G dba,oper,asmdba oracle
echo "oracle"|passwd --stdin grid
echo "oracle"|passwd --stdin oracle
4、创建目录
两个节点服务器都需执行
mkdir -p /u01/app/grid
mkdir -p /u01/app/crs
mkdir -p /u01/app/oracle/product/11.2/db_1
chown -R grid:oinstall /u01/app/grid
chown -R oracle:oinstall /u01/app/oracle
chown root:oinstall /u01
chown root:oinstall /u01/app
chown -R grid:oinstall /u01/app/crs
chmod -R 775 /u01
mkdir /u01/soft
chown grid:oinstall /u01/soft
chmod 775 /u01/soft
#/u01/soft目录用于存放软件安装包和PSU补丁包等
5、oracle用户和grid用户ssh互信配置
备注:
1)安装集群软件期间,ssh端口配置为默认的22,配置ssh互信完毕,安装完集群软件后,可以修改为其他端口,例如60022
2)ssh密钥只需要在一台机器上执行生成命令(/usr/bin/ssh-keygen -t rsa),然后将公钥和私钥一起发送给另一台集群节点服务器即可
oracle用户互信配置
节点一服务器
su - oracle
mkdir ~/.ssh
chmod 700 ~/.ssh
/usr/bin/ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa oracle@192.168.11.22 --这个是本机ip地址,不要搞错
节点二服务器(创建接收公钥和私钥的目录)
su - oracle
mkdir ~/.ssh && chmod 700 ~/.ssh
节点一服务器(发送公钥和私钥给节点二服务器)
su - oracle
scp ~/.ssh/* oracle@192.168.11.23:~/.ssh/
grid用户互信配置
节点一服务器
su - grid
mkdir ~/.ssh
chmod 700 ~/.ssh
/usr/bin/ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa grid@192.168.11.22
节点二服务器(创建接受公钥和私钥的目录)
su - grid
mkdir ~/.ssh && chmod 700 ~/.ssh
节点一服务器(发送公钥和私钥给节点二服务器)
su - grid
scp ~/.ssh/* oracle@192.168.11.23:~/.ssh/
互信测试
注意,ssh互相实现以后,所有机器都需要测试一遍,包括本机对本机,包括私有网络都尝试一遍
测试方法(每一个集群服务器都必须执行测试)
su - oracle
cat > sshceshi.sh <<EOF
ssh 192.168.11.22 hostname
ssh 192.168.11.23 hostname
ssh 10.10.10.22 hostname
ssh 10.10.10.23 hostname
ssh hostrac1 hostname
ssh hostrac2 hostname
ssh hostrac1-priv hostname
ssh hostrac2-priv hostname
EOF
sh sshceshi.sh
su - grid
cat > sshceshi.sh <<EOF
ssh 192.168.11.22 hostname
ssh 192.168.11.23 hostname
ssh 10.10.10.22 hostname
ssh 10.10.10.23 hostname
ssh hostrac1 hostname
ssh hostrac2 hostname
ssh hostrac1-priv hostname
ssh hostrac2-priv hostname
EOF
sh sshceshi.sh
6、共享磁盘配置(共享设备与ASM磁盘映射)
注意事项:
linux7通过/usr/lib/udev/scsi_id来识别唯一标识磁盘,如下
/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sdb
两个节点服务器都需执行
通过脚本方式一键生成(两个节点都执行,并且确保执行出来的结果完全一样)
root用户
for i in b c d e f g;
do
echo "KERNEL==\"sd$i\",SUBSYSTEM==\"block\", PROGRAM==\"/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\",RESULT==\"`/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i`\", SYMLINK+=\"asm-disk$i\",OWNER=\"grid\", GROUP=\"asmadmin\",MODE=\"0660\""
done
结果类似如下:
KERNEL=="sdb",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c291ae44211d5528b341d3feed9b", SYMLINK+="asm-diskb",OWNER="grid", GROUP="asmadmin",MODE="0660"
KERNEL=="sdc",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c294878259d96059426cc9213afe", SYMLINK+="asm-diskc",OWNER="grid", GROUP="asmadmin",MODE="0660"
KERNEL=="sdd",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29629f561789869b854255a75e7", SYMLINK+="asm-diskd",OWNER="grid", GROUP="asmadmin",MODE="0660"
KERNEL=="sde",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29b3826eaaa33cb597813b71a84", SYMLINK+="asm-diske",OWNER="grid", GROUP="asmadmin",MODE="0660"
KERNEL=="sdf",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29517022890f76ae649cdc418a9", SYMLINK+="asm-diskf",OWNER="grid", GROUP="asmadmin",MODE="0660"
KERNEL=="sdg",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c293bbc95187fa229934198f45c4", SYMLINK+="asm-diskg",OWNER="grid", GROUP="asmadmin",MODE="0660"
备注:生成的asm磁盘名称为asm-diskb,asm-diskbc...如果觉得名称不满意,可以根据结果手工调整,例如asm-diskocr1,asm-diskocr3,asm-diskocr3,asm-diskdata1,asm-diskdata2....类似这样。
最终将结果写入文件/etc/udev/rules.d/99-oracle-asmdevices.rules ,方法如下
for i in b c d e f g;
do
echo "KERNEL==\"sd$i\",SUBSYSTEM==\"block\", PROGRAM==\"/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\",RESULT==\"`/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i`\", SYMLINK+=\"asm-disk$i\",OWNER=\"grid\", GROUP=\"asmadmin\",MODE=\"0660\"" >>/etc/udev/rules.d/99-oracle-asmdevices.rules
done
检查文件
cat /etc/udev/rules.d/99-oracle-asmdevices.rules
重新加载udev规则(无需重启系统),修改设备规则后非常有用,方法如下
重新加载规则
/sbin/udevadm control --reload-rules
手动触发内核向udev发送事件,从而让已连接的设备重新执行匹配的udev规则,不会真正改变硬件状态,而是模拟一次change事件,让规则立即生效
/sbin/udevadm trigger --type=devices --action=change
备注:可以只针对某个磁盘触发change 事件
例如:仅对 sdb 磁盘触发
udevadm control --reload-rules
udevadm trigger --type=devices --action=change --sysname-match=sdb -v
验证是否生效
ls -lsa /dev/sd*
ls -lsa /dev/asm*
执行结果类似如下:(两个节点一模一样)
[root@hostrac2 ~]# ls -lsa /dev/sd*
0 brw-rw---- 1 root disk 8, 0 Jun 11 17:31 /dev/sda
0 brw-rw---- 1 root disk 8, 1 Jun 11 17:31 /dev/sda1
0 brw-rw---- 1 root disk 8, 2 Jun 11 17:31 /dev/sda2
0 brw-rw---- 1 grid asmadmin 8, 16 Jun 11 17:31 /dev/sdb
0 brw-rw---- 1 grid asmadmin 8, 32 Jun 11 17:31 /dev/sdc
0 brw-rw---- 1 grid asmadmin 8, 48 Jun 11 17:31 /dev/sdd
0 brw-rw---- 1 grid asmadmin 8, 64 Jun 11 17:31 /dev/sde
0 brw-rw---- 1 grid asmadmin 8, 80 Jun 11 17:31 /dev/sdf
0 brw-rw---- 1 grid asmadmin 8, 96 Jun 11 17:31 /dev/sdg
[root@hostrac2 ~]# ls -lsa /dev/asm*
0 lrwxrwxrwx 1 root root 3 Jun 11 17:31 /dev/asm-diskb -> sdb
0 lrwxrwxrwx 1 root root 3 Jun 11 17:31 /dev/asm-diskc -> sdc
0 lrwxrwxrwx 1 root root 3 Jun 11 17:31 /dev/asm-diskd -> sdd
0 lrwxrwxrwx 1 root root 3 Jun 11 17:31 /dev/asm-diske -> sde
0 lrwxrwxrwx 1 root root 3 Jun 11 17:31 /dev/asm-diskf -> sdf
0 lrwxrwxrwx 1 root root 3 Jun 11 17:31 /dev/asm-diskg -> sdg
为了避免划分的磁盘,原先被其他集群ASM使用过(未清理干净),可以考虑使用前对asm磁盘头部dd格式化,如下
dd if=/dev/zero of=/dev/asm-diskb bs=1024 count=10000
dd if=/dev/zero of=/dev/asm-diskc bs=1024 count=10000
dd if=/dev/zero of=/dev/asm-diskd bs=1024 count=10000
dd if=/dev/zero of=/dev/asm-diske bs=1024 count=10000
dd if=/dev/zero of=/dev/asm-diskf bs=1024 count=10000
dd if=/dev/zero of=/dev/asm-diskg bs=1024 count=10000
7、配置ntp时间同步
两个节点服务器都需执行
已经搭建好虚拟机环境的时间同步服务器(192.168.11.250),客户端只需完成时间同步即可,方法如下:
yum install -y ntp
echo "server 192.168.11.250">> /etc/ntp.conf
echo "restrict 192.168.11.250 nomodify notrap noquery" >> /etc/ntp.conf
ntpdate -u 192.168.11.250
hwclock -w
systemctl restart ntpd
systemctl enable ntpd
ntpq -p
备注:
如果实际环境不能这样,直接定时任务同步一个ntp服务器的时间也行,例如
[root@localhost ~]# crontab -l
########ntp sync##################
*/10 * * * * /usr/sbin/ntpdate xx.xx.xx.xx >/dev/null 2>&1
8、操作系统依赖包安装
两个节点服务器都需执行
1)配置yum源,本地ios镜像挂载方式,具体方法如下
mkdir -p /mnt/cdrom
mount /dev/sr0 /mnt/cdrom
df -h | tail -n 1
cd /mnt/cdrom && ls
mkdir /etc/yum.repos.d/backup && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
ll /etc/yum.repos.d/
cat >> /etc/yum.repos.d/dvd.repo <<EOF
[RHEL]
name=RHEL7
baseurl=file:///mnt/cdrom
gpgcheck=0
gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-CentOS-7
enabled=1
EOF
cat /etc/yum.repos.d/dvd.repo
yum clean all
yum makecache
安装基本的软件包测试yum是否正常
yum install net-tools lrzsz wget lrzsz lvm2 tree -y
2)安装依赖包
两个节点服务器都需执行
yum install binutils-devel.x86_64 compat-libstdc++-33.i686 compat-libstdc++-33.x86_64 elfutils-libelf.x86_64 glibc.x86_64 glibc.i686 glibc-common.x86_64 libaio.x86_64 libaio.i686 libaio-devel.i686 libaio-devel.x86_64 libgcc.x86_64 libgcc.i686 libstdc++.x86_64 libstdc++.i686 make.x86_64 unixODBC.i686 unixODBC.x86_64 unixODBC-devel.i686 unixODBC-devel.x86_64 elfutils-libelf-devel.x86_64 gcc.x86_64 gcc-c++.x86_64 glibc-devel.x86_64 glibc-devel.i686 kernel-headers.x86_64 libgomp.x86_64 libstdc++-devel.x86_64 sysstat.x86_64 compat-libcap1.x86_64 -y
#Linux 发行版不再默认提供pdksh包。实际上,pdksh 已被 ksh(Korn Shell)替代,linux上只需安装ksh包即可
yum install ksh -y
yum install psmisc -y
#这个软件包用于fuser命令,后续安装补丁时需要用到这个命令,否则报错,提前安装这个软件包
yum install -y smartmontools
#rac集群需要安装自带的cvuqdisk-1.0.9-1.rpm 包,需要上面的依赖包才行。rpm -ivh /tmp/CVU_11.2.0.4.0_grid/cvuqdisk-1.0.9-1.rpm
图形界面软件包安装,后续定位图形安装界面时需要使用到
yum install xorg-x11-apps.x86_64 -y
yum install xorg-x11-utils.x86_64 -y
RedHat 7的自带iso文件不包含compat-libstdc++-33-3.2.3-69.el6.x86_64.rpm,需要单独上传安装
rpm -ivh compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
9、关闭防火墙和selinux安全策略
两个节点服务器都需执行
systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl list-unit-files |grep firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
cat /etc/selinux/config
10、停止和禁用linux7版本上的一些服务器
两个节点服务器都需执行
1)停止、删除linux7 GUI server创建的虚拟网卡
ifconfig virbr0 down
brctl delbr virbr0
nmcli device delete virbr0-nic
systemctl mask libvirtd.service
systemctl disable libvirtd.service
systemctl list-unit-files|grep libvirtd
2)停用avahi-daemon服务: Linux 系统上一种提供 mDNS(Multicast DNS)和 DNS-SD(DNS Service Discovery) 功能的后台服务
systemctl stop avahi-daemon.socket
systemctl stop avahi-daemon.service
systemctl disable avahi-daemon.socket
systemctl disable avahi-daemon.service
systemctl list-unit-files|grep avahi
3)关闭Chrony服务
systemctl stop chronyd.service
systemctl disable chronyd.service
systemctl status chronyd.service
systemctl list-unit-files|grep chronyd
11、可选,设置linux多用户模式,即纯文本模式,没有图形界面
两个节点服务器都需执行
systemctl set-default multi-user.target
#通常是 multi-user.target 或 graphical.target两种模式,查看当前系统的默认启动目标,可以使用 systemctl get-default 命令
12、Linux7版本上关闭透明大页和NUMA
两个节点服务器都需执行
linux7版本方法如下
sed -i 's/quiet/quiet transparent_hugepage=never numa=off/' /etc/default/grub
cat /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
重启主机生效
reboot
检查透明大页情况
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /proc/sys/vm/nr_hugepages
sysctl vm.nr_hugepages
检查NUMA架构情况
cat /proc/cmdline
13、grid和oracle用户环境变量配置
两个节点服务器都需执行
oracle用户环境变量配置
su - oracle
vi .bash_profile
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2/db_1; export ORACLE_HOME
ORACLE_SID=orcl1; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:/home/oracle/sh:/home/oracle/dh/scripts:$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
export EDITOR=vim
stty erase ^H
alias gobase='cd $ORACLE_BASE'
alias gohome='cd $ORACLE_HOME'
验证
source ~/.bash_profile
env|grep ORACLE
grid用户环境变量配置
su - grid
vi .bash_profile
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/u01/app/grid; export ORACLE_BASE
ORACLE_HOME=/u01/app/crs; export ORACLE_HOME
ORACLE_SID=+ASM1; export ORACLE_SID
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$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
export EDITOR=vim
stty erase ^H
alias gobase='cd $ORACLE_BASE'
alias gohome='cd $ORACLE_HOME'
验证
source ~/.bash_profile
env|grep ORACLE
14、修改配置文件
两个节点服务器都需执行
vi /etc/profile
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
将上面内容加入/etc/profile
15、修改内核参数、操作系统用户限制、安全策略
cat >> /etc/sysctl.conf <<EOF
kernel.shmall = 4294967296
kernel.shmmax = 288719476736
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
fs.aio-max-nr = 1048576
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 = 1048576
EOF
cat >> /etc/security/limits.conf <<EOF
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
grid soft stack 10240
EOF
echo "session required /lib/security/pam_limits.so" >>/etc/pam.d/login
echo "session required pam_limits.so" >>/etc/pam.d/login
16、可选,内存大于32G,建议设置大页,可以参考以前的文章《Oracle11g 安装完毕后的配置优化步骤》
两个节点服务器都需执行
17、重启生效
两个节点服务器都需执行
reboot
三、正式安装集群GI和Oracle数据库软件
只需在一个节点上执行
1、上传软件安装包,上传至/u01/soft目录下,如下
ls -ltr /u01/soft/p133*.zip
-rw-r--r-- 1 grid oinstall 1395582860 Mar 1 2014 p13390677_112040_Linux-x86-64_1of7.zip
-rw-r--r-- 1 grid oinstall 1151304589 Mar 1 2014 p13390677_112040_Linux-x86-64_2of7.zip
-rw-r--r-- 1 grid oinstall 1205251894 Mar 1 2014 p13390677_112040_Linux-x86-64_3of7.zip
2、grid集群软件包解压
备注:集群安装包,对应p13390677_112040_Linux-x86-64_3of7.zip文件,其余1、2两个zip文件为Oracle数据库软件
su - grid
cd /u01/soft
unzip -q unzip -q p13390677_112040_Linux-x86-64_3of7.zip
3、集群安装前验证(验证工具自带在crs的软件包中,grid目录下)
cd /u01/soft/grid
./runcluvfy.sh stage -pre crsinst -n hostrac1,hostrac2 -verbose
备注:-n hostrac1,hostrac2 表示两台集群服务器的主机名称
类似下面的检查不通过信息都可以忽略
1)
Check: Package existence for "pdksh"
Node Name Available Required Status
------------ ------------------------ ------------------------ ----------
hostrac1 missing pdksh-5.2.14 failed
hostrac2 missing pdksh-5.2.14 failed
Result: Package existence check failed for "pdksh"
2)
PRVF-5507 : NTP daemon or service is not running on any node but NTP configuration file exists on the following node(s):
hostrac1,hostrac2
Result: Clock synchronization check using Network Time Protocol(NTP) failed
3)
Checking the file "/etc/resolv.conf" to make sure only one of domain and search entries is defined
File "/etc/resolv.conf" does not have both domain and search entries defined
Checking if domain entry in file "/etc/resolv.conf" is consistent across the nodes...
domain entry in file "/etc/resolv.conf" is consistent across nodes
Checking if search entry in file "/etc/resolv.conf" is consistent across the nodes...
search entry in file "/etc/resolv.conf" is consistent across nodes
4、集群GI软件安装
验证通过后,执行集群GI软件安装(图形方式)
su - grid
cd /u01/soft/grid
export DISPLAY=192.168.11.1:0.0
./runInstaller
根据图形界面提示,一步一步点击即可
注意事项:非常重要!!
在图形界面安装阶段,提示执行两个脚本时,直接执行root.sh时会报错(从linux 7开始是使用systemd而不是initd运行进程和重启进程,而我们的root.sh脚本是通过传统的initd调用运行ohasd进程,所以不兼容,会出现报错)。
需要提前安装补丁18370031,一定要在gi安装执行root.sh之前打该patch
grid用户执行,两个节点都需要
su - grid
上传补丁包至/u01/soft
cd /u01/soft
unzip -q p18370031_112040_Linux-x86-64.zip
$ORACLE_HOME/OPatch/opatch napply -oh $ORACLE_HOME -local /u01/soft/18370031
至此完成安装
图形界面安装注意事项:
1、scan name 修改为/etc/hosts中配置的scan名字
2、不需要配置gns
3、集群节点选择部分,必须手工添加hostrac2,hostrac2-vip,然后测试ssh连通性
4、Asm存储部分,在扫描磁盘时,选择/dev/asm*,千万不能选择/dev,否则在执行root.sh脚本时,创建磁盘组时,由于/dev/下面有多个设备符号,指向同一设备,执行会报错,报CRS-0001,存储多余的错误
5、DISK group Name填写CRS,冗余模式,如果vote磁盘有三个以上,可以选择normal(normal冗余模式,最终集群生成三个votedisk文件和ocr文件)。External模式的话,只会生成一个votedisk和ocr文件。(external 1块,无冗余;normal,3块,3份文件;high,5块,5份文件)
6、不使用IPMI模式
7、最终集群安装过程中,两项不通过,分别为一个集群检查工具、和倒数第三个(印象中是),不影响最终正常安装。
8、安装集群软件最后部分,按软件提示执行两个脚本(一个脚本,两台主机执行完,然后再执行另外一个脚本,也是两台主机上依次执行)
9、最后执行root.sh后,会启动集群、创建CRS磁盘组、格式化ocr、votedisk等工作,至关重要
10、安装完集群后,可以通过asmca图形界面方式创建后续需要的磁盘组,本次创建DATA和ARCH两个磁盘组,都选择External外部冗余模式(存储设备自带的raid模式)
5、数据库软件安装
su - oracle
cd /u01/soft
unzip -q p13390677_112040_Linux-x86-64_1of7.zip
unzip -q p13390677_112040_Linux-x86-64_2of7.zip
export DISPLAY=192.168.11.1:0.0
cd database
./runInstaller
备注:图形界面RAC安装与单机区别不大,可以参考我以前的文章《Oracle 11g 单机安装总结_linux7》,里面有一步一步的图形界面安装截图
四、最后总结
1、需要提前安装smartmontools包
yum install -y smartmontools
#rac集群需要安装自带的cvuqdisk-1.0.9-1.rpm 包,需要上面的依赖包才行。rpm -ivh /tmp/CVU_11.2.0.4.0_grid/cvuqdisk-1.0.9-1.rpm
ls: cannot access /usr/sbin/smartctl: No such file or directory
/usr/sbin/smartctl not found.
error: %pre(cvuqdisk-1.0.9-1.x86_64) scriptlet failed, exit status 1
error: cvuqdisk-1.0.9-1.x86_64: install failed
2、需要提前安装psmisc包
yum install psmisc -y
这个软件包用于fuser命令,后续安装补丁时需要用到这个命令,否则报错,提前安装这个软件包
报错信息类似如下
Verifying environment and performing prerequisite checks...
UtilSession failed: fuser could not be located: //这里提示fuer命令没有
Log file location: /u01/app/crs/cfgtoollogs/opatch/opatch2026-06-12_12-28-54PM_1.log
OPatch failed with error code 73
3、补丁包提前安装
需要提前安装补丁18370031,一定要在gi安装执行root.sh之前打该patch,否则报错如下
Adding Clusterware entries to inittab
ohasd failed to start
Failed to start the Clusterware. Last 20 lines of the alert log follow:
即使root.sh通过其它方式规避错误通过,后续集群启动时也会面临问题,无法启动
需要每次执行(当然也可以规避)
/bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1
规避方法如下:
vi /usr/lib/systemd/system/ohas.service
[Unit]
Description=Oracle High Availability Services
After=syslog.target
[Service]
ExecStart=/etc/init.d/init.ohasd run >/dev/null 2>&1 Type=simple
Restart=always
[Install]
WantedBy=multi-user.target
手动添加systemd中的ohas启动服务,并且启用它。
systemctl daemon-reload
systemctl enable ohas.service
systemctl start ohas.service
依此运行以上命令进行service的调用
具体参考文档:Install of Clusterware fails while running root.sh on OL7 - ohasd fails to start (Doc ID 1959008.1)
4、数据库安装时,还是会碰到老问题
linux7版本安装oracle11g,图形界面安装会出现ins_emagent.mk报错提示,解决方法如下:
主要因为C库的问题,解决办法就是手动指定C库位置
su - oracle
cp $ORACLE_HOME/sysman/lib/ins_emagent.mk /home/oracle/ins_emagent.mk_$(date +%F)
sed -i 's/^\(\s*\$(MK_EMAGENT_NMECTL)\)\s*$/\1 -lnnz11/g' $ORACLE_HOME/sysman/lib/ins_emagent.mk
然后点"重试"按钮就可以了
上面的错误修复,不需要在两个节点执行,另一个节点还未开始安装软件(目录里面也完全时空的),安装的最后阶段会将oracle软件向其它节点进行远程复制。
5、集群安装完毕后,使用SQL plus工具启动数据库报错,而srvctl工具可以正常启动
sqlplus "/as sysdba"
startup
ORA-01565: error in identifying file '+DATA/orcl/spfileorcl.ora'
ORA-17503: ksfdopn:2 Failed to open file +DATA/orcl/spfileorcl.ora
ORA-15001: diskgroup "DATA" does not exist or is not mounted
ORA-15040: diskgroup is incomplete
ORA-15040: diskgroup is incomplete
SQL> SQL> exit
问题原因:oracle软件的可执行文件属主不正确引起
[oracle@hostrac1 admin]$ ls -l $ORACLE_HOME/bin/oracle
-rwsr-s--x 1 oracle oinstall 239501536 Jun 16 10:58 /u01/app/oracle/product/11.2/db_1/bin/oracle
关键在于属组必须是 asmadmin,并且权限中应包含 s(Set UID/GID)。如果属组是 oinstall 或其他,则说明权限有问题。
解决方法
su - grid用户执行如下修复
setasmgidwrap -o /u01/app/oracle/product/11.2/db_1/bin/oracle
备注:/u01/app/oracle/product/11.2/db_1/bin/oracle为oracle数据库的可执行文件,$ORACLE_HOME/bin/oracle
修复后属主如下:
[oracle@hostrac1 admin]$ ls -l $ORACLE_HOME/bin/oracle
-rwsr-s--x 1 oracle asmadmin 239501536 Jun 16 10:58 /u01/app/oracle/product/11.2/db_1/bin/oracle
备注:
SQL*Plus 与 SRVCTL 的启动流程差异
SQL*Plus 的行为:
当您用 sqlplus / as sysdba 登录并执行 startup 时,这个 oracle 进程是以操作系统 oracle 用户的身份发起的。在 RAC 环境中,这个进程需要访问 ASM 实例,以读取磁盘组 +DATA 上的 SPFILE 或数据文件。为此,oracle 用户必须属于正确的组(如 asmadmin),才能获得必要的权限。
SRVCTL 的行为:
srvctl start database 是集群管理工具,它的工作方式不同。它会先调用集群就绪服务(CRS)的资源来按正确的顺序启动相关服务,比如先确保 ASM 实例启动、磁盘组挂载完成,然后再启动数据库实例。在这一系列操作中,它会使用更高权限的凭证来准备环境,因此能暂时绕开 oracle 用户权限不足的问题。