CentOS 7.6 安装11.2.0.4 RAC

CentOS 7.6 安装11.2.0.4 RAC

1. 安装操作系

由于本次安装系统盘大于了2T,所以需要进行如下操作

1.1 说明

硬盘分区常见类型:

​ msdos(mbr分区)

​ gpt(gpt分区)

​ 系统安装默认采用mbr分区。

MBR 分区表(即主引导记录) 最大只支持2TB的分区,最多只支持4个主分区或3个主分区加一个扩展分区,信息只存储在一个区域;

GPT(即GUID分区表),是源自EFI标准的一种较新的磁盘分区表结构的标准,是未来磁盘分区的主要形式,与MBR分区方式相比,突破4个主分区限制,每个磁盘最多支持128个分区,支持大于2T的分区,最大卷可达 18EB,信息存储在多个区域,当一部分受损后可修复。

设置GPT方式有UEFI和BIOS两种方式,UEFI启动是一种新的主板引导项,与传统的Bios方式相比可以提高开机后操作系统的启动速度。如今很多主板已经直接支持UEFI,这种场景下可以直接通过UEFI的方式设置GPT方式,如若主板不支持,那么还得通过传统的Bios方式强制设置GPT方式。

1.2 UEFI启动

如果采用UEFI启动采用gpt分区,需要单独划分一个uefi分区。

挂载点位/boot/efi,大小几百兆即可,File System需要选择EFI System Partition

1.3 bios启动

  • 在选择安装以及测试安装介质界面,选在Install CentOS 7,按Tab键盘,Tab不管用,可以按E,然后在quiet后增加inst.gpt,然后保存继续安装。
  • 当然也可以不采用上述办法,可以在自定义分区磁盘界面,需要配置一个Device Type为Standard Partition,File System为BIOS boot的1024 KiB大小的分区。

1.4 本次安装解决办法

我们环境中,通过上述方法进行尝试,都无法成功安装,最后发现为RAID卡配置残留之前硬盘信息,导致,重新清理RAID卡配置,重新配置RAID,问题解决。

2. 设置操作系统

通过下面脚本配置操作系统,使用下面脚本需要提前配置好yum源即可,运行完脚本,无异常,建议逐项检查一遍,然后重启操作系统

2.1 配置操作系统基础配置

