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