Oracle RAC 19c集群搭建指南:实现高可用、高性能的数据库集群(超详细)

1.新建节点

因为rac集群使用的是共享盘(esxi设置共享盘步骤如下):

首先添加一个iSCSI控制器

SCSI总线共享选择虚拟

添加硬盘

!!!注意:组成data盘的三块硬盘空间必须一致,metadata盘也需要三块空间一致的盘

新添加的盘(所有刚添加的!)要设置磁盘置备为‘厚置备,置零’,并且控制器选择新添加的iSCSI控制器,磁盘模式为独立持久

iso自行选择或者重新安装centos系统
总配置如下:

cpu选择的4c,也可以调大一些

安装系统的话自行安装!
创建第二个节点,也可以多个节点,我这里因为资源不够问题,创建两个

!!!注意:节点二上也需要添加一个新的iSCSI控制器

节点二SCSI总线共享也选择‘虚拟’

节点二添加硬盘的话选择现有硬盘

找到rac1节点的盘,可以看到在rac1添加的6块共享盘,选择这6块盘

添加好之后,记得修改iSCSI控制器以及磁盘模式(磁盘模式选不选的吧,没啥关系)

下面五块盘一样的操作
!!!注意:我这里忘了添加第二块网卡(两个节点都要添加),一定要有两块网卡!!!
为什么Oraclerac19c要用两块网卡?Oracle RAC 19c通常需要使用两个网卡,一个用于公共网络(Public Network),另一个用于专用网络(Private Network)。这是因为Oracle RAC是一种集群技术,它需要多台服务器之间进行高速数据传输和协作,以提供高可用性和高性能的数据库服务具体来说,使用两个网卡的原因如下:1.公共网络:公共网络用于连接客户端和应用程序到数据库服务。在Oracle RAC中,公共网络通常使用标准的TCP/IP协议,通过标准的以太网交换机进行通信。公共网络可以使用单独的物理网卡或者虚拟网络接口(VNIC)实现。2.专用网络:专用网络用于连接Oracle RAC集群中的各个节点之间。在Oracle RAC中,专用网络通常使用InfiniBand或者其他高速互连技术,以实现低延迟、高带宽的数据传输。专用网络可以使用单独的物理网卡或者虚拟网络接口(VNIC)实现。使用两个网卡可以有效地隔离客户端访问和节点间通信的流量,从而提高系统的安全性和稳定性。此外,专用网络的高速传输也可以显著提高Oracle RAC集群的性能和可扩展性。
如果软件安装选择的最小安装,安装好系统之后要记得安装一下图形化界面参考文档:https://blog.csdn.net/weixin_43224306/article/details/127358806GUI图形化界面安装的话,就不用

网络配置!!!注意哈:内部通信的网卡不需要输入网关 DNS

硬盘配置两个节点都是一样的,只选择第一块盘配置!

之后就是苦逼的等待安装好了

2.先决条件–主机配置–两台主机都操作

1.设置主机名和映射–双网卡

节点一
hostnamectl set-hostname rac1vim /etc/hosts

节点二
hostnamectl set-hostname rac2scp -p 192.168.110.56:/etc/hosts /etc/
在Oracle数据库中,SCAN(Single Client Access Name)是一种虚拟名称,用于代表整个Oracle RAC集群。它允许客户端应用程序通过单个名称来访问整个集群,而不需要知道实际的节点名称和IP地址。具体来说,当客户端应用程序需要连接到Oracle RAC集群时,它可以使用SCAN名称来代替实际的节点名称或IP地址。在这种情况下,客户端会将请求发送到SCAN IP地址,然后由Oracle Clusterware根据负载均衡算法将请求转发到实际的节点上。这样,客户端就可以无需关心集群中的节点数量和位置,而只需要连接到一个虚拟名称即可。

修改内部通信网卡配置文件

修改完后重启网卡

systemctl restart network

2.新建账号和组

/usr/sbin/groupadd -g 54321 oinstall/usr/sbin/groupadd -g 54322 dba/usr/sbin/groupadd -g 54323 oper/usr/sbin/groupadd -g 54324 backupdba/usr/sbin/groupadd -g 54325 dgdba/usr/sbin/groupadd -g 54326 kmdba/usr/sbin/groupadd -g 54327 asmdba/usr/sbin/groupadd -g 54328 asmoper/usr/sbin/groupadd -g 54329 asmadmin/usr/sbin/groupadd -g 54330 racdba/usr/sbin/useradd -u 54321 -g oinstall -G dba,asmdba,oper oracle/usr/sbin/useradd -u 54322 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,asmdba,asmoper,asmadmin,racdba gridecho "oracle" | passwd --stdin oracleecho "grid" | passwd --stdin grid

