一、实时应用集群 RAC
Oracle实时应用集群(Real Application Cluster,RAC)最早是在Oracle9i版本中作为一个选件推出来的。Oracle实时应用集群(RAC)允许Oracle数据库实现在一组集群服务器上运行任何程序包和客户应用而不必作任何更改,这种体系提供了最高级别的可用性和最灵活的可伸缩性。如果集群中一个服务器失败,Oracle会继续运行在集群中其他服务器上。如果需要更多的处理能力,可以很方便地在线增加另外的服务器而不必使用户脱机。为了保持低成本,可以把甚至是最高端的系统构建在标准化的、低成本的产品上。Oracle实时应用集群是Oracle企业网格计算体系的基础。
Oracle实时应用集群是所有服务器共享磁盘的Shared Everything体系,集群中的所有服务器共享RAC数据库的所有存储设备。这种类型的磁盘存储可以是网络附加存储(NAS),也可以是存储区域网络(SAN)或者是SCSI磁盘。Oracle推荐使用Oracle自动存储管理(ASM),这是Oracle11g里内置的功能,可以为数据库提供自动存储管理。每个数据库实例都运行在其独立的服务器上,这些服务器通过高速的内部网络(如InfiniBand)相互连接,并共享访问存储设备。
RAC通过Oracle Clusterware软件来实现集群环境的管理和节点间的通信。Clusterware负责集群的健康检查、节点间的消息传递、资源管理等任务。当某个节点出现故障时,Clusterware可以自动将服务切换到其他节点,从而保证系统的持续运行。
二、安装规划
1、安装说明
本次安装步骤以VMware Workstation为实验环境,主要是基于centos7.9挂载虚拟存储的方式安装Oracle RAC数据库环境(两节点)。本文档所用的软件Oracle RAC和Database版本为12.2.0.1。
2、推荐配置
CPU:
内存:Oracle Grid Infrastructure 安装至少需要 8 GB 内存,Oracle 数据库安装至少 1 GB 内存 ,建议使用 2 GB 内存,Oracle 建议您禁用透明大页并使用标准大页以增强性能。
本地磁盘:建议100G(用于安装操作系统和数据库软件),可不开启磁盘预分配。可按照/boot 500-1024M ; SWAP 16384M ; 剩余全给“/”目录的要求进行分区 ,其中至少有 1 GB 空间/tmp
。其中安装Oracle Grid Infrastructure 至少需要 8.6 GB,安装Oracle 数据库企业版至少 7.5 GB。
交换空间:1 GB 到 2 GB 之间:RAM 大小的 1.5 倍;2 GB 到 16 GB 之间:等于 RAM 大小;超过 16 GB:16 GB。如果您为 Linux 服务器启用 HugePages,则应扣除在计算交换空间之前从可用 RAM 分配给 HugePages 的内存。
3、网络规划
Oracle RAC 部署至少需要两台服务器和7个IP地址,除了Public IP和Private IP需要手工配置,其余IP都是Oracle RAC自动生成的,这些地址的作用如下:
- Public IP(公有IP):每个节点真实拥有的IP,用于管理数据库服务器。在没有配置GNS(Global Naming Service)时,每个节点上的公有IP都是静态的,并且和虚拟IP位于相同子网。这些IP地址是公开的,可以用于外部访问和数据库管理。
- Private IP(私有IP):用于节点之间的内部通信。所有节点的私有IP与公有IP子网不同,这样可以保证内部通信的安全性和稳定性。私有IP地址通常不会暴露给外部网络。
- Virtual IP(虚拟IP):提供给用户访问数据库时使用的IP。当当前IP地址和主机名没有被使用时,需要使用虚拟IP。这个IP地址是集群自用的,用户可以通过这个地址访问数据库集群。
- SCAN IP(Single Client Access Name IP):这个IP地址在各节点之间漂移,实现负载均衡。SCAN IP至少需要一个,最多可以有三个。它必须和公有IP和虚拟IP处于同一网段。SCAN IP的作用是提供一个稳定的访问点,让用户可以连接到数据库集群。
主机名称 | 类型 | IP地址 | 域名 |
---|---|---|---|
rac1 | Public | 192.168.1.10/255.255.255.0 | rac1.gaoyufu.com |
rac1-vip | Virtual | 192.168.1.11/255.255.255.0 | rac1-vip.gaoyufu.com |
rac1-priv | Private | 10.10.10.10/255.255.255.0 | rac1-priv.gaoyufu.com |
rac2 | Public | 192.168.1.20/255.255.255.0 | rac2.gaoyufu.com |
rac2-vip | Virtual | 192.168.1.12/255.255.255.0 | rac2-vip.gaoyufu.com |
rac2-priv | Private | 10.10.10.20/255.255.255.0 | rac2-priv.gaoyufu.com |
rac-scan | Scan | 192.168.1.100 | rac-scan.gaoyufu.com |
4、存储规划
磁盘 | 磁盘数 | 单盘大小 | 磁盘类型 | 冗余 | 备注 |
---|---|---|---|---|---|
集群注册表+OCR | 3 | 20GB | 虚拟共享 | 外部 | 存储集群件中所定义的全部集群资源的元数据、配置和状态信息 |
MGMTDB数据库+GIMR | 3 | 25GB | 虚拟共享 | 外部 | 存储一些操作系统级的负载指标,存储着历史信息用于分析性能和诊断问题 |
归档日志盘+REDO | 2 | 20GB | 虚拟共享 | 外部 | 存储数据库归档日志,具体容量大小依据具体情况而定 |
数据盘+DATA | 3 | 20GB | 虚拟共享 | 外部 | 存储数据库数据,具体容量大小依据具体情况而定 |
5、数据库信息
规划项目 | 规划 | 备注 |
---|---|---|
root用户密码 | ||
oracle用户密码 | ||
grid用户密码 | ||
Grid 基目录 | /u01/app/grid | grid的BASE |
Grid 软件目录 | /u01/app/12.2.0/grid | grid的HOME |
Oracle 基目录 | /u01/app/oracle | oracle的BASE |
Oracle 软件目录 | /u01/app/oracle/product/12.2.0/db | oracle的HOME |
ASM实例名 | +ASM | |
数据库实例名 | orcl | |
数据库SGA/PGA | 8GB/2GB | |
数据库监听端口 | 1521 | |
数据库字符集 | AL32UTF-8 | |
数据库连接数 | 1500*2 |
三、安装准备
1、修改主机名
# hostnamectl set-hostname rac1 # rac2 同理
# bash
2、执行初始化脚本
两台主机分别以root权限运行
注意:修改用户环境变量时rac1和rac2执行的区别是ORACLE_SID和ORACLE_HOSTNAME中的rac1要修改为rac2
#!/bin/bash
# 创建用户和组
groupadd -g 54421 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
groupadd -g 54324 backupdba
groupadd -g 54325 dgdba
groupadd -g 54326 kmdba
groupadd -g 54327 asmdba
groupadd -g 54328 asmoper
groupadd -g 54329 asmadmin
groupadd -g 54330 racdba
useradd -u 54331 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,asmdba,asmoper,asmadmin,racdba grid
useradd -u 54321 -g oinstall -G dba,asmdba,backupdba,oper,dgdba,kmdba,racdba Oracle
# 设置 Oracle 和 Grid 的用户密码,建议包含数字、大小写字母并超过8位
oracle_password="123456"
grid_password="123456"
echo "$oracle_password" | passwd --stdin Oracle
echo "$grid_password" | passwd --stdin grid
# 定义目录变量
GRID_BASE="/u01/app/grid"
GRID_HOME="/u01/app/12.2.0/grid"
DB_HOME="/u01/app/oracle/product/12.2.0/db"
INVENTORY_DIR="/u01/app/oraInventory"
# 创建目录并设置权限
mkdir -p "$GRID_BASE" "$GRID_HOME" "$DB_HOME" "$INVENTORY_DIR"
chown -R grid:oinstall /u01/
chown -R Oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/
chown grid:oinstall "$INVENTORY_DIR"
# 关闭防火墙和SELINUX
systemctl stop firewalld.service
systemctl disable firewalld.service
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
setenforce 0
# 修改内核参数
echo "
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmmax = $(($(cat /proc/meminfo | awk '/MemTotal/ {print $2}') * 1024))
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" >> /etc/sysctl.conf
sysctl -p
# 修改限制条件
echo "
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
grid soft stack 10240" >> /etc/security/limits.conf
memory_total=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'`
mem_lock="`echo $memory_total*0.9/1 | bc`"
echo "Now to add * soft memlock $mem_lock * hard memlock $mem_lock /etc/security/limits.conf"
echo "* soft memlock $mem_lock
* hard memlock $mem_lock" >>/etc/security/limits.conf
echo "session required pam_limits.so" >> /etc/pam.d/login
# 禁用透明大页并启用大页内存
echo " if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi" >>/etc/rc.local
memory_total=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'`
hugepage_size=`echo $memory_total*0.64/2048+100 | bc`
if grep hugepage /etc/sysctl.conf;then
echo "Now to set vm.nr_hugepages = $hugepage_size in /etc/sysctl.conf"
sed -i "s/vm.nr_hugepages = .*/vm.nr_hugepages = $hugepage_size/" /etc/sysctl.conf
else
echo "no hugepage parameter, i will add"
echo "vm.nr_hugepages=$hugepage_size" >> /etc/sysctl.conf
sysctl -p
fi
# 配置交换空间和tmpfs挂载
current_memory=$(free -m | grep Mem | awk '{print $2}')
current_swap=$(free -m | grep Swap | awk '{print $2}')
additional_swap=$((current_memory - current_swap))
if [[ $current_memory -ge 16384 ]]; then
desired_swap=16384
if [[ $current_swap -lt $desired_swap ]]; then
new_swapfile="/var/swapfile"
if [ -f "$new_swapfile" ]; then
swapoff "$new_swapfile"
rm "$new_swapfile"
fi
dd if=/dev/zero of="$new_swapfile" bs=1M count=$((desired_swap - current_swap))
mkswap "$new_swapfile"
swapon "$new_swapfile"
echo "$new_swapfile none swap sw 0 0" | sudo tee -a /etc/fstab
echo "已添加额外的交换空间以匹配内存大小,并添加到/etc/fstab。"
else
echo "当前交换空间已等于16GB."
fi
else
if [[ $additional_swap -gt 0 ]]; then
new_swapfile="/var/swapfile"
if [ -f "$new_swapfile" ]; then
swapoff "$new_swapfile"
rm "$new_swapfile"
fi
dd if=/dev/zero of="$new_swapfile" bs=1M count="$additional_swap"
mkswap "$new_swapfile"
swapon "$new_swapfile"
echo "$new_swapfile none swap sw 0 0" | sudo tee -a /etc/fstab
echo "添加了额外的交换空间以匹配内存大小,并添加到/etc/fstab中。"
else
echo "当前交换空间已经等于系统的内存。"
fi
fi
mem=$(free -m | grep ^Mem | awk '{print$2}'); let sga=mem/100*64
sed -i /^tmpfs/d /etc/fstab
echo "tmpfs /dev/shm tmpfs size=${sga}M,mode=1777,nodev,strictatime 0 0" >> /etc/fstab
mount -o loop /dev/shm
# 修改用户环境变量
echo '
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/u01/app/grid; export ORACLE_BASE
ORACLE_HOME=/u01/app/12.2.0/grid; export ORACLE_HOME
ORACLE_SID=+ASM; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
BASE_PATH=/usr/sbin:$PATH; export BASE_PATH
PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$BASE_PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH' >> /home/grid/.bash_profile
echo '
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_HOSTNAME=rac1; export ORACLE_HOSTNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/12.2.0/db; export ORACLE_HOME
ORACLE_SID=rac1; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
BASE_PATH=/usr/sbin:$PATH; export BASE_PATH
PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$BASE_PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
'>> /home/Oracle/.bash_profile
# Update system profile for ulimit and umask
echo 'if [ $USER = "Oracle" ] || [ $USER = "grid" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi' >> /etc/profile
source /etc/profile
# 修改hosts文件
echo "
################ORACLE RAC IP####################
# rac1
192.168.1.10 rac1 rac1.gaoyufu.com
192.168.1.11 rac1-vip rac1-vip.gaoyufu.com
10.10.10.10 rac1-priv rac1-priv.gaoyufu.com
# rac2
192.168.1.20 rac2 rac2.gaoyufu.com
192.168.1.21 rac2-vip rac2-vip.gaoyufu.com
10.10.10.20 rac2-priv rac2-priv.gaoyufu.com
# scan
192.168.1.100 rac-scan rac-scan.gaoyufu.com
################ORACLE RAC IP###################" >> /etc/hosts
# 配置YUM源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
# 安装必要的软件包
yum_packages=(
binutils
compat-libcap1
compat-libstdc++-33
gcc
gcc-c++
glibc
glibc-devel
ksh
libaio
libaio-devel
libgcc
libstdc++
libstdc++-devel
unixODBC
unixODBC-devel
libXi
libXtst
make
sysstat
)
yum -y update
yum -y install "${yum_packages[@]}"
# 停止并禁用不需要的服务
services=(
ntpd
chronyd
avahi-daemon
)
for service in "${services[@]}"; do
systemctl stop "$service"
systemctl disable "$service"
done
# 备份配置文件
mv /etc/chrony.conf /etc/chrony.conf.bak
mv /etc/ntp.conf /etc/ntp.conf.bak
# 删除chronyd的PID文件
rm -rf /var/run/chronyd.pid
3、配置DNS
如果环境中已经有DNS服务器该步骤可省略,具体步骤见下文
4、重启服务器
重启使部分配置生效
5、脚本说明
1、用户及用户组
用户
用户名称 | 功能 | 所属主用户组 | 所属其他组 |
---|---|---|---|
grid | 安装Grid Infrastructure软件,管理ASM实例 | oinstall | dba,oper,backupdba,dgdba,kmdba,asmdba,asmoper,asmadmin,racdba |
Oracle | 安装Oracle数据库软件、管理数据库实例 | oinstall | dba,asmdba,backupdba,oper,dgdba,kmdba,racdba |
用户组
用户组名称 | 功能 |
---|---|
oinstall | 该组用户用来维护Oracle产品的清单(inventory) |
dba | 该组用户映射为数据库中的SYS用户 |
oper | 该组用户可以以“as sysoper”的方式登录数据库实例。这个组可以与dba组合二为一 |
backupdba | 该组用户拥有数据库备份和恢复相关管理权限 |
dgdba | 该组用户拥有有限的权限来管理和监视 Oracle Data Guard |
kmdba | 该组用户用于加密密钥管理 |
asmdba | 该组用户对ASM磁盘组中的文件具有读写访问权限 |
asmoper | 该用户组拥有ASM 的 SYSOPER 权限,包括启动和停止 Oracle ASM 实例。默认情况下,OSASM 组的成员还拥有 SYSOPER 为 ASM 权限授予的所有权限。 |
asmadmin | 该组用户可以以“as sysasm”的方式登录ASM实例,可以创建ASM实例和ASM磁盘组,对ASM磁盘组进行MOUNT和DISMOUNT等各种管理 |
racdba | 用于 Oracle Real Application Clusters 管理 |
2、禁用服务
RAC集群在运行的过程中,对各个节点的时钟要求是相差越小越好,这就要求对各节点的时间进行同步。RAC可以利用两种方法对时间进行同步,一是利用操作系统提供的NTP或者chrony服务;二是利用Oracle提供的集群时间同步服务。
由于NTP和chrony服务需要通过网络与一个外部时间源联系,以获取精确时间,出于安全考虑,许多服务器并不具备这种条件。Oracle提供的集群时间同步服务并没有这样的要求,它只保证各个节点之间的时间是同步的。
在默认情况下,Oracle提供的集群时间同步服务将自动启动,它对应一个进程ctssd。如果检测到操作系统中的NTP和chrony服务没有启动,进程ctssd便主动对各个节点间的时间进行同步。为了使用Oracle的集群时间同步服务,需要将NTP和chrony服务关闭。
avahi-daemon 服务会影响 oracle的多波通信,进而导致节点重启。因此,oracle环境下不能启用 avahi-daemon 服务。
3、交换空间设置
因为内存为2 GB 到 16 GB 之间时交换空间等于 RAM 大小;内存超过 16 GB时交换空间等于16 GB。所以我将初始化脚本设置为在现有交换空间容量的基础上增加交换空间使得和内存大小保持一致,内存为16G或以上时交换空间扩容为16GB。
四、部署 DNS 服务
DNS建议部署在单独的服务器,否则会影响稳定性,为实验方便这里安装在其中一个节点,如果没有DNS服务的话grid将会无法解析scan ip,后续只能从 vip 访问,不安装也可以正常使用。
1、安装软件
yum -y install bind bind-chroot
2、修改配置文件
# vim /etc/named.conf
options {
listen-on port 53 { any; }; # 监听地址和端口
directory "/var/named"; # 区域数据文件的默认存放位置
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; };
recursion no; # 禁用递归查询
......
zone "." IN {
type hint;
file "named.ca";
};
zone "gaoyufu.com" IN {
type master;
file "gaoyufu.com.zone";
allow-update { none; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
3、配置正向解析文件
# cp -a /var/named/named.localhost /var/named/gaoyufu.com.zone
# vim /var/named/gaoyufu.com.zone
$TTL 86400
@ IN SOA rac1.gaoyufu.com. root.gaoyufu.com. (
42 ; serial (d.adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
@ IN NS rac1.gaoyufu.com.
rac1 IN A 192.168.1.10
rac2 IN A 192.168.1.20
rac-scan IN A 192.168.1.100
rac1-vip IN A 192.168.1.11
rac2-vip IN A 192.168.1.12
4、检查配置文件
# named-checkconf -z /etc/named.conf
5、启动DNS服务
# systemctl start named
# systemctl enable named
6、配置客户端
两个节点都做
# vim /etc/resolv.conf
domain gaoyufu.com
nameserver 192.168.1.10
nameserver 223.5.5.5
8、修改网卡配置文件
注意DNS顺序要不颠倒,因为DNS是根据序号顺序进行解析的。
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
........
DNS1=192.168.1.1
DNS2=223.5.5.5
# systemctl restart network
9、测试
# nslookup
五、添加共享磁盘
1、VMware虚拟机添加共享磁盘
在安装数据库集群 Oracle RAC 时会用到共享磁盘,在 VMware 虚拟机中添加共享磁盘的步骤如下
1、创建虚拟磁盘
1、进入vmware 安装目录查看 vmware-vdiskmanager.exe 命令
PS C:\Program Files (x86)\VMware\VMware Workstation> dir vmware-vdiskmanager.exe
目录: C:\Program Files (x86)\VMware\VMware Workstation
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2024/2/12 17:51 1699776 vmware-vdiskmanager.exe
执行 vmware-vdiskmanager.exe 命令创建虚拟磁盘
.\vmware-vdiskmanager.exe -c -s 20gb -a lsilogic -t 2 E:\virtual-machine\sdisk1.vmdk
.\vmware-vdiskmanager.exe -c -s 20gb -a lsilogic -t 2 E:\virtual-machine\sdisk2.vmdk
.\vmware-vdiskmanager.exe -c -s 20gb -a lsilogic -t 2 E:\virtual-machine\sdisk3.vmdk
.\vmware-vdiskmanager.exe -c -s 35gb -a lsilogic -t 2 E:\virtual-machine\sdisk4.vmdk
.\vmware-vdiskmanager.exe -c -s 35gb -a lsilogic -t 2 E:\virtual-machine\sdisk5.vmdk
.\vmware-vdiskmanager.exe -c -s 35gb -a lsilogic -t 2 E:\virtual-machine\sdisk6.vmdk
.\vmware-vdiskmanager.exe -c -s 20gb -a lsilogic -t 2 E:\virtual-machine\sdisk7.vmdk
.\vmware-vdiskmanager.exe -c -s 20gb -a lsilogic -t 2 E:\virtual-machine\sdisk8.vmdk
.\vmware-vdiskmanager.exe -c -s 50gb -a lsilogic -t 2 E:\virtual-machine\sdisk9.vmdk
.\vmware-vdiskmanager.exe -c -s 50gb -a lsilogic -t 2 E:\virtual-machine\sdisk10.vmdk
.\vmware-vdiskmanager.exe -c -s 50gb -a lsilogic -t 2 E:\virtual-machine\sdisk11.vmdk
参数说明:
(1)-c:创建虚拟磁盘。必须用 -a, -s 和 -t 并指定选项参数,并且需要指定所要创建的虚拟磁盘文件的文件名。
(2)-s <n>:指定虚拟磁盘的大小,用 GB 或 MB 做单位。IDE 和 SCSI 适配器的容量范围为最小100MB,最大950GB。
(3)-a [ ide | buslogic | lsilogic ]:指定磁盘适配器的类型,在创建新的虚拟磁盘时必须指定类型。类型选项如下:
ide —— IDE接口适配器
buslogic —— BusLogic SCSI接口适配器
lsilogic —— LSI Logic SCSI接口适配器
(4)-t [0|1|2|3]:磁盘类型标识。在创建一个新的虚拟磁盘或者重新配置一个虚拟磁盘时必须指定虚拟磁盘的类型。类型选项如下:
0 —— 创建一个包含在单一虚拟文件中的可增长虚拟磁盘
1 —— 创建一个被分割为每个文件2GB大小的可增长虚拟磁盘
2 —— 创建一个包含在单一虚拟文件中的预分配虚拟磁盘
3 —— 创建一个被分割为每个文件2GB大小的预分配虚拟磁盘
2、修改vmx文件
在需要挂载的虚拟机目录下修改vmx后缀的文件,在末尾追加以下内容,根据实际情况修改文件路径。默认情况下,SCSI 控制器分配给虚拟设备节点 (1:7),因此该设备节点不可用于硬盘或 SCSI 设备,遇到可跳过。
disk.locking = "FALSE"
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
diskLib.dataCacheMinReadAheadSize = "0"
diskLib.dataCachePageSize = "4096"
diskLib.maxUnsyncedWrites = "0"
scsi1.present = "TRUE"
scsi1.virtualDev = "lsilogic"
scsi1.sharedBus = "VIRTUAL"
scsi1:1.present = "TRUE"
scsi1:1.mode = "independent-persistent"
scsi1:1.fileName = "E:\virtual-machine\sdisk1.vmdk"
scsi1:1.deviceType = "disk"
scsi1:1.redo = ""
scsi1:2.present = "TRUE"
scsi1:2.mode = "independent-persistent"
scsi1:2.fileName = "E:\virtual-machine\sdisk2.vmdk"
scsi1:2.deviceType = "disk"
scsi1:2.redo = ""
scsi1:3.present = "TRUE"
scsi1:3.mode = "independent-persistent"
scsi1:3.fileName = "E:\virtual-machine\sdisk3.vmdk"
scsi1:3.deviceType = "disk"
scsi1:3.redo = ""
scsi1:4.present = "TRUE"
scsi1:4.mode = "independent-persistent"
scsi1:4.fileName = "E:\virtual-machine\sdisk4.vmdk"
scsi1:4.deviceType = "disk"
scsi1:4.redo = ""
scsi1:5.present = "TRUE"
scsi1:5.mode = "independent-persistent"
scsi1:5.fileName = "E:\virtual-machine\sdisk5.vmdk"
scsi1:5.deviceType = "disk"
scsi1:5.redo = ""
scsi1:6.present = "TRUE"
scsi1:6.mode = "independent-persistent"
scsi1:6.fileName = "E:\virtual-machine\sdisk6.vmdk"
scsi1:6.deviceType = "disk"
scsi1:6.redo = ""
scsi1:8.present = "TRUE"
scsi1:8.mode = "independent-persistent"
scsi1:8.fileName = "E:\virtual-machine\sdisk7.vmdk"
scsi1:8.deviceType = "disk"
scsi1:8.redo = ""
scsi1:9.present = "TRUE"
scsi1:9.mode = "independent-persistent"
scsi1:9.fileName = "E:\virtual-machine\sdisk8.vmdk"
scsi1:9.deviceType = "disk"
scsi1:9.redo = ""
scsi1:10.present = "TRUE"
scsi1:10.mode = "independent-persistent"
scsi1:10.fileName = "E:\virtual-machine\sdisk9.vmdk"
scsi1:10.deviceType = "disk"
scsi1:10.redo = ""
scsi1:11.present = "TRUE"
scsi1:11.mode = "independent-persistent"
scsi1:11.fileName = "E:\virtual-machine\sdisk10.vmdk"
scsi1:11.deviceType = "disk"
scsi1:11.redo = ""
scsi1:12.present = "TRUE"
scsi1:12.mode = "independent-persistent"
scsi1:12.fileName = "E:\virtual-machine\sdisk11.vmdk"
scsi1:12.deviceType = "disk"
scsi1:12.redo = ""
2、创建分区
任意一个节点执行
#!/bin/bash
disk=$(lsblk -d | grep sd | grep -v $(df -h | grep boot | cut -c 6-8) | awk {'print $1'})
for i in $disk
do
fdisk /dev/$i<<EOF
n
p
1
2048
w
EOF
done
另一个节点执行识别分区变化
partprobe
3、修改磁盘属组
1、查询需要的盘符
for i in b c d e f g h i j k l # 这里需要列出需要的盘符,根据实际修改
do
echo -n "/dev/sd$i: "
/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i
done
2、根据盘符改变属组
两个节点都要执行
#!/bin/bash
cat > /etc/udev/rules.d/99-oracle-asmdevices.rules <<EOF
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", \
PROGRAM="/usr/lib/udev/scsi_id -g -u -d \$devnode", \
RESULT=="36000c293bc2b6ebe2cd2acd378e63baa", \
RUN+="/bin/sh -c 'mknod /dev/ocrdisk01 b \$major \$minor; chown grid:asmadmin /dev/ocrdisk01; chmod 0660 /dev/ocrdisk01'"
# Repeat for other ASM disks
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", \
PROGRAM="/usr/lib/udev/scsi_id -g -u -d \$devnode", \
RESULT=="36000c290f07ae1f61a75d00d9f1ef57c", \
RUN+="/bin/sh -c 'mknod /dev/ocrdisk02 b \$major \$minor; chown grid:asmadmin /dev/ocrdisk02; chmod 0660 /dev/ocrdisk02'"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", \
PROGRAM="/usr/lib/udev/scsi_id -g -u -d \$devnode", \
RESULT=="36000c293d97da2cd31783b010d7fc3ce", \
RUN+="/bin/sh -c 'mknod /dev/ocrdisk03 b \$major \$minor; chown grid:asmadmin /dev/ocrdisk03; chmod 0660 /dev/ocrdisk03'"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", \
PROGRAM="/usr/lib/udev/scsi_id -g -u -d \$devnode", \
RESULT=="36000c298c3f2d76c2cd9f65b86a1cec2", \
RUN+="/bin/sh -c 'mknod /dev/mgmtdisk01 b \$major \$minor; chown grid:asmadmin /dev/mgmtdisk01; chmod 0660 /dev/mgmtdisk01'"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", \
PROGRAM="/usr/lib/udev/scsi_id -g -u -d \$devnode", \
RESULT=="36000c29254334dd3ff284f037628b58c", \
RUN+="/bin/sh -c 'mknod /dev/mgmtdisk02 b \$major \$minor; chown grid:asmadmin /dev/mgmtdisk02; chmod 0660 /dev/mgmtdisk02'"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", \
PROGRAM="/usr/lib/udev/scsi_id -g -u -d \$devnode", \
RESULT=="36000c2953ff37067707f29d85f2aca07", \
RUN+="/bin/sh -c 'mknod /dev/mgmtdisk03 b \$major \$minor; chown grid:asmadmin /dev/mgmtdisk03; chmod 0660 /dev/mgmtdisk03'"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", \
PROGRAM="/usr/lib/udev/scsi_id -g -u -d \$devnode", \
RESULT=="36000c292d38d6425b46a90ac77836092", \
RUN+="/bin/sh -c 'mknod /dev/redodisk01 b \$major \$minor; chown grid:asmadmin /dev/redodisk01; chmod 0660 /dev/redodisk01'"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", \
PROGRAM="/usr/lib/udev/scsi_id -g -u -d \$devnode", \
RESULT=="36000c2994761fc766d12e3bbdf8a0081", \
RUN+="/bin/sh -c 'mknod /dev/redodisk02 b \$major \$minor; chown grid:asmadmin /dev/redodisk02; chmod 0660 /dev/redodisk02'"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", \
PROGRAM="/usr/lib/udev/scsi_id -g -u -d \$devnode", \
RESULT=="36000c29870ebceb42b7d87e3e211427f", \
RUN+="/bin/sh -c 'mknod /dev/datadisk01 b \$major \$minor; chown grid:asmadmin /dev/datadisk01; chmod 0660 /dev/datadisk01'"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", \
PROGRAM="/usr/lib/udev/scsi_id -g -u -d \$devnode", \
RESULT=="36000c29638606518cf4f7c27e6acf300", \
RUN+="/bin/sh -c 'mknod /dev/datadisk02 b \$major \$minor; chown grid:asmadmin /dev/datadisk02; chmod 0660 /dev/datadisk02'"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", \
PROGRAM="/usr/lib/udev/scsi_id -g -u -d \$devnode", \
RESULT=="36000c292413e81c08c054d2eabbb222c", \
RUN+="/bin/sh -c 'mknod /dev/datadisk02 b \$major \$minor; chown grid:asmadmin /dev/datadisk03; chmod 0660 /dev/datadisk03'"
EOF
cat >> /etc/udev/rules.d/99-oracle-asmdevices.rules <<EOF
ACTION=="add|change", ENV{ID_SERIAL}=="36000c293bc2b6ebe2cd2acd378e63baa", NAME="ocrdisk01", OWNER="grid", GROUP="asmadmin", MODE="0660"
ACTION=="add|change", ENV{ID_SERIAL}=="36000c290f07ae1f61a75d00d9f1ef57c", NAME="ocrdisk02", OWNER="grid", GROUP="asmadmin", MODE="0660"
ACTION=="add|change", ENV{ID_SERIAL}=="36000c293d97da2cd31783b010d7fc3ce", NAME="ocrdisk03", OWNER="grid", GROUP="asmadmin", MODE="0660"
ACTION=="add|change", ENV{ID_SERIAL}=="36000c298c3f2d76c2cd9f65b86a1cec2", NAME="datadisk01", OWNER="grid", GROUP="asmadmin", MODE="0660"
ACTION=="add|change", ENV{ID_SERIAL}=="36000c29254334dd3ff284f037628b58c", NAME="datadisk02", OWNER="grid", GROUP="asmadmin", MODE="0660"
ACTION=="add|change", ENV{ID_SERIAL}=="36000c2953ff37067707f29d85f2aca07", NAME="datadisk03", OWNER="grid", GROUP="asmadmin", MODE="0660"
ACTION=="add|change", ENV{ID_SERIAL}=="36000c292d38d6425b46a90ac77836092", NAME="asmdisk01", OWNER="grid", GROUP="asmadmin", MODE="0660"
ACTION=="add|change", ENV{ID_SERIAL}=="36000c2994761fc766d12e3bbdf8a0081", NAME="asmdisk02", OWNER="grid", GROUP="asmadmin", MODE="0660"
ACTION=="add|change", ENV{ID_SERIAL}=="36000c29870ebceb42b7d87e3e211427f", NAME="asmdisk03", OWNER="grid", GROUP="asmadmin", MODE="0660"
ACTION=="add|change", ENV{ID_SERIAL}=="36000c29638606518cf4f7c27e6acf300", NAME="datadisk01", OWNER="grid", GROUP="asmadmin", MODE="0660"
ACTION=="add|change", ENV{ID_SERIAL}=="36000c292413e81c08c054d2eabbb222c", NAME="datadisk02", OWNER="grid", GROUP="asmadmin", MODE="0660"
EOF
udevadm control --reload-rules && udevadm trigger --type=devices --action=change
3、查看是否成功
注意要等几秒才会修改完毕
# ls -Ll /dev/sd*
brw-rw---- 1 root disk 8, 0 3月 11 21:07 /dev/sda
brw-rw---- 1 root disk 8, 1 3月 11 21:07 /dev/sda1
brw-rw---- 1 root disk 8, 2 3月 11 21:07 /dev/sda2
brw-rw---- 1 grid asmadmin 8, 16 3月 11 21:07 /dev/sdb
brw-rw---- 1 grid asmadmin 8, 17 3月 11 21:07 /dev/sdb1
brw-rw---- 1 grid asmadmin 8, 32 3月 11 21:07 /dev/sdc
brw-rw---- 1 grid asmadmin 8, 33 3月 11 21:07 /dev/sdc1
brw-rw---- 1 grid asmadmin 8, 48 3月 11 21:07 /dev/sdd
brw-rw---- 1 grid asmadmin 8, 49 3月 11 21:07 /dev/sdd1
brw-rw---- 1 grid asmadmin 8, 64 3月 11 21:07 /dev/sde
brw-rw---- 1 grid asmadmin 8, 65 3月 11 21:07 /dev/sde1
brw-rw---- 1 grid asmadmin 8, 80 3月 11 21:07 /dev/sdf
brw-rw---- 1 grid asmadmin 8, 81 3月 11 21:07 /dev/sdf1
brw-rw---- 1 grid asmadmin 8, 96 3月 11 21:07 /dev/sdg
brw-rw---- 1 grid asmadmin 8, 97 3月 11 21:07 /dev/sdg1
brw-rw---- 1 grid asmadmin 8, 112 3月 11 21:07 /dev/sdh
brw-rw---- 1 grid asmadmin 8, 113 3月 11 21:07 /dev/sdh1
brw-rw---- 1 grid asmadmin 8, 128 3月 11 21:07 /dev/sdi
brw-rw---- 1 grid asmadmin 8, 129 3月 11 21:07 /dev/sdi1
brw-rw---- 1 grid asmadmin 8, 144 3月 11 21:07 /dev/sdj
brw-rw---- 1 grid asmadmin 8, 145 3月 11 21:07 /dev/sdj1
brw-rw---- 1 grid asmadmin 8, 160 3月 11 21:07 /dev/sdk
brw-rw---- 1 grid asmadmin 8, 161 3月 11 21:07 /dev/sdk1
brw-rw---- 1 grid asmadmin 8, 176 3月 11 21:07 /dev/sdl
brw-rw---- 1 grid asmadmin 8, 177 3月 11 21:07 /dev/sdl1
# ls -Ll /dev/*disk0*
brw-rw---- 1 grid asmadmin 8, 144 3月 11 21:07 /dev/datadisk01
brw-rw---- 1 grid asmadmin 8, 176 3月 11 21:07 /dev/datadisk02
brw-rw---- 1 grid asmadmin 8, 64 3月 11 21:07 /dev/mgmtdisk01
brw-rw---- 1 grid asmadmin 8, 80 3月 11 21:07 /dev/mgmtdisk02
brw-rw---- 1 grid asmadmin 8, 96 3月 11 21:07 /dev/mgmtdisk03
brw-rw---- 1 grid asmadmin 8, 16 3月 11 21:07 /dev/ocrdisk01
brw-rw---- 1 grid asmadmin 8, 32 3月 11 21:07 /dev/ocrdisk02
brw-rw---- 1 grid asmadmin 8, 48 3月 11 21:07 /dev/ocrdisk03
brw-rw---- 1 grid asmadmin 8, 112 3月 11 21:07 /dev/redodisk01
brw-rw---- 1 grid asmadmin 8, 128 3月 11 21:07 /dev/redodisk02
六、安装Grid Infrastructure软件
从 Oracle Grid Infrastructure 12 c第 2 版 (12.2) 开始,安装介质已替换为 Oracle Grid Infrastructure 安装程序的 zip 文件。您必须将zip文件解压缩到您希望 Grid 主目录所在的目录,然后运行脚本gridSetup.sh
来启动 Oracle Grid Infrastructure 安装。
Oracle Grid Infrastructure 安装至少需要 8 GB 内存。
在安装Grid Infrastructure软件时,会同时安装Clusterware软件和ASM软件,这时就可以创建ASM实例和ASM磁盘组,并把OCR和Voting文件存储在ASM磁盘组中。
1、准备软件包
节点1上准备压缩包V840012-01.zip,切到 grid 用户执行,请勿使用 root 用户解压,否则会造成权限问题。
su - grid
cd /u01/app/12.2.0/grid/
unzip V840012-01.zip
注意:12.2.0.1 grid安装解压时,必须要解压到GRID_HOME
中,与以往旧版本的grid安装有些许区别,不然会直接将解压路径传至2节点作为GRID_HOME
使用,与期望的安装目录有出入
2、配置免密
grid安装包中同样内置有免密的脚本,可以很轻松对四个账号进行免密配置,只需要输入几次密码即可。使用root用户执行。
# cd /u01/app/12.2.0/grid/deinstall
# sh sshUserSetup.sh -user grid -hosts "rac1 rac2" -advanced -exverify -confirm -noPromptPassphrase
# sh sshUserSetup.sh -user Oracle -hosts "rac1 rac2" -advanced -exverify -confirm -noPromptPassphrase
3、安装 cvuqdisk RPM 包
如果您不使用 Oracle 预安装 RPM,并且想要使用集群验证实用程序,则必须安装 cvuqdisk
RPM包。
如果没有cvuqdisk
,群集验证实用程序无法发现共享磁盘,并且在运行群集验证实用程序时您会收到错误消息“Package cvuqdisk notinstalled”。
正常安装找到 cvuqdisk 包,好在 grid安装包中内置有cvuqdisk rpm 安装包,它位于目录中$Grid_home/cv/rpm
。,可以进行安装并传输到另一个节点。
# rpm -ivh "/u01/app/12.2.0/grid/cv/rpm/cvuqdisk-1.0.10-1.rpm"
# scp /u01/app/12.2.0/grid/cv/rpm/cvuqdisk-1.0.10-1.rpm rac2:/tmp
# rpm -ivh /tmp/cvuqdisk-1.0.10-1.rpm # rac2节点执行
4、安装前预检查
su - grid
cd /u01/app/12.2.0/grid
./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -fixup -verbose > /home/grid/precluvy.log
可以另开一个终端查看precluvy.log中的日志,如果存在问题会提示执行指定脚本进行修复,修复完成后按ENTER结束。
5、开始安装
1、设置显示窗口
使用root用户执行
export DISPLAY=:0.0
echo $DISPLAY
xhost +
切换grid用户
su - grid
export DISPLAY=:0.0
echo $DISPLAY
xhost +
2、开启安装页面
$ cd /u01/app/12.2.0/grid # grid用户下
$ ./gridSetup.sh
在这里,安装程序需要对操作系统进行简单的验证,主要包括/tmp文件系统的大小、交换空间的大小、显示器的分辨率等。在这些验证都顺利通过之后,安装程序会显示下面所示的安装窗口。
在配置选项安装窗口中,需要选择如何安装Grid Infrastructure软件。在这里,用户有四种选择:
- 为一个新集群安装并配置Grid Infrastructure。
- 为一个单独的数据库服务器安装并配置Grid Infrastructure。
- 升级Grid Infrastructure。
- 只安装Grid Infrastructure软件,不对其进行配置。
选择第一项,单击“下一步”按钮,进入下一个安装窗口。
在网格即插即用的安装窗口中,需要指定RAC集群中所有节点的信息。首先需要指定SCAN的名称,这个名称默认就是集群的名称。在整个网络中,这个名称必须能够解析为一个到三个IP地址,客户端应用程序就是通过SCAN来访问集群数据库的。SCAN的默认名称为server-cluster。如果没有DNS服务器会出现无法解析的警告,可以忽略直接进行下一步。
在默认情况下,当前节点被当做集群中的第一个节点。在集群节点信息安装窗口中,列出了当前节点的公共IP地址和VIP对应的主机名称。单击“添加”按钮,可以把其他所有节点添加到RAC集群中。
在添加集群节点信息安装窗口中,一次可以添加一个节点,在这里需要指定节点的公共IP地址和VIP对应的主机名称。在此之前,应该保证所有的主机名称都能被解析为对应的IP地址。可以根据实际情况选择合适的域名解析方法,如DNS、GNS、/etc/hosts文件等。这里我使用DNS。
每当一个节点被添加到RAC集群中之后,这个节点便出现在安装窗口中。按照这种方法,把所有的节点都添加到RAC集群中。如果希望从RAC集群中删除某个节点,在集群节点信息安装窗口中选择这个节点,然后单击“删除”按钮即可。
接下来就可以对SSH进行配置了。在集群节点信息所示的安装窗口中单击“SSH 连接”按钮,利用SSH对用户之间的对等关系进行自动配置。如果在执行安装程序之前已经手工配置了用户之间的对等关系,在这里就不需要对SSH进行配置了,只需要单击“测试”按钮对手工配置结果进行测试即可。
接下来需要指定RAC集群的公共网络和私有网络。在网络接口使用情况的安装窗口中,需要选择把哪个子网作为公共网络、哪个子网作为私有网络。选择结束后,单击“下一步”按钮结束。
从 Oracle Database 12 c第 2 版 (12.2) 开始,您可以在 Oracle Grid Infrastructure 安装期间通过复选框启用并自动配置 Oracle ASM Filter Driver (Oracle ASMFD)。而且 Oracle Direct NFS Client 开始支持并行 NFS。这里直接选择ASM。
RAC 12.2增加了一个GIMR的概念,所谓GIMR其实就是用来存储集群信息的一个数据库,可以单独部署在一个磁盘组里,也可以和OCR共用一个磁盘组。这里要注意的是,如果你选了YES,即为GIMR创建单独的MGMT磁盘组,那么OCR盘大小20GB左右就可以,如果你选择NO,即选择和OCR共用磁盘组,磁盘组的容量需要40G(准备的说是3850MB)以上,否则会出现空间不足的错误。
在创建ASM磁盘组的安装窗口中,需要指定ASM磁盘组的信息,包括磁盘组的名称、允余级别以及磁盘组中所包含的磁盘。在默认情况下,磁盘组的名称为DATA。为了保证磁盘组中数据的安全,防止磁盘损坏,对磁盘组采取穴余的方法进行保护。冗余级别分为四级:弹性、高、普通和外部。弹性是一种新型磁盘组类型,具有灵活的文件冗余、镜像分割、冗余变更等特性,Flex磁盘组可以将具有不同冗余要求的文件整合到单个磁盘组中,它还为数据库提供了更改其文件冗余的功能,磁盘组中需要三块磁盘。高指的是在磁盘组中需要三块磁盘,这三块磁盘上的内容完全一样互为镜像,磁盘组的可用空间为磁盘组容量的三分之一。普通指的是在磁盘组中需要两块磁盘,这两块磁盘上的内容完全一样,互为镜像磁盘组的可用空间为磁盘组容量的二分之一。外部指的是磁盘数据的安全是通过存储设备本身的安全机制来保证的,如果在外部存储设备中已经划分了RAID,可以选择外部穴余机制。
如果在所有节点中都能够正确识别共享存储设备中的磁盘,而且在操作系统中已经正确地设置了这些磁盘的权限和所有者,那么在安装窗口中将列出这些可用的磁盘。如果在操作系统中为磁盘指定了其他名称,并且希望通过这样的名称使用这些磁盘,而不是磁盘本身的名称,那么在安装窗口中可能无法显示希望的名称。在这种情况下,可以单击“更改搜索路径”按钮,手工指定磁盘的名称和路径。在指定的字符串中可以包含通配符,RAC安装程序将按照输入的字符串重新搜索可用的磁盘设备。
在安装 Oracle Standalone Cluster 期间,如果您MGMT
为 Grid Infrastructure Management Repository (GIMR) 创建磁盘组,则安装程序要求您使用具有至少 35 GB 可用空间的磁盘组。
指定ASM口令,这里我使用同一个口令,示例:eKC5ovTGawh8KPPr
接下来需要指定软件的安装路径。一般来说,Grid Infrastructure软件可以安装到每个节点的本地目录下,而OCR和Voting文件必须位于共享存储上,所有节点都需要访问这两种文件。如果软件安装者的ORACLE_BASE和ORACLE_HOME环境变量设置正确,那么它们所代表的目录将自动出现在安装窗口中。
可以输入root用户密码,实现自动执行配置脚本,无需登录到每个节点手动执行。
如果不输入密码的话,在把软件安装到所有节点之后,安装程序将弹出一个窗口,在这个窗口中列出了需要在所有节点上执行的以下两个脚本。需要注意的是这两个脚本的执行顺序,先在所有节点上执行第一个脚本,然后在所有节点上执行第二个脚本。其中第二个脚本在第一个节点和其他节点上必须以串行方式执行,即在一个节点上执行结束之后,才能在第二个节点上执行。当root.sh脚本在第一个节点上执行成功之后,便可以在其他所有节点上同时执行。
/u01/app/oraInventory/orainstRoot.sh
/u01/app/12.2.0/grid/root.sh
6、安装完成
7、检查GI状态
# su - grid
$ crsctl status res -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ASMNET1LSNR_ASM.lsnr
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
ora.DATA.dg
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
ora.LISTENER.lsnr
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
ora.MGMT.dg
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
ora.chad
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
ora.net1.network
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
ora.ons
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE rac1 STABLE
ora.MGMTLSNR
1 ONLINE ONLINE rac1 169.254.247.244 10.1
0.10.10,STABLE
ora.asm
1 ONLINE ONLINE rac1 Started,STABLE
2 ONLINE ONLINE rac2 Started,STABLE
3 OFFLINE OFFLINE STABLE
ora.cvu
1 ONLINE ONLINE rac1 STABLE
ora.mgmtdb
1 ONLINE ONLINE rac1 Open,STABLE
ora.qosmserver
1 ONLINE ONLINE rac1 STABLE
ora.rac1.vip
1 ONLINE ONLINE rac1 STABLE
ora.rac2.vip
1 ONLINE ONLINE rac2 STABLE
ora.scan1.vip
1 ONLINE ONLINE rac1 STABLE
--------------------------------------------------------------------------------
七、自动存储管理 ASM
自动存储管理(ASM)是 Oracle Database 的一个特性,它为数据库管理员提供了一个在所有服务器和存储平台上均一致的简单存储管理接口。作为专门为 Oracle 数据库文件创建的垂直集成文件系统和卷管理器,ASM 提供了直接异步 I/O 的性能以及文件系统的易管理性。ASM 提供了可节省 DBA 时间的功能,以及管理动态数据库环境的灵活性,并且提高了效率。ASM 的主要优点有:
-
简化和自动化存储管理
-
提高存储利用率和敏捷性
-
提供可预测的性能、可用性和可伸缩性
1、预估所需磁盘大小
ASM 是以平台无关的方式提供了文件系统、逻辑卷管理器。ASM 可以条带化和镜像磁盘,从而实现了在数据库被加载的情况下添加或移除磁盘以及自动平衡 I/O以删除“热点”。在12C中,主要有以两个磁盘组,需要规划磁盘。
数据磁盘组,存放业务数据的,在虚拟存储上3块ASM数据磁盘是最佳实践,可以根据业务数据量大小来划分ASM磁盘大小。比如预期5年内业务数据可以达到1T,则建议ASM磁盘为3块400G。
日志盘磁盘组,存放归档日志文件的磁盘组,空间大小要结合客户要保存的归档日志量来评估,归档日志量和数据库的并发与繁忙程度有关。一般来讲小型库归档空间可设置为300G,即3*100
G。大型库需要多方面预估,但通常设置到1T是足够存放备份周期内的归档,3块400G。如果预估值大于这个数应该调整归档清理策略。若用户要求不开启归档,则该磁盘组可以用来存放Redo Log文件,单实例数据库30G空间足够存放Redo Log文件,故ASM磁盘大小为3*10G即可。
若当前需要搭建的集群是一个全新的数据库使用,需要估算以后数据库的数据大小及每天的归档日志大小,以便规划好磁盘空间大小;若本集群是作为迁移集群使用,可通过如下方式计算对应的磁盘空间。
1、数据盘大小
在规划asm磁盘数据盘的大小时,我们要基于当前数据库的大小及数据的增量,这里为了减轻后期维护磁盘的工作,建议规划磁盘的总大小应包括数据库未来三年的数据增量,基于Oracle RAC最佳实践方案的需求,建议数据盘数量要不小于3个,可以通过如下语句查询出规划的每个ASM数据盘的大小。为了后期磁盘的维护,建议ASM数据盘的大小为100GB以上。
预估的数据库每个数据盘的大小
select
round((select round(sum(bytes)/1024/1024/1024,2) from dba_segments)+
(select round((select sum(bytes)/1024/1024/1024 from dba_segments)/
(select round((months_between((select trunc(sysdate,'dd') from dual),(select trunc(created ,'dd') from v$database)))/12,2) from dual),2)*3
from dual)/3,0) from dual;
原理:取出当前数据库大小和未来三年数据库的预估增量的和,用这个和去除以数据盘数量3,得出预估的每块数据盘的大小
2、日志盘大小
当前规划日志盘用于存放归档日志,所以需要估算好源数据库每天产生的归档日志大小及归档日志最大保留的天数,这里建议归档日志保留的天数为30天,基于Oracle RAC最佳实践方案的要求,日志盘的数量为3块。
必须遵循,单块数据盘的大小>日志盘大小>单块仲裁盘大小
select
round((select (select sum(value / 1024 / 1024 / 1024)
from gv$sysstat
where name = 'redo size') /
(select round(sysdate - (select startup_time from v$instance))
from dual) redo_gb_per_day
from dual)*30/3,0)
from dual;
取出数据库每天产生的归档日志大小和规划的最大归档日志保留天数30的乘积,再除以日志盘数量3,得出预估的每块日志盘的大小
3、字符集
若新搭建的集群作为一套全新的数据库使用,需要确认数据库的字符集,若新搭建的集群是作为数据库的迁移目标数据库,那么需要在源端数据库查询源库的字符集,必须保证源数据库和新搭建的数据库字符集一致。
从 Oracle Database 12 c第 2 版 (12.2) 开始,从通用/事务处理或数据仓库模板创建的数据库的默认数据库字符集是 Unicode AL32UTF8。Oracle 建议您使用 Unicode AL32UTF8 作为数据库字符集。
SQL> select * from nls_database_parameters where parameter = 'NLS_LANGUAGE';
4、进程数与会话数
数据库进程包括前台进程和后台进程,使用专用连接时,每个会话启动一个进程。这里的进程数接近并发的会话数。具体按查询出来的数据设置进程数。
SQL> show parameter process
5、数据库内存
新库建议设置SGA为RAM大小的50%,PGA为RAM大小的25%,以下查询作为参考。
SQL> show parameter memory
SQL> show parameter sga
SQL> show parameter pga
2、ASM 添加磁盘组
$ asmca
八、安装数据库
节点1上准备介质V839960-01.zip
,切到Oracle
用户执行
su - Oracle
cd /u01/app/oracle/product/12.2.0
unzip V839960-01.zip
root
export DISPLAY=:0.0
echo $DISPLAY
xhost +
切换Oracle用户
su - Oracle
export DISPLAY=:0.0
echo $DISPLAY
xhost +
cd /u01/app/oracle/product/12.2.0/database
./runInstaller
这里选择仅安装数据库软件,创建和配置数据库的前提是已经配置好ASM。
接下来需要输入Oracle数据库软件的安装路径。只要软件安装者的环境变量设置正确,在安装窗口中将自动显示指定的安装路径。安装程序首先把软件安装到本地节点的指定目录下,然后利用SSH把软件复制到其他所有节点上。如果发现和环境变量不同请查看安装程序启动用户是否正确。
Oracle 12.2.0.1 Installation Fails With "PRVG-0449 : Proper soft limit for maximum stack size was not found on node "node1" [Expected >= "10240" ; Found = "8192"]" (文档 ID 2287806.1)
在MOS文档中提到:是一个未发布的Bug(Unpublished bug 25039206),截至2019年5月26日依然未发布。
解决方案:runfixup.sh 运行后,虚拟机退出(取消)当前安装程序,重启虚拟机后,再次运行 ./runInstaller ,预环境检查通过。
在的安装窗口中单击“安装”按钮,安装程序将开始真正的安装。Oracle数据库软件将首先被安装到本地的指定目录下,然后被复制到其他所有节点上。这个过程将持续较长一段时间。在软件被安装到所有节点上之后,安装程序将弹出另外一个窗口,在这个窗口中列出了需要在所有节点上执行的一个脚本。
执行完毕后出现以下输出表示安装完成。
# /u01/app/oracle/product/12.2.0/db/root.sh
Performing root user operation.
The following environment variables are set as:
ORACLE_OWNER= Oracle
ORACLE_HOME= /u01/app/oracle/product/12.2.0/db
Enter the full pathname of the local bin directory: [/usr/local/bin]:
The contents of "dbhome" have not changed. No need to overwrite.
The contents of "oraenv" have not changed. No need to overwrite.
The contents of "coraenv" have not changed. No need to overwrite.
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
九、创建数据库
如果Clusterware中的各个服务都运行正常,Oracle数据库软件已经安装,而且共享存储设备已经配置完毕,现在就可以开始创建集群数据库了。这里存储方式是ASM磁盘组。
以Oracle软件安装者身份登录系统,在其中一个节点上打开一个终端窗口,然后执行dbca命令,开始创建数据库。
$ dbca
在选择要创建的数据库类型安装窗口中,需要选择单实例数据库还是RAC数据库。如果创建单实例数据库,那么DBCA只在当前节点上创建一个数据库实例,然后创建一个数据库。如果选择创建RAC集群数据库,那么DBCA将在每个节点上创建一个数据库实例,然后创建一个数据库。在这里选择RAC数据库,单击“下一步”按钮继续。
数据库模板 | 适用情况 |
---|---|
定制数据库 | 适用于从零开始创建数据库的情况。用户可以对数据库的设置进行灵活的控制 |
一般用途或事务处理 | 适用于一般用途的数据库。在这类数据库中,既有数据查询操作,也有DML操作,而且二者所占的比重相差不大,或者DML访问的比例更大一些 |
数据仓库 | 适用于数据仓库。在这类数据库中,用户主要的访问类型是查询,而DML操作很少 |
接下来需要指定数据库和实例的名称。其中数据库的名称可以是带完整域名的“全局数据库名称”,一般可以把数据库服务器所在的网络域名映射为数据库名称中的域名,比如可以把数据库的全局名称指定为“orcl.gaoyufu.com”。实例名称在这里实际上只是实例名称的前缀,如果将这个前缀指定为rac,那么在第一个节点上的实例名称为rac1,第二个节点上的实例名称为rac2,以此类推。
内存为默认不用动
进程调整为1500
字符集选择AL32UTF8
接下来需要对EM进行配置。EM是一种基于Web的图形化管理工具,利用这种工具,管理员可以对数据库乃至整个RAC集群进行远程管理。这种工具虽然使用起来很方便,但是由于在后台需要启动一个服务,这个服务将消耗大量的系统资源,所以对整个数据库的性能有较大的影响。
使用同一个管理口令,示例:Root_123456
REDOLOG设置为6个,每个500M
备注:监听和数据库实例默认都是启动的
十、数据库优化
1、开启大页内存验证
# grep -i hugepage /proc/meminfo
AnonHugePages: 14336 kB
HugePages_Total: 2596
HugePages_Free: 1420
HugePages_Rsvd: 1
HugePages_Surp: 0
Hugepagesize: 2048 kB
2、关闭透明大页验证
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
3、SGA和PGA优化验证
当sga_target参数配置大小为操作系统内存的60%左右时证明SGA配置已优化;当pga_aggregate_target参数配置为操作系统内存的15%左右时证明PGA配置已优化
$ sqlplus / as sysdba
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
allow_group_access_to_sga boolean FALSE
lock_sga boolean FALSE
pre_page_sga boolean TRUE
sga_max_size big integer 2352M
sga_min_size big integer 0
sga_target big integer 2352M
unified_audit_sga_queue_size integer 1048576
SQL> show parameter pga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_limit big integer 4500M
pga_aggregate_target big integer 780M
4、调整processes大小
$ sqlplus / as sysdba
SQL> show parameter pga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_limit big integer 4500M
pga_aggregate_target big integer 780M
SQL> show parameter processes
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 1
asm_io_processes integer 20
db_writer_processes integer 1
gcs_server_processes integer 2
global_txn_processes integer 1
job_queue_processes integer 4000
log_archive_max_processes integer 4
processes integer 1500
5、优化redo log组验证
$ sqlplus / as sysdba
SQL> select group#,thread# , bytes/1024/1024 , members from v$log;
评论区