Install Oracle 12c R2 RAC On CentOS 7
1. 配置操作系统
-
检查系统的内核和程序包要求
# rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n' binutils \ bc \ binutils \ compat-libcap1 \ compat-libstdc++-33 \ elfutils-libelf-devel \ glibc \ glibc-devel \ gcc-c++ \ ksh \ libaio \ libaio-devel \ libgcc \ libstdc++ \ libstdc++-devel \ libX11 \ libXau \ libXi \ libXtst \ libXrender \ libXrender-devel \ make \ net-tools \ nfs-utils \ smartmontools \ sysstat \ unixODBC \ unixODBC-devel binutils-2.27-27.base.el7 (x86_64) bc-1.06.95-13.el7 (x86_64) binutils-2.27-27.base.el7 (x86_64) compat-libcap1-1.10-7.el7 (x86_64) compat-libstdc++-33-3.2.3-72.el7 (x86_64) elfutils-libelf-devel-0.170-4.el7 (x86_64) glibc-2.17-222.el7 (x86_64) glibc-devel-2.17-222.el7 (x86_64) gcc-c++-4.8.5-28.el7 (x86_64) ksh-20120801-137.el7 (x86_64) libaio-0.3.109-13.el7 (x86_64) libaio-devel-0.3.109-13.el7 (x86_64) libgcc-4.8.5-28.el7 (x86_64) libstdc++-4.8.5-28.el7 (x86_64) libstdc++-devel-4.8.5-28.el7 (x86_64) libX11-1.6.5-1.el7 (x86_64) libXau-1.0.8-2.1.el7 (x86_64) libXi-1.7.9-1.el7 (x86_64) libXtst-1.2.3-1.el7 (x86_64) libXrender-0.9.10-1.el7 (x86_64) libXrender-devel-0.9.10-1.el7 (x86_64) make-3.82-23.el7 (x86_64) net-tools-2.0-0.22.20131004git.el7 (x86_64) nfs-utils-1.3.0-0.54.el7 (x86_64) smartmontools-6.5-1.el7 (x86_64) sysstat-10.1.5-13.el7 (x86_64) unixODBC-2.3.1-11.el7 (x86_64) unixODBC-devel-2.3.1-11.el7 (x86_64)
-
禁用Transparent HugePages
参考文档,禁用Transparent HugePages -
自动SSH配置
编辑/etc/ssh/sshd_config
文件# vim /etc/ssh/sshd_config LoginGraceTime 0
-
安装图形界面包
# yum -y install xclock # yum -y install xterm
在所有集群节点上,重复以上操作
2. 准备Oracle RAC的集群节点
2.1 用户账户
- 使用以下命令创建OS组。 以“root”用户身份输入以下命令:
# /usr/sbin/groupadd oinstall # /usr/sbin/groupadd dba # /usr/sbin/groupadd asmadmin # /usr/sbin/groupadd asmdba # /usr/sbin/groupadd asmoper
- 使用以下命令创建将拥有Oracle软件的用户:
# /usr/sbin/useradd -g oinstall -G asmadmin,asmdba,asmoper -d /home/grid -m grid # /usr/sbin/useradd -g oinstall -G dba,asmdba -d /home/oracle -m oracle
- 设置用户密码
在每个节点上重复步骤1到步骤3。# passwd oracle Changing password for user oracle. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. # passwd grid Changing password for user grid. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully.
2.2 网络
虚拟IP地址必须与公共IP地址位于同一子网中
-
配置网卡
#私有网卡配置 # vi /etc/sysconfig/network-scripts/ifcfg-enp0s8 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=enp0s8 UUID=aa785d9b-39f2-444e-bd3a-2335cf002e40 DEVICE=enp0s8 ONBOOT=yes IPADDR=10.10.10.34 PREFIX=24 #公共网卡配置 # vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=enp0s3 UUID=a7d3ba66-757d-4760-b6f3-1c9bb8d95474 DEVICE=enp0s3 ONBOOT=yes IPADDR=192.168.56.34 PREFIX=24 GATEWAY=192.168.56.1 IPV6_PRIVACY=no
-
配置/etc/hosts文件
# vi /etc/hosts # PUBLIC 192.168.56.34 rac1 192.168.56.35 rac2 # PRIVATE 10.10.10.34 rac1priv 10.10.10.35 rac2priv #VIP 192.168.56.134 rac1vip 192.168.56.135 rac2vip #SCAN IP 192.168.56.123 scanip
在每个节点上重复步骤1到步骤2。ip修改成对应节点
2.3 集群的时间同步
从Oracle 11g开始,Oracle已经对集群同步开发了ctss服务。所以,可以直接禁用NTPD服务;
Oracle的ctss节点时间同步服务会自动检测ntpd服务,如果ntpd服务存在并且在运行,则ctss服务进入观察者模式,节点间的时间同步由ntpd服务来做。
如果ctss发现ntpd服务不存在,则直接接管结群的时间同步任务。
关闭ntpd服务
service ntpd stop
#禁止开机自启动。
systemctl disable ntpd.service
#重命名ntpd的配置文件
# mv /etc/ntp.conf /etc/ntp.conf.bak
2.4 配置内核参数
创建或编辑/etc/sysctl.d/97-oracle-database-sysctl.conf文件,添加或编辑类似于以下内容的行:
/etc/sysctl.conf文件已被弃用
# vim /etc/sysctl.d/97-oracle-database-sysctl.conf
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
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
#/sbin/sysctl --system
* Applying /usr/lib/sysctl.d/00-system.conf ...
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
kernel.yama.ptrace_scope = 0
* Applying /usr/lib/sysctl.d/50-default.conf ...
kernel.sysrq = 16
kernel.core_uses_pid = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.promote_secondaries = 1
net.ipv4.conf.all.promote_secondaries = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /usr/lib/sysctl.d/60-libvirtd.conf ...
fs.aio-max-nr = 1048576
* Applying /etc/sysctl.d/97-oracle-database-sysctl.conf ...
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
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
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.conf ...
# /sbin/sysctl -a
在每个节点上重复以上操作
2.5 为oracle用户设置shell限制
为了提高Linux系统上软件的性能,必须增加oracle用户的shell限制
- 将以下行添加到
/etc/security/limits.conf
文件中:grid soft nproc 2047 grid hard nproc 16384 grid soft nofile 1024 grid hard nofile 65536 oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240
- 在
/etc/pam.d/login
文件中添加或编辑以下行:session required pam_limits.so
- 对默认的shell启动文件进行以下更改,将以下行添加到
/etc/profile
文件中:
在每个节点上重复以上操作if [ $USER = "oracle" ] || [ $USER = "grid" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi umask 022 fi
2.6 创建目录
- 以root用户,创建Oracle Inventory 目录
# mkdir -p /u01/app/oraInventory # chown -R grid:oinstall /u01/app/oraInventory # chmod -R 775 /u01/app/oraInventory
- 以root用户,创建GI HOME目录
# mkdir -p /u01/app/grid # mkdir -p /u01/app/12.2.0/grid # chown -R grid:oinstall /u01/app/grid # chmod -R 775 /u01/app/grid # chown -R grid:oinstall /u01/app/12.2.0 # chmod -R 775 /u01/app/12.2.0/
- 以root用户,创建Oracle Base目录
# mkdir -p /u01/app/oracle # mkdir /u01/app/oracle/cfgtoollogs #needed to ensure that dbca is able to run after the rdbms installation. # chown -R oracle:oinstall /u01/app/oracle # chmod -R 775 /u01/app/oracle
- 以root用户,创建Oracle RDBMS Home目录
在每个节点上重复以上操作# mkdir -p /u01/app/oracle/product/12.2.0/db_1 # chown -R oracle:oinstall /u01/app/oracle/product/12.2.0/db_1 # chmod -R 775 /u01/app/oracle/product/12.2.0/db_1
2.7 配置用户环境变量
- oracle 用户
$ vi .bash_profile umask=022 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=/u01/app/oracle/product/12.2.0/db_1 export ORACLE_SID=orcl1 export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
- grid 用户
在每个节点上重复以上操作,注意$ vi .bash_profile umask=022 export ORACLE_BASE=/u01/app/grid export ORACLE_HOME=/u01/app/12.2.0/grid export ORACLE_SID=+ASM1 export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
ORACLE_SID
改成对应的名称
3. 准备Oracle RAC的共享存储
集群中的每个节点都需要外部共享磁盘来存储Oracle Clusterware(Oracle Cluster Registry和Voting Disk)文件以及Oracle Database文件。在识别适当的磁盘设备时,请遵循以下准则:
-
ASM磁盘组中的所有磁盘应具有相同的大小并具有相同的性能特征。
-
磁盘组不应在单个物理磁盘设备上包含多个分区。
-
Oracle RAC不支持将逻辑卷用作ASM磁盘组中的磁盘。
用于执行安装的用户帐户(通常为“oracle”)必须具有写入权限才能在指定的路径中创建文件
3.1 共享磁盘
此次实验,我是在VirtualBox添加共享磁盘上使用ASM进行集群件和数据库存储。
3.1.1 分区共享磁盘
- 使用
fdisk
命令对/dev/sdb
磁盘进行分区,步骤如下:# fdisk /dev/sdb Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table Building a new DOS disklabel with disk identifier 0xb837475d. Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-83886079, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-83886079, default 83886079): +1G Partition 1 of type Linux and of size 1 GiB is set Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p Partition number (2-4, default 2): 2 First sector (2099200-83886079, default 2099200): Using default value 2099200 Last sector, +sectors or +size{K,M,G} (2099200-83886079, default 83886079): +1G Partition 2 of type Linux and of size 1 GiB is set Command (m for help): n Partition type: p primary (2 primary, 0 extended, 2 free) e extended Select (default p): p Partition number (3,4, default 3): 3 First sector (4196352-83886079, default 4196352): Using default value 4196352 Last sector, +sectors or +size{K,M,G} (4196352-83886079, default 83886079): +30G Partition 3 of type Linux and of size 30 GiB is set Command (m for help): n Partition type: p primary (3 primary, 0 extended, 1 free) e extended Select (default e): p Selected partition 4 First sector (67110912-83886079, default 67110912): Using default value 67110912 Last sector, +sectors or +size{K,M,G} (67110912-83886079, default 83886079): Using default value 83886079 Partition 4 of type Linux and of size 8 GiB is set Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
- 集群的所有节点上运行以下命令来加载更新的块设备:
# /sbin/partprobe
3.1.2 手工映射ASM磁盘
- 使用文本编辑器为Oracle ASM设备创建UDEV规则文件
# vim /etc/udev/rules.d/99-oracle-asmdevices.rules ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N" ACTION=="add", KERNEL=="sdb2", RUN+="/bin/raw /dev/raw/raw2 %N" ACTION=="add", KERNEL=="sdb3", RUN+="/bin/raw /dev/raw/raw3 %N" ACTION=="add", KERNEL=="sdb4", RUN+="/bin/raw /dev/raw/raw4 %N" ACTION=="add", KERNEL=="raw[1-4]",OWNER="grid",GROUP="oinstall",MODE="660"
- 将rules.d文件复制到群集上的所有其他节点上
# scp /etc/udev/rules.d/99-oracle-asmdevices.rules root@rac2:/etc/udev/rules.d/
- 以root用户运行partprobe命令
# /sbin/partprobe /dev/sdb1 # /sbin/partprobe /dev/sdb2 # /sbin/partprobe /dev/sdb3 # /sbin/partprobe /dev/sdb4
- 加载规则并重新启动UDEV服务
# systemctl restart systemd-udev-trigger.service
3.2 在Linux上设置磁盘I/O调度程序
为了获得Oracle ASM的最佳性能,Oracle建议您使用Deadline I/O Scheduler
# cat /sys/block/sdb/queue/scheduler
noop [deadline] cfq
# 若不是deadline模式,用以下命令进行更改
# echo deadline > /sys/block/${ASM_DISK}/queue/scheduler
4. 配置互信
- 利用oracle自带的
sshUserSetup.sh
脚本,配置互信# su - grid $ cd /opt/database/sshsetup $ ./sshUserSetup.sh -user grid -hosts "rac1 rac2" -advanced -noPromptPassphrase # su - oracle $ cd /opt/database/sshsetup $ ./sshUserSetup.sh -user oracle -hosts "rac1 rac2" -advanced -noPromptPassphrase
- 验证ssh
每个节点的oracle用户与grid用户都需验证$ ssh rac1 date $ ssh rac2 date $ ssh rac1priv date $ ssh rac2priv date
5. 安装 Oracle Grid Infrastructure
5.1 解压GI软件包
$ su - grid
$ cd /u01/app/12.2.0/grid
$ unzip linuxx64_12201_grid_home.zip
5.2 安装grid前检查
$ ./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose
安装cvuqdisk
# rpm -ivh cvuqdisk-1.0.10-1.rpm
5.3 利用图形界面安装grid
利用Xstart工具调用远程桌面。
运行gridSetup.sh
脚本
由于粗心,编辑/etc/hosts文件时,把vip写在不同网段中,更改后这一步骤能过去了
GIMR需要37712MB空间,需要新添加磁盘了。
问题点:
- 物理内存至少8GB
凑钱给我买内存吧,不然凑不齐16g内存。。
- 未在集群节点上配置并运行“avahi-daemon”守护程序
systemctl start avahi-daemon.socket
systemctl enable avahi-daemon.socket - /dev/shm问题
修改
/etc/fstab
文件,增加tmpfs /dev/shm tmpfs defaults,size=4G 0 0
内容,mount -o remount /dev/shm
重新生效 - NOZEROCONF没有设置
编辑
/etc/sysconfig/network
添加NOZEROCONF=yes
- ASM权限问题
修改为asmadmin权限,
chown grid:asmadmin /dev/raw/raw[1-5]
- resolv.cnf问题
mv /etc/resolv.conf /etc/resolv.conf.bak
集群每个节点以root用户运行:
/u01/app/oraInventory/orainstRoot.sh
/u01/app/12.2.0/grid/root.sh
运行/u01/app/12.2.0/grid/root.sh
脚本,到步骤18,出现以下错误,断开连接,图形界面消失 。。。。( ̄﹏ ̄;)
2018/11/29 21:32:47 CLSRSC-343: Successfully started Oracle Clusterware stack
2018/11/29 21:32:47 CLSRSC-594: Executing installation step 18 of 19: 'ConfigNode'.
Socket error Event: 32 Error: 10053.
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(192.168.56.34) at 21:36:15.
Type `help' to learn how to use Xshell prompt.
[c:\~]$
谷歌说是编辑/etc/sysconfig/network-scripts/ifcfg-enp0s3 文件,增加以下内容:
NM_CONTROLLED=no
重新安装吧,需先删除安装失败的文件。
rm -rf /u01/app/12.2.0/grid/*
rm -rf /u01/app/grid/*
rm -rf /u01/app/oraInventory/*
rm -rf /etc/ora*
rm -rf /tmp/.oracle
rm -rf /tmp/OraInstall*
rm -rf /opt/ORCLfmap
rm -rf /var/tmp/.orac*
dd if=/dev/zero of=/dev/sdb1 bs=1M count=1024
dd if=/dev/zero of=/dev/sdb2 bs=1M count=1024
dd if=/dev/zero of=/dev/sdb3 bs=1M count=1024
这次自动关机。。。。( ̄﹏ ̄;)
,删除文件重新开始吧。
这次选择NO,表示MIGR与ocr和votedisk在一个ASM磁盘组进行安装。
6. 安装Oracle DB软件
oracle用户调取图像界面,进行安装
( ̄﹏ ̄;)
安装失败。。