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/127358806
GUI图形化界面安装的话,就不用
网络配置
!!!注意哈:内部通信的网卡不需要输入网关 DNS
硬盘配置
两个节点都是一样的,只选择第一块盘配置!
之后就是苦逼的等待安装好了
2.先决条件–主机配置–两台主机都操作
1.设置主机名和映射–双网卡
节点一
hostnamectl set-hostname rac1
vim /etc/hosts
节点二
hostnamectl set-hostname rac2
scp -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 grid
echo "oracle" | passwd --stdin oracle
echo "grid" | passwd --stdin grid
3.关闭防火墙和selinux
防火墙:
systemctl stop firewalld.service
systemctl disable firewalld.service
关闭SELINUX:
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
cat /etc/selinux/config
4.关闭时钟同步
systemctl stop chronyd
systemctl disable chronyd
移除chrony配置文件:(必须移除,否则校验NTP失败)
mv /etc/chrony.conf /etc/chrony.conf.bak
5.关闭avahi-daemon
systemctl stop avahi-daemon
systemctl disable avahi-daemon
6.创建目录
mkdir -p /u01/app/19.3.0/grid
mkdir -p /u01/app/grid
mkdir -p /u01/app/oracle/product/19.3.0/db_1
chown -R grid:oinstall /u01
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/
7.设置环境变量
vim /home/oracle/.bash_profile
ORACLE_SID=cndba1;export ORACLE_SID
ORACLE_UNQNAME=cndba;export ORACLE_UNQNAME
JAVA_HOME=/usr/local/java; export JAVA_HOME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/19.3.0/db_1; export ORACLE_HOME
ORACLE_TERM=xterm; export ORACLE_TERM
NLS_DATE_FORMAT="YYYY:MM:DDHH24:MI:SS"; export NLS_DATE_FORMAT
NLS_LANG=american_america.ZHS16GBK; export NLS_LANG
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN
ORA_NLS11=$ORACLE_HOME/nls/data; export ORA_NLS11
PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin:$ORA_CRS_HOME/bin
PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export CLASSPATH
THREADS_FLAG=native; export THREADS_FLAG
export TEMP=/tmp
export TMPDIR=/tmp
umask 022
vim /home/grid/.bash_profile
PATH=$PATH:$HOME/bin
export ORACLE_SID=+ASM1
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/19.3.0/grid
export PATH=$ORACLE_HOME/bin:$PATH:/usr/local/bin/:.
export TEMP=/tmp
export TMP=/tmp
export TMPDIR=/tmp
umask 022
export PATH
8.修改资源限制
cat >> /etc/security/limits.conf <<EOF
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
EOF
9.设置 PAM和NOZEROCONF
cat >> /etc/pam.d/login <<EOF
session required pam_limits.so
EOF
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 = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
EOF
sysctl -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.rpm
yum localinstall -y oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
yum update -y #大概1000多个包(我新安装的系统😁),等吧(安装过程中会卡一小会儿,正常现象)
yum clean all
yum install binutils compat-libstdc++-33 compat-libstdc++-33.i686 -y gcc gcc-c++ glibc glibc.i686 glibc-devel ksh libgcc.i686 libstdc++-devel libaio libaio.i686 libaio-devel libaio-devel.i686 libXext libXext.i686 libXtst libXtst.i686 libX11 libX11.i686 libXau libXau.i686 libxcb libxcb.i686 libXi libXi.i686 make sysstat unixODBC unixODBC-devel zlib-devel zlib-devel.i686 compat-libcap1 -y
12.配置互信(两个节点都要配置)
ssh-copy-id rac1
ssh-copy-id rac2
切换用户grid
ssh-copy-id rac1
ssh-copy-id rac2
Oracle用户
ssh-copy-id rac1
ssh-copy-id rac2
3.配置共享盘
切换回root用户
lsblk #看一下磁盘情况
生成asm命名的磁盘
使用udev配置Asm磁盘
vi asm.sh //编辑脚本
#!/bin/bash
for i in b c d e f g ;
do
echo "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'\""
done
chmod +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/105772692
https://www.cndba.cn/dave/article/4073
https://oracle-base.com/articles/19c/oracle-db-19c-rac-installation-on-oracle-linux-7-using-virtualbox