Bootstrap

oracle 19c-rac集群搭建

一.前期准备

1.rac规划

服务器主机名rac1rac2
公共ip地址10.76.53.2310.76.53.24
虚拟ip地址10.76.53.2510.76.53.26
私有ip地址192.168.1.1192.168.1.2
oracle RAC SIDcndba11cndba12
集群实例名称(服务名)cndba
SCAN IP10.76.53.27
操作系统red hat 7.3
oracle版本19.3.0

公共IP地址:服务器物理网卡IP,即对外提供服务的IP

私有IP地址:服务器内网、私网IP,主要用于数据库间同步

虚拟IP地址:与公有IP地址处于同一个网段

Scan IP:集群对外服务提供的地址

二.创建节点

1.创建rac1

硬件要求:4核cpu,内存8gb,硬盘50gb,并且新增一个网络适配器。

创建完成后,进入编辑设置。新增配置:disk.EnableUUID=TRUE(虚拟机显示磁盘uuid),添加完成后点击确认。

选择镜像,安装操作系统。软件选择带有GUI的服务器;安装并且配置网络(两块网卡都需要配置)。

开始安装,等待完成。

2.创建rac2

除了网络配置外,rac2的安装配置步骤和rac1的一致。网络需要配置rac2的公共网络和专用网络。

三.节点配置(rac1和rac2都需要配置)

1.修改主机名和hosts文件

在hosts文件下新增配置:

修改内部网络配置文件,修改完成后重启网卡。

rac2上进行相同的配置。

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.创建目录

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/

4.关闭防火墙

systemctl stop firewalld.service
systemctl disable firewalld.service
sed -i  "s/SELINUX=enforcing/SELINUX=disabled/"  /etc/selinux/config    #关闭selinux

5.关闭时钟同步

systemctl stop chronyd
systemctl disable chronyd

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

6.关闭avahi-daemon

systemctl stop avahi-daemon
systemctl disable avahi-daemon

7.设置环境变量

vim /home/oracle/.bash_profile 

#如果节点为rac1  ORACLE_SID=cndba11;如果节点为rac2 ORACLE_SID=cndba12

ORACLE_SID=cndba11;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.修改资源限制

[root@rac1 ~]# 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

[root@rac1 ~]# cat >> /etc/pam.d/login <<EOF
session required pam_limits.so
EOF

echo "NOZEROCONF=yes"  >>/etc/sysconfig/network

10.修改内核参数

[root@rac1 ~]# 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

[root@rac1 ~]# sysctl -p

11.配置yum源,下载对应的包

配置阿里云仓库

vi  /etc/yum.repos.d/aliyun.repo

新增下面配置:

[aliyun]
name=aliyun
baseurl=centos-7-os-x86_64安装包下载_开源镜像站-阿里云
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/7/os/x86_64/RPM-GPG-KEY-CentOS-7

下载对应的包

yum install -y bc yum install -y compat-libcap1* yum install -y compat-libcap* yum install -y binutils yum install -y compat-libstdc++-33 yum install -y elfutils-libelf yum install -y elfutils-libelf-devel yum install -y gcc yum install -y gcc-c++ yum install -y glibc-2.5 yum install -y glibc-common yum install -y glibc-devel yum install -y glibc-headers yum install -y ksh libaio yum install -y libaio-devel yum install -y libgcc yum install -y libstdc++ yum install -y libstdc++-devel yum install -y make yum install -y sysstat yum install -y unixODBC yum install -y unixODBC-devel yum install -y binutils* yum install -y compat-libstdc* yum install -y elfutils-libelf* yum install -y gcc* yum install -y glibc* yum install -y ksh* yum install -y libaio* yum install -y libgcc* yum install -y libstdc* yum install -y make* yum install -y sysstat* yum install -y libXp* yum install -y glibc-kernheaders yum install -y net-tools-*

12.安装rpm包

将compat-libstdc++-33-3.2.3-72.el7.x86_64和oracle-database-preinstall-19c-1.0-1.el7.x86_64上传到/opt下进行安装

rpm -ivh compat-libstdc++-33-3.2.3-72.el7.x86_64

rpm -ivh oracle-database-preinstall-19c-1.0-1.el7.x86_64

13.配置互信(rac1,rac2都配置)

root账户:

ssh-keygen   (一直回车就可以)

ssh-copy-id rac1

ssh-copy-id rac2

grid账户:

ssh-keygen   (一直回车就可以)

ssh-copy-id rac1

