hwcloud上的Oracle RAC 12cR2安装手册(1)--环境的准备

网络

网卡分配

网卡名 作用 网段
eth0 Public IP 192.168.1.0/24
eth1 NET IP 192.168.2.0/24
eth2 Private IP 192.168.6.0/24

这里我用了三块网卡:

  • eth0做Public IP的网卡,同时会绑定Virtual IP 和 SCAN IP

  • eth1做NET IP的网卡,用来提供访问互联网的服务

  • eth2做Private的网卡,用来做节点之间的数据交互

    注:在华为云控制台关闭node01节点和node02节点的Public IP网卡的源/目的检查,否则虚拟ip是不通的

IP段分配

Name node01 node02
Public IP 192.168.1.14 192.168.1.15
Private IP 192.168.6.2 192.168.6.3
Virtual IP 192.168.1.16 192.168.1.17
SCAN IP 192.168.1.18 192.168.1.19
192.168.1.20
NET IP 192.168.2.95 192.168.2.96

安全组

修改华为云安全组,放行169.254.0.0/16 网段、放行Public IP、放心Virtual IP、放行SCAN IP、Private IP

修改主机名

参考Centos6修改Hostname

分别将两个节点的主机名改为node01.myCluster.com、node02.myCluster.com

配置host解析

修改node1和node2的hosts文件,添加如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
# Public
192.168.1.14 node01.myCluster.com node01
192.168.1.14 node02.myCluster.com node02
# Private
192.168.6.2 node01-priv.myCluster.com node01-priv
192.168.6.3 node02-priv.myCluster.com node02-priv
# Virtual
192.168.1.16 node01-vip.myCluster.com node01-vip
192.168.1.17 node02-vip.myCluster.com node02-vip
# SCAN
192.168.1.18 nodes-scan.myCluster.com nodes-scan
192.168.1.19 nodes-scan.myCluster.com nodes-scan
192.168.1.20 nodes-scan.myCluster.com nodes-scan

关闭libvirt的虚拟网卡功能

如果服务器安装了libvirt,则需要关闭其自带的虚拟网卡功能,方法如下:

1
2
3
4
virsh net-list
virsh net-destroy default
virsh net-undefine default
service libvirtd restart

(注:华为云提供的Centos6.8镜像不需要做此操作)

禁用ZEROCONF

分别编辑node01和node02上的/etc/sysconfig/network,添加如下内容

1
NOZEROCONF=yes

操作系统配置

安装依赖

1
yum -y install binutils compat-libcap1 compat-libstdc++ compat-libstdc++-33 e2fsprogs e2fsprogs-libs glibc glibc glibc-devel glibc-devel ksh libgcc libgcc libstdc++ libstdc++ libstdc++-devel libstdc++-devel libaio libaio libaio-devel libaio-devel libXtst libXtst libX11 libX11 libXau libXau libxcb libxcb libXi libXi make net-tools nfs-utils sysstat smartmontools gcc gcc-c++ gcc-devel

配置swap

oracle要求swap空间至少为8G,我用的这个镜像默认swap为4G,因此需要调整,参考centos6.8调整swap空间 调整即可

配置内核参数

我服务器配置为4C/8G

在node01和node02上编辑/etc/sysctl.conf,添加或修改如下内容

1
2
3
4
5
6
7
8
9
10
11
12
kernel.shmall = 4294967296
kernel.shmmax = 8589934591
fs.aio-max-nr = 1048576
fs.file-max = 6815744
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
kernel.panic_on_oops=1

关于以上部分参数的介绍:

kernel.shmmax:

用来定义共享内存单个共享内存段可使用的内存大小,最好设置改值得大小能容下整个SGA的大小,否则会导致性能下降,原因是因为在实例启动以及ServerProcess创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。

以上未经过验证

基于以上的说法,在设置改参数的时候需要考虑SGA的大小。在我的数据库中,一般设置MEMORY_TARGET为物理内存80%,SGA又占MEMORY_TARGET的80%,因此可将kernel.shmmax设置为物理内存的64%,一般情况下大于SGA即可,这里为了方便计算,我设置为物理-1byte,既8589934591byte

kernel.shmall:

该参数控制可以使用的共享内存的总页数。Linux共享内存页大小为4KB,共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大大小是16G,那么需要共享内存页数是16GB/4KB=16777216KB /4KB=4194304(页),也就是64Bit系统下16GB物理内存,设置kernel.shmall = 4194304才符合要求(几乎是原来设置2097152的两倍)。这时可以将shmmax参数调整到16G了,同时可以修改SGA_MAX_SIZE和SGA_TARGET为12G(您想设置的SGA最大大小,当然也可以是2G~14G等,还要协调PGA参数及OS等其他内存使用,不能设置太满,比如16G)

