VMware Workstation 15 在 RHEL7 上搭建 19c RAC

1,环境规划

Hostname OS DB Role CPU RAM
ryan3 RHEL 7.7 19.3.0.0 node 1 1*2 4G
ryan4 RHEL 7.7 19.3.0.0 node 2 1*2 4G

2,IP规划

IPADDR NAME
192.168.157.201 ryan3
192.168.157.202 ryan4
192.168.157.203 ryan3-vip
192.168.157.204 ryan4-vip
10.1.1.203 ryan3-prv
10.1.1.204 ryan4-prv
192.168.157.210 ryan-std-scan

在两个虚拟机添加一个桥接网卡作为私有IP使用

登录服务器,进行配置

cat /etc/hosts|grep prv
ip link
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens39
vi ifcfg-ens39
##
NAME=ens39
DEVICE=ens39
ONBOOT=yes
IPADDR=10.1.1.204
##

service network restart

3,存储规划

从19C开始,GIMR不再是必须配置的要求

如果选择GIMR,则磁盘组至少要有35GB的空余空间:

我们这里选择不配置GIMR:

考虑到我们要把FRA放在DATA磁盘组里,所以这里先设置成2个7G的磁盘:

磁盘组名 SIZE
CRS 1G*3
DATA 7G*2

 

4,创建共享磁盘

进入到要共享磁盘存放的路径:

#打开CMD:
E: cd E:\VMware\share
-disks

运行以下命令创建3个1GB和2个7GB的磁盘:

vmware-vdiskmanager -c -s 1GB -a lsilogic -t 4 shared-asm01.vmdk
vmware-vdiskmanager -c -s 1GB -a lsilogic -t 4 shared-asm02.vmdk
vmware-vdiskmanager -c -s 1GB -a lsilogic -t 4 shared-asm03.vmdk
vmware-vdiskmanager -c -s 7GB -a lsilogic -t 4 shared-asm04.vmdk
vmware-vdiskmanager -c -s 7GB -a lsilogic -t 4 shared-asm05.vmdk

#如果说命令不存在,把vmware所在的安装路径加到环境变量中

添加到虚拟机中:

SCSI number选择一段连续的,没有被其他设备使用的,我们这里选择从1:10开始

重复以上操作,将所有的共享磁盘添加到两台虚拟机中

修改虚拟机的vmx配置文件

在每台虚拟机的配置文件里添加:

disk.locking = "FALSE"
scsi1.sharedbus = "VIRTUAL"

5,主机配置

5.1,设置主机名

#node1
hostnamectl set-hostname ryan3
#node2 hostnamectl set
-hostname ryan4

5.2, 关闭防火墙

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

#关闭selinux
vi /etc/selinux/config
##
SELINUX
=disabled
##

#执行命令 setenforce
0

5.3,修改/etc/hosts文件

vi /etc/hosts
192.168.157.201    ryan3
192.168.157.202    ryan4
192.168.157.203    ryan3-vip
192.168.157.204    ryan4-vip
10.1.1.203       ryan3-prv
10.1.1.204       ryan4-prv
192.168.157.210    ryan-std-scan

5.4,关闭时间同步ntpd服务

#检查两节点时间,时区是否相同,并禁止chronyd

 systemctl stop chronyd
 systemctl disable chronyd

 mv /etc/chrony.conf /etc/chrony.conf.bak

如果有需要的话,可以设置下时区:

timedatectl list-timezones |grep Shanghai #查找中国时区的完整名称
#Asia/Shanghai
timedatectl set-timezone Asia/Shanghai 

5.5,创建相关用户组

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 54322 -g oinstall -G asmadmin,asmdba,asmoper,racdba grid
useradd -u 54321 -g oinstall -G dba,backupdba,dgdba,kmdba,asmdba,racdba,asmoper,oper oracle

设置密码

passwd oracle
passwd grid

5.6,创建相应目录


mkdir -p /u01/app/19.0.0/grid
mkdir -p /u01/app/grid
mkdir -p /u01/app/oracle
mkdir -p /u01/app/oracle/product/19.0.0/db_1
chown -R grid:oinstall /u01
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/

5.7,安装相关依赖包

简单配置本地yum源(这里用的是虚拟机,所以CDROM已经连接了安装的镜像)

