在现有双节点RAC集群,添加第3个RAC节点

举报
寒六先生 发表于 2021/03/01 11:28:50 2021/03/01
【摘要】 本文操作目的,旨在现有两个节点的Oracle RAC集群中,添加第3个RAC节点,以扩展Oracle数据库访问性能;另,本文不对如何搭建RAC集群做描述,如有需求可参考其它RAC构建指南;

摘要 :

本文操作目的,旨在现有两个节点的Oracle RAC集群中,添加第3个RAC节点,以扩展Oracle数据库访问性能;另,本文不对如何搭建RAC集群做描述,如有需求可参考其它RAC构建指南;


环境:

OS:CentOS 6

DB:Oracle 11.2.0.3 RAC 两节点集群

共享存储:通过iSCSI连接的第三方企业存储


配置基础环境:

# 1. 配置所有节点操作系统内的host记录:
vi /etc/hosts
172.16.3.101 rac01
172.16.3.111 rac01_vip
10.10.10.1 rac01_priv
172.16.3.102 rac02
172.16.3.112 rac02_vip
10.10.10.2 rac02_priv
172.16.3.103 rac03
172.16.3.113 rac03_vip
10.10.10.3 rac03_priv
172.16.3.100 scan

# 2. 配置节点间可信记录(在老节点添加第3个节点,新节点保持和老节点信息一致):
vi /etc/hosts.equiv
rac01
rac02
rac03
rac01_priv
rac02_priv
rac03_priv
rac01_vip
rac02_vip
rac03_vip

# 3. 配置新节点服务,关闭不必要的服务
chkconfig bluetooth off;service bluetooth stop
chkconfig cups off;service cups stop
chkconfig ip6tables off;service ip6tables stop
chkconfig iptables off;service iptables stop
chkconfig netfs off;service netfs stop
chkconfig nfslock off;service nfslock stop
chkconfig postfix off;service postfix stop
chkconfig rpcbind off;service rpcbind stop
chkconfig rpcgssd off;service rpcgssd stop
chkconfig rpcidmapd off;service rpcidmapd stop

# 4. 关闭新节点的SELinux配置:
#more /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

# 重启节点,确保SELinux已禁用
#getenforce
Disabled

# 5. 在新节点安装依赖的软件包:
yum -y install binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel make numactl-devel sysstat unixODBC unixODBC-devel pdksh compat-libcap1
yum -y install  gcc gcc-c++ make binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel glibc glibc-common glibc-devel libaio libaio-devel libgcc libstdc++ libstdc++-devel unixODBC unixODBC-devel make-3* glibc-headers* glibc-devel-2* libgomp* sysstat* libXp* nmap* smart* readline*

配置Oracle对OS的环境依赖:

# 1. 配置Oracle、Grid用户的内核进程、打开文件、栈大小等配置:
# more /etc/security/limits.conf
grid soft nofile 1024
grid hard nofile 65536
grid soft nproc 2047
grid hard nproc 16384
grid soft stack 10240
grid hard stack 32768
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768

# 2. 修改内存参数:
/etc/sysctl.conf
+++++++++++For oracle environment+++++++++++
kernel.panic_on_oops = 1
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500

# 3. 在第3个节点上,创建Oracle所需目录、用户和组:
/usr/sbin/groupadd -g 54321 oinstall
/usr/sbin/groupadd -g 54322 dba
/usr/sbin/groupadd -g 54323 oper
/usr/sbin/groupadd -g 54324 backupdba
/usr/sbin/groupadd -g 54325 dgdba
/usr/sbin/groupadd -g 54327 asmdba
/usr/sbin/groupadd -g 54328 asmoper
/usr/sbin/groupadd -g 54329 asmadmin
/usr/sbin/useradd -u 54321 -g oinstall -G asmadmin,asmdba,asmoper,dba grid
/usr/sbin/useradd -u 54322 -g oinstall -G dba,backupdba,dgdba,asmadmin,asmdba oracle
# 用户密码,请根据自己的实际情况修改:
echo "123456" | passwd --stdin grid
echo "123456" | passwd --stdin oracle

# 4. 在第3个节点上,创建Oracle所需的目录结构:
mkdir -p /oracle/app/grid
mkdir -p /oracle/app/11.2.0/grid
mkdir -p /oracle/app/oracle/product/11.2.0/db_1
mkdir -p /oracle/orainst
chown -R grid.oinstall /oracle
chown -R oracle.oinstall /oracle/app/oracle
chmod -R 775 /oracle

配置Oracle/Grid用户环境变量

# Grid用户环境变量:
vi /home/grid/.bash_profile
#################Oracle Environment!#################
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_HOSTNAME=rac03
export ORACLE_BASE=/oracle/app/grid
export ORACLE_HOME=/oracle/app/11.2.0/grid
export ORACLE_SID=+ASM3
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export LANG=en_US
alias sqlplus="rlwrap sqlplus"

# Oracle用户环境变量:
vi /home/oracle/.bash_profile
##############Oracle Environment!#################
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_HOSTNAME=rac03
export ORACLE_UNQNAME=orcl3
export ORACLE_BASE=/oracle/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=orcl3
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export LANG=en_US
alias sqlplus="rlwrap sqlplus"
alias rman="rlwrap rman"

配置基础服务支持:

# 1.配置sqlplus辅助程序
# 解决rman和sqlplus命令行操作问题:
tar xzvf rlwrap-0.42.tar.gz
cd rlwrap-0.42
./configure;make install

