前言

之前因为工作需要,我得在虚拟化环境里面搭建一套 Oracle 11g RAC 数据库用于测试。前后折腾了一些时间,再结合早前的一些操作笔记,最终在新的 vSphere 7.0 环境里面搭建了一套双活数据库,现将过程记录下来与大家做一个分享,若有不当之处,欢迎指正。

要说在前面的是,本文仅供安装学习使用,生产环境建议从硬件到软件完成各项检查与评估,依据更加详细和专业的方案完成部署,并根据实际需要对数据库进行优化!


1. 安装环境说明

Version Description

  • vSphere Version:VMware ESXi, 7.0.2, 17867351
  • OS Version:Red Hat Enterprise Linux Server release 6.8 (Santiago)
  • Kernel Version:2.6.32-642.el6.x86_64
  • Oracle Version:Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

Oracle Software List

  • p13390677_112040_Linux-x86-64_1of7.zip
  • p13390677_112040_Linux-x86-64_2of7.zip
  • p13390677_112040_Linux-x86-64_3of7.zip

Dependent packages required by the Database

  • kmod-oracleasm-2.0.8-13.el6_8.x86_64
  • oracleasmlib-2.0.4-1.el6.x86_64.rpm
  • oracleasm-support-2.1.8-1.el6.x86_64.rpm
  • pdksh-5.2.14-37.el5_8.1.x86_64.rpm

2. 数据库配置规划

2.1. 数据库地址规划

scan ip:172.16.206.20

NodePublic NetworkPublic IPVirtual NetworkVirtual IPPrivate NetworkPrivate IP
rac1eth0172.16.206.21eth0172.16.206.23eth1172.16.1.1
rac2eth0172.16.206.22eth0172.16.206.24eth1172.16.1.2

2.2. 数据库磁盘规划

磁盘用途节点 1 磁盘大小及标识符节点 2 磁盘大小及标识符备注
系统盘100GB(sda)100GB(sda)非共享盘,正常配置
软件盘100GB(sdb)100GB(sdb)非共享盘,正常配置
注册盘50GB(sdc)50GB(sdc)共享磁盘,独立持久
表决盘50GB(sdd)50GB(sdd)共享磁盘,独立持久
数据盘100GB(sde)100GB(sde)共享磁盘,独立持久
归档盘100GB(sdf)100GB(sdf)共享磁盘,独立持久

2.3. 数据库目录规划

目录用途说明绝对路径
ORACLE_SOFTWARE/u01/orasoft
ORACLE_BASE For Oracle/u01/oracle/app
ORACLE_HOME For Oracle/u01/oracle/app/product/11.2.0/db_1
ORACLE_BASE For Grid/u01/oracle/crs_base
ORACLE_HOME For Grid/u01/oracle/crs_home

3. 系统环境准备

3.1. 操作系统安装

系统安装过程比较简单,这里就不做过多说明,只说明 2 个注意事项:

  • 虽然两个节点的系统配置一模一样的,但是不建议以克隆的方式创建第二个节点;建议的做法是两个节点按照同样的步骤进行安装配置。
  • 系统分区除去 boot 分区和 swap 分区以外,尽量做 lvm 分区,防止以后空间不足需要进行扩容。

3.1.1. 安装 VMware Tools

安装 VMware Tools 的主要目的是为了可以在 vSphere Web Client 页面直接查看节点的 IP 信息,以及优化虚拟机控制台的分辨率和鼠标操作流畅度;安装过程也比较简单,这里不做过多叙述。

3.1.2. 配置系统网络

rac1 节点网络配置信息

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0   //节点 1 Public 网络配置信息。
DEVICE=eth0
HWADDR=00:50:56:88:C1:FA
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=172.16.206.21
NETMASK=255.255.255.0
GATEWAY=172.16.206.254
DNS1=114.114.114.114
DNS2=202.102.192.68

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1   //节点 1 Private 网络配置信息。
DEVICE=eth1
HWADDR=00:50:56:88:8D:F5
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=172.16.1.1
NETMASK=255.255.255.0

rac2 节点网络配置信息

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0   //节点 2 Public 网络配置信息。
DEVICE=eth0
HWADDR=00:50:56:88:26:4C
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=172.16.206.22
NETMASK=255.255.255.0
GATEWAY=172.16.206.254
DNS1=114.114.114.114
DNS2=202.102.192.68

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1   //节点 2 Private 网络配置信息。
DEVICE=eth1
HWADDR=00:50:56:88:48:58
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=172.16.1.2
NETMASK=255.255.255.0

3.1.3. 配置系统主机名

rac1 节点修改主机名

[root@localhost ~]# sed -i 's/HOSTNAME=localhost.localdomain/HOSTNAME=rac1/g' /etc/sysconfig/network

rac2 节点修改主机名

[root@localhost ~]# sed -i 's/HOSTNAME=localhost.localdomain/HOSTNAME=rac2/g' /etc/sysconfig/network

