基于 VMware vSphere 环境安装 Oracle21c RAC (一)
前言
企业部署Oracle RAC集群,一般会推荐独立的物理服务器及外部存储,实现负载均衡和故障转移。但VMware作为一种广泛使用的虚拟化平台,也为Oracle RAC的部署提供了灵活和高效的环境。本文主要介绍如何在VMware平台搭建Oracle RAC环境,供大家参考。
安装环境说明
类型
名称
版本
OS系统
CentOS
8.3 x83-64
集群软件
Oracle Database 21c Grid Infrastructure
21.3
数据库软件
Oracle Database 21c
21.3
虚拟化平台
VMware vSphere
7.0U3
配置规划说明
网络规划
主机名
Public IP
Private IP
VIP
SCAN-IP
ORAC01
192.168.0.101
10.10.100.101
192.168.0.111
192.168.0.100
ORAC02
192.168.0.102
10.10.100.102
192.168.0.112
192.168.0.100
目录规划
Directory
Path
描述
ORACLE_SOFTWARE
/u01/orasoft
软件上传目录
ORACLE_BASE For Oracle
/u01/app/oracle
oracle目录
ORACLE_HOME For Oracle
/u01/app/oracle/product/21.3.0/db_1
oracle home目录
ORACLE_BASE For Grid
/u01/app/grid
grid目录
ORACLE_HOME For Grid
/u01/app/21.3.0/grid
grid home目录
Disk Identifier
Disk Size
Diskgroup
Disk Configuration
sda
40GB
System Partition
非共享盘,精简置备
sdb
30GB
Software Installation
非共享盘,精简置备
sdc
15GB
OCRVOTE
共享磁盘,独立持久,厚置备
sdd
15GB
OCRVOTE
共享磁盘,独立持久,厚置备
sde
15GB
OCRVOTE
共享磁盘,独立持久,厚置备
sdf
50GB
MGMT
共享磁盘,独立持久,厚置备
sdg
100GB
DATADG
共享磁盘,独立持久,厚置备
sdh
150GB
ARCHDG
共享磁盘,独立持久,厚置备
设置系统环境
Centos系统安装过程不在赘述,本测试所需虚拟机均使用模板发布。
删除 virbr0 设备
ifconfig virbr0 down
brctl delbr virbr0
systemctl stop libvirtd.service
systemctl disable libvirtd.service
配置主机网络
orac01 节点网络配置信息如下所示:
[root@orac01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens192
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens192
DEVICE=ens192
ONBOOT=yes
IPADDR=192.168.0.101
PREFIX=24
GATEWAY=192.168.0.254
DNS1=192.168.10.171
[root@orac1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens224
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens224
DEVICE=ens224
ONBOOT=yes
IPADDR=10.10.100.101
PREFIX=24
orac02 节点网络配置信息如下所示:
[root@orac02 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens192
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens192
DEVICE=ens192
ONBOOT=yes
IPADDR=192.168.0.102
PREFIX=24
GATEWAY=192.168.0.254
DNS1=192.168.10.171
[root@orac2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens224
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens224
DEVICE=ens224
ONBOOT=yes
IPADDR=10.10.100.102
PREFIX=24
配置 hosts 解析
vi /etc/hosts
#Public IP
192.168.0.101 orac01
192.168.0.102 orac02
#Private IP
10.10.100.101 orac01-priv
10.10.100.102 orac02-priv
#Virtual IP
192.168.0.111 orac01-vip
192.168.0.112 orac02-vip
#Scan IP
192.168.0.100 orac-scan
关闭系统防火墙
两个节点都需要执行此操作:
systemctl stop firewalld.service
systemctl disable firewalld.service
关闭 SELINUX
两个节点都需要执行此操作:
setenforce 0
SELINUX_STATE=`cat /etc/selinux/config |grep "\<SELINUX\>" |grep -v "^#" |awk -F '=' '{print $2}'`
sed -i "s/SELINUX="${SELINUX_STATE}"/SELINUX=disabled/g" /etc/selinux/config //重启系统生效。
关闭时钟同步服务
两个节点都需要执行此操作:
systemctl stop chronyd
systemctl disable chronyd
mv /etc/chrony.conf /etc/chrony.conf.bak
关闭 avahi-daemon 守护进程
systemctl stop avahi-daemon
systemctl disable avahi-daemon
依次执行以下命令,创建swap分区并挂载
调整SWAP(可选)
oracle21c需要16GB的swap空间(这里是从模板发布的虚拟机,swap默认较小,所以需要调整)
查看当前内存信息和swap信息,发现swap空间只有4GB,我们需要扩展到16GB
[root@ORAC01 ~]# free -h
total used free shared buff/cache available
Mem: 15Gi 609Mi 14Gi 10Mi 393Mi 14Gi
Swap: 4.0Gi 0B 4.0Gi
依次执行以下命令,创建swap分区并挂载
#最低可以添加一个12GB的swap文件
dd if=/dev/zero of=/swapfile bs=1M count=16384
mkswap /swapfile
swapon /swapfile
#写入fstab,开机加载
echo "/swapfile swap swap defaults 0 0" >> /etc/fstab
准备软件安装包
orac01 节点配置如下(安装包上传至 orac01 节点即可):
#配置oracle安装目录及软件上传目录
pvcreate /dev/sdb
vgcreate vgora /dev/sdb
lvcreate -n lvora -l +100%FREE vgora
mkfs.xfs /dev/vgora/lvora
mkdir /u01
echo "/dev/vgora/lvora /u01 xfs defaults 0 0" >> /etc/fstab
mount -a
mkdir /u01/orasoft
ls -ltr /u01/orasoft/
total 5809468
-rw-r--r-- 1 root root 3059705302 Aug 23 10:55 LINUX.X64_213000_db_home.zip
-rw-r--r-- 1 root root 2889184573 Aug 23 11:03 LINUX.X64_213000_grid_home.zip
orac02 节点配置如下:
pvcreate /dev/sdb
vgcreate vgora /dev/sdb
lvcreate -n lvora -l +100%FREE vgora
mkfs.xfs /dev/vgora/lvora
mkdir /u01
echo "/dev/vgora/lvora /u01 xfs defaults 0 0" >> /etc/fstab
mount -a
mkdir /u01/orasoft
安装依赖包
两个节点都需要安装如下所示的依赖包:
yum -y install binutils* compat-libstdc++-33* elfutils-libelf* elfutils-libelf-devel* gcc* gcc-c++* glibc* glibc-common* glibc-devel* glibc-headers* ksh* libaio* libaio-devel* libgcc-4* libstdc++* libstdc++-devel* make* numactl-devel* sysstat* unixODBC* unixODBC-devel* xterm* bc compat-libcap* libXp* glibc-kernheaders net-tools-*
修改参数文件
修改内核参数
两个节点都需要执行此操作:
[root@orac01 ~]# vim /etc/sysctl.conf
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
kernel.shmall = 2097152
kernel.shmmax = 8589934591
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
net.ipv4.tcp_wmem = 262144 262144 262144
net.ipv4.tcp_rmem = 4194304 4194304 4194304
kernel.panic_on_oops = 1
[root@orac01 ~]# sysctl -p //使配置立即生效。
修改资源限制
两个节点都需要执行此操作:
[root@orac01 ~]#
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
grid soft stack 10240
grid hard stack 32768
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
oracle soft memlock 3145728
oracle hard memlock 3145728
修改 PAM 配置文件
两个节点都需要执行此操作:
echo "session required pam_limits.so" >> /etc/pam.d/login
设置 NOZEROCONF 参数
两个节点都需要执行此操作:
echo "NOZEROCONF=yes" >> /etc/sysconfig/network
创建用户组和用户
两个节点都需要执行此操作:
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
groupadd -g 54324 backupdba
groupadd -g 54325 dgdba
groupadd -g 54326 kmdba
groupadd -g 54327 asmdba
groupadd -g 54328 asmoper
groupadd -g 54329 asmadmin
groupadd -g 54330 racdba
useradd -u 54321 -g oinstall -G dba,asmdba,oper oracle
useradd -u 54322 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,asmdba,asmoper,asmadmin,racdba grid
echo "oracle" |passwd --stdin oracle
echo "grid" |passwd --stdin grid
创建目录
两个节点都需要执行此操作:
mkdir -p /u01/app/grid
mkdir -p /u01/app/21.3.0/grid
mkdir -p /u01/app/oracle/product/21.3.0/db_1
chown -R grid:oinstall /u01/
chown -R oracle:oinstall /u01/app/oracle/
chmod -R 775 /u01/
配置环境变量
orac01 节点 oracle 用户环境变量配置信息如下:
[root@orac01 ~]# vim /home/oracle/.bash_profile
export PATH //<---在此之后添加如下内容即可。
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/21.3.0/db_1
export ORACLE_UNQNAME=orarac
export ORACLE_SID=orarac1
export ORACLE_TERM=xterm
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export BASE_PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$BASE_PATH
export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss"
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
orac02 节点 oracle 用户环境变量配置信息如下:
[root@orac02 ~]# vim /home/oracle/.bash_profile
export PATH //<---在此之后添加如下内容即可。
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/21.3.0/db_1
export ORACLE_UNQNAME=orarac
export ORACLE_SID=orarac2
export ORACLE_TERM=xterm
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export BASE_PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$BASE_PATH
export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss"
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
orac01 节点 grid 用户环境变量配置信息如下:
[root@orac1 ~]# vim /home/grid/.bash_profile
export PATH //<---在此之后添加如下内容即可。
export ORACLE_SID=+ASM1
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/21.3.0/grid
export ORACLE_TERM=xterm
export PATH=$ORACLE_HOME/bin:$PATH
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
orac02 节点 grid 用户环境变量配置信息如下:
[root@orac02 ~]# vim /home/grid/.bash_profile
export PATH //<---在此之后添加如下内容即可。
export ORACLE_SID=+ASM2
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/21.3.0/grid
export ORACLE_TERM=xterm
export PATH=$ORACLE_HOME/bin:$PATH
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
配置节点互信
配置 oracle 用户互信
orac01 节点生成 rsa & dsa 密钥。
su - oracle
ssh-keygen -t rsa
ssh-keygen -t dsa
orac02 节点生成 rsa & dsa 密钥。
su - oracle
ssh-keygen -t rsa
ssh-keygen -t dsa
orac01 节点将其公钥写入 authorized_keys 文件并拷贝到 orac2 节点。
[oracle@orac01 ~]$ cat ~/.ssh/*.pub >> ~/.ssh/authorized_keys
[oracle@orac01 ~]$ scp /home/oracle/.ssh/authorized_keys oracle@orac02:/home/oracle/.ssh/
orac02 节点将其公钥写入 authorized_keys 文件并拷贝回 orac1 节点。
[oracle@orac02 ~]$ cat ~/.ssh/*.pub >> ~/.ssh/authorized_keys
[oracle@orac02 ~]$ scp /home/oracle/.ssh/authorized_keys oracle@orac01:/home/oracle/.ssh/
验证 oracle 用户互信。
[root@orac01 ~]# su - oracle
[oracle@orac01 ~]$ ssh orac01 date //需要输入“yes”,因为 known_hosts 文件中没有此记录。
[oracle@orac01 ~]$ ssh orac02 date //不需要输入“yes”,之前 scp 过因此 known_hosts 文件中有此记录。
[root@orac02 ~]# su - oracle
[oracle@orac02 ~]$ ssh orac01 date //不需要输入“yes”。
[oracle@orac02 ~]$ ssh orac02 date //需要输入“yes”。
配置 grid 用户互信
orac01 节点生成 rsa & dsa 密钥。
su - grid
ssh-keygen -t rsa
ssh-keygen -t dsa
orac02 节点生成 rsa & dsa 密钥。
su - grid
ssh-keygen -t rsa
ssh-keygen -t dsa
orac01 节点将其公钥写入 authorized_keys 文件并拷贝到 orac02 节点。
[grid@orac01 ~]$ cat ~/.ssh/*.pub >> ~/.ssh/authorized_keys
[grid@orac01 ~]$ scp /home/grid/.ssh/authorized_keys grid@orac02:/home/grid/.ssh/
orac02 节点将其公钥写入 authorized_keys 文件并拷贝回 orac01 节点。
[grid@orac02 ~]$ cat ~/.ssh/*.pub >> ~/.ssh/authorized_keys
[grid@orac02 ~]$ scp /home/grid/.ssh/authorized_keys grid@orac01:/home/grid/.ssh/
验证 grid 用户互信。
[root@orac01 ~]# su - grid
[grid@orac01 ~]$ ssh orac01 date //需要输入“yes”。
[grid@orac01 ~]$ ssh orac02 date //不需要输入“yes”。
[root@orac02 ~]# su - grid
[grid@orac02 ~]$ ssh orac01 date //不需要输入“yes”。
[grid@orac02 ~]$ ssh orac02 date //需要输入“yes”。