# 2.准备远程服务
yum -y install rsh*
chkconfig rsh on
service xinetd restart
# 手动在所有节点上配置SSH交互(包括grid用户和Oracle用户):
# 所有节点执行以下命令,配置节点间ssh免密登录:
ssh-keygen -t rsa
ssh-copy-id rac1
ssh-copy-id rac2
ssh-copy-id rac3

# 3.关闭NTP服务
service ntpd stop
chkconfig ntpd off
mv /etc/ntp.conf ~/

配置共享存储:

# 1.安装iscsi软件包,并连接存储:
yum -y install iscsi*
iscsiadm -m discovery -t st -p 11.11.11.11 -l
service iscsi restart
fdisk -l

# 2.准备数据磁盘:
for i in b c d e f g h;do
echo "KERNEL==\"sd*\", BUS==\"scsi\", PROGRAM==\"/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\", RESULT==\"`/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i`\", NAME=\"asm-disk$i\", OWNER=\"grid\", GROUP=\"asmadmin\", MODE=\"0660\""
done
# 将以上脚本输出,添加到oracleasm.rules文件:
vi /etc/udev/rules.d/99-oracleasm.rules
# 执行以下命令确认磁盘发现正常:
/sbin/start_udev
ls -l /dev/asm*
brw-rw---- 1 grid asmadmin 8, 16 Oct 20 17:43 /dev/asm-disk1
brw-rw---- 1 grid asmadmin 8, 32 Oct 20 17:43 /dev/asm-disk2
brw-rw---- 1 grid asmadmin 8, 48 Oct 20 17:43 /dev/asm-disk3
brw-rw---- 1 grid asmadmin 8, 64 Oct 20 17:43 /dev/asm-disk4

# 以上执行完成后,需要确认该结果,与正常支行的两个RAC节点的磁盘配置是否相匹配;

为Grid集群添加新节点:

# 1.在新节点上安装grid
su - grid
su - root -c "rpm -ivh ~/cvuqdisk-1.0.7-1.rpm"
# 注:这个包需要从其它节点上复制过来
# grid组件安装前检查:
[root@rac01 ~]# su - grid
[grid@rac01 ~]$ cd $ORACLE_HOME/oui/bin
[grid@rac01 bin]$ cluvfy stage -pre nodeadd -n rac03

[grid@rac01 ~]$ cd $ORACLE_HOME/oui/bin
[grid@rac01 ~]$ ./addNode.sh "CLUSTER_NEW_NODES={rac03}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={rac03_vip}" "CLUSTER_NEW_PRIVATE_NODE_NAMES={rac03_priv}"

Grid集群添加新节点问题总结:

# 在执行cluvfy做检查时,出现错误提示,提示/etc/resolv.conf文件配置不一致,因为我的RAC环境使用的是hosts做的解析,没有使用DNS,所以此错误无视:
PRVF-5637 : DNS response time could not be checked on following nodes: rac01,rac03
File "/etc/resolv.conf" is not consistent across nodes

# 但是在执行addNode.sh添加节点时,只能使用静默模式安装,在addNode.sh正式添加节点之前它也会调用cluvfy工具来验证新加入节点是否满足条件,如果不满足则拒绝下一步操作。因为我们在之前已经验证过了新节点的可用性,所以这里完全可以跳过addNode.sh的验证,具体来看一下addNode.sh脚本的内容:

more addNode.sh
# 脚本中有调用预检查的环境变量,我们需要手动设置环境变量,使其在addNode时,不再做检查:
export IGNORE_PREADDNODE_CHECKS=Y

#然后再次执行节点添加:
./addNode.sh "CLUSTER_NEW_NODES={rac03}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={rac03_vip}" "CLUSTER_NEW_PRIVATE_NODE_NAMES={rac03_priv}" > add_node.log  2>&1

#另开一个窗口,使用tail -f add_node.log查看节点添加过程;

#完成后,在新添加的节点上(rac03)上使用root用户执行两个脚本:
/oracle/app/oraInventory/orainstRoot.sh
/oracle/app/11.2.0/grid/root.sh

#建议在新增节点上重启crs,并使用cluvfy验证nodeadd顺利完成 :
# crsctl stop crs
# crsctl start crs
# su - grid

$ cluvfy stage -post nodeadd -n rac01,rac02,rac03
# 或者:
$ cluvfy stage -post nodeadd -n rac03 -verbose

安装Oracle数据库软件

# 为第3个节点安装Oracle数据库软件:
[root@rac01 ~]# su - oracle
[oracle@rac01 ~]$ cd $ORACLE_HOME/oui/bin
[oracle@rac01 ~]$ ./addNode.sh "CLUSTER_NEW_NODES={rac03}" > add_node.log  2>&1

# 另开一个窗口,使用tail -f add_node.log查看节点添加过程;

# 运行提示的root.sh脚本
#在新节点 rac3用root用户执行                                                                
/oracle/app/oracle/product/11.2.0/db_1/root.sh

# 为原数据库添加新实例:
[oracle@rac1 ~]$ dbca
# 或用命令行直接添加实例(在已经有节点下面用oracle用户执行)
[oracle@rac1 ~]$ dbca -silent -addInstance -nodeList rac3 -gdbName orcl -instanceName orcl3 -sysDBAUserName sys -sysDBAPassword "***"   在oracle用户下面执行

以上,RAC节点添加完成!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。