1 概述
浪潮信息KOS是浪潮信息基于Linux Kernel、OpenAnolis等开源技术自主研发的一款服务器操作系统,支持x86、ARM等主流架构处理器,性能和稳定性居于行业领先地位,具备成熟的 CentOS 迁移和替换能力,可满足云计算、大数据、分布式存储、人工智能、边缘计算等应用场景需求。详细介绍见官网链接https://www.ieisystem.com/kos/product-kos-xq.thtml?id=12126。
Oracle Real Application Clusters (RAC)支持跨多个服务器运行单一 Oracle Database,访问共享存储,充分提高可用性和水平可扩展性。连接至 Oracle RAC 实例后,您无需修改应用,用户会话即可执行故障切换,安全重播中断期间的变更请求,最终用户完全不会感知到中断。Oracle RAC 19c 中提供了许多改进,使各应用能够实现比以往版本更高的可用性和可伸缩性。https://www.oracle.com/cn/database/real-application-clusters/
2 安装准备
2.1 操作环境
操作系统版本:KOS 5.8 (4.18.0-477.13.1.kos5.x86_64)
测试架构:x86_64,两台6核6G虚拟机
2.2 软件版本
Oracle Database 19c (19.3) for Linux x86-64
Oracle Database 19c Grid Infrastructure (19.3) for Linux x86-64
VirtualBox 7.0.8
2.3 安装材料
配置Oracle 19c RAC需要准备以下材料:
Oracle安装包:
oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
LINUX.X64_193000_grid_home.zip
LINUX.X64_193000_db_home.zip
额外rpm依赖:
compat-libcap1-1.10-7.el7.x86_64.rpm
compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
Oracle 19.14补丁:
OPatch:p6880880_190000_Linux-x86-64.zip
RU:p33509923_190000_Linux-x86-64.zip,p33515361_190000_Linux-x86-64.zip
部分下载链接如下:
https://download.oracle.com/otn/linux/oracle19c/190000/LINUX.X64_193000_grid_home.zip
https://download.oracle.com/otn/linux/oracle19c/190000/LINUX.X64_193000_db_home.zip
2.4 安装说明
根据相关文档:要在 Oracle Linux 8 或 Red Hat Enterprise Linux 8 上安装 Oracle Database 19c, 从 Oracle Technology Network (OTN) 上下载 19.3 Oracle Database 软件介质, 然后在Oracle数据库安装或升级过程中应用19.6或19.7 RU。***安装上述补丁是必需的****。因此在KOS 5.8系统上安装Oracle 19c同样需要RU补丁才可以解决问题。本文以19.14为例进行操作,其他版本同理。
在KOS 5.8中,部分软件包被弃用,因此需要额外下载上面提及的两个rpm依赖并安装。
同时,KOS 5.8默认使用openssh 8,为了避免SSH跨版本兼容性问题,在安装Oracle 19c时需要将系统openssh替换为7.9版本。后续对此有详细说明。
3 配置安装环境
配置Oracle RAC需要至少两台机器,并且为两台机器分配几个共享的硬盘(共享LUN),并且要在机器间部署内部网络。本文使用VirtualBox创建两个虚拟机部署Oracle RAC 19c。
3.1 创建虚拟机
在VirtualBox中创建两台配置相同的虚拟机,配置尽量高一点以满足数据库需求。推荐安装时将系统语言设置为英语,避免中文字体错误。测试用虚拟机信息如下所示:
其中,系统硬盘空间100g,并添加三块共享硬盘。为了满足需求创建三个网卡,分别负责外部网络访问、SSH通信、内部网络心跳。
网络设计:
两台虚拟机的hostname分别设置为db100和db105,网络ip配置参考如下hosts文件内容。其中192.168.78.X为虚拟机仅主机网络地址,10.0.0.X为内部网络地址。
#public ip
192.168.78.100 db100
192.168.78.105 db105
#virtual ip
192.168.78.101 db100-vip
192.168.78.106 db105-vip
#scan ip
192.168.78.110 db19c-scan
#private ip
10.0.0.100 db100-priv
10.0.0.105 db105-priv
共享硬盘创建:
使用 管理-工具-虚拟介质管理。点击创建。
创建共享硬盘请在对话框中勾选预先分配全部空间。然后调整硬盘大小和保存位置。硬盘创建完成后在属性处修改为可共享。
为了简化操作,本文仅使用三块共享硬盘,同时为了方便区分调整为不同的大小,其中4G的盘用作OCR和Voting Disk,16G的盘用作数据盘,8G的盘用作FRA。
以上的机器配置均为测试场景,如需要实际部署请参考数据库官方配置要求进行调整。
3.2 配置操作系统环境
此处配置操作系统环境的内容需要在两台虚拟机上分别完成,两台机器操作不同之处会额外说明。为了方便操作均使用root账户进行操作。
首先分别修改主机名,并配置好机器的网络:
主机db100:
hostnamectl set-hostname db100
主机db105:
hostnamectl set-hostname db100
修改/etc/hosts文件:
#public ip
192.168.78.100 db100
192.168.78.105 db105
#virtual ip
192.168.78.101 db100-vip
192.168.78.106 db105-vip
#scan ip. Scan的名字需要被填在安装程序中。
192.168.78.110 db19c-scan
#private ip
10.0.0.100 db100-priv
10.0.0.105 db105-priv
关闭额外的服务:
systemctl disable chronyd
systemctl stop chronyd
mv /etc/chrony.conf /etc/chrony.conf_bak
systemctl disable firewalld
systemctl stop firewalld
systemctl disable avahi-daemon
systemctl stop avahi-daemon
添加用户组和用户:
groupadd -g 54321 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 54321 -g oinstall -G dba,asmdba,backupdba,dgdba,kmdba,racdba,oper oracle
useradd -u 54322 -g oinstall -G asmadmin,asmdba,asmoper,dba grid
修改grid和oracle用户的密码。此处为了测试均使用“oracle”作为用户密码。
echo oracle | passwd --stdin oracle
echo oracle | passwd --stdin grid
创建安装相关文件夹并修改权限:
mkdir -p /u01/app/19.3.0/grid
mkdir -p /u01/app/oracle/product/19.3.0/db_1
mkdir -p /u01/app/grid
mkdir -p /u01/app/oracle
chown -R grid:oinstall /u01
chown oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/
使用dnf安装仓库中的依赖:
dnf install -y bc binutils elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc glibc-devel ksh libaio libaio-devel libXrender libX11 libXau libXi libXtst libgcc libnsl librdmacm libstdc++ libstdc++-devel libxcb libibverbs make policycoreutils policycoreutils-python-utils smartmontools sysstat
使用dnf安装rpm依赖包和preinstall包:
dnf install -y oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm compat-libcap1-1.10-7.el7.x86_64.rpm compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
解除用户shell限制:
创建 /etc/security/limits.d/99-grid-oracle-limits.conf并写入:
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
grid soft nproc 16384
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
grid soft stack 10240
grid hard stack 32768
创建 /etc/profile.d/oracle-grid.sh并写入:
#Setting the appropriate ulimits for oracle and grid user
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -u 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
if [ $USER = "grid" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -u 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
3.3 配置共享盘
在上一节我们创建了共享盘,可以通过lsblk查看。
这里使用fdisk将共享盘格式化,为了方便后续辨认,可以选择创建2号分区。
硬盘分区完成后使用udev对硬盘绑定,在db100 db105两个节点上都要进行绑定。使用脚本列出需要绑定的分区,脚本请根据实际硬盘分配情况进行修改:
for i in b c d;
do
echo "KERNEL==\"sd?2\", SUBSYSTEM==\"block\", PROGRAM==\"/usr/lib/udev/scsi_id -g -u -d /dev/\$parent\", RESULT==\"`/usr/lib/udev/scsi_id -g -u -d /dev/sd\$i`\", SYMLINK+=\"asm-disk$i\", OWNER=\"grid\", GROUP=\"asmadmin\", MODE=\"0660\""
done
输出结果如下,需要将输出写入/etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="sd?2", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="1ATA_VBOX_HARDDISK_VB2084346f-dc5e6ab2", SYMLINK+="asm-diskb", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd?2", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="1ATA_VBOX_HARDDISK_VBd7660b2c-7514067c", SYMLINK+="asm-diskc", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd?2", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="1ATA_VBOX_HARDDISK_VB03524af9-b0a0a91c", SYMLINK+="asm-diskd", OWNER="grid", GROUP="asmadmin", MODE="0660"
调用udevadm配置重载生效:
udevadm control --reload
udevadm trigger
使用ls -l /dev/asm* 可以查看udev绑定成功
配置完成如下图所示。实际RAC配置中应使用更多硬盘保证数据安全,此处为简化示意。
3.4 安装openssh 7.9
安装openssh 7.9需要在完成dnf安装依赖之后,否则会因为依赖关系被重新装上openssh 8。
获取openssh 7.9源码。KOS 5.8中默认的openssl版本为1.1.1,仅有7.9版本满足支持。本文以阿里云的源为例,可以自行获取。
wget https://mirrors.aliyun.com/openssh/portable/openssh-7.9p1.tar.gz
tar -xf openssh-7.9p1.tar.gz
cd openssh-7.9p1/
卸载系统自带的openssh。此时如果退出ssh连接后续无法重新连接ssh。
rpm -e --nodeps `rpm -qa | grep openssh`
在openssh-7.9p1文件夹中执行编译环境配置:
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh
开始编译:
make
修改ssh相关文件权限:
chmod 600 /etc/ssh/ssh_host_rsa_key
chmod 600 /etc/ssh/ssh_host_ecdsa_key
chmod 600 /etc/ssh/ssh_host_ed25519_key
安装编译后文件并复制到系统路径中:
make install
cp /usr/local/openssh/sbin/* /usr/sbin/
cp /usr/local/openssh/bin/* /usr/bin/
cp contrib/redhat/sshd.init /etc/init.d/sshd
修改sshd配置vim /etc/ssh/sshd_config,添加以下内容:
Port 22
PermitRootLogin yes
PasswordAuthentication yes
重新启动ssh服务:
systemctl daemon-reload
systemctl start sshd.service
systemctl enable sshd.service
此时可以重新使用ssh服务。
执行ssh –V可以看到ssh已经成功变成了7.9。
3.5 配置数据库用户环境变量
对当前的数据库集群来说,分别有db100和db105两个虚拟机(节点),每个节点上有grid和oracle两个用户。需要对每个用户的环境变量进行配置。
对db100的grid用户:
在db100上使用grid用户登录,将用户变量写入~/.bashrc:
export ORACLE_SID=+ASM1;
export ORACLE_BASE=/u01/app/grid;
export ORACLE_HOME=/u01/app/19.3.0/grid;
export PATH=$ORACLE_HOME/bin:$PATH;
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
export CV_ASSUME_DISTID=RHEL7.6
export DISPLAY=192.168.78.1:0.0
其中DISPLAY是为了保证远程访问虚拟机的GUI安装程序,192.168.78.X为虚拟机的仅主机网段,请按需修改。
对db100的oracle用户:
在db100上使用orcale用户登录,将用户变量写入~/.bashrc:
export ORACLE_SID=zzydb1;
export ORACLE_BASE=/u01/app/oracle;
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/db_1;
export PATH=$ORACLE_HOME/bin:$PATH;
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
export CV_ASSUME_DISTID=RHEL7.6
export DISPLAY=192.168.78.1:0.0
其中ORACLE_SID需要与后面创建的数据库名称相符,本文创建的数据库名为zzydb,因此这里为zzydb1
对db105的grid用户:
在db105上使用grid用户登录,将用户变量写入~/.bashrc:
export ORACLE_SID=+ASM2;
export ORACLE_BASE=/u01/app/grid;
export ORACLE_HOME=/u01/app/19.3.0/grid;
export PATH=$ORACLE_HOME/bin:$PATH;
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
export CV_ASSUME_DISTID=RHEL7.6
export DISPLAY=192.168.78.1:0.0
对db105的oracle用户:
在db105上使用orcale用户登录,将用户变量写入~/.bashrc:
export ORACLE_SID=zzydb2;
export ORACLE_BASE=/u01/app/oracle;
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/db_1;
export PATH=$ORACLE_HOME/bin:$PATH;
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
export CV_ASSUME_DISTID=RHEL7.6
export DISPLAY=192.168.78.1:0.0
配置完成后重启机器确保相关配置生效。
3.6 准备数据库安装包
仅需要在一台机器上进行操作,本文以db100为例。
经过前面的步骤已经在根目录创建了/u01文件夹用于数据库安装。将安装包LINUX.X64_193000_grid_home.zip和LINUX.X64_193000_db_home.zip放在/u01文件夹中,将OPatch压缩包放在/u01/OPatch文件夹中,将补丁文件解压后放在RU文件夹中。其中补丁文件所在的目录需要将权限设置为777。
安装包的位置没有固定要求,可以自行选择目录。本文配置完的文件结构如下所示:
4 安装Grid Infrastructure(GI)
数据库的安装程序只需要在一台机器上操作,安装程序会提醒在需要时以root账户登录两个机器执行脚本。本文以db100为例进行安装。
4.1 解压安装文件
以grid用户登录db100,并进入$ORACLE_HOME目录:
su - grid
cd $ORACLE_HOME
解压GI安装包:
unzip /u01/LINUX.X64_193000_grid_home.zip
为了应用补丁,需要更新OPatch。
备份当前目录($ORACLE_HOME)下的OPatch:
mv OPatch ~
将补丁中的OPatch解压到当前目录
unzip /u01/OPatch/p6880880_190000_Linux-x86-64.zip
可以查看OPatch已经是新版本了
GI安装包中有另一个需求的rpm包,可以在此处先行安装。两个节点均需要安装。也可以在后续安装检查中使用程序提供的脚本进行安装。
dnf install -y /u01/app/19.3.0/grid/cv/rpm/cvuqdisk-1.0.10-1.rpm
4.2 安装GI
远程安装需要保证X server配置正确,可以将GUI传递过来。
执行gridSetup.sh并且应用RU:
./gridSetup.sh -applyRU /u01/RU/grid/33509923/
如果顺利的话可以看到如下的安装界面,后续没有提及的步骤均选择默认配置。
修改cluster name和hosts一致。
添加另一个节点db105,点击图中的setup配置SSH连接,密码在之前已经被设定为oracle。如果之前环境配置没有问题此处不会有报错。如果此处ssh链接失败请检查ssh版本、环境变量和是否应用RU补丁。下一个页面请根据配置好的网络关系选择使用的网卡。
此处可以看到之前udev绑定的共享盘,选择diskb用作OCR。为了简化操作此处仅选用一块硬盘,因此冗余选择External。实际配置中请自行安排冗余空间。
设置密码。此处为了测试使用了简单密码,具体情况请按需配置。
安装检查环节的问题请一一检查,此处显示的问题绝大多数是因为测试环境问题。实际安装中请按数据库要求具体配置,确认问题不影响数据库系统之后才可以点击右上角Ignore All。
在下一步点击Install进行安装。其中出现弹窗时请按照提示使用root用户登录对应节点执行安装脚本。确保先在一节点执行完毕后,再在其他节点执行。
安装结束在集群检查处会报错,查看日志发现是因为使用了一个scan ip的提示,可以忽略。
至此完成Grid的安装。
5 配置Oracle数据库
5.1 解压安装文件
以oracle用户登录db100,并进入$ORACLE_HOME目录:
su - oracle
cd $ORACLE_HOME
解压DB安装包:
unzip /u01/LINUX.X64_193000_db_home.zip
为了应用补丁,需要更新OPatch。
备份当前目录($ORACLE_HOME)下的OPatch:
mv OPatch ~
将补丁中的OPatch解压到当前目录
unzip /u01/OPatch/p6880880_190000_Linux-x86-64.zip
5.2 安装Oracle DB
解压完成后开始应用补丁安装数据库:
./runInstaller -applyRU /u01/RU/oracle/33515361
配置正确则可以看到安装界面。选择仅设置软件。后续没有提及的步骤均选择默认配置。
此处应该可以看到db100和db105两个节点(借用一下截图),在ssh连接中配置oracle用户的密码,点击setup设置ssh连接。
同样因为测试环境会有一些问题,请一一排查确认和修复,部分问题可以通过上面fix执行脚本修复。经过确认之后可以Ignore All剩余问题开始安装。
安装过程中同样需要在两个节点中分别以root用户登录执行安装脚本,请根据安装程序提示执行。此处脚本执行很快。
执行结束即可完成数据库软件的安装。
5.3 配置磁盘组
以grid用户登录,使用ASMCA创建磁盘组
su - grid
asmca
测试中以external模式创建DATA和FRA硬盘组,可以看到创建完成两个节点都已经MOUNTED。实际配置中请按照需求配置多块硬盘和冗余模式。
创建完成即可退出asmca
5.4 创建数据库
切换到oracle用户,使用dbca创建数据库
su - oracle
dbca
设置数据库名称,名称应和oracle用户的环境变量相符,否则影响数据库的管理。
选择创建好的DATA硬盘组。
按照要求设定数据库密码。
安装检查同样会有一些问题和警告,请一一排查修复。部分问题忽略后开始创建数据库。
出现以下信息说明数据库创建完成。
6 测试Oracle RAC 19c
6.1 查看集群状态
以grid用户登录,使用crsctl可以查看和管理集群状态。可以看到创建的zzydb已经可以使用了。
6.2 使用数据库
以oracle用户登录可以管理使用数据库。使用sqlplus登录数据库。
至此,在KOS 5.8上安装 Oracle 19c GI & RAC 的工作已经全部结束。
参考内容
https://www.cnblogs.com/jyzhao/p/11273271.html