以上的说法来自于网络,这里贴出来仅供参考

其实,该参数是用来控制可用的共享内存数的,单位是page(通常在linux中1page=4KB),只要可用的共享内存书大于SGA的大小即可,一般默认的大小就可以满足大部分oracle的需求了,这里我没有修改默认值

kernel.shmmni

该参数是共享内存段的最大数量。shmmni缺省值4096,一般肯定是够用了。

fs.file-max

该参数决定了系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中可以打开的文件的数量。

fs.aio-max-nr

此参数限制并发未完成的请求,应该设置避免I/O子系统故障。

kernel.sem

以kernel.sem = 250 32000 100 128为例:

​ 250是参数semmsl的值,表示一个信号量集合中能够包含的信号量最大数目。

​ 32000是参数semmns的值,表示系统内可允许的信号量最大数目。

​ 100是参数semopm的值,表示单个semopm()调用在一个信号量集合上可以执行的操作数量。

​ 128是参数semmni的值,表示系统信号量集合总数。

net.ipv4.ip_local_port_range

表示应用程序可使用的IPv4端口范围。

net.core.rmem_default

表示套接字接收缓冲区大小的缺省值。

net.core.rmem_max

表示套接字接收缓冲区大小的最大值。

net.core.wmem_default

表示套接字发送缓冲区大小的缺省值。

net.core.wmem_max

表示套接字发送缓冲区大小的最大值。

执行sysctl -p使其生效

关闭NTP

Oracle Rac有自带的Oracle Cluster Time Synchronization Service来保证节点间的时间同步,因此,关闭自带的NTP服务

命令如下:

1
2
3
4
/sbin/service ntpd stop
chkconfig ntpd off
mv /etc/ntp.conf /etc/ntp.conf.org
rm /var/run/ntpd.pid

配置PAM

在node01和node02节点上编辑/etc/pam.d/login,添加如下内容:

1
session required pam_limits.so

limit文件

在node01和node02节点上编辑/etc/security/limits.conf,添加如下内容:

1
2
3
4
5
6
7
8
@oinstall hard nofile 65536
@oinstall soft nofile 10240
@oinstall hard nproc 16384
@oinstall soft nproc 16384
@oinstall hard stack 32768
@oinstall soft stack 10240
@oinstall soft memlock 475188563
@oinstall hard memlock 475188563

关闭SELinux

在node01和node02上分别执行

1
setenforce 0

在node01和node02节点上编辑文件/etc/sysconfig/selinux,修改如下内容:

1
SELINUX=disabled

创建用户、组、文件夹

在node01和node02上分别执行如下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
groupadd -g 1000 oinstall
groupadd -g 1020 asmadmin
groupadd -g 1021 asmdba
groupadd -g 1022 asmoper
groupadd -g 1031 dba
groupadd -g 1032 oper
useradd -u 1100 -g oinstall -G asmadmin,asmdba,asmoper,oper,dba grid
useradd -u 1101 -g oinstall -G dba,asmdba,oper oracle
mkdir -p /u01/software
mkdir -p /u01/app/12.2.0/grid
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/

将下面的两个文件分别上传至node01的/u01/software文件夹下

  • linuxx64_12201_grid_home.zip
  • linuxx64_12201_database.zip

解压并修改对应权限

1
2
3
4
5
cd /u01/software
unzip linuxx64_12201_grid_home.zip -d /u01/app/12.2.0/grid/
chown -R grid:oinstall /u01/app/12.2.0/grid/
unzip linuxx64_12201_database.zip
chown oracle:oinstall database

配置环境变量

配置grid用户的环境变量

在node01上,grid用户

编辑/home/grid/.bash_profile,添加如下内容:

1
2
3
4
5
6
7
8
export ORACLE_SID=+ASM1
export TMP=/tmp
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/12.2.0/grid
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export LC_ALL=en_US.UTF-8

在node02上,grid用户

编辑/home/grid/.bash_profile,添加如下内容:

1
2
3
4
5
6
7
8
export ORACLE_SID=+ASM2
export TMP=/tmp
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/12.2.0/grid
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export LC_ALL=en_US.UTF-8
配置oracle的环境变量

在node01上,oracle用户

编辑/home/oracle/.bash_profile,添加如下内容:

1
2
3
4
5
6
7
8
9
export TMP=/tmp
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1
export ORACLE_SID=orcl1
export PATH=$ORACLE_HOME/bin:/usr/sbin:$ORACLE_HOME/OPatch:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export NLS_LANG=AMERICAN_AMERICA.UTF8
export LC_ALL=en_US.UTF-8

在node02上,oracle用户

编辑/home/oracle/.bash_profile,添加如下内容:

1
2
3
4
5
6
7
8
9
export TMP=/tmp
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1
export ORACLE_SID=orcl2
export PATH=$ORACLE_HOME/bin:/usr/sbin:$ORACLE_HOME/OPatch:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export NLS_LANG=AMERICAN_AMERICA.UTF8
export LC_ALL=en_US.UTF-8

配置SSH互信

在node01上,grid用户,分别为grid用户和oracle用户配置SSH互信。

注:配置过程中需要输入grid和oracle用户的密码,请提前设置好

1
2
3
cd /u01/app/12.2.0/grid/oui/prov/resources/scripts/
./sshUserSetup.sh -hosts "node01 node02" -user grid -advanced -noPromptPassphrase
./sshUserSetup.sh -hosts "node01 node02" -user oracle -advanced -noPromptPassphrase

在node01上,grid用户,尝试登录node02验证

1
2
3
4
[grid@node01 ~]$ ssh node02 hostname
node02.myCluster.com
[grid@node01 ~]$ ssh node02-priv hostname
node02.myCluster.com

在node02上,grid用户,尝试登录node01验证

1
2
3
4
[grid@node02 ~]$ ssh node01 hostname
node01.myCluster.com
[grid@node02 ~]$ ssh node01-priv hostname
node01.myCluster.com

在node01上,oracle用户,尝试登录node02验证

1
2
3
4
[oracle@node01 ~]$ ssh node02 hostname
node02.myCluster.com
[oracle@node01 ~]$ ssh node02-priv hostname
node02.myCluster.com

在node02上,oracle用户,尝试登录node01验证

1
2
3
4
[oracle@node02 ~]$ ssh node01 hostname
node01.myCluster.com
[oracle@node02 ~]$ ssh node01-priv hostname
node01.myCluster.com

配置存储

在华为云控制台选购磁盘,共享模式选择共享,磁盘模式选择VBD(这里使用的是VBD的磁盘,使用oracleasm来配置共享磁盘)

安装ASMLIB

参考Centos6.8安装ASMLIB

创建分区

注:

  • 我的共享磁盘挂载点为/dev/xvdc
  • OCR_VOT_GIMR磁盘组和DATA磁盘组的冗余类型都选择为External
  • /dev/sdb共100G空间,创建1个40G分区分配给OCR_VOT_GIMR磁盘组使用,创建一个60G分区分配至DATA磁盘组
  • ASM磁盘要求参考官方文档

在node01上执行,仅分区即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@node01 ~]# fdisk /dev/xvdc
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x3c07d9cd.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-13054, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-13054, default 13054): +40G
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (5224-13054, default 5224):
Using default value 5224
Last cylinder, +cylinders or +size{K,M,G} (5224-13054, default 13054):
Using default value 13054
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

分区结果如下:

1
2
3
4
5
6
7
8
9
10
[root@node01 ~]# fdisk -l /dev/xvdc
Disk /dev/xvdc: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3c07d9cd
Device Boot Start End Blocks Id System
/dev/xvdc1 1 5223 41953716 83 Linux
/dev/xvdc2 5224 13054 62902507+ 83 Linux

创建磁盘组

node01执行如下命令创建磁盘组:

1
2
3
4
5
6
[root@node01 ~]# oracleasm createdisk OCR_VOT_GIMR /dev/xvdc1
Writing disk header: done
Instantiating disk: done
[root@node01 ~]# oracleasm createdisk DATA /dev/xvdc2
Writing disk header: done
Instantiating disk: done

使用oracleasm listdisks查看已创建的磁盘组,如下:

1
2
3
[root@node01 ~]# oracleasm listdisks
DATA
OCR_VOT_GIMR

在node02上扫描node01上创建的磁盘组,如下:

1
2
3
4
5
6
[root@node02 ~]# oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
Instantiating disk "OCR_VOT_GIMR"
Instantiating disk "DATA"

使用oracleasm listdisks查看扫描到的磁盘组,如下:

1
2
3
[root@node02 ~]# oracleasm listdisks
DATA
OCR_VOT_GIMR

至此,安装环境准备完成。

接着看hwcloud上的Oracle RAC 12cR2安装手册(2)--grid的安装