1. RAC 集群是什么
2. 环境准备
2.1 服务器规划
2.2 集群规划
2.2.1 网络规划
Public IP (内部访问)
192.168.101.231 oracle1
192.168.101.232 oracle2
192.168.101.233 oracle3Private IP(节点心跳网络)
192.168.121.231 oracle1-priv
192.168.121.232 oracle2-priv
192.168.121.233 oracle3-privVirtual IP(客户端实际访问地址)
192.168.101.241 oracle1-vip
192.168.101.242 oracle2-vip
192.168.101.243 oracle3-vipSCAN IP(客户端访问)
192.168.101.168 oracle.scan2.2.2 存储规划
冗余级别有哪些:
3. ISCSI 配置 (230)






4. 系统基础配置 (231-233)
注意!!!如无提醒,系统基础配置在所有节点都要执行
4.1 网络配置

4.2 hosts 配置
[root@oracle1 ~]# cat <<EOF>>/etc/hosts
#Public IP
192.168.101.231 oracle1
192.168.101.232 oracle2
192.168.101.233 oracle3
#Private IP
192.168.121.231 oracle1-priv
192.168.121.232 oracle2-priv
192.168.121.233 oracle3-priv
#Vip IP
192.168.101.241 oracle1-vip
192.168.101.242 oracle2-vip
192.168.101.243 oracle3-vip
#Scan IP
192.168.101.168 oracle.scan
EOF4.3 存储配置
[root@oracle1 ~]# systemctl start iscsi
[root@oracle1 ~]# systemctl enable iscsi
[root@oracle1 ~]# iscsiadm -m discovery -t st -p 192.168.101.230
192.168.101.230:3260,1 iqn.1991-05.com.microsoft:win-gcid2md21ei-orace-rac-target
[root@oracle1 ~]# iscsiadm -m node -T iqn.1991-05.com.microsoft:win-gcid2md21ei-orace-rac-target -p 192.168.101.230 -l
[root@oracle1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdf 8:80 0 100G 0 disk
sdd 8:48 0 2G 0 disk
sdb 8:16 0 2G 0 disk
sdi 8:128 0 100G 0 disk
sr0 11:0 1 4.5G 0 rom /run/media/root/OL-7.9 Server.x86_64
sdg 8:96 0 100G 0 disk
sde 8:64 0 100G 0 disk
sdc 8:32 0 2G 0 disk
sda 8:0 0 100G 0 disk
├─sda2 8:2 0 99G 0 part
│ ├─ol-swap 252:1 0 7.9G 0 lvm [SWAP]
│ ├─ol-home 252:2 0 41.1G 0 lvm /home
│ └─ol-root 252:0 0 50G 0 lvm /
└─sda1 8:1 0 1G 0 part /boot
sdj 8:144 0 100G 0 disk
sdh 8:112 0 100G 0 disk
#所有节点查询结果要确保一致
[root@oracle1 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdb
360003ff44dc75adcb0cbcfc3a1f364d6
[root@oracle1 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdc
360003ff44dc75adca094a74f66fa1f4d
[root@oracle1 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdd
360003ff44dc75adc81c2c624f67132dd
[root@oracle1 ~]# /usr/lib/udev/scsi_id -g -u /dev/sde
360003ff44dc75adc83dcdaafef0c18d3
[root@oracle1 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdf
360003ff44dc75adca81420af22c445d0
[root@oracle1 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdg
360003ff44dc75adc86359da68811702d
[root@oracle1 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdh
360003ff44dc75adc9b7f30efefcb3e57
[root@oracle1 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdi
360003ff44dc75adc92d78871220ed578
[root@oracle1 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdj
360003ff44dc75adc91e82a93375bf0724.3.1 多路径配置
[root@oracle1 ~]# mpathconf --enable --with_multipathd y
[root@oracle1 ~]# cat <<EOF>/etc/multipath.conf
defaults {
user_friendly_names yes
}
multipaths {
multipath {
wwid "360003ff44dc75adcb0cbcfc3a1f364d6"
alias asm_ocr01
}
multipath {
wwid "360003ff44dc75adca094a74f66fa1f4d"
alias asm_ocr02
}
multipath {
wwid "360003ff44dc75adc81c2c624f67132dd"
alias asm_ocr03
}
multipath {
wwid "360003ff44dc75adc83dcdaafef0c18d3"
alias asm_data01
}
multipath {
wwid "360003ff44dc75adca81420af22c445d0"
alias asm_data02
}
multipath {
wwid "360003ff44dc75adc86359da68811702d"
alias asm_data03
}
multipath {
wwid "360003ff44dc75adc9b7f30efefcb3e57"
alias asm_fra01
}
multipath {
wwid "360003ff44dc75adc92d78871220ed578"
alias asm_fra02
}
multipath {
wwid "360003ff44dc75adc91e82a93375bf072"
alias asm_fra03
}
}
EOF
[root@oracle1 ~]# multipath -F
[root@oracle1 ~]# multipath -v2
[root@oracle1 ~]# multipath -ll4.3.2 UDEV 绑盘
[root@oracle1 ~]# rm -rf /dev/mapper/udev_info
[root@oracle1 ~]# rm -rf /etc/udev/rules.d/99-oracle-asmdevices.rules
[root@oracle1 ~]# cd /dev/mapper
[root@oracle1 mapper]# for i in asm_*; do
printf "%s %s\n" "$i" "$(udevadm info --query=all --name=/dev/mapper/"$i" | grep -i dm_uuid)" >>/dev/mapper/udev_info
done
while read -r line; do
dm_uuid=$(echo "$line" | awk -F'=' '{print $2}')
disk_name=$(echo "$line" | awk '{print $1}')
echo "KERNEL==\"dm-*\",ENV{DM_UUID}==\"${dm_uuid}\",SYMLINK+=\"${disk_name}\",OWNER=\"grid\",GROUP=\"asmadmin\",MODE=\"0660\"" >>/etc/udev/rules.d/99-oracle-asmdevices.rules
done </dev/mapper/udev_info
[root@oracle1 ~]# udevadm control --reload-rules
[root@oracle1 ~]# udevadm trigger --type=devices
#这里由于没有创建 grid 用户,因此权限和组是 root,等创建 grid 用户后,再次重载 udev 即可
[root@oracle1 ~]# ll /dev/dm*4.4 安装依赖
[root@oracle1 ~]# yum groupinstall -y "Server with GUI"
yum install -y bc \
binutils \
compat-libcap1 \
compat-libstdc++-33 \
gcc \
gcc-c++ \
elfutils-libelf \
elfutils-libelf-devel \
glibc \
glibc-devel \
ksh \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
libxcb \
libX11 \
libXau \
libXi \
libXtst \
libXrender \
libXrender-devel \
make \
net-tools \
nfs-utils \
smartmontools \
sysstat \
e2fsprogs \
e2fsprogs-libs \
fontconfig-devel \
expect \
unzip \
openssh-clients \
readline* \
tigervnc* \
psmisc --skip-broken4.5 防火墙和 Selinux
[root@oracle1 ~]# systemctl stop firewalld.service
[root@oracle1 ~]# systemctl disable firewalld.service
[root@oracle1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@oracle1 ~]# setenforce 0
[root@oracle1 ~]# getenforce4.6 时间同步
#禁用 chrony 服务
[root@oracle1 ~]# yum install -y chrony
[root@oracle1 ~]# timedatectl set-timezone Asia/Shanghai
[root@oracle1 ~]# systemctl stop chronyd.service
[root@oracle1 ~]# systemctl disable chronyd.service
#通过 ntpdate 服务进行时间同步
[root@oracle1 ~]# cat <<EOF>>/var/spool/cron/root
00 12 * * * /usr/sbin/ntpdate -u ntp1.aliyun.com && /usr/sbin/hwclock -w
EOF
[root@oracle1 ~]# /usr/sbin/ntpdate -u ntp1.aliyun.com && /usr/sbin/hwclock -w4.7 关闭透明大页和 numa
[root@oracle1 ~]# sed -i 's/quiet/quiet transparent_hugepage=never numa=off/' /etc/default/grub
[root@oracle1 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
#重启检查是否生效
[root@oracle1 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
[root@oracle1 ~]# cat /proc/cmdline4.8 禁用 avahi-daemon
[root@oracle1 ~]# yum install -y avahi*
[root@oracle1 ~]# systemctl stop avahi-daemon.socket
[root@oracle1 ~]# systemctl stop avahi-daemon.service
[root@oracle1 ~]# pgrep -f avahi-daemon | awk '{print "kill -9 "$2}'
[root@oracle1 ~]# systemctl disable avahi-daemon.socket
[root@oracle1 ~]# systemctl disable avahi-daemon.service4.9 NOZEROCONF 配置
[root@oracle1 ~]# cat <<EOF>>/etc/sysconfig/network
NOZEROCONF=yes
EOF4.10 系统资源限制
[root@oracle1 ~]# cat <<EOF>>/etc/security/limits.conf
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
oracle soft nproc 2047
oracle hard nproc 16384
oracle hard memlock 134217728
oracle soft memlock 134217728
grid soft nofile 1024
grid hard nofile 65536
grid soft stack 10240
grid hard stack 32768
grid soft nproc 2047
grid hard nproc 16384
EOF
#配置 pam.d/login
[root@oracle1 ~]# cat <<EOF>>/etc/pam.d/login
session required pam_limits.so
session required /lib64/security/pam_limits.so
EOF4.11 系统参数配置
[root@oracle1 ~]# memTotal=$(grep MemTotal /proc/meminfo | awk '{print $2}')
totalMemory=$((memTotal / 2048))
shmall=$((memTotal / 4))
if [ $shmall -lt 2097152 ]; then
shmall=2097152
fi
shmmax=$((memTotal * 1024 - 1))
if [ "$shmmax" -lt 4294967295 ]; then
shmmax=4294967295
fi
cat <<EOF>>/etc/sysctl.conf
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = $shmall
kernel.shmmax = $shmmax
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
net.ipv4.conf.ens33.rp_filter = 1
net.ipv4.conf.ens36.rp_filter = 2
EOF
#生效
[root@oracle1 ~]# sysctl -p4.12 用户、组、目录创建
#用户组
[root@oracle1 ~]# /usr/sbin/groupadd -g 54321 oinstall
[root@oracle1 ~]# /usr/sbin/groupadd -g 54322 dba
[root@oracle1 ~]# /usr/sbin/groupadd -g 54323 oper
[root@oracle1 ~]# /usr/sbin/groupadd -g 54324 backupdba
[root@oracle1 ~]# /usr/sbin/groupadd -g 54325 dgdba
[root@oracle1 ~]# /usr/sbin/groupadd -g 54326 kmdba
[root@oracle1 ~]# /usr/sbin/groupadd -g 54327 asmdba
[root@oracle1 ~]# /usr/sbin/groupadd -g 54328 asmoper
[root@oracle1 ~]# /usr/sbin/groupadd -g 54329 asmadmin
[root@oracle1 ~]# /usr/sbin/groupadd -g 54330 racdba
#用户
[root@oracle1 ~]# /usr/sbin/useradd -u 11012 -g oinstall -G asmadmin,asmdba,asmoper,dba,racdba,oper grid
[root@oracle1 ~]# /usr/sbin/useradd -u 54321 -g oinstall -G asmdba,dba,backupdba,dgdba,kmdba,racdba,oper oracle
[root@oracle1 ~]# echo "oracle" |passwd oracle --stdin
[root@oracle1 ~]# echo "oracle" |passwd grid --stdin
#重载 udev
[root@oracle1 ~]# udevadm control --reload-rules
[root@oracle1 ~]# udevadm trigger --type-devices
[root@oracle1 ~]# ll /dev/dm*
#目录
[root@oracle1 ~]# mkdir -p /oracle/app/19.3.0/grid
[root@oracle1 ~]# mkdir -p /oracle/app/grid
[root@oracle1 ~]# mkdir -p /oracle/app/oracle/product/19.3.0/db
[root@oracle1 ~]# mkdir -p /oracle/app/oraInventory
[root@oracle1 ~]# mkdir -p /home/oracle/scripts
[root@oracle1 ~]# chown -R oracle:oinstall /backup
[root@oracle1 ~]# chown -R oracle:oinstall /home/oracle/scripts
[root@oracle1 ~]# chown -R grid:oinstall /oracle
[root@oracle1 ~]# chown -R grid:oinstall /oracle/app/grid
[root@oracle1 ~]# chown -R grid:oinstall /oracle/app/19.3.0/grid
[root@oracle1 ~]# chown -R grid:oinstall /oracle/app/oraInventory
[root@oracle1 ~]# chown -R oracle:oinstall /oracle/app/oracle
[root@oracle1 ~]# chmod -R 775 /oracle4.13 环境变量配置
注意!!!export ORACLE_SID=+ASM3 每个节点不一样
[root@oracle3 ~]# cat <<EOF>>/home/grid/.bash_profile
################OracleBegin#########################
umask 022
export TMP=/tmp
export TMPDIR=\$TMP
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export ORACLE_BASE=/oracle/app/grid
export ORACLE_HOME=/oracle/app/19.3.0/grid
export ORACLE_TERM=xterm
export TNS_ADMIN=\$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export ORACLE_SID=+ASM3
export PATH=/usr/sbin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$ORACLE_HOME/OPatch:\$PATH
alias sas='sqlplus / as sysasm'
export PS1="[\`whoami\`@\`hostname\`:"'\$PWD]\$ '
EOF


注意!!!export ORACLE_HOSTNAME=oracle1 和 export ORACLE_SID=mesdb1 每个节点不一样
[root@oracle1 ~]# cat <<EOF>>/home/oracle/.bash_profile
################OracleBegin#########################
umask 022
export TMP=/tmp
export TMPDIR=\$TMP
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export ORACLE_BASE=/oracle/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/19.3.0/db
export ORACLE_HOSTNAME=oracle1
export ORACLE_TERM=xterm
export TNS_ADMIN=\$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export ORACLE_SID=mesdb1
export PATH=/usr/sbin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$ORACLE_HOME/OPatch:\$PATH
alias sas='sqlplus / as sysdba'
export PS1="[\`whoami\`@\`hostname\`:"'\$PWD]\$ '
################OracleEnd#########################
EOF


4.14 安装介质包上传 (231)
注意!!!此步骤在节点 1 单独完成
[root@oracle1 ~]# mkdir /soft
#上传
LINUX.X64_193000_db_home.zip
LINUX.X64_193000_grid_home.zip
p6880880_190000_Linux-x86-64.zip
p33182768_190000_Linux-x86-64.zip
#解压 grid 安装包
[root@oracle1 ~]# chown -R grid:oinstall /soft
[root@oracle1 ~]# su - grid -c "unzip -q /soft/LINUX.X64_193000_grid_home.zip -d /oracle/app/19.3.0/grid/"
#解压 oracle 安装包
[root@oracle1 ~]# chown -R oracle:oinstall /soft
[root@oracle1 ~]# su - oracle -c "unzip -q /soft/LINUX.X64_193000_db_home.zip -d /oracle/app/oracle/product/19.3.0/db/"
#解压补丁安装包
[root@oracle1 ~]# cd /soft
[root@oracle1 soft]# chown -R grid:oinstall /soft
[root@oracle1 soft]# su - grid -c "unzip -q -o /soft/p6880880_190000_Linux-x86-64.zip -d /oracle/app/19.3.0/grid"
[root@oracle1 soft]# su - grid -c "unzip -q /soft/p33182768_190000_Linux-x86-64.zip -d /soft"
[root@oracle1 soft]# chown -R oracle:oinstall /soft
[root@oracle1 soft]# su - oracle -c "unzip -q -o /soft/p6880880_190000_Linux-x86-64.zip -d /oracle/app/oracle/product/19.3.0/db"4.15 cvuqdisk 安装
[root@oracle1 soft]# rpm -ivh /oracle/app/19.3.0/grid/cv/rpm/cvuqdisk-1.0.10-1.rpm
#传输到 2、3 节点,2、3 节点也安装
[root@oracle1 soft]# scp /oracle/app/19.3.0/grid/cv/rpm/cvuqdisk-1.0.10-1.rpm root@192.168.101.232:/tmp/
[root@oracle1 soft]# scp /oracle/app/19.3.0/grid/cv/rpm/cvuqdisk-1.0.10-1.rpm root@192.168.101.233:/tmp/
[root@oracle2 ~]# rpm -ivh /tmp/cvuqdisk-1.0.10-1.rpm
[root@oracle3 ~]# rpm -ivh /tmp/cvuqdisk-1.0.10-1.rpm
#安装前配置已完成,重启下系统,开始安装 RAC
[root@oracle1 ~]# init 65. RAC 部署 (231)
5.1 安装 Grid 软件
#配置 grid 用户 vnc
[root@oracle1 ~]# yum install -y tigervnc*
[root@oracle1 ~]# chown -R grid:oinstall /soft
[root@oracle1 ~]# su - grid
[grid@oracle1:/home/grid]$ vncserver
#开始安装
[grid@oracle1 ~]$ source ~/.bash_profile
[grid@oracle1:/home/grid]$ cd $ORACLE_HOME
#安装补丁
[grid@oracle1:/oracle/app/19.3.0/grid]$ ./gridSetup.sh -applyRU /soft/33182768步骤 1:补丁安装完成,进入安装界面,选择集群安装

步骤 2:选择独立集群

步骤 3:修改 scan 名称与 hosts 文件配置一致

步骤 4:添加 2、3 节点,配置互信,口令为 grid 用户密码


步骤 5:确保对应网卡和 IP 网段对应即可,心跳网段需要选 ASM & Private

步骤 6:选择存储类型,ASM 只能选 Flex

步骤 7:GIMR,这里不选择安装

步骤 8:填 OCR 盘,3 块盘冗余 Normal,目录选择 udev 绑的路径


步骤 9:密码 Abc123!@#

默认,下一步





步骤 15:不自动执行脚本

步骤 16:安装预检查,由于我们只配了一个 SCAN,所以关于 DNS 相关的都无视,继续


步骤 18:安装过程中会提示执行脚本,此时一定不要点击确定,oracle1 节点先执行完毕两条命令,再到 oracle2 节点执行,最后 oracle3 节点

三台节点依次执行完毕后,再点击确定继续安装,最后会有个错误提示,可忽略继续下一步

步骤 19:安装完成

5.2 创建磁盘组




5.3 安装 Oracle 软件
#配置 oracle 用户 vnc
[root@oracle1 ~]# chown -R oracle:oinstall /soft
[root@oracle1 ~]# su - oracle
[oracle@oracle1:/home/oracle]$ vncserver
#开始安装
[oracle@oracle1 ~]$ source ~/.bash_profile
[oracle@oracle1:/home/oracle]$ cd $ORACLE_HOME
#安装补丁
[oracle@oracle1:/oracle/app/oracle/product/19.3.0/db]$ ./runInstaller -applyRU /soft/33182768步骤 1:补丁安装完成,进入安装界面,选择仅安装软件

步骤 2:选择集群模式

步骤 3:配置互信,口令为 oracle 用户密码

步骤 4:安装企业版

默认,下一步


步骤 7:不配置自动执行脚本

步骤 8:安装预检查,由于我们只配了一个 SCAN,所以关于 DNS 相关的都无视,继续


步骤 10:安装过程中会提示执行脚本,此时一定不要点击确定,oracle1 节点先执行完毕该命令,再到 oracle2 节点执行,最后 oracle3 节点

三台节点依次执行完毕后,再点击确定继续安装,安装完成
5.4 创建数据库

步骤 1:选择创建数据库实例

步骤 2:选择自定义模式

步骤 3:选择一般用途

步骤 4:选择节点

步骤 5:填写实例名 mesdb,和 4.13 步骤中的 export ORACLE_SID 一致,创建 mespdb

步骤 6:选择数据存储磁盘组 +DATA

步骤 7:开启归档和闪回,并选择磁盘组 +FRA

步骤 8:默认,下一步

步骤 9:配置内存大小、进程数、字符集



步骤 10:关闭 CVU,暂不开启

步骤 11:sys/system 密码:Abcd123!@#

步骤 12:默认,下一步

步骤 13:安装预检查,DNS 相关忽略,继续安装


安装完成