#!/bin/bash
# Created at 2021/07/28
# Author CZH
# This Script used to set oracle environment.
#
#   Scripts Summary
#   func_check_root
#   func_set_hostname
#   func_inst_pack
#   func_disable_selinux
#   func_disable_firewalld
#   func_set_sysctl
#   func_set_limits
#   func_set_pam
#   func_os_other
#   func_set_userenv
#   func_mk_dir
# Exit this shell when any error occur.
set -e
# Configure Global variables.
v_curdate=`date +%Y%m%d_%H%M%S`
v_memtotal=`cat /proc/meminfo |grep MemTotal|awk '{print $2}'`
# check current user is root or not.
function func_check_root()
{
if [ ${UID} -ne 0 ]
    then
        echo -e "\nPlease use root run this scripts!\n"
        exit 0
    else
        echo -e "\n>>>>>>>> This script will run as root ! <<<<<<<<\n"
fi
        echo -e "\nfunc func_check_root execute Successful!\n"
}
# setting hostname
function func_set_hostname()
{
read -p "Are you want set hostname ?(y/n)" v_set_choice
v_convert_choice=$(echo ${v_set_choice} | tr [A-Z] [a-z])
if [ ${v_convert_choice} == "y" ];
    then
        read -p "Please input your hostname: " v_hostname
        hostnamectl set-hostname ${v_hostname}
        echo -e "\nThe current hostname is $(hostname).\n"
elif [ ${v_convert_choice} == "n" ];
    then
        echo -e "\n Choice n , will continue.\n"
        echo -e "\nThe current hostname is $(hostname).\n"
else
        echo -e "\n Only accept input y/n !\n"
        exit 618
fi
        echo -e "\nfunc func_set_hostname execute Successful!\n"
}
# install packages
function func_inst_pack()
{ 
rpm -q binutils   \
compat-libstdc++-33   \
compat-libstdc++-33.i686   \
gcc   \
gcc-c++   \
glibc   \
glibc.i686   \
glibc-devel   \
glibc-devel.i686   \
ksh   \
libgcc   \
libgcc.i686   \
libstdc++   \
libstdc++.i686   \
libstdc++-devel   \
libstdc++-devel.i686   \
libaio   \
libaio.i686   \
libaio-devel   \
libaio-devel.i686   \
libXext   \
libXext.i686   \
libXtst   \
libXtst.i686   \
libX11   \
libX11.i686   \
libXau   \
libXau.i686   \
libxcb   \
libxcb.i686   \
libXi   \
libXi.i686   \
libXp   \
make   \
sysstat   \
make   \
unixODBC   \
unixODBC-devel   \
zlib-devel   \
elfutils-libelf-devel   \
xtermum   \
xorg-x11-xauth   \
perl-Switch |grep -i 'not installed'|awk -F' ' '{print $2}'|xargs -r /usr/bin/yum install -y
        echo -e "\nfunc func_inst_pack execute Successful!\n"
}
# Disable SElinux
function func_disable_selinux()
{
sed -i 's/enforcing/disabled/g' /etc/selinux/config
setenforce 0 &
        echo -e "\nfunc func_disable_selinux execute Successful!\n"
}
# Disable SElinux
function func_disable_firewalld()
{
systemctl stop firewalld.service
systemctl disable firewalld.service
echo -e "\nfunc func_disable_firewalld execute Successful!\n"
}
# Configure os kernel parameter.
function func_set_sysctl()
{
# backup sysctl.conf
cp /etc/sysctl.conf /etc/sysctl.conf.bak.${v_curdate}
# 所有共享内存段相加大小限制(建议内存的80%)
v_shmall=`echo $(expr $(getconf _PHYS_PAGES) \* 8 / 10)`
# 最大单个共享内存段大小(建议为内存一半)
v_shmmax=`echo $(expr $(getconf _PHYS_PAGES) / 2 \* $(getconf PAGE_SIZE))`
# configure sysctl.conf
cat >> /etc/sysctl.conf <> /etc/security/limits.d/20-nproc.conf <> /etc/pam.d/login <> /home/oracle/.bash_profile <> /home/grid/.bash_profile <>>>>>>> The operating system setup is finished, please reboot! <<<<<<<<\n"

2.2 配置节点间ssh免密互信

可以通过ssh-keygen或grid安装包提供的sshUserSetup.sh配置互信即可。

配置完互信,可以使用ssh date测试public以及private互信是否需要密码或需要输入yes,确保双向互信配置正确无误。

3. 华为存储配置UDEV

下面参考来自文章 https://www.modb.pro/db/23211

3.1 通过ultrapath命令配置udev

1. 查看虚拟磁盘
UltraPath提供了upadmin客户端工具,查询方法如下:
[root@test ~]# upadmin
UltraPath CLI #0 >show vlun
2. 配置磁盘或分区别名
继续查阅资料,发现可以为vlun配置别名,本质上还是通过UDEV的方式实现
原文链接:https://support.huawei.com/enterprise/zh/doc/EDOC1100026705/7316c49d
命令格式:
upLinux setGlobalDiskAlias alias_prefix=name [owner=user group=group method={SYMLINK|NAME}]
# 生成的磁盘或分区别名保存在“/dev/ultrapath”目录
3. 测试
# 尝试配置/dev/sdd来验证
[root@test ~]# upLinux setDiskAlias src_name=sdd dest_alias=test_mgmt001 owner=grid group=asmadmin method=SYMLINK
Succeeded in executing the command.
4. 查看配置udev别名
[root@test ~]# upLinux showDiskAlias
5. 查看udev设备以及规则文件
[root@test ~]# cd /dev/ultrapath
[root@test ultrapath]# ls
asm-test_mgmt001
[root@test ultrapath]# cd /etc/udev/rules.d/
[root@test rules.d]# ls -lrt
total 16
-rw-r--r--. 1 root root 628 Feb  6  2019 70-persistent-ipoib.rules
-rw-------  1 root root 211 Mar  2 20:14 56-nxup.rules
-rw-------  1 root root 571 Mar  2 20:14 99-ultrapath.rules
-rw-------  1 root root 299 Mar 27 11:40 99-ultrapath-alias.rules
[root@test rules.d]# cat 99-ultrapath-alias.rules
# Do not modify this rule configuration file; otherwise, the usage of UltraPath may be affected.
KERNEL=="sd*[a-z]", SUBSYSTEM=="block", ENV{ID_SERIAL}=="36c8a7761009835632299e0ac000000ce", ENV{DEVTYPE}=="disk", SYMLINK+="ultrapath/asm-test_mgmt001", OWNER="grid", GROUP="asmadmin", MODE="0660"
6. 其他命令
查看所有磁盘和分区别名:
upLinux showDiskAlias
删除指定磁盘或分区别名:
upLinux unsetDiskAlias alias=name
命令用于清除未正常生效的别名配置:
upLinux unsetDiskAlias

3.2 通过手工编写规则文件生成

1.生产规则文件
for i in b c d;
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`\",SYMLINK+=\"asm$i\", OWNER=\"grid\", GROUP=\"asmadmin\", MODE=\"0660\"">>/etc/udev/rules.d/99-oracle-asmdevices.rules
done
2.启动udev
# /sbin/udevadm trigger --type=devices --action=change
3.查看udev设备是否正确设置
# ls -l /dev/sd*

4. 安装遇到问题

上述配置完udev之后,即可开始正常安装,安装Grid以及安装Oracle会遇到下面问题,如果遇到其他问题,则需要单独解决,下面问题为通用问题。

4.1 安装grid遇到问题

1.issue 
报错信息:
[root@zjdb1 ~]# /u01/app/11.2.0/grid/root.sh 
Performing root user operation for Oracle 11g 
...
ohasd failed to start
Failed to start the Clusterware. Last 20 lines of the alert log follow: 
2015-05-23 23:37:45.460: 
[client(13782)]CRS-2101:The OLR was formatted using version 3.
2. Cause
报错原因:
因为RHEL 7使用systemd而不是initd运行进程和重启进程,而root.sh通过传统的initd运行ohasd进程。
3. Solution:
解决方法:
在RHEL 7中ohasd需要被设置为一个服务,在运行脚本root.sh之前。
步骤如下:
1. 以root用户创建服务文件
# touch /usr/lib/systemd/system/ohas.service
# chmod 777 /usr/lib/systemd/system/ohas.service
2. 将以下内容添加到新创建的ohas.service文件中
# cat /usr/lib/systemd/system/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. 以root用户运行下面的命令
# systemctl daemon-reload
# systemctl enable ohas.service
# systemctl start ohas.service
4. 查看运行状态
# systemctl status ohas.service
...
   Active: failed (Result: start-limit) since Fri 2015-09-11 16:07:32 CST; 1s ago
...
此时状态为失败,原因是现在还没有/etc/init.d/init.ohasd文件。
5. 下面可以运行脚本root.sh 不会再报ohasd failed to start错误了。
如果还是报ohasd failed to start错误,可能是root.sh脚本创建了init.ohasd之后,ohas.service没有马上启动,解决方法参考以下:
# 也可以不启动,使用watch -n 1 ls -l /etc/init.d/init.ohasd,一旦出现,立即执行启动。则root.sh脚本即可顺利执行,避免报错。
# systemctl status ohas.service

4.2 安装Oracle遇到问题

# 安装Oracle到86%遇到ins_emagent.mk编译报错问题
$ cd $ORACLE_HOME/sysman/lib
$ cp ins_emagent.mk ins_emagent.mk.bak
$ vi ins_emagent.mk
进入vi编辑器后  命令模式输入/NMECTL 进行查找,快速定位要修改的行
在后面追加参数-lnnz11,第一个是字母l,后面两个是数字1
请使用浏览器的分享功能分享到微信等