【前言】
最近应老刘的一邀(欢迎关注老刘公众号”bisal的个人杂货铺”):交流下RAC的实际生产安装部署,于是有了此文;一是为了交流时清晰高效;二是也是为了自己留存。
最近自己已经感受到文档留存的魅力,即可以帮助别人,更多的是帮助了自己。近期的如下文章在实际生产中过程中均有所涉及。
本文为RHEL7.1环境下安装配置RAC 11g的实操过程,具有生产指导性。因篇幅很长,步骤详尽,请耐心看。
一、 准备工作
1节点命名规划
主备机节点命名规划:
主机的节点名称规划为racbk1。
备机的节点名称规划为racbk2。
2双机集群命名规划
在安装CRS 过程中,集群名称: ethanDB
3磁盘资源划分命名规划
用途 | 磁盘 | LUN大小 | RAID类型 | 访问主机(节点) | 文件系统 |
OCR_VOTE(RAC集群使用) | OCR_VOTE1 | 10GB | RAID5 | racbk1,racbk2 | 裸设备 |
OCR_VOTE2 | 10GB | racbk1,racbk2 | 裸设备 | ||
OCR_VOTE3 | 10GB | racbk1,racbk2 | 裸设备 | ||
ORA_DATA1(数据文件) | ORA_DISK1 | 2TB | racbk1,racbk2 | 裸设备 | |
ORA_ARCH(归档与逻辑数据备份与数据恢复区) | ORA_ARCH | 700GB | racbk1,racbk2 | 裸设备 |
4网络IP规划
#more etc/hosts
# Public
192.168.22.11 racbk1
192.168.22.12 racbk2
#Virtual IP
192.168.22.14 racbk1vip
192.168.22.15 racbk2vip
# Private Interconnect
192.168.0.101 racbk1pri
192.168.0.102 racbk2pri
#Scan Virtual IP
192.168.22.16 rac-scan
5用户规划
建立用户和组:
groupadd -g 1022 asmoper
groupadd -g 1020 asmadmin
groupadd -g 1021 asmdba
groupadd -g 1010 oinstall
groupadd -g 1031 dba
useradd -u 1100 -g oinstall -G asmadmin,asmdba,asmoper,dba grid
useradd -u 1101 -g oinstall -G dba,asmdba oracle
分配目录及权限设置:
mkdir -p /oracle/app/11.2.0/grid
mkdir -p oracle/app/grid
mkdir -p oracle/app/oracle
chown -R grid:oinstall oracle
chowngrid:oinstall oracle/app/11.2.0/grid
chowngrid:oinstall oracle/app/grid
chownoracle:oinstall oracle/app/oracle
chmod -R 775 oracle
二、 检查和设置系统环境
1. 检查系统环境
1.1 检查系统内存配置:
操作系统版本检查:cat proc/version
检查系统架构:uname -m
检查内存:grep MemTotal proc/meminfo或使用free
检查交换空间:grep SwapTotal proc/meminfo或使用free
检查共享内存空间:
df -h dev/shm/
必须要确保共享内存大于ORACLE 中初始化参数MEMORY_MAX_TARGET 和MEMORY_TARGET(特别提示,这两个参数即自动内存管理特性对应的初始化参数)的值。
mount -t tmpfsshmfs -o size=16g dev/shm
tmpfs /dev/shmtmpfsdefaults,size=16G 0 0
加入到文件/etc/fstab,系统重启了也生效。
shmfs dev/shmtmpfs size=16g 0
检查临时目录空间:df -k tmp
检查文件系统空间:df–h
显示VG卷组信息:vgdisplay
显示LV逻辑卷信息:lvdisplay
系统包的检查:rpm–qa|greppackage_name
查询不同架构的RPM包版本:
rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n" | grep package_name
1.2. RHEL7.1 安装Oracle11gR2版本要求
操作系统包安装及配置:
make-3.82-21.el7
binutils-2.23.52.0.1-12.el7.x86_64
compat-libcap1-1.10-3.el7.x86_64
gcc-4.8.2-3.el7.x86_64
gcc-c++-4.8.2-3.el7.x86_64
glibc-2.17-36.el7.i686
glibc-2.17-36.el7.x86_64
glibc-devel-2.17-36.el7.i686
glibc-devel-2.17-36.el7.x86_64
glibc-common-2.17-78.el7
ksh
libaio-0.3.109-9.el7.i686
libaio-0.3.109-9.el7.x86_64
libaio-devel-0.3.109-9.el7.i686
libaio-devel-0.3.109-9.el7.x86_64
libgcc-4.8.2-3.el7.i686
libgcc-4.8.2-3.el7.x86_64
libstdc++-4.8.2-3.el7.i686
libstdc++-4.8.2-3.el7.x86_64
libstdc++-devel-4.8.2-3.el7.i686
libstdc++-devel-4.8.2-3.el7.x86_64
libXi-1.7.2-1.el7.i686
libXi-1.7.2-1.el7.x86_64
libXtst-1.2.2-1.el7.i686
libXtst-1.2.2-1.el7.x86_64
make-3.82-19.el7.x86_64
sysstat-10.1.5-1.el7.x86_64
elfutils-libelf(x86_64)-0.160-1.el7
elfutils-libelf-devel-0.160-1.el7.x86_64
compat-libstdc++-33(x86_64)-3.2.3
perl-Env-1.04-2.el7.noarch
cpp-4.8.2-16.el7.x86_64
glibc-headers-2.17-55.el7.x86_64
expat-2.1.0-8.el7.x86_64
mpfr-3.1.1-4.el7.x86_64
安装cvuqdisk包,文件在ORACLE安装盘/grid/rpm目录下
rpm -iv cvuqdisk-1.0.9-1.rpm
综上所述,执行以下命令将安装所需要的rpm包
yum -y install make binutils compat-libcap1 gccgcc-c++ glibc- glibc-develglibc-common kshlibaiolibgcclibstdc++ libXi- libXtstelfutils-libelf-develsysstatelfutils-libelfcompat-libstdc++-33 perl-Envcppglibc-headers expat mpfrglibc-*i686 glibc-devel-*i686libaio-*libaio-*.i686 libaio-devel-*i686 libgcc-*.i686 libstdc++*i686 libstdc++-devel-*i686 libXi*i686
1. 3设置系统环境
配置主机名
修改配置文件:/etc/hostname
[root@racbk1 ]# hostname
racbk1
[root@racbk2 ]# hostname
racbk2
1.4 禁用透明巨页
关闭透明巨页,
想看个人微信推文《Oracle Rac:关闭透明大页的原因及方法》
# cat sys/kernel/mm/transparent_hugepage/enabled
Add the following entry to the kernel boot line in the etc/grub.conf file:
transparent_hugepage=never
vi etc/default/grub
GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel/swap rd.lvm.lv=rhel/root rhgb quiet transparent_hugepage=never"
使修改生效:
grub2-mkconfig -o boot/grub2/grub.cfg
上面的方法重启之后好像并没生效,
可用以下方法:
或:Add the following lines in /etc/rc.local and reboot the server:
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
1.5关闭防火墙及安全增强SELINUX
selinuxiptables关闭
RAC的内部通信还要用到net=169.254.0.0/16的IP,
禁止防火墙和selinux
# systemctl disable firewalld
# systemctl stop firewalld
# 修改/etc/sysconfig/selinux确保SELINUX=disabled,然后执行setenforce 0或者reboot服务器以生效
最小配置,将SElinux设置为PERMISSIVE模式:
#setenforce 0
#getenforce
1.6 停用ntp时间服务
使用集群自带的ctss时间同步服务
systemctl is-enabled ntpdate.service
systemctl disable ntpdate.service
mv /etc/ntp.conf /etc/ntp.conf.original
rm /var/run/ntpd.pid
1.7 配置文件系统描述符
编辑文件/etc/security/limits.conf,加入以下条目:
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
grid soft stack 10240
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
1.8 配置内核参数
编辑文件/etc/sysctl.conf,加入以下条目:
fs.aio-max-nr = 1048576
kernel.shmall = 131858432
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
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
kernel.shmmax = 220200960000
1.9 设置环境变量
1 设置pam_limits
验证最新版的PAM 已经被加载,如果不存在的话,在 /etc/pam.d/login 文件中添加如下内容:
session required pam_limits.so
2 设置ulimit
Root的用户下,对于RAC应该按以下配置:
if [ /$USER = "oracle" ] || [ /$USER = "grid" ]; then
if [ /$SHELL = "/bin/ksh" ]; then
ulimit -u 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
3 设置文件.bashrc
修改GRID及ORACLE用户HOME目录下的文件:
$HOME/.bashrc
加入以下代码:
if [ -t 0 ]; then
sttyintr ^C
fi
4 设置文件.bash_profile
$HOME/.bash_profile
加入以下代码:
grid用户
实例1:
export ORACLE_SID=+ASM1
export ORACLE_BASE=/oracle/app/grid
export ORACLE_HOME=/oracle/app/11.2.0/grid
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=.:/usr/sbin:$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:$PATH
export NLS_DATE_FORMAT=yyyy-mm-dd:hh24:mi:ss
实例2:
export ORACLE_SID=+ASM2
export ORACLE_BASE=/oracle/app/grid
export ORACLE_HOME=/oracle/app/11.2.0/grid
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=.:/usr/sbin:$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:$PATH
export NLS_DATE_FORMAT=yyyy-mm-dd:hh24:mi:ss
oracle用户
实例1:
export ORACLE_SID=ethanDB1
export ORACLE_BASE=/oracle/app/oracle
export ORACLE_HOME=/oracle/app/oracle/product/11.2.0/dbhome_1
export PATH=.:/usr/sbin:$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:$PATH
export NLS_DATE_FORMAT=yyyy-mm-dd:hh24:mi:ss
实例2:
export ORACLE_SID=ethanDB2
export ORACLE_BASE=/oracle/app/oracle
export ORACLE_HOME=/oracle/app/oracle/product/11.2.0/dbhome_1
export PATH=.:/usr/sbin:$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:$PATH
export NLS_DATE_FORMAT=yyyy-mm-dd:hh24:mi:ss
5. 配置互信SSH
节点间信任关系配置过程如下:
对于grid 及oracle用户都执行一遍
各节点生成Keys:
[root@rac1 ~]# su - oracle
[oracle@rac1 ~]$ mkdir ~/.ssh
[oracle@rac1 ~]$ chmod 700 ~/.ssh
[oracle@rac1 ~]$ ssh-keygen -t rsa
[oracle@rac1 ~]$ ssh-keygen -t dsa
[root@rac2 ~]# su - oracle
[oracle@rac2 ~]$ mkdir ~/.ssh
[oracle@rac2 ~]$ chmod 700 ~/.ssh
[oracle@rac2 ~]$ ssh-keygen -t rsa
[oracle@rac2 ~]$ ssh-keygen -t dsa
在节点1上进行互信配置:
[oracle@rac1 ~]$ touch ~/.ssh/authorized_keys
[oracle@rac1 ~]$ cd ~/.ssh
[oracle@rac1 .ssh]$ ssh racbk1 cat ~/.ssh/id_rsa.pub >>authorized_keys
[oracle@rac1 .ssh]$ ssh racbk2 cat ~/.ssh/id_rsa.pub >>authorized_keys
[oracle@rac1 .ssh]$ ssh racbk1 cat ~/.ssh/id_dsa.pub >>authorized_keys
[oracle@rac1 .ssh]$ ssh racbk2 cat ~/.ssh/id_dsa.pub >>authorized_keys
在节点1把存储公钥信息的验证文件传送到节点2上
[oracle@rac1 .ssh]$ pwd
/home/oracle/.ssh
[oracle@rac1 .ssh]$ scpauthorized_keysracbk2:`pwd`
oracle@rac2's password:
authorized_keys 100% 1644 1.6KB/s 00:00
设置验证文件的权限
在每一个节点执行:
$ chmod 600 ~/.ssh/authorized_keys
启用用户一致性
在你要运行OUI的节点以oracle用户运行(这里选择rac1):
[oracle@rac1 .ssh]$ exec /usr/bin/ssh-agent $SHELL
[oracle@rac1 .ssh]$ ssh-add
Identity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa)
Identity added: /home/oracle/.ssh/id_dsa (/home/oracle/.ssh/id_dsa)
验证ssh配置是否正确
以oracle用户在所有节点分别执行:
sshracbk1 date
sshracbk2 date
sshracbk1priv date
sshracbk2priv date
如果不需要输入密码就可以输出时间,说明ssh验证配置成功。
必须把以上命令在两个节点都运行,每一个命令在第一次执行的时候需要输入yes。
原因为:
如果不运行这些命令,即使ssh验证已经配好,安装clusterware的时候也会出现错误:
The specified nodes are not clusterable
因为,配好ssh后,还需要在第一次访问时输入yes,才算是真正的无障碍访问其他服务器。
6. 配置UDEV
# cd /dev/mapper/
# ll
total 0
crw------- 1 root root 10, 236 Nov 24 2018 control
lrwxrwxrwx 1 root root 7 Jul 30 11:17 mpatha -> ../dm-4
lrwxrwxrwx 1 root root 7 Jul 30 11:17 mpathb -> ../dm-2
lrwxrwxrwx 1 root root 7 Jul 30 11:17 mpathc -> ../dm-5
lrwxrwxrwx 1 root root 7 Jul 30 11:35 mpathd -> ../dm-6
lrwxrwxrwx 1 root root 7 Jul 30 11:17 mpathe -> ../dm-3
lrwxrwxrwx 1 root root 7 Nov 24 2016 rhel-lv_oracle -> ../dm-7
lrwxrwxrwx 1 root root 7 Jul 30 11:17 rhel-root -> ../dm-0
lrwxrwxrwx 1 root root 7 Jul 30 11:17 rhel-swap -> ../dm-1
绑定ASM磁盘
cat /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="dm-2", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="dm-3", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="dm-4", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="dm-5", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="dm-6", OWNER="grid", GROUP="asmadmin", MODE="0660"
使kernel重新读取磁盘信息:
Load Updated Block Device Partitions (/sbin/partprobe)
/sbin/partprobe /dev/dm-2
/sbin/partprobe /dev/dm-3
/sbin/partprobe/dev/dm-4
/sbin/partprobe /dev/dm-5
/sbin/partprobe /dev/dm-6
检查权限是否正确:
# cd /dev
# ls -al /dev/dm-*
如果权限不对,需要修改权限:
chown -h grid:asmadmin /dev/dm-*
7 配置xmanager
安装xmanager 3.0以上版本,启动Xmanager - Passive ,使用ssh登录节点1,设置环境变量:
export DISPLAY=IP_addr:0.0 说明:此IP_addr为xmanager显示服务器IP地址。
8 防止ASM自动脱落
注意:此步骤必须要做,请看个人公众号:
vi /etc/systemd/logind.conf
将RemoveIPC=yes 修改为no
重启服务器生效
或执行如下命令:
# systemctl daemon-reload#
# systemctl restart systemd-logind
三、 安装配置Oracle数据库
1 安装前准备
介绍使用安装工具XManager安装grid的过程。
2 集群名称规划
集群名称:ethanDB
SCAN名称:rac-scan
SCAN端口:1521
集群软件安装:
集群环境检查:
在执行以下命令之前需要安装一个rpm包,这个包在grid/rpm/下
[grid@racbk1 grid]$ ./runcluvfy.sh stage -pre crsinst -n racbk1,racbk2 -fixup -verbose
检查结果需要均为pass(最后一项检查,由于没有配置DNS,所以是failed)。
安装:
cd /dev/soft/grid
./runInstaller
跳过软件更新:
选择安装与配置GRID:
安装类型:
产品语言选择:
设置集群名称、SCAN访问名及端口:
添加节点信息:
网络接口设置:
存储选择:
修改磁盘发现路径:
建立OCR_VOTE磁盘组:
故障隔离:
IPMI是智能平台管理接口,监视服务器的物理特征,如温度、电压、电扇工作状态等,处理挂机等隔离问题。
设置ASM管理组:
执行先决条件检查:
在执行root.sh脚本之前,添加ohas服务:
1. cd /etc/systemd/system/
touchohas.service
2. 编辑文件ohas.service加入以下文本
[Unit]
Description=Oracle High Availability Services
After=syslog.target
[Service]
ExecStart=/etc/init.d/init.ohasd run >/dev/null 2>&1 Type=simple
Restart=always
[Install]
WantedBy=multi-user.target
3. 运行以下命令(as root):
systemctl daemon-reload
systemctl enable ohas.service
systemctl start ohas.service
systemctl status ohas.service
4. 运行root.sh
在执行下root.sh脚本后,出现以下提示信息时请启动ohas服务:
:
Installing Trace File Analyzer
OLR initialization - successful
启动ohas服务:
查询安装程序是否已建立/etc/init.d/init.ohasd文件,如果已建立,则运行ohas服务:
systemctl start ohas.service
节点2执行root.sh
当显示:Adding Clusterware entries to inittab
启动ohas服务:
查询安装程序是否已建立/etc/init.d/init.ohasd文件,如果已建立,则运行ohas服务:
systemctl start ohas.service
/oracle/app/oraInventory/logs/installActions2016-11-11_08-03-12PM.log
四、 安装数据库软件
1 RAC集群时间同步
验证各集群节点上的时钟同步
cluvfy comp clocksync -n all -verbose
2安装数据库软件
介绍使用安装工具Xmanager安装 Oracle 数据库软件的过程。
前提条件:
安装数据库之前需要保证 CRS 状态正常。使用 grid 用户登录执行
crs_stat -t
或
crsctl stat res –t
登录Oracle用户
[root@racbk1 ~]# su - oracle
解压安装包完后
[oracle@racbk1 soft]$ cd database
[oracle@racbk1 database]$ ls
install readme.html response rpm runInstallersshsetup stage welcome.html
[oracle@racbk1 database]$ ./runInstaller
取消打勾选项
选择所有节点,进行ssh互信测试并通过
环境变量中设置的一致
安装到56%时报错,此错误为7版本的Linux系统安装Oracle的bug,可通过如下办法解决
安装到56%时报错,此错误为7版本的Linux系统安装Oracle的bug,可通过如下办法解决
安装时有出现一个错误:
Error in invoking target 'agent nmhs' of makefile
'/oracle/app/oracle/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk'
据说是Oracle的一个Bug,在新版系统下可能会表现出来.
解决方案: 保留安装过程,另外开启一个终端窗口,
将ins_emagent.mk文件中的$(MK_EMAGENT_NMECTL)更改为$(MK_EMAGENT_NMECTL) -lnnz11,然后在安装过程中点击Retry即可。
点击重试后继续安装
[root@racbk1 dbhome_1]# ./root.sh
Performing root user operation for Oracle 11g
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /oracle/app/oracle/product/11.2.0/dbhome_1
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.
Finished product-specific root actions.
至此,安装完毕。
3 使用ASMCA划分ASM卷组
建立orc、data1、arch1等卷组。
[grid@racbk1 grid]$ asmca
选择创建磁盘组
选择磁盘,选择外部冗余
4. 升级GRID及数据库软件到11.2.0.4.20161018
安装完成 GRID及数据库软件之后,需要升级GRID及数据库软件到11.2.0.4.20161018,主要解决GRID及数据库软件的 Bug。
补丁程序:GI PSU24436338 (11.2.0.4.20161018)
升级过程略
五、 创建数据库实例
1 使用DBCA创建数据库实例
数据库名称:ethanDB
实例名:ethanDB1,ethanDB2
选择管理模式:admin
终于开始可以安装RAC实例了
选择admin管理,
数据库名:ethanDB
选择所有节点:racbk1、racbk2
取消OEM管理工具,根据需要安装
在Standard Database Components 选择JVM和XML DB,其它不勾选。
将typical调整到75%,选择custom自动内存管理
2 创建Listener
$oracle下使用netca创建监听。
3 配置Oracle数据库服务端
配置tnsnames.ora文件
修改“$ORACLE_HOME/network/admin/tnsnames.ora”文件。
至此,整个RAC安装过程结束。
六、FAQ
常见安装错误:
1. 安装grid时,检查到ASM磁盘权限错误,RHEL7使用了符号链接,实际磁盘设备文件权限是正确的,可以忽略此信息。
2. 安装grid时,检查到缺少pdksh-5.2.14,RHEL7使用ksh,可以忽略此信息。
3. 安装grid,执行root.sh脚本时错误
在执行root.sh之前执行以下命令
/bin/dd if=/var/tmp/.oracle/npohasdof=/dev/null bs=1024 count=1
ohasd不能启动,因rhel7.1系统启动程序inittab问题,请使用systemctl新建服务。
【结语】
1. 本文是在RHEL7.1版本上安装11g oracle的详细过程,具有生产实操性,感兴趣的读者可以按此步骤进行操作;
2. RHEL7.1 上安装11g的实际过程还是踩了不少坑,主要是RHEL7.1 的新特性以及对11g还不是很兼容;本人涉及后续的 12c 在RHEL7上安装就几乎没多少坑踩了;
3.本文裸设备使用multipath做了融合,使用udev管理裸设备和更改权限;udev的介绍请参考以下链接:
https://blog.csdn.net/kevin_lcc/article/details/46380053
4. 为了避免系统层导致的坑,建议大家安装12c(包含)以上Oracle版本时,建议使用RHEL7.3以上版本或oracle linux 。
如果大家觉得此文有帮助,欢迎关注个人微信公众号;
长按识别二维码或公众号搜索“一森咖记”