• oracle rac搭建分两个部分,一是基础软件包grid的安装,二是数据库软件包oracle的安装。oracle数据软件包安装比较通用,grid软件包在rac环境下才安装。grid软件官方文档Grid Infrastructure Installation Guide 19c.pdf。软件从oracle 官方下载,分别下载LINUX.X64_193000_grid_home.zip 和LINUX.X64_193000_db_home.zip,两个软件包。

环境准备

  • 目标是搭建一个具有2节点,3个磁盘组的oracle rac,使用2个虚拟作为rac的节点,9个raw文件作为共享磁盘组。

虚机节点准备

安装OS

  • 我们使用centos作为节点的OS,19c官方文档中版本是Red Hat Enterprise Linux 7.5: 3.10.0-862.11.6.el7.x86_64 or later,我们安装centos7.8,满足要求。
准备磁盘
  • 主机侧使用qemu-img创建好数据库磁盘、系统盘、home目录磁盘、grid软件安装目录磁盘,举例:
qemu-img create -f raw /home/Hyman/oracle_database/asmdisk0.raw 20G
  • 数据库磁盘
    asmdisk0/1/2作为数据库磁盘组DATADG,asmdisk3/4/5作为集群磁盘组OCRDG,asmdisk6/7/8作为日志磁盘组REDODG。
    在这里插入图片描述
  • home目录磁盘、系统盘、grid软件安装盘
    在这里插入图片描述
准备网络
  • 网络需要至少两个,一个可以访问公网,用于安装yum源,一个用于rac集群通信网络。公网网络使用libvirt默认的default net,xml配置如下:
<interface type='network'>
  <mac address='0c:da:41:22:21:54'/>
  <source network='default'/>
  <model type='virtio'/>
</interface>
  • 私有网络使用ovs,首先创建ovs桥:
ovs-vsctl add-br br-int
  • 私有网络xml配置如下:
<interface type='bridge'>
  <mac address='fa:16:3b:2a:2f:f1'/>
  <source bridge='br-int'/>
  <virtualport type='openvswitch'/>
  <model type='virtio'/>
</interface>
准备xml
  • virsh define hy_c7_node3.xml定义hy_c7_node3虚机作为rac节点rac3,hy_c7_node3.xml
  • virsh start hy_c7_node3启动虚机,类似地,使用hy_c7_node4.xml定义hy_c7_node4启动虚机,两个节点使用同一组数据库磁盘。

配置用户

创建用户和组
  • oracle rac软件在安装和使用过程中需要限制起权限,因此需要为其专门创建具有相应权限的用户和组,同时设置这些用户的工作目录等。
  • 创建用户和组:
groupadd -g 11001 oinstall 
groupadd -g 11002 dba 
groupadd -g 11003 oper 
groupadd -g 11004 backupdba 
groupadd -g 11005 dgdba 
groupadd -g 11006 kmdba 
groupadd -g 11007 asmdba 
groupadd -g 11008 asmoper 
groupadd -g 11009 asmadmin 
groupadd -g 11010 racdba 
useradd -u 11011 -g oinstall -G dba,asmdba,backupdba,dgdba,kmdba,racdba,oper oracle 
useradd -u 11012 -g oinstall -G asmadmin,asmdba,asmoper,dba grid
  • 创建工作目录:
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/app/grid
chown -R grid:oinstall /u01/app/19.0.0/grid
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/
mkdir -p /u01/app/oraInventory
chown -R grid:oinstall /u01/app/oraInventory
设置环境变量
  • rac3节点:
cat>>/home/grid/.bash_profile<<EOF
export PATH
#SID用作集群对外的service ID,从1开始
export ORACLE_SID=+ASM1;   
export ORACLE_BASE=/u01/app/grid;
export ORACLE_HOME=/u01/app/19.0.0/grid;
export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS";
export PATH=.:\$PATH:\$HOME/bin:\$ORACLE_HOME/bin
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
EOF
  