ssh-copy-id rac2

oracle账户:

ssh-keygen   (一直回车就可以)

ssh-copy-id rac1

ssh-copy-id rac2

四.配置共享磁盘

1.rac1和rac2新增共享磁盘

关闭rac1和rac2的虚拟机电源,进入rac1的编辑设置页面,新增scsi控制器。修改该控制器总线共享为虚拟

rac1新增50g硬盘,修改磁盘置备为厚置备快速置零,磁盘模式为独立持久,虚拟设备节点为刚才新增的scsi控制器

依次新增5个硬盘,配置和之前的一致,一共新增了6个硬盘

点击确定,因为选择了厚置备快速置零,所以虚拟机配置完成等待时间较长,稍安勿躁。

rac1配置完成后,进入rac2编辑设置页面,和rac1一样,新增scsi控制器。修改该控制器总线共享为虚拟。

rac2新增现有磁盘,依次选择rac1新增的6个磁盘。

新增完成后,将6个硬盘的磁盘模式改为独立持久,设备节点改为新scsi控制器。点击确认,配置完成

2.生成asm命名的磁盘(rac1,rac2都要配置)

lsblk查看节点rac1,rac2的磁盘情况

在rac1的/root下新增asm.sh脚本

vi  /root/asm.sh

新增如下脚本,并且赋予权限

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 执行脚本,注意result==的磁盘uuid,等rac2执行完,可以进行对比,是否为同一个uuid

新增99-oracle-asmdevices.rules规则,将上述脚本执行的结果复制到该规则里

vi /etc/udev/rules.d/99-oracle-asmdevices.rules

执行命令使其udevadm配置生效:

undevadm control --reload

undevadm trigger

ll /dev/asm*  查看磁盘组情况

rac2进行同样的配置

五:安装压缩包(在rac1上操作)

1.安装grid_home

上传压缩包到/opt,修改权限

切换到grid用户,将压缩包解压到指定位置

切换到root用户,安装cvuqdisk(两个节点都安装)

rac1操作:
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/
 
rac2操作:
cd /opt/
rpm -ivh cvuqdisk-1.0.10-1.rpm

切换到grid用户,进入/u01/app/19.3.0/grid/目录

./gridSetup.sh   调出图形化安装页面(在rac1桌面版终端上执行,xshell无法调出安装页面)

注:若报错无法弹出图形化安装页面,执行下列步骤:

执行命令# yum install tigervnc-server 安装vncserver

执行命令# vncserver

执行命令# export DISPLAY=localhost:1

执行命令# xhost+,显示access control disabled, clients can connect from any host表示成功

再次执行./gridSetup.sh,弹出图形化安装页面

scan name必须和/etc/hosts里面的scan的名字一样

添加rac2

网段选择,virbr0选择不适用此项

选择asm磁盘组

关于dns的问题可以忽略,如果是其他失败的则需要关注了,后续可能会出现问题

点击安装

当出现弹窗是,开始使用root账户执行脚本,先在rac1上执行,完成后在rac2上执行。不要同时执行。都执行完成后点击ok,继续安装。

grid_home安装完成

2.安装oracle

root用户修改权限

切换到oracle用户去解压到指定路径

解压完成后,进入该路径下,执行脚本调出database安装界面(桌面版终端上操作)

开始安装

点击安装

出现弹窗,在两个节点上使用root用户执行脚本,按照顺序执行。

完成后,点击ok,继续安装。直到安装完成。

3.创建数据库实例(rac1上操作)

切换到oracle用户,执行dbca调出安装页面(在桌面版终端上执行)

注意数据库名称可以写别的,但sid必须和oracle用户变量里设置的oracle_sid一致

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

开始安装

六.查看集群状态和连接数据库

1.查看集群状态

查询集群运行状态:/u01/app/19.3.0/grid/bin/crsctl stat res -t

检查数据库的运行状态:/u01/app/oracle/product/19.3.0/db_1/bin/srvctl status database -d cndba

2.连接数据库

以管理员的身份登录数据库:/u01/app/oracle/product/19.3.0/db_1/bin/sqlplus / as sysdba

创建用户(创建者需要有dba权限,用户名必须以c##开头,默认的表空间是users,新用户没有任何权限。)

create user c##sl IDENTIFIED BY 123456; (c##sl是用户名,123456是密码)

新建用户成功后,grant create session to c##sl;  再给他赋予权限。

使用navicat连接数据库,主机名是scan ip,服务名是cndba

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;