mount /dev/sr0 /mnt
cp /etc/yum.repos.d/redhat.repo /etc/yum.repos.d/local.repo
vi /etc/yum.repos.d/local.repo
##
[local]
name=local
baseurl=file:///mnt
enabled=1
gpgcheck=0
##
yum clean all
yum list

安装相关依赖包

yum install -y bc binutils compat-libcap1 compat-libstdc++ elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc glibc-devel ksh libaio libaio-devel libX11 libXau libXi libXtst libXrender libXrender-devel libgcc libstdc++ libstdc++-devel libxcb make net-tools nfs-utils python python-configshell python-rtslib python-six targetcli smartmontools sysstat

#后面会用到oracleasm,所以这里顺便安装

yum install -y kmod-oracleasm

#本地yum源不包含以下安装包,需要自行下载, 如果是win10虚拟机无法连接网络,可以参考另一篇文章:https://www.cnblogs.com/ryanw/articles/12539569.html
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm #实在太慢的话,直接把链接贴到浏览器地址栏开始下载
rpm -ivh compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm

5.8,修改Kernel参数值

vi /etc/sysctl.d/97-oracledatabase-sysctl.conf
## fs.aio
-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 4294967295 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 = 1048576
##

5.9,停止avahi-daemon服务

Avahi is a system which enables programs to publish and discover services and hosts running on a local network.

Avahi用于在本地网络发布和发现运行的服务和主机,也是一种零配置网络服务,对于我们平常的网络设置没有多大作用。

但是可能会影响Oracle RAC的多播心跳,也建议disable掉

systemctl disable avahi-daemon.socket
systemctl disable avahi-daemon.service
ps -ef|grep avahi-daemon
kill -9 $pid avahi-daemon

5.10,添加NOZEROCONF=yes参数

当使用Oracle集群的时候,Zero Configuration Network一样可能会导致节点间的通信问题,所以也应该停掉

Without zeroconf, a network administrator must set up network services, such as Dynamic Host Configuration Protocol (DHCP) and Domain Name System (DNS), or configure each computer's network settings manually.

在使用平常的网络设置方式的情况下是可以停掉Zero Conf的

vi /etc/sysconfig/network
NOZEROCONF=yes

5.11,关闭Transparent HugePages

transparent_hugepage=never加到GRUB_CMDLINE_LINUX的末尾

vi /etc/default/grub
#
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet numa=off transparent_hugepage=never"
#

#Then
grub2-mkconfig -o /boot/grub2/grub.cfg

#OR
#不重启
echo never > /sys/kernel/mm/transparent_hugepage/enabled

5.12,修改limits文件

vi /etc/security/limits.d/20-nproc.conf
* - nproc 16384

vi /etc/security/limits.conf
grid  soft  nproc 16384
grid  hard  nproc 16384
grid  soft  nofile 1024
grid  hard  nofile 65536
grid  soft  stack 10240
grid  hard  stack 32768
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack  10240
oracle hard stack  32768
oracle hard memlock 3145728
oracle soft memlock 3145728

5.13,修改Pam login

Pluggable Authentication Modules (PAM) is a system of libraries that handle user authentication tasks for applications.
On Linux, external scheduler jobs require PAM. Oracle strongly recommends that you install the latest Linux-PAM library for your Linux distribution.

Linux下外部schedule job需要用到PAM,oracle强烈建议你安装最新的Linux-PAM库,在5.12的相关依赖包中就有PAM,通过以下启用它。

vi /etc/pam.d/login
#ORACLE SETTING
session    required     pam_limits.so

5.14,修改grid用户的profile

在每个节点执行,节点1的ORACLE_SID=+ASM1,节点2的ORACLE_SID=+ASM2

vi ~/.bash_profile
##
PS1="[`whoami`@`hostname`:"'$PWD]$'
export PS1
umask 022

export TMP=/tmp
export LANG=en_US
export TMPDIR=$TMP
ORACLE_SID=+ASM1; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
ORACLE_BASE=/u01/app/grid; export ORACLE_BASE
ORACLE_HOME=/u01/app/19.0.0/grid; export ORACLE_HOME
NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"; export NLS_DATE_FORMAT
PATH=.:$PATH:$HOME/bin:$ORACLE_HOME/bin; export PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
THREADS_FLAG=native; export THREADS_FLAG
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.15,修改oracle的profile