cat>>/home/oracle/.bash_profile<<EOF
export PATH
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/19.0.0/db_1
export ORACLE_SID=orcl1
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/bin:/bin:/usr/bin:/usr/local/bin
export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
EOF
  • rac4节点:
cat>>/home/grid/.bash_profile<<EOF
export PATH
#SID用作集群对外的service ID,从1开始
export ORACLE_SID=+ASM2;   
export ORACLE_BASE=/u01/app/grid;
export ORACLE_HOME=/u01/app/19.0.0/grid;
export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS";
export PATH=.:\$PATH:\$HOME/bin:\$ORACLE_HOME/bin
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
EOF
 
cat>>/home/oracle/.bash_profile<<EOF
export PATH
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/19.0.0/db_1
export ORACLE_SID=orcl2
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/bin:/bin:/usr/bin:/usr/local/bin
export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
EOF
设置资源上限
cat>>/etc/security/limits.conf<<EOF
# End of file
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 4194304
oracle soft memlock 4194304
EOF

配置网络

  • oracle网络至少配置两类,一类是公网,可以让客户端访问,一类是私有网络,rac节点之前可以相互访问,只要能完成这两个功能,就可以设置成oracle的网络。在虚拟化场景下,我们把libvirt default网络通过dhcp分给虚机的地址作为私有网络,把静态IP作为公有网络,这样公有网络可以固定下来。
配置hostname
hy_c7_node3: hostnamectl set-hostname rac3
hy_c7_node4: hostnamectl set-hostname rac4
配置hosts
  • 在hy_c7_node3和hy_c7_node4分别配置/etc/hosts:
cat >>/etc/hosts<<EOF
#节点rac3通过dhcp分配得到的IP
192.168.125.129 rac3-private
#节点rac4通过dhcp分配得到的IP
192.168.125.33  rac4-private
 
#节点rac3静态IP,持久化到network-script目录下开机自动配置
10.0.0.3 rac3
#节点rac4静态IP,持久化到network-script目录下开机自动配置
10.0.0.4 rac4
 
#节点rac3的虚拟IP,在oracle grid软件安装被配置,通过安装是作为虚拟的IP,grid安装通过clusterNodes配置项指定
10.0.0.5 rac3-vip
#节点rac4的虚拟IP,在oracle grid软件安装被配置,通过安装是作为虚拟的IP,grid安装通过clusterNodes配置项指定
10.0.0.6 rac4-vip
 
#集群的Single Client Access Name,客户端通过scan-ip访问集群,可以配置多个,在oracle grid软件安装时被配置
10.0.0.7 scan-ip
10.0.0.8 scan-ip
10.0.0.9 scan-ip
EOF
  • 在两个节点配置静态IP,编辑网卡配置文件:
cat >>/etc/sysconfig/network-scripts/ifcfg-eth1<<EOF
DEVICE=eth1
TYPE=Ethernet
IPADDR=10.0.0.3
PREFIX=24
BOOTPROTO=none
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
NAME=eth1
ONBOOT=yes
EOF
 
cat >>/etc/sysconfig/network-scripts/ifcfg-eth1<<EOF
DEVICE=eth1
TYPE=Ethernet
IPADDR=10.0.0.4
PREFIX=24
BOOTPROTO=none
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
NAME=eth1
ONBOOT=yes
EOF
设置NOZEROCONF
cat >>/etc/sysconfig/network<<EOF
NOZEROCONF=yes
EOF
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

配置存储

home目录磁盘
  • rac3、rac4分别执行:
mkfs.ext4 /dev/vdf
mkdir /home/data
[root@rac3 ~]# blkid /dev/vdf
/dev/vdf: UUID="90cb0aca-623a-4e92-8759-85e260368334" TYPE="ext4"
mount /dev/vdf /home/data/
/etc/fstab添加一行如下,开机自动挂载/home/data:
UUID=90cb0aca-623a-4e92-8759-85e260368334 /home/data              ext4  defaults        0 0
grid软件安装磁盘
  • rac3、rac4分别执行:
mkfs.ext4 /dev/vde
mkdir /u01
[root@rac3 ~]# blkid /dev/vde
/dev/vde: UUID="053a36da-8d1c-47bc-be8f-911e3704d025" TYPE="ext4"
mount /dev/vde /u01
/etc/fstab添加一行如下,开机自动挂载/u01:
UUID=053a36da-8d1c-47bc-be8f-911e3704d025 /u01                    ext4  defaults        0 0
使能swap分区
  • rac3、rac4分别执行:
mkdir -p /home/data/swap
dd if=/dev/zero of=/home/data/swap/swapfile bs=2G count=8
mkswap /home/data/swap/swapfile
swapon /home/data/swap/swapfile
/etc/fstab添加一行如下,开机自动挂载swap:
/usr/swap/swapfile swap swap defaults 0 0
使能shmem
  • rac3、rac4分别执行:
/etc/fstab添加一行如下,开机自动挂载shmem:
tmpfs /dev/shm tmpfs defaults,size=8G 0 0
  • 以上所有配置完成后,rac3 /etc/fstab增加了如下内容:
UUID=053a36da-8d1c-47bc-be8f-911e3704d025 /u01                    ext4  defaults        0 0
 
UUID=90cb0aca-623a-4e92-8759-85e260368334 /home/data              ext4  defaults        0 0
 
/home/data/swap/swapfile swap swap defaults 0 0
 
tmpfs /dev/shm tmpfs defaults,size=8G 0 0
数据库磁盘
  • rac3、rac4分别使用fdisk工具对vdb、vdc … 分区,添加udev规则建立到磁盘的软连接,磁盘的用户和组分别设置为grid和asmadmin,让grid软件可以访问并使用:
[root@rac3 ~]# cat /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="vdb1", SYMLINK+="asmdisk001", MODE="0660", OWNER="grid", GROUP="asmadmin"
KERNEL=="vdc1", SYMLINK+="asmdisk002", MODE="0660", OWNER="grid", GROUP="asmadmin"
KERNEL=="vdd1", SYMLINK+="asmdisk003", MODE="0660", OWNER="grid", GROUP="asmadmin"
KERNEL=="vde1", SYMLINK+="asmdisk004", MODE="0660", OWNER="grid", GROUP="asmadmin"
KERNEL=="vdh1", SYMLINK+="asmdisk005", MODE="0660", OWNER="grid", GROUP="asmadmin"
KERNEL=="vdi1", SYMLINK+="asmdisk006", MODE="0660", OWNER="grid", GROUP="asmadmin"
KERNEL=="vdj1", SYMLINK+="asmdisk007", MODE="0660", OWNER="grid", GROUP="asmadmin"
KERNEL=="vdk1", SYMLINK+="asmdisk008", MODE="0660", OWNER="grid", GROUP="asmadmin"
KERNEL=="vdl1", SYMLINK+="asmdisk009", MODE="0660", OWNER="grid", GROUP="asmadmin"

MISC

系统资源配置

cat>>/etc/sysctl.conf<<EOF
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 18446744073692774399
kernel.shmmax = 18446744073692774399
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
EOF
cat>>/etc/security/limits.d/20-nproc.conf<<EOF
* - nproc 16384
EOF

节点免密配置

  • 节点3:
su - grid
ssh-keygen
ssh-copy-id rac4
ssh rac4
 
su - oracle
ssh-keygen
ssh-copy-id rac4
ssh rac4
  • 节点4:
su - grid
ssh-keygen
ssh-copy-id rac3
ssh rac3
 
su - oracle
ssh-keygen
ssh-copy-id rac3
ssh rac3

登录配置

cat >>/etc/pam.d/login<<EOF
#ORACLE SETTING
session required pam_limits.so
EOF

禁止NTP服务