3.1.4. 关闭系统防火墙

rac1 节点和 rac2 节点都需要关闭系统防火墙

[root@localhost ~]# service iptables stop
[root@localhost ~]# chkconfig iptables off

[root@localhost ~]# service ip6tables stop
[root@localhost ~]# chkconfig ip6tables off

3.1.5. 关闭系统 SELINUX 模块

rac1 节点和 rac2 节点都需要关闭 SELINUX 模块

[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@localhost ~]# reboot   //重启系统使上面的配置生效。

3.1.6. 配置 /etc/hosts 文件

rac1 节点和 rac2 节点都需要按照如下配置各自的 /etc/hosts 文件

[root@rac1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

#Public IP
172.16.206.21 rac1
172.16.206.22 rac2

#Virtual IP
172.16.206.23 rac1-vip
172.16.206.24 rac2-vip

#Private IP
172.16.1.1 rac1-priv
172.16.1.2 rac2-priv

#Scan IP
172.16.206.20 scan-ip

3.1.7. 上传安装文件

rac1 节点按照如下步骤进行配置

[root@rac1 ~]# pvcreate /dev/sdb
[root@rac1 ~]# vgcreate vg-oracle /dev/sdb
[root@rac1 ~]# lvcreate -n lv-oracle -l 100%FREE vg-oracle   //以上步骤将 /dev/sdb 做成 lvm 卷。
[root@rac1 ~]# mkfs.ext4 /dev/vg-oracle/lv-oracle   //将新建的 lvm 卷格式化为 ext4 类型的文件系统。
[root@rac1 ~]# mkdir /u01   //创建挂载点。
[root@rac1 ~]# echo "/dev/vg-oracle/lv-oracle   /u01   ext4   defaults   0 0" >> /etc/fstab   //设置开机自动挂载。
[root@rac1 ~]# mount -a   //手动执行挂载。
[root@rac1 ~]# mkdir /u01/orasoft   //创建存放 oracle 软件和 rpm 包的目录。
[root@rac1 ~]# ls -lh /u01/orasoft/   //将如下文件上传至此目录。
total 3.5G
-rw-r--r-- 1 root root  36K Dec 13 14:15 kmod-oracleasm-2.0.8-13.el6_8.x86_64.rpm
-rw-r--r-- 1 root root  13K Dec 13 14:15 oracleasmlib-2.0.4-1.el6.x86_64.rpm
-rw-r--r-- 1 root root  74K Dec 13 14:15 oracleasm-support-2.1.8-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 1.3G Dec 13 14:33 p13390677_112040_Linux-x86-64_1of7.zip
-rw-r--r-- 1 root root 1.1G Dec 13 14:30 p13390677_112040_Linux-x86-64_2of7.zip
-rw-r--r-- 1 root root 1.2G Dec 13 14:40 p13390677_112040_Linux-x86-64_3of7.zip
-rw-r--r-- 1 root root 206K Dec 13 15:59 pdksh-5.2.14-37.el5_8.1.x86_64.rpm

rac2 节点按照如下步骤进行配置

[root@rac2 ~]# pvcreate /dev/sdb
[root@rac2 ~]# vgcreate vg-oracle /dev/sdb
[root@rac2 ~]# lvcreate -n lv-oracle -l 100%FREE vg-oracle
[root@rac2 ~]# mkfs.ext4 /dev/vg-oracle/lv-oracle
[root@rac2 ~]# mkdir /u01
[root@rac2 ~]# echo "/dev/vg-oracle/lv-oracle   /u01   ext4   defaults   0 0" >> /etc/fstab
[root@rac2 ~]# mount -a
[root@rac2 ~]# mkdir /u01/orasoft
[root@rac2 ~]# ls -lh /u01/orasoft/   //rac 2 节点是不需要上传 oracle 软件包的,只需要如下 rpm 包。
total 336K
-rw-r--r-- 1 root root  36K Dec 13 14:45 kmod-oracleasm-2.0.8-13.el6_8.x86_64.rpm
-rw-r--r-- 1 root root  13K Dec 13 14:45 oracleasmlib-2.0.4-1.el6.x86_64.rpm
-rw-r--r-- 1 root root  74K Dec 13 14:45 oracleasm-support-2.1.8-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 206K Dec 13 16:04 pdksh-5.2.14-37.el5_8.1.x86_64.rpm

3.1.8. 配置本地 yum 源并安装依赖包

rac1 节点和 rac2 节点都需要按照如下配置各自的 yum 源

关于本地 yum 源的配置,大家可以参考我的另外一篇博客 《基于 CentOS 7.6 配置本地 YUM 源》,本文我就直接记录配置命令了。

cd ~
mkdir /etc/yum.repos.d/repo_backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repo_backup/
mkdir /iso   //需要将 iso 镜像文件上传到此目录下。
mkdir /mnt/cdrom
mount -o loop /iso/rhel-server-6.8-x86_64-dvd.iso /mnt/cdrom/

vim /etc/yum.repos.d/local.repo   //创建新的 repo 文件并填写如下信息。
[local]
name=local
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0

yum clean all
yum repolist

rac1 节点和 rac2 节点都需要安装如下所示的依赖包

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* pdksh*

rac1 节点和 rac2 节点处理没有安装上的依赖包

注意: 再次执行 yum 安装依赖包的命令,可以根据提示看到哪些包没有安装上,尽量让所有的依赖包都能装上,我的环境里面提示了 pdksh 没有安装上:

No package pdksh* available.

我的解决方法是提前准备了 pdk 的 rpm 包(直接安装 pdksh 会提示与 ksh 冲突,因此需要先卸载 ksh 然后再安装 pdksh):

rpm -e `rpm -qa |grep ksh`
rpm -ivh /u01/orasoft/pdksh-5.2.14-37.el5_8.1.x86_64.rpm

3.1.9. 关闭系统 ntp 服务

注意: 如果没有 ntp server 用来进行时钟同步,检查系统当前是否运行了 ntp 服务,如果已经运行需要将 ntp 服务关闭!

rac1 节点和 rac2 节点都需要关闭系统 ntp 服务

service ntpd stop
chkconfig ntpd off

3.2. 修改系统参数文件

3.2.1. 修改 /etc/sysctl.conf 文件

rac1 节点和 rac2 节点都需要按照如下所示进行文件修改

在 /etc/sysctl.conf 文件的末尾添加如下内容:

fs.aio-max-nr = 1048576
fs.file-max = 6815744
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
net.ipv4.tcp_wmem = 262144 262144 262144
net.ipv4.tcp_rmem = 4194304 4194304 4194304

在这里插入图片描述

sysctl -p   //使配置立即生效。

3.2.2. 修改 /etc/security/limits.conf 文件

rac1 节点和 rac2 节点都需要按照如下所示进行文件修改

在 /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

在这里插入图片描述

3.2.3. 修改 /etc/pam.d/login 文件

rac1 节点和 rac2 节点都需要按照如下所示进行文件修改

在 /etc/pam.d/login 文件的末尾添加如下内容(仅适用于 64 位系统 ):

session   required      pam_limits.so
session   required      /lib64/security/pam_limits.so

在这里插入图片描述

3.2.4. 修改 /etc/profile 文件

rac1 节点和 rac2 节点都需要按照如下所示进行文件修改

在 /etc/profile 文件中找到 “done” 字符串,在其前面添加如下内容:

if [ $USER = "oracle" ]; then
        if [ $SHELL = "/bin/ksh" ]; then
                ulimit -p 16384
                ulimit -n 65536
        else
                ulimit -u 16384 -n 65536
        fi
   fi

在这里插入图片描述

source /etc/profile   //使系统环境变量配置立即生效。

3.3. 创建用户组和用户

rac1 节点和 rac2 节点都需要创建用户组和用户

Step1:创建用户组。

groupadd -g 1300 dba
groupadd -g 1301 oper
groupadd -g 1000 oinstall
groupadd -g 1200 asmadmin
groupadd -g 1201 asmdba
groupadd -g 1202 asmoper

Step2:创建用户。

useradd -m -u 1100 -g oinstall -G dba,asmadmin,asmdba,asmoper -s /bin/bash grid
useradd -m -u 1101 -g oinstall -G dba,oper,asmdba -s /bin/bash oracle

Step3:设置用户密码。

passwd grid
passwd oracle

Step4:检查 nobody 用户是否存在。

[root@rac1 ~]# id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)

[root@rac2 ~]# id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)

4. 配置 oracle 和 grid 用户环境变量

4.1. 配置 oracle 用户环境变量

配置 rac1 节点 oracle 用户环境变量

[root@rac1 ~]# vim /home/oracle/.bash_profile   //在环境变量文件中找到 “export PATH”,在其之后加入如下信息。

export ORACLE_BASE=/u01/oracle/app
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_UNQNAME=rac
export ORACLE_SID=rac1
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

在这里插入图片描述

配置 rac2 节点 oracle 用户环境变量

[root@rac2 ~]# vim /home/oracle/.bash_profile   //在环境变量文件中找到 “export PATH”,在其之后加入如下信息。

export ORACLE_BASE=/u01/oracle/app
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_UNQNAME=rac
export ORACLE_SID=rac2
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

在这里插入图片描述

4.2. 配置 grid 用户环境变量

配置 rac1 节点 grid 用户环境变量

[root@rac1 ~]# vim /home/grid/.bash_profile

export ORACLE_SID=+ASM1
export ORACLE_BASE=/u01/oracle/crs_base
export ORACLE_HOME=/u01/oracle/crs_home
export GRID_HOME=/u01/oracle/crs_home
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

在这里插入图片描述

配置 rac2 节点 grid 用户环境变量

[root@rac2 ~]# vim /home/grid/.bash_profile

export ORACLE_SID=+ASM2
export ORACLE_BASE=/u01/oracle/crs_base
export ORACLE_HOME=/u01/oracle/crs_home
export GRID_HOME=/u01/oracle/crs_home
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

在这里插入图片描述

4.3. 根据环境变量创建相关目录

rac1 节点和 rac2 节点都需要创建相关目录

Step1:根据环境变量创建目录。

mkdir -p /u01/oracle/app/product/11.2.0/db_1
mkdir /u01/oracle/oraInventory
mkdir /u01/oracle/crs_base
mkdir /u01/oracle/crs_home

Step2:配置目录的所属组以及权限。

chown -R oracle:oinstall /u01/oracle/app
chown -R grid:oinstall /u01/oracle/oraInventory
chown -R grid:oinstall /u01/oracle/crs_base
chown -R grid:oinstall /u01/oracle/crs_home
chmod -R 775 /u01/

5. 配置节点互信

5.1. 配置 oracle 用户之间节点互信

rac1 节点生成 rsa 和 dsa 密钥和公钥

[root@rac1 /]# su - oracle
[oracle@rac1 ~]$ mkdir ~/.ssh
[oracle@rac1 ~]$ chmod 700 ~/.ssh
[oracle@rac1 ~]$ ssh-keygen -t rsa   //后面直接按 “Enter” 键默认即可。
[oracle@rac1 ~]$ ssh-keygen -t dsa   //后面直接按 “Enter” 键默认即可。
[oracle@rac1 ~]$ ls -lh ~/.ssh/   //可以看到 rsa 和 dsa 的密钥以及公钥文件。
total 16K
-rw------- 1 oracle oinstall  668 Dec 14 11:00 id_dsa
-rw-r--r-- 1 oracle oinstall  601 Dec 14 11:00 id_dsa.pub
-rw------- 1 oracle oinstall 1.7K Dec 14 11:00 id_rsa
-rw-r--r-- 1 oracle oinstall  393 Dec 14 11:00 id_rsa.pub

rac2 节点生成 rsa 和 dsa 密钥和公钥

[root@rac2 ~]# su - oracle
[oracle@rac2 ~]$ mkdir ~/.ssh
[oracle@rac2 ~]$ chmod 700 ~/.ssh
[oracle@rac2 ~]$ ssh-keygen -t rsa
[oracle@rac2 ~]$ ssh-keygen -t dsa
[oracle@rac2 ~]$ ls -lh ~/.ssh/
total 16K
-rw------- 1 oracle oinstall  668 Dec 14 11:12 id_dsa
-rw-r--r-- 1 oracle oinstall  601 Dec 14 11:12 id_dsa.pub
-rw------- 1 oracle oinstall 1.7K Dec 14 11:12 id_rsa
-rw-r--r-- 1 oracle oinstall  393 Dec 14 11:12 id_rsa.pub

在 rac1 节点上获取俩节点的 rsa 和 dsa 公钥

[oracle@rac1 ~]$ ssh rac1 cat /home/oracle/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys   //此操作需要输入 rac1 节点 oracle 用户的密码。
[oracle@rac1 ~]$ ssh rac1 cat /home/oracle/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
[oracle@rac1 ~]$ ssh rac2 cat /home/oracle/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys   //此操作需要输入 rac2 节点 oracle 用户的密码。
[oracle@rac1 ~]$ ssh rac2 cat /home/oracle/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys   //此操作需要输入 rac2 节点 oracle 用户的密码。
[oracle@rac1 ~]$ chmod 600 ~/.ssh/authorized_keys

从 rac1 节点获取 authorized_keys 文件

[oracle@rac2 ~]$ scp rac1:/home/oracle/.ssh/authorized_keys ~/.ssh/   //仅输入 “yes” 即可(为了生成 known_hosts 文件避免后面首次 ssh 连接时需要输入 “yes” 进行确认)。
[oracle@rac2 ~]$ scp rac2:/home/oracle/.ssh/authorized_keys ~/.ssh/   //仅输入 “yes” 即可(为了生成 known_hosts 文件避免后面首次 ssh 连接时需要输入 “yes” 进行确认)。

分别在 rac1 节点和 rac2 节点验证 oracle 用户的互信

Step1:rac1 节点 oracle 用户互信验证通过。

[root@rac1 ~]# su - oracle
[oracle@rac1 ~]$ ssh rac1 date
Tue Dec 14 11:30:37 CST 2021
[oracle@rac1 ~]$ ssh rac2 date
Tue Dec 14 11:30:50 CST 2021

Step2:rac2 节点 oracle 用户互信验证通过。

[root@rac2 ~]# su - oracle
[oracle@rac2 ~]$ ssh rac2 date
Tue Dec 14 11:31:19 CST 2021
[oracle@rac2 ~]$ ssh rac1 date
Tue Dec 14 11:31:11 CST 2021

5.2. 配置 grid 用户之间节点互信

rac1 节点生成 rsa 和 dsa 密钥和公钥

[root@rac1 ~]# su - grid
[grid@rac1 ~]$ mkdir ~/.ssh
[grid@rac1 ~]$ chmod 700 ~/.ssh/
[grid@rac1 ~]$ ssh-keygen -t rsa
[grid@rac1 ~]$ ssh-keygen -t dsa

rac1 节点生成 rsa 和 dsa 密钥和公钥

[root@rac2 ~]# su - grid
[grid@rac2 ~]$ mkdir ~/.ssh
[grid@rac2 ~]$ chmod 700 ~/.ssh/
[grid@rac2 ~]$ ssh-keygen -t rsa
[grid@rac2 ~]$ ssh-keygen -t dsa

在 rac1 节点上获取俩节点的 rsa 和 dsa 公钥

[grid@rac1 ~]$ ssh rac1 cat /home/grid/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[grid@rac1 ~]$ ssh rac1 cat /home/grid/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
[grid@rac1 ~]$ ssh rac2 cat /home/grid/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[grid@rac1 ~]$ ssh rac2 cat /home/grid/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
[grid@rac1 ~]$ chmod 600 ~/.ssh/authorized_keys

从 rac1 节点获取 authorized_keys 文件

[grid@rac2 ~]$ scp rac1:/home/grid/.ssh/authorized_keys ~/.ssh/
[grid@rac2 ~]$ scp rac2:/home/grid/.ssh/authorized_keys ~/.ssh/

分别在 rac1 节点和 rac2 节点验证 oracle 用户的互信

Step1:rac1 节点 oracle 用户互信验证通过。

[root@rac1 ~]# su - grid
[grid@rac1 ~]$ ssh rac1 date
Tue Dec 14 12:51:26 CST 2021
[grid@rac1 ~]$ ssh rac2 date
Tue Dec 14 12:51:40 CST 2021

Step2:rac2 节点 oracle 用户互信验证通过。

[root@rac2 ~]# su - grid
[grid@rac2 ~]$ ssh rac2 date
Tue Dec 14 12:51:53 CST 2021
[grid@rac2 ~]$ ssh rac1 date
Tue Dec 14 12:51:45 CST 2021

6. 配置 ASM 共享磁盘

6.1. vSphere 层配置共享磁盘

配置前先将 rac1 节点和 rac2 节点关机。

默认虚拟机只配置了一个 SCSI 控制器,而我们在添加磁盘进行共享时,尽可能不要和本地磁盘的 SCSI 控制器共用,因此,首先我们需要为 rac1 节点添加一个 SCSI 控制器,如下所示:
在这里插入图片描述
在添加完 SCSI 控制器以后,接下来需要添加磁盘,具体细节如下所示:
在这里插入图片描述
最终在 rac1 节点上,我们需要按照前面的磁盘规划一共添加 4 块共享磁盘,具体如下所示:
在这里插入图片描述
接下来我们需要为 rac2 节点添加一个新的 SCSI 控制器:
在这里插入图片描述
在 rac2 节点添加硬盘时需要注意,这时候我们要添加的是“现有硬盘”,通过浏览存储找到 rac1 节点对应的磁盘;这里以 rac1 节点第一块 50GB 的磁盘为例:
在这里插入图片描述
同样,在添加完现有硬盘之后,我们仍需要按照下图所示对一些参数项进行修改:
在这里插入图片描述
最终 rac2 节点的磁盘配备情况如下图所示:
在这里插入图片描述
保存虚拟机配置后,先启动 rac1 节点,检查磁盘都正常以后再启动 rac2 节点,查看 rac2 节点能否正常识别到这 4 块共享磁盘,如下所示表示正常:
在这里插入图片描述

6.2. 使用 asmlib 配置 asm 磁盘

在 rac1 节点和 rac2 节点安装 oracleasm 包
包安装顺序遵循:oracleasm-support -> kmod-oracleasm -> oracleasmlib

## 在 root 用户下执行以下命令:

rpm -ivh /u01/orasoft/oracleasm-support-2.1.8-1.el6.x86_64.rpm
rpm -ivh /u01/orasoft/kmod-oracleasm-2.0.8-13.el6_8.x86_64.rpm
rpm -ivh /u01/orasoft/oracleasmlib-2.0.4-1.el6.x86_64.rpm

在 rac1 节点上对 4 块共享盘进行分区操作

[root@rac1 ~]# for i in {c,d,e,f}; do parted -s /dev/sd$i mklabel msdos mkpart primary 1MiB 100%; done

[root@rac1 ~]# lsblk
NAME                           MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                              8:0    0  100G  0 disk 
├─sda1                           8:1    0  500M  0 part /boot
├─sda2                           8:2    0   16G  0 part [SWAP]
└─sda3                           8:3    0 83.5G  0 part 
  └─VolGroup-LogVol00 (dm-0)   253:0    0 83.5G  0 lvm  /
sdb                              8:16   0  100G  0 disk 
└─vg--oracle-lv--oracle (dm-1) 253:1    0  100G  0 lvm  /u01
sdf                              8:80   0  100G  0 disk 
└─sdf1                           8:81   0  100G  0 part 
sde                              8:64   0  100G  0 disk 
└─sde1                           8:65   0  100G  0 part 
sdc                              8:32   0   50G  0 disk 
└─sdc1                           8:33   0   50G  0 part 
sdd                              8:48   0   50G  0 disk 
└─sdd1                           8:49   0   50G  0 part 
sr0                             11:0    1  3.6G  0 rom  

在 rac2 节点上刷新 4 块共享盘的分区信息

[root@rac2 ~]# partprobe   //刷新分区信息。

[root@rac2 ~]# lsblk
NAME                           MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                              8:0    0  100G  0 disk 
├─sda1                           8:1    0  500M  0 part /boot
├─sda2                           8:2    0   16G  0 part [SWAP]
└─sda3                           8:3    0 83.5G  0 part 
  └─VolGroup-LogVol00 (dm-0)   253:0    0 83.5G  0 lvm  /
sdb                              8:16   0  100G  0 disk 
└─vg--oracle-lv--oracle (dm-1) 253:1    0  100G  0 lvm  /u01
sdd                              8:48   0   50G  0 disk 
└─sdd1                           8:49   0   50G  0 part 
sdf                              8:80   0  100G  0 disk 
└─sdf1                           8:81   0  100G  0 part 
sde                              8:64   0  100G  0 disk 
└─sde1                           8:65   0  100G  0 part 
sdc                              8:32   0   50G  0 disk 
└─sdc1                           8:33   0   50G  0 part 
sr0                             11:0    1  3.6G  0 rom  

在 rac1 节点和 rac2 节点启动 asm 模块

Step1:rac1 节点启动 asm 模块。

[root@rac1 ~]# /etc/init.d/oracleasm configure   //启动配置。
Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library
driver.  The following questions will determine whether the driver is
loaded on boot and what permissions it will have.  The current values
will be shown in brackets ('[]').  Hitting <ENTER> without typing an
answer will keep that current value.  Ctrl-C will abort.

Default user to own the driver interface []: grid   //输入 “grid” 用户。
Default group to own the driver interface []: asmdba   //输入 “asmdba” 用户组。
Start Oracle ASM library driver on boot (y/n) [n]: y   //输入 “y”。
Scan for Oracle ASM disks on boot (y/n) [y]: y   //输入 “y”。
Writing Oracle ASM library driver configuration: done
Initializing the Oracle ASMLib driver:                     [  OK  ]
Scanning the system for Oracle ASMLib disks:               [  OK  ]

Step2:rac2 节点启动 asm 模块。

[root@rac2 ~]# /etc/init.d/oracleasm configure
Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library
driver.  The following questions will determine whether the driver is
loaded on boot and what permissions it will have.  The current values
will be shown in brackets ('[]').  Hitting <ENTER> without typing an
answer will keep that current value.  Ctrl-C will abort.

Default user to own the driver interface []: grid
Default group to own the driver interface []: asmdba
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: done
Initializing the Oracle ASMLib driver:                     [  OK  ]
Scanning the system for Oracle ASMLib disks:               [  OK  ]

在 rac1 节点上创建 ASM 磁盘

[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL1 /dev/sdc1
Marking disk "VOL1" as an ASM disk:                        [  OK  ]

[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL2 /dev/sdd1
Marking disk "VOL2" as an ASM disk:                        [  OK  ]

[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL3 /dev/sde1
Marking disk "VOL3" as an ASM disk:                        [  OK  ]
 
[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL4 /dev/sdf1
Marking disk "VOL4" as an ASM disk:                        [  OK  ]

在 rac1 节点和 rac2 节点上扫描刚刚创建的 ASM 磁盘

Step1:rac1 节点扫描并打印出磁盘信息。

[root@rac1 ~]# /etc/init.d/oracleasm scandisks
Scanning the system for Oracle ASMLib disks:               [  OK  ]

[root@rac1 ~]# /etc/init.d/oracleasm listdisks
VOL1
VOL2
VOL3
VOL4

Step2:rac2 节点扫描并打印出磁盘信息。

[root@rac2 ~]# /etc/init.d/oracleasm scandisks
Scanning the system for Oracle ASMLib disks:               [  OK  ]

[root@rac2 ~]# /etc/init.d/oracleasm listdisks
VOL1
VOL2
VOL3
VOL4

7. 安装 Grid 软件

7.1. 解压软件包并赋予权限

只需要在 rac1 节点解压软件包并赋予权限

[root@rac1 ~]# cd /u01/orasoft/
[root@rac1 orasoft]# unzip p13390677_112040_Linux-x86-64_1of7.zip
[root@rac1 orasoft]# unzip p13390677_112040_Linux-x86-64_2of7.zip
[root@rac1 orasoft]# unzip p13390677_112040_Linux-x86-64_3of7.zip
[root@rac1 orasoft]# chown -R grid:oinstall grid/
[root@rac1 orasoft]# chown -R oracle:oinstall database/
[root@rac1 orasoft]# chmod 775 grid/
[root@rac1 orasoft]# chmod 775 database/

[root@rac1 orasoft]# ls -lh
total 3.5G
drwxrwxr-x 7 oracle oinstall 4.0K Aug 27  2013 database   //检查确认所属组以及权限。
drwxrwxr-x 7 grid   oinstall 4.0K Aug 27  2013 grid   //检查确认所属组以及权限。
-rwxrwxr-x 1 root   root      36K Dec 13 14:15 kmod-oracleasm-2.0.8-13.el6_8.x86_64.rpm
-rwxrwxr-x 1 root   root      13K Dec 13 14:15 oracleasmlib-2.0.4-1.el6.x86_64.rpm
-rwxrwxr-x 1 root   root      74K Dec 13 14:15 oracleasm-support-2.1.8-1.el6.x86_64.rpm
-rwxrwxr-x 1 root   root     1.3G Dec 13 14:33 p13390677_112040_Linux-x86-64_1of7.zip
-rwxrwxr-x 1 root   root     1.1G Dec 13 14:30 p13390677_112040_Linux-x86-64_2of7.zip
-rwxrwxr-x 1 root   root     1.2G Dec 13 14:40 p13390677_112040_Linux-x86-64_3of7.zip
-rwxrwxr-x 1 root   root     206K Dec 13 15:59 pdksh-5.2.14-37.el5_8.1.x86_64.rpm

7.2. 创建 libcap.so 软连接

在 rac1 节点和 rac2 节点创建 libcap.so 软连接

[root@rac1 ~]# ln -s /lib64/libcap.so.2.16 /lib64/libcap.so.1
[root@rac2 ~]# ln -s /lib64/libcap.so.2.16 /lib64/libcap.so.1

7.3. 安装 cvuqdisk 包

在 rac1 节点和 rac2 节点安装 cvuqdisk rpm 包

[root@rac1 ~]# rpm -ivh /u01/orasoft/grid/rpm/cvuqdisk-1.0.9-1.rpm
[root@rac1 ~]# scp /u01/orasoft/grid/rpm/cvuqdisk-1.0.9-1.rpm rac2:/u01/orasoft/   //将 rpm 包拷贝到 rac2 节点。
[root@rac2 ~]# rpm -ivh /u01/orasoft/cvuqdisk-1.0.9-1.rpm   //在 rac2 节点进行 rpm 包安装。

7.4. 启用 Xstart 工具调用远程图形界面

Step1:检查系统是否安装了必要的依赖包(没有的话可以使用本地 yum 源进行安装)。

[root@rac1 ~]# rpm -qa |grep -iE "xterm|libxaw"
libXaw-1.0.11-2.el6.x86_64
xterm-253-1.el6.x86_64

Step2:启用 Xstart 工具。

  • 注意用户名要写成 grid 用户,不要写成 root 用户;
  • 命令填写成 /usr/bin/xterm -ls -display $DISPLAY

在这里插入图片描述
在这里插入图片描述

7.5. 安装 Grid 截图

步骤1:跳过软件更新,直接下一步。
在这里插入图片描述

步骤2:选择第一项安装并配置 Grid,然后下一步。
在这里插入图片描述

步骤3:选择高级安装选项,然后下一步。
在这里插入图片描述

步骤4:产品语言默认 English 即可,直接下一步。
在这里插入图片描述

步骤5:设置 SCAN Name(与 /etc/hosts 文件里面设定的保持一致即可),然后下一步。
在这里插入图片描述

步骤6:配置集群信息,添加 rac2 节点并测试 grid 用户间 SSH 互信。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

步骤7:指定 Public 和 Private 所使用的网络接口。
在这里插入图片描述
在这里插入图片描述

步骤8:指定存储方式为 ASM。
在这里插入图片描述

步骤9:指定两块 50GB 的磁盘创建 OCRVOTE 磁盘组(即将集群注册文件和表决文件放在一起,磁盘组使用外部冗余),如下图所示:
在这里插入图片描述

步骤10:设置 ASM 相关账户的密码,为这些用户使用同一密码,如下图所示:
在这里插入图片描述
在这里插入图片描述

步骤11:不使用 IPMI 直接下一步。
在这里插入图片描述

步骤12:指定用户组。
在这里插入图片描述

步骤13:指定“Oracle_Base”和“Software Location”路径。
在这里插入图片描述

步骤14:指定“Inventory Directory”路径。
在这里插入图片描述

步骤15:先决条件检查(Multicast check 是因为我前面取消安装又重新跑了一遍,可能有点问题;正常只有一个 NTP 的错误,是因为没有使用时钟同步导致的),可以忽略 NTP 错误进行下一步,如下图所示:
在这里插入图片描述
在这里插入图片描述

步骤16:点击“Install”开始安装。
在这里插入图片描述

步骤17:安装进度到 76% 时会提示以 root 用户执行两个脚本,如下图所示:
在这里插入图片描述

[root@rac1 ~]# sh /u01/oracle/oraInventory/orainstRoot.sh   //这个脚本执行时间很快,一般都会执行成功。
[root@rac2 ~]# sh /u01/oracle/oraInventory/orainstRoot.sh   //这个脚本执行时间很快,一般都会执行成功。
[root@rac1 ~]# sh /u01/oracle/crs_home/root.sh   //这个脚本执行时间较长,且必须执行成功。
[root@rac2 ~]# sh /u01/oracle/crs_home/root.sh   //这个脚本执行时间较长,且必须执行成功。

在这里插入图片描述

步骤18:安装到快结束时会弹出一个 “[INS-20802]”报错(这个是因为我们在 /etc/hosts 文件中配置了 scan 的解析,没有通过配置好的 DNS Server 去解析;当我们能 ping 通 scan 的 ip 时,这个报错可以直接忽略掉 )。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

步骤19:所有进程都成功以后直接下一步,此时会提示软件安装成功,但是有些配置项失败(其实就是前面 Ignore 掉的项目);直接忽略掉这些告警,一直到到最后 close,即完成了 Grid 软件的安装。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


8. 安装 Oracle 软件

8.1. 配置剩余的 ASM 磁盘

步骤1:打开 ASM 磁盘配置助手。
在这里插入图片描述

步骤2:选择“Disk Groups”点击左下角“Create”开始创建磁盘组。
在这里插入图片描述

步骤3:按照下图所示创建两个新的磁盘组,分别为“DATA”和“ARCH”:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

步骤4:在退出之前点击“ASM Instances”看一眼。
在这里插入图片描述

步骤5:登录到系统检查磁盘组信息和状态。

# su - grid
$ asmcmd lsdg

在这里插入图片描述

8.2. 安装 Oracle 截图

步骤1:打开 Xstart 工具。
在这里插入图片描述
在这里插入图片描述

步骤2:配置安全更新,取消复选框的默认勾选,直接下一步。
在这里插入图片描述
在这里插入图片描述

步骤3:跳过软件更新,直接下一步。
在这里插入图片描述

步骤4:仅安装数据库。
在这里插入图片描述

步骤5:选中两个节点,并测试 oracle 用户间 SSH 互信。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

步骤6:产品语言默认“English”即可,直接下一步。
在这里插入图片描述

步骤7:指定安装企业版本。
在这里插入图片描述

步骤8:指定“Oracle Base”和“Software Locations”路径。
在这里插入图片描述

步骤9:指定用户组。
在这里插入图片描述

步骤10:先决条件检查,对于以下两项可以选择“Ignore All”。
在这里插入图片描述
在这里插入图片描述

步骤11:点击“Install”执行 Oracle 软件安装。
在这里插入图片描述
步骤12:在安装进度到达 94% 时会提示以 root 用户的身份去执行脚本,最后点击 Close 完成安装。
在这里插入图片描述

[root@rac1 ~]# sh /u01/oracle/app/product/11.2.0/db_1/root.sh
[root@rac2 ~]# sh /u01/oracle/app/product/11.2.0/db_1/root.sh

在这里插入图片描述


9. 创建数据库

步骤1:执行“dbca”打开数据库配置助手,选择 RAC 数据库。
在这里插入图片描述
在这里插入图片描述

步骤2:默认“Create Database”,直接下一步即可。
在这里插入图片描述

步骤3:选择“General Purpose or Transaction Processing”,直接下一步。
在这里插入图片描述

步骤4:填写全局数据库名称,并选择所有节点,然后下一步。
在这里插入图片描述

步骤5:取消 EM 复选框默认的勾选。
在这里插入图片描述

步骤6:取消复选框的默认勾选,然后下一步。
在这里插入图片描述

步骤7:为所有用户配置相同的密码。
在这里插入图片描述

步骤8:使用 ASM 存储,指定数据库文件的存放位置。
在这里插入图片描述

步骤9:配置归档与闪回(我需要做备份所以开启了,如果没有这个需求可以不进行配置)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

步骤10:直接下一步。
在这里插入图片描述

步骤11:字符集设置为“中文简体”,和环境变量配置文件中的保持一致。
在这里插入图片描述

步骤12:直接下一步。
在这里插入图片描述

步骤13:点击“Finish”在弹出的“Summary”界面直接点击“OK”开始创建数据库。
在这里插入图片描述

步骤14:数据库创建完成,点击“Exit”退出即可。
在这里插入图片描述


总结

本文记录的是使用 asmlib 的方式去创建 ASM 磁盘组,我们也可以使用 UDEV 规则去配置 ASM 磁盘,后面有时间我会再写一篇基于 UDEV 规则去配置 ASM 磁盘的博客。

以上所涉及到的 Oracle 软件安装包和 rpm 包,大家可以通过我上传的资源 Oracle 11g RAC 获取到。


Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