在每个节点修改,节点1的ORACLE_SID=ryan3,节点2的ORACLE_SID=ryan4

vi ~/.bash_profile

##
PS1="[`whoami`@`hostname`:"'$PWD]$'

export PS1
export TMP=/tmp
export LANG=en_US
export TMPDIR=$TMP
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/19.0.0/db_1; export ORACLE_HOME
ORACLE_SID=ryan3; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"; export NLS_DATE_FORMAT
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK;export NLS_LANG
PATH=.:$PATH:$HOME/bin:$ORACLE_BASE/product/19.0.0/db_1/bin:$ORACLE_HOME/bin; export PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
THREADS_FLAG=native; export THREADS_FLAG
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.16,修改root的profile

vi ~/.bash_profile

##
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs
export ORACLE_HOME=
/u01/app/19.0.0/grid
PATH=$PATH:/u01/app/19.0.0/grid/bin:$HOME/bin export PATH ##

5.17,使用oracleasm配置共享存储

在这个页面下载RHEL7的oracleasmlib以及oracleasm-support,所有节点都要安装跟配置

https://www.oracle.com/linux/downloads/linux-asmlib-rhel7-downloads.html

yum install kmod-oracleasm
yum localinstall oracleasmlib-2.0.12-1.el7.x86_64.rpm
yum localinstall oracleasm-support-2.1.11-2.el7.x86_64.rpm

#初始化
oracleasm init

#修改配置
oracleasm configure -e -u grid -g asmadmin

确定我们之前创建的共享磁盘,并且进行分区,在一个节点执行:

#查看有哪些磁盘:
lsscsi
fdisk -l

#进行分区 fdisk
/dev/sdb
fdisk /dev/sdc
fdisk /dev/sdd
fdisk /dev/sde
fdisk /dev/sdf

#n表示创建分区,接下来全部回车,默认创建主分区

使用oracleasm创建磁盘,在一个节点执行,根据实际你的盘符名:

oracleasm createdisk asmdisk1 /dev/sdb1
oracleasm createdisk asmdisk2 /dev/sdc1
oracleasm createdisk asmdisk3 /dev/sdd1
oracleasm createdisk asmdisk4 /dev/sde1
oracleasm createdisk asmdisk5 /dev/sdf1

#在所有节点执行 oracleasm scandisks oracleasm listdisks

6,安装GRID

6.1,将下载好的安装包上传到$GRID_HOME,并使用GRID解压,在一个节点执行

6.2,执行安装文件

[grid@ryan3:/u01/app/19.0.0/grid]$./gridSetup.sh

需要注意,如果你是远程登陆,必须直接以grid用户登录,才可以远程调用图形化窗口,不可以使用root切换到grid

SCAN NAME使用/etc/hosts文件中的SCAN NAME

添加2节点

配置SSH

直接选择install, 一直运行到出现以下窗口:

用root执行,每个脚本先执行当前节点,再执行其他节点

全部完成后,点击OK

最后会显示verification失败,这个没有什么问题,直接下一步:

完成后验证一下:

crsctl status res -t
crsctl check crs

7,创建用于DB的磁盘组

使用GRID用户,运行asmca:

8,安装ORACLE

8.1,安装软件

解压压缩包到oracle用户的$ORACLE_HOME目录

然后运行runInstaller

注意提示,对于RAC,先安装软件,再运行DBCA创建数据库:

剩余的warning忽略掉:

8.2,安装数据库

使用ORACLE用户,运行dbca:

这里开启FRA跟归档,使用+DATA01作为路径:

9,验证:

crsctl status res -t
ps -ef|grep pmon

 

可能遇见的问题:

1,The Oracle Home "/u01/app/19.0.0/grid" is not found in Oracle Inventory as an Oracle Grid Infrastructure Home.

需要将GRID HOME加入到inventory中:

cat /u01/app/oraInventory/ContentsXML/inventory.xml

<HOME NAME="OraGI19Home1" LOC="/u01/app/19.0.0/grid" TYPE="O" IDX="1" CRS="true"/>
<HOME NAME="OraDB19Home1" LOC="/u01/app/oracle/product/19.0.0/db_1" TYPE="O" IDX="2"/>

 

posted @ 2020-03-25 17:34  Ryan_Wo  阅读(1536)  评论(0编辑  收藏  举报