systemctl stop ntpd.service
systemctl disable ntpd.service
mv /etc/ntp.conf /etc/ntp.conf.orig

禁止selinux

sed -i 's/=enforcing/=disabled/g'  /etc/selinux/config
setenforce 0
getenforce

软件安装

软件包安装

  • 根据oracle rac 19c官方安装指导书,对于centos 7,安装grid软件需要先安装依赖包,如下:
yum install -y bc binutils compat-libcap1 compat-libstdc++-33 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 smartmontools sysstat ipmiutil net-tools nfs-utils python python-configshell python-rtslib python-six targetcli gcc-c++
  • 其它工具包:
yum install -y iscsi-initiator-utils-iscsiuio iscsi-initiator-utils pciutils rdma-core libibverbs libibumad ibacm librdmacm libtool-ltdl unixODBC libarchive cmake unixODBC-devel rdma-core-devel gdb unzip nslookup bind java tmux tree

grid软件安装

准备软件包

su - grid
cp LINUX.X64_193000_grid_home.zip $ORACLE_HOME
cd $ORACLE_HOME
unzip LINUX.X64_193000_grid_home.zip

编辑静默安装配置文件

  • ${ORACLE_HOME}/install/response/gridsetup.rsp。内容如下:
    gridsetup.rsp

环境预检查

  • 使用grid安装包中的脚本检查环境是否正常:
${ORACLE_HOME}/runcluvfy.sh stage -pre crsinst -n rac3,rac4 -verbose
  • 使用executePrereqs选项提前检查安装依赖项:
${ORACLE_HOME}/gridSetup.sh -executePrereqs -silent -responseFile $ORACLE_HOME/install/response/gridsetup.rsp
  • 以下三个报错可以忽略,因为我们没有配置DNS解析域名,如果/etc/resolv.conf中有配置nameserver但是没有解析到配置文件指定的主机名,会有下面的提示。最终安装软件会根据/etc/hosts中的配置信息查找主机名对应的IP。因此这里可以忽略。
  1. /etc/resolv.conf的报错
  2. DNS/GNS未配置
  3. SCAN IP无法通过DNS解析到

安装

  • 在rac3节点安装grid软件,该软件是oracle rac安装的核心软件,安装过程中会配置网络,grid软件只需要在一个节点上安装,其它节点会被集群软件纳入管理:
${ORACLE_HOME}/gridSetup.sh -ignorePrereq -silent -responseFile ${ORACLE_HOME}/install/response/gridsetup.rsp
  • 安装完成后,按照提示,使用root用户分别在rac3、rac4节点依次执行如下脚本:
/u01/app/oraInventory/orainstRoot.sh
/u01/app/19.0.0/grid/root.sh
  • 脚本执行完成后,在rac3节点执行脚本安装配置工具:
${ORACLE_HOME}/gridSetup.sh -executeConfigTools -silent -responseFile ${ORACLE_HOME}/install/response/gridsetup.rsp

集群状态检查

  • grid软件安装完成后,检查集群的状态:
[root@rac4 ~]# su - grid
[grid@rac4 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details      
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr
               ONLINE  ONLINE       rac3                     STABLE
               ONLINE  ONLINE       rac4                     STABLE
ora.chad
               ONLINE  ONLINE       rac3                     STABLE
               ONLINE  ONLINE       rac4                     STABLE
ora.net1.network
               ONLINE  ONLINE       rac3                     STABLE
               ONLINE  ONLINE       rac4                     STABLE
ora.ons
               ONLINE  ONLINE       rac3                     STABLE
               ONLINE  ONLINE       rac4                     STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
      1        ONLINE  ONLINE       rac3                     STABLE
      2        ONLINE  ONLINE       rac4                     STABLE
      3        ONLINE  OFFLINE                               STABLE
ora.DATADG.dg(ora.asmgroup)
      1        ONLINE  ONLINE       rac3                     STABLE
      2        ONLINE  ONLINE       rac4                     STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       rac4                     STABLE
ora.LISTENER_SCAN2.lsnr
      1        ONLINE  ONLINE       rac3                     STABLE
ora.LISTENER_SCAN3.lsnr
      1        ONLINE  ONLINE       rac3                     STABLE
ora.OCRDG.dg(ora.asmgroup)
      1        ONLINE  ONLINE       rac3                     STABLE
      2        ONLINE  ONLINE       rac4                     STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.asm(ora.asmgroup)
      1        ONLINE  ONLINE       rac3                     Started,STABLE
      2        ONLINE  ONLINE       rac4                     Started,STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.asmnet1.asmnetwork(ora.asmgroup)
      1        ONLINE  ONLINE       rac3                     STABLE
      2        ONLINE  ONLINE       rac4                     STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.cvu
      1        ONLINE  ONLINE       rac3                     STABLE
ora.qosmserver
      1        ONLINE  ONLINE       rac3                     STABLE
ora.rac3.vip
      1        ONLINE  ONLINE       rac3                     STABLE
ora.rac4.vip
      1        ONLINE  ONLINE       rac4                     STABLE
ora.scan1.vip
      1        ONLINE  ONLINE       rac4                     STABLE
ora.scan2.vip
      1        ONLINE  ONLINE       rac3                     STABLE
ora.scan3.vip
      1        ONLINE  ONLINE       rac3                     STABLE
  • 查看集群的磁盘组OCRDG:
[grid@rac3 ~]$ asmcmd
ASMCMD> lsdg
State    Type    Rebal  Sector  Logical_Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name
MOUNTED  EXTERN  N         512             512   4096  4194304     20472    20100                0           20100              0             Y  OCRDG/

ASM增加数据库磁盘组

  • 增加用户存储数据的磁盘组DATADG,该磁盘组由/dev/asmdisk001 /dev/asmdisk002 /dev/asmdisk003组成,在rac3上执行:
sqlplus / as sysasm
SQL> CREATE DISKGROUP DATADG external REDUNDANCY disk '/dev/asmdisk001','/dev/asmdisk002','/dev/asmdisk003' ATTRIBUTE 'au_size'='1M','compatible.asm'='19.0';
SQL> exit
 
[grid@rac3 ~]$ asmcmd
ASMCMD> lsdg
State    Type    Rebal  Sector  Logical_Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name
MOUNTED  EXTERN  N         512             512   4096  1048576     61437    52234                0           52234              0             N  DATADG/
MOUNTED  EXTERN  N         512             512   4096  4194304     20472    20100                0           20100              0             Y  OCRDG/
  • 在rac4上使用该磁盘组:
sqlplus / as sysasm
SQL> alter diskgroup datadg mount;
SQL> exit
 
[grid@rac3 ~]$ asmcmd
ASMCMD> lsdg
State Type Rebal Sector Logical_Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED EXTERN N 512 512 4096 1048576 61437 52234 0 52234 0 N DATADG/
MOUNTED EXTERN N 512 512 4096 4194304 20472 20100 0 20100 0 Y OCRDG/

database软件安装

准备安装包

su - oracle
cp LINUX.X64_193000_db_home.zip $ORACLE_HOME
cd $ORACLE_HOME
unzip LINUX.X64_193000_db_home.zip

编辑静默安装配置文件

  • 切换到oracle用户,编辑以下配置文件:$ORACLE_HOME/install/response/db_install.rsp,内容如下:
    db_install.rsp

安装数据库软件

  • rac3执行安装脚本:
su - oracle
cd $ORACLE_HOME
./runInstaller -ignorePrereq -silent -responseFile ${ORACLE_HOME}/install/response/db_install.rsp
  • rac3、rac4以root用户执行以下脚本:
/u01/app/oracle/product/19.0.0/db_1/root.sh
  • 以上软件安装完成后,整个oracle rac集群软件的安装就完成了,之后的工作就是通过dbca工具创建数据库,创建数据库实例,建表等操作。
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