3.关闭防火墙和selinux

防火墙:

systemctl stop firewalld.servicesystemctl disable firewalld.service

关闭SELINUX:

sed -i"s/SELINUX=enforcing/SELINUX=disabled/"/etc/selinux/configcat /etc/selinux/config

4.关闭时钟同步

systemctl stop chronydsystemctl disable chronyd移除chrony配置文件:(必须移除,否则校验NTP失败)mv /etc/chrony.conf /etc/chrony.conf.bak

5.关闭avahi-daemon

systemctl stop avahi-daemonsystemctl disable avahi-daemon

6.创建目录

mkdir -p /u01/app/19.3.0/gridmkdir -p /u01/app/gridmkdir -p /u01/app/oracle/product/19.3.0/db_1chown -R grid:oinstall /u01chown -R oracle:oinstall /u01/app/oraclechmod -R 775 /u01/

7.设置环境变量

vim /home/oracle/.bash_profile ORACLE_SID=cndba1;export ORACLE_SIDORACLE_UNQNAME=cndba;export ORACLE_UNQNAMEJAVA_HOME=/usr/local/java; export JAVA_HOMEORACLE_BASE=/u01/app/oracle; export ORACLE_BASEORACLE_HOME=$ORACLE_BASE/product/19.3.0/db_1; export ORACLE_HOMEORACLE_TERM=xterm; export ORACLE_TERMNLS_DATE_FORMAT="YYYY:MM:DDHH24:MI:SS"; export NLS_DATE_FORMATNLS_LANG=american_america.ZHS16GBK; export NLS_LANGTNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMINORA_NLS11=$ORACLE_HOME/nls/data; export ORA_NLS11PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin:$ORA_CRS_HOME/binPATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/binexport PATHLD_LIBRARY_PATH=$ORACLE_HOME/libLD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/libLD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/libexport LD_LIBRARY_PATHCLASSPATH=$ORACLE_HOME/JRECLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlibCLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlibCLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlibexport CLASSPATHTHREADS_FLAG=native; export THREADS_FLAGexport TEMP=/tmpexport TMPDIR=/tmpumask 022
vim /home/grid/.bash_profilePATH=$PATH:$HOME/binexport ORACLE_SID=+ASM1 export ORACLE_BASE=/u01/app/gridexport ORACLE_HOME=/u01/app/19.3.0/gridexport PATH=$ORACLE_HOME/bin:$PATH:/usr/local/bin/:.export TEMP=/tmpexport TMP=/tmpexport TMPDIR=/tmpumask 022export PATH

8.修改资源限制

cat >> /etc/security/limits.conf <<EOFgridsoftnproc2047gridhardnproc16384gridsoftnofile1024gridhardnofile65536gridsoftstack10240gridhardstack32768oraclesoftnproc2047oraclehardnproc16384oraclesoftnofile1024oraclehardnofile65536oraclesoftstack10240oraclehardstack32768oracle soft memlock 3145728oracle hard memlock 3145728EOF

9.设置 PAM和NOZEROCONF

cat >> /etc/pam.d/login <<EOFsession required pam_limits.soEOF
vi /etc/sysconfig/network增加以下内容NOZEROCONF=yes也可以直接执行如下语法完成修改:echo "NOZEROCONF=yes">>/etc/sysconfig/network

10.修改内核参数

/etc/sysctl.d/sysctl.conf or /etc/sysctl.d/98-oracle.conf

cat >> /etc/sysctl.d/sysctl.conf <<EOF fs.file-max = 6815744kernel.sem = 250 32000 100 128kernel.shmmni = 4096kernel.shmall = 1073741824kernel.shmmax = 4398046511104kernel.panic_on_oops = 1net.core.rmem_default = 262144net.core.rmem_max = 4194304net.core.wmem_default = 262144net.core.wmem_max = 1048576net.ipv4.conf.all.rp_filter = 2net.ipv4.conf.default.rp_filter = 2fs.aio-max-nr = 1048576net.ipv4.ip_local_port_range = 9000 65500EOFsysctl -p

11.安装必须要的包

cd /opt/wget http://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpmyum localinstall -y oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpmyum update -y#大概1000多个包(我新安装的系统),等吧(安装过程中会卡一小会儿,正常现象)yum clean allyum install binutilscompat-libstdc++-33 compat-libstdc++-33.i686 -y gccgcc-c++glibcglibc.i686glibc-develkshlibgcc.i686libstdc++-devellibaiolibaio.i686libaio-devellibaio-devel.i686libXextlibXext.i686libXtstlibXtst.i686libX11libX11.i686libXaulibXau.i686libxcblibxcb.i686libXilibXi.i686makesysstatunixODBCunixODBC-develzlib-develzlib-devel.i686 compat-libcap1 -y

12.配置互信(两个节点都要配置)

ssh-copy-id rac1ssh-copy-id rac2

切换用户grid

ssh-copy-id rac1ssh-copy-id rac2

Oracle用户

ssh-copy-id rac1ssh-copy-id rac2

3.配置共享盘

切换回root用户

lsblk#看一下磁盘情况

生成asm命名的磁盘

使用udev配置Asm磁盘

vi asm.sh//编辑脚本#!/bin/bashfor i in b c d e f g ;doecho "KERNEL==\"sd*\",ENV{DEVTYPE}==\"disk\",SUBSYSTEM==\"block\",PROGRAM==\"/usr/lib/udev/scsi_id -g -u -d \$devnode\",RESULT==\"`/usr/lib/udev/scsi_id -g -u /dev/sd$i`\", RUN+=\"/bin/sh -c 'mknod /dev/asmdisk$i b\$major \$minor; chown grid:asmadmin /dev/asmdisk$i; chmod 0660 /dev/asmdisk$i'\""donechmod +x asm.sh./asm.sh//运行脚本KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="36000c29726af9e28f0fff1eb68332efe", RUN+="/bin/sh -c 'mknod /dev/asmdiskb b$major $minor; chown grid:asmadmin /dev/asmdiskb; chmod 0660 /dev/asmdiskb'"KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="36000c29489b1433445c0e319c861b453", RUN+="/bin/sh -c 'mknod /dev/asmdiskc b$major $minor; chown grid:asmadmin /dev/asmdiskc; chmod 0660 /dev/asmdiskc'"KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="36000c29860c1a4c08b7344006cdf81bb", RUN+="/bin/sh -c 'mknod /dev/asmdiskd b$major $minor; chown grid:asmadmin /dev/asmdiskd; chmod 0660 /dev/asmdiskd'"KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="36000c295280791ed04403e7f5fe4222a", RUN+="/bin/sh -c 'mknod /dev/asmdiske b$major $minor; chown grid:asmadmin /dev/asmdiske; chmod 0660 /dev/asmdiske'"KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="36000c29b55e4b3acd130917d38bf2154", RUN+="/bin/sh -c 'mknod /dev/asmdiskf b$major $minor; chown grid:asmadmin /dev/asmdiskf; chmod 0660 /dev/asmdiskf'"KERNEL=="sd*",ENV{DEVTYPE}=="disk",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="36000c29fd176d048954f94dbd82bc1fd", RUN+="/bin/sh -c 'mknod /dev/asmdiskg b$major $minor; chown grid:asmadmin /dev/asmdiskg; chmod 0660 /dev/asmdiskg'"vi /etc/udev/rules.d/99-oracle-asmdevices.rules //把上面的运行脚本之后生成的内容复制到这个规则 udevadm control --reload//udevadm配置重载生效udevadm trigger ll /dev/asm* ##两个节点是一样的哦~

重启

reboot

4.上传介质,开始安装(只需要在节点1操作即可)

1.上传介质

从Oracle 12cR2开始,软件直接解压缩到GRID_HOME 或者ORACLE_HOME,而不是在安装时复制过去。 该操作只需要在节点1上完成解压缩即可。

安装grid

设置grid安装包的属主属组

chown -R grid:oinstall LINUX.X64_193000_grid_home.zip 

切换为grid用户解压压缩包

unzip LINUX.X64_193000_grid_home.zip -d /u01/app/19.3.0/grid
2.安装cvuqdisk 两个节点都安装
节点一操作:##root用户安装cd /u01/app/19.3.0/grid/cv/rpm rpm -ivh cvuqdisk-1.0.10-1.rpm scp -p /u01/app/19.3.0/grid/cv/rpm/cvuqdisk-1.0.10-1.rpm rac2:/opt/ 节点二操作:cd /opt/ rpm -ivh cvuqdisk-1.0.10-1.rpm
3.运行安装脚本gridSetup.sh

打开图形化界面,或者用vnc连接也可以

使用grid用户登录

执行安装脚本./gridSetup.sh

注意:第一次执行一般会出现两个错误,一个是需要我们在grid 用户下执行脚本,第二个是需要我们配置图形显示 环境变量设置。如:export DISPLAY=192.168.110.56:0.0 查看电脑的ip地址 加上:0.0 0.0不行的话就1.0

配置集群名称以及scan名称注意:scan name必须和 /etc/hosts里面scan的名字一样,cluster name 可以默认不改

这里选择添加需要添加节点二要保证心跳ip能互相ping通,而且互信没有问题

网段选择一般的话会有一个virbr0网卡,自行百度删掉即可,或者在Use for中选择不使用选项

选择asm存储

选择配置GIMR

默认

选择asm磁盘组

正常模式需要两块盘,还需要一块冗余盘也就是一共需要三块

选择三块盘

选择剩余的三块

这里选择统一密码,生产环境选择单独的,嫌麻烦也可以选择统一密码

默认

确认grid的安装目录

默认

这里是自动执行脚本,不自动执行就不选

这里是在检查环境,选择ignore all像我这个就没啥,如果有别的问题还是要解决一下的

安装前摘要

点击安装

执行脚本当提示框弹出来的时候,我们先在节点一上使用root用户执行脚本,执行完成执行节点二的脚本。执行过程中,会遇到各种各样的问题,1.ASM磁盘的名字不对 2.和节点二的互信不通解决:重新配置ASM将宿主名字改为grid,即可完成;重新配置心跳IP;按照顺序执行脚本
先在rac1执行orainstROot.sh,执行完了之后在rac2执行,rac2执行完orainstRoot.sh脚本之后,在rac1执行root.sh脚本,然后rac2执行,等待脚本执行完毕之后再点击ok。 ##root用户下执行!!

执行第一个脚本,这是现在rac1上执行,再在rac2上执行的

执行第二个脚本,一定要按顺序来

节点一执行完毕后,在节点二执行

脚本执行完毕后,点击ok,然后等待他安装完成即可(又是一段很漫长的时间)

安装完成之后出了一个报错,能ping通自己设置的scanip就可以忽略掉

安装oracle

切换回Oracle用户

root用户修改db压缩包的属主属组

chown -R oracle:oinstall LINUX.X64_193000_db_home.zip 

oracle用户解压压缩包

 unzip LINUX.X64_193000_db_home.zip -d/u01/app/oracle/product/19.3.0/db_1/

解压完成,进入

cd /u01/app/oracle/product/19.3.0/db_1/

执行安装脚本

./runInstaller 
选择software only

选择RAC

SSH互信验证

默认

我这个可以忽略全部,你们如果有别的的话,建议看一下哈

描述

在root用户下执行脚本,按顺序来/u01/app/oracle/product/19.3.0/db_1/root.sh

执行完毕后点ok,然后就可以看到安装完成了

创建数据库实例

在Oracle用户下执行dbca
选择创建数据库

选择高级安装

选择General Purpose or Transaction Processing

检查节点互信

!!!注意:数据库名称可以写别的,但是SID必须写和你设置的Oracle用户环境变量里边的ORACLE_SID一致!pdb不想创建就不选,默认是选的

选择数据盘

勾选快速回复开启归档日志

默认

选择字符集

默认

使用统一密码

默认

校验时也是之前的dns和scan ip错误,可以忽略,进行下一步安装

等待安装完成即可(慢的很。。。)

可算安装完了。。

好~这个时候,激动的心颤抖的手,打开grid终端,输入crsctl stat res -t好好好,非常的好,可以看到安装成功

参考文档:https://blog.csdn.net/weixin_36065860/article/details/105772692https://www.cndba.cn/dave/article/4073https://oracle-base.com/articles/19c/oracle-db-19c-rac-installation-on-oracle-linux-7-using-virtualbox