点击下载word文档,格式更清晰,可节约您的时间。
RAC环境介绍:
交换内存至少需要3G。1
检查交换空间大小:
扩容swap示例(这里扩容2G):
dd if=/dev/zero of=/tmp/swap bs=1MB count=2048
mkswap /tmp/swap
swapon /tmp/swap
free -m #检查确认
vi /etc/fstab
添加:
/tmp/swap swap swap defaults 0 0
扩容swap详细请参考这里。
这里仅做实验用,因此分配较小的磁盘空间:
根目录40G,共享存储20G
两个节点都需要配置两个网卡。
virtualbox虚拟机里可以这样模拟(需要关闭虚拟机进行配置):
第一块网卡桥接模式;
第二块网卡为内部网络:
#设置第二块儿网卡(这里是eth1)ip示例:
执行ip addr查看该网卡的HWADDR信息:
cd /etc/sysconfig/network-scripts
cp ifcfg-eth0 ifcfg-eth1
vi ifcfg-eth1
DEVICE=eth1
HWADDR=上图红框值
IPADDR=10.10.10.1 #节点二的私有IP为10.10.10.2
去除GATEWAY和UUID这一行
#重启网卡服务
service network restart
#测试下能否ping通对方
vi /etc/sysconfig/network
修改hostname的值即可。
节点1改为rac1,节点2改为rac2
该配置需重启服务器生效。
临时配置方式(服务器重启后失效):
hostname 主机名,示例:
hostname rac1
vi /etc/hosts
添加示例:
#rac1
192.168.144.213 rac1
192.168.144.215 rac1_vip
10.10.10.1 rac1_priv
#rac2
192.168.144.214 rac2
192.168.144.216 rac2_vip
10.10.10.2 rac2_priv
#scan-ip
192.168.144.217 scan-vip
关闭两台虚拟机。
本实验只创建一块儿共享磁盘。
2.2.1.1 创建共享磁盘
cd C:\Program Files\Oracle\VirtualBox
/*
路径可以通过右击VirtualBox图标-属性查看:
*/
VBoxManage createhd --filename D:\VirtualBoxFile\rac.vdi --size 20480 --format vdi --variant fix
命令执行成功后,会在D:\VirtualBoxFile下生成一个大小为20G的rac.vdi文件。
2.2.1.2 将该磁盘加入rac1虚拟机里,并将其设置为共享磁盘
VBoxManage storageattach rac1 --storagectl "SATA" --port 1 --device 0 --type hdd --medium D:\VirtualBoxFile\rac.vdi --mtype shareable
/*
备注:
rac1是rac1虚拟机的名称:
SATA是控制器的类型,须和现有磁盘的控制器类型保持一致:
如果现有磁盘的控制器类型是IDE,则storagectl值为IDE。
如果控制器类型写错了,会导致虚拟机无法启动,报错:
fatal:no bootable medium found!system halted
*/
2.2.1.3 将该共享磁盘加入到rac2虚拟机里
注意:两个虚拟机共享磁盘rac.vdi的虚拟磁盘的端口应该保持一致,且不要和现有SATA端口重复。这里都是SATA端口1:
启动两台虚拟机,确保都可以看到新添加的相同的共享磁盘,示例:
在两个节点上执行:
groupadd -g 1000 oinstall #该组的成员可以访问Oracle Inventory目录
groupadd -g 1001 dba #该组的成员有SYSDBA权限
groupadd -g 1200 asmadmin
groupadd -g 1201 asmdba
groupadd -g 1202 asmoper
useradd -u 1100 -g oinstall -G asmadmin,asmdba,asmoper,dba grid #管理Oracle Grid Infrastructure及ASM的用户
useradd -u 1101 -g oinstall -G dba,asmdba oracle
echo 密码 | passwd --stdin grid
echo 密码 | passwd --stdin oracle
在两个节点上执行:
for i in b c d e f g ;
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\"" >> /etc/udev/rules.d/99-oracle-asmdevices.rules
done
#启动udev服务
/sbin/start_udev
#查看生成的asm磁盘
[root@rac1 ~]# ll /dev | grep asm
brw-rw----. 1 grid asmadmin 8, 16 1月 22 16:12 asm-diskb
--也可以使用asmlib方式配置共享磁盘,详细可参考使用ASMLib配置共享磁盘_雅冰石的博客-CSDN博客_asmlib 共享盘需要分区吗
在两个节点上执行以下步骤:
#检查哪些软件包未安装
rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel expat gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers libaio libaio-devel libgcc libstdc++ libstdc++-devel make numactl pdksh sysstat unixODBC unixODBC-devel smartmontools | grep "not installed"
#安装未安装的软件包,示例:
yum install compat-libstdc++-33 elfutils-libelf-devel libaio-devel pdksh unixODBC unixODBC-devel smartmontools -y
--若提示No package pdksh available,则下载rpm包进行安装:
wget http://vault.centos.org/5.11/os/x86_64/CentOS/pdksh-5.2.14-37.el5_8.1.x86_64.rpm
rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm
#安装compat-libcap
rpm -ivh compat-libcap1-1.10-1.x86_64.rpm
mkdir -p /u01/app/oracle
mkdir -p /u01/app/grid
mkdir -p /u01/app/11.2.0.4/grid
mkdir -p /u01/app/oraInventory
chown -R oracle:oinstall /u01/app/oracle
chown -R grid /u01/app/grid
chown -R grid /u01/app/11.2.0.4/grid
chown -R grid /u01/app/oraInventory
chmod -R 775 /u01/app/oracle/
chmod -R 775 /u01/app/grid
service iptables stop
chkconfig iptables off
在安装期间使用ssh和scp命令在其他集群节点上运行远程命令并将文件复制到其他集群节点。您必须配置SSH,以便这些命令不提示输入密码。
需要配置节点1 grid用户与节点2 grid用户的互信;
需要配置节点1 oracle用户与节点2 oracle用户的互信;
配置两个节点grid及oracle用户与自身的互信;
以下只列举了grid用户互信配置步骤,oracle用户互信配置步骤略。
2.3.5.1 配置节点1免密码登录到节点2
在节点1上执行:
su - grid
ssh-keygen #生成秘钥
ssh-copy-id rac2 #拷贝秘钥
#测试免密登录(第一次会让输入yes,要多ssh几次,确保后续不让输入yes)
ssh rac2 hostname
ssh rac2_priv hostname
2.3.5.2 配置节点2免密码登录到节点1
在节点2上执行:
su - grid
ssh-keygen #生成秘钥
ssh-copy-id 192.168.1.202 #拷贝秘钥
#测试免密登录
ssh rac1 date
ssh rac1_priv date
2.3.5.3 配置节点1免密码登录到节点1
在节点1上执行:
ssh-copy-id 192.168.1.202 #拷贝秘钥
#测试免密登录
ssh rac1 date
ssh rac1_priv date
2.3.5.4 配置节点2免密码登录到节点2
在节点2上执行:
ssh-copy-id 192.168.144.204 #拷贝秘钥
#测试免密登录
ssh rac2 date
ssh rac2_priv date
2.3.5.1 修改oracle用户的环境变量
su - oracle
vi .bash_profile
添加:
export EDITOR=vi
export ORACLE_SID=prod1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X1186/bin
umask 022
--注意,需要将节点2上的ORACLE_SID的值改为prod2.
source .bash_profile #使修改生效
2.3.5.2 修改grid用户的环境变量
su - grid
vi .bash_profile
添加:
export ORACLE_BASE=/u01/app/grid
export ORACLE_SID=+ASM1
export ORACLE_HOME=/u01/app/11.2.0.4/grid
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
--注意,节点2上的ORACLE_SID的值改为+ASM2.
source .bash_profile #使修改生效
开始安装之前,请确保所有群集节点上的日期和时间设置尽可能设置为相同的日期和时间。集群时间同步机制确保所有集群成员的内部时钟同步。对于Linux上的Oracle RAC,可以使用网络时间协议(NTP)或Oracle Cluster Time Synchronization Service。
这里选择禁用NTP服务,使用oracle rac内部自带的时钟同步CTSS:
service ntpd stop
mv /etc/ntp.conf /etc/ntp.conf_bak
如果只关闭了ntp服务,没删除配置文件的话,后面安装grid会报如下错误:
INFO: Error Message:PRVF-5507 : NTP 守护程序或服务未在任何节点上运行, 但以下节点上存在 NTP 配置文件
在两个节点服务器上执行:
vi /etc/sysctl.conf
修改以下各参数,最小设置如下(如果参数值比下面的大,则保持不变即可):
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 1036870912
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.shmmax 仅设置的1G,请根据实际情况调大些(初始化参数MEMORY_TARGET或MEMORY_MAX_TARGET不能大于共享内存,所以该参数值需要大于MEMORY_TARGET)。
运行sysctl -p应用以上参数:
/sbin/sysctl -p
vi /etc/security/limits.conf
新增如下内容:
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle stack nproc 16384
oracle stack nproc 16384
grid soft nofile 65536
grid hard nofile 65536
grid soft nproc 16384
grid hard nproc 16384
grid stack nproc 16384
grid stack nproc 16384
确保/sys/kernel/mm/transparent_hugepage/enabled值为never
若不是,则这样设置:
sh -c 'echo "never" > /sys/kernel/mm/transparent_hugepage/enabled'
主机重启后,上述修改就失效了,所以需要将其加入到开机自启任务里:
vi /etc/rc.local,添加如下内容:
if test -f /sys/kernel/mm/transparent_hugepage/enabled;
then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
下载地址:
https://updates.oracle.com/download/13390677.html。
选择Platform,然后下载以下三个安装包:
其中,p13390677_112040_Linux-x86-64_3of7.zip是GI的安装包(View Readme里有介绍):
1/2 of 7.zip是数据库安装包。
其他版本的下载页面:
Database Software Downloads | Oracle
用grid用户进行安装。
unzip p13390677_112040_Linux-x86-64_3of7.zip
cd grid
2.4.2.1 预检查
在节点一上检查:
./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose > runcluvfy.log
检查下日志文件runcluvfy.log是否有报错(查询‘失败’关键字)
/*
假如报错:
结果:子网 "192.168.144.0" 的 TCP 连接性检查失败
则需要检查下两台服务器的防火墙是否未关闭,需要关闭防火墙。
假如报错:
PRVF-5636 : 在以下节点上, 无法访问的节点的 DNS 响应时间超过 "15000" 毫秒: rac2,rac1
则修改/etc/resolv.conf
添加DNS配置,格式:
nameserver 你的DNS服务器地址
--DNS服务器地址查看:
*/
2.4.2.2 建响应文件
点击下载grid.rsp。
将该响应文件上传至/home/grid下
需要注意修改grid.rsp以下几处:
oracle.install.crs.config.clusterNodes=rac1:rac1_vip,rac2:rac2_vip
oracle.install.crs.config.networkInterfaceList=eth1:192.168.144.0:1,eth2:10.10.10.0:2 #表示公网和私网网段,注意修改网卡名称为自己服务器的网卡名称。
oracle.install.asm.diskGroup.disks=/dev/asm-diskb
oracle.install.asm.diskGroup.diskDiscoveryString=/dev/
/*
若使用的asmlib方式配置的共享磁盘,则需要注意修改:
oracle.install.asm.diskGroup.disks=/dev/oracleasm/disks/DATA
oracle.install.asm.diskGroup.diskDiscoveryString=/dev/oracleasm/disks/*
假如oracle.install.asm.diskGroup.diskDiscoveryString配置有误,则在后面执行/u01/app/11.2.0.4/grid/root.sh脚本时,日志里会报错:
ORA-15018: diskgroup cannot be created
ORA-15031: disk specification '/dev/oracleasm/disks/DATA' matches no disks
ORA-15014: path '/dev/oracleasm/disks/DATA' is not in the discovery set
需要修正oracle.install.asm.diskGroup.diskDiscoveryString值,并删除相关目录(/u01/app/oraInventory, /u01/app/grid, /u01/app/11.2.0.4/grid),重新安装GRID
*/
2.4.2.3 在两个节点上安装cvuqdisk
#用root用户安装cvuqdisk包
#节点一
cd /home/grid/grid/rpm
rpm -ivh cvuqdisk-1.0.9-1.rpm
#节点二
将节点一上的安装包拷贝至节点二,再进行安装。
2.4.2.4 安装GRID
用grid用户安装:
cd /home/grid/grid
./runInstaller -silent -responseFile /home/grid/grid.rsp
按提示用root用户在两个节点上先后执行脚本:
sh /u01/app/oraInventory/orainstRoot.sh
sh /u01/app/11.2.0.4/grid/root.sh
root.sh会创建ASM实例及磁盘组,启动RAC集群:
执行root.sh脚本后,需要检查下日志是否报错。
按提示用grid用户在节点一上执行脚本:
cd /u01/app/11.2.0.4/grid/cfgtoollogs/
touch cfgrsp.properties
./configToolAllCommands RESPONSE_FILE=cfgrsp.properties
该脚本会启动监听。
执行完后记得检查下日志是否有报错。
2.4.2.5 检查集群启动状态
[grid@rac1 cfgtoollogs]$ crsctl check cluster -all
**************************************************************
rac1:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
rac2:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
登录rac1,rac2可以看到磁盘组:
su - grid
sqlplus / as sysasm
set lines 200
col path for a40
select group_number,header_status,state,name,path,redundancy from v$asm_disk;
SQL> select group_number,name,state from v$asm_diskgroup;
2.4.2.7 检查监听状态
2.4.2.8 修改目录所有者
在两个节点上执行:
chown -R grid:oinstall /u01/app/11.2.0.4/grid
2.4.3.1 解压
su - oracle
unzip p13390677_112040_Linux-x86-64_1of7.zip
unzip p13390677_112040_Linux-x86-64_2of7.zip
解压完成后,会将文件合并到database文件夹。
2.4.3.2 创建响应文件
点击下载db.rsp
注意修改oracle.install.db.CLUSTER_NODES:
oracle.install.db.CLUSTER_NODES=rac1,rac2
2.4.3.3 安装数据库
cd database
./runInstaller -silent -responseFile /home/oracle/db.rsp -ignorePrereq -ignoreSysPreReqs -ignoreDiskWarning
该命令会自动在两个节点上安装数据库软件。
按照提示用root用户在两个节点上执行脚本:
sh /u01/app/oracle/product/11.2.0/db_1/root.sh
检查日志是否有报错。
2.4.4.1 建响应文件
su - oracle
点击下载dbca.rsp
注意修改以下几项:
GDBNAME = "prod"
SID = "prod"
NODELIST=rac1,rac2
STORAGETYPE=ASM
DISKGROUPNAME=DATA
CHARACTERSET = "ZHS16GBK"
NATIONALCHARACTERSET= "UTF8"
#注意事项
② NODELIST的值是rac1,rac2,不是prod1,prod2.
2.4.4.2 静默安装
dbca -silent -responseFile dbca.rsp
/*
假如执行dbca无任何返回结果就直接退出了,则需要检查dbca.rsp文件是否配置有误。
*/
可以在两个节点上都能看到数据库实例了:
2.4.4.3 检查集群状态
SQL> SELECT value FROM v$parameter where name = 'cluster_database';
VALUE
--------------------------------------------------------------------------------
TRUE
值为true说明是rac集群。
2.4.4.4 检查监听
创建一个数据库连接:
使用该连接多次连接scan-vip,获取服务器主机名和ip地址(),看是否能查看到两个节点的主机名及ip:
sql: SELECT UTL_INADDR.GET_HOST_NAME,UTL_INADDR.GET_HOST_ADDRESS FROM dual;
rac安装完成后,节点的ip是这样的:
#节点一
#节点二
SQL> shutdown abort;
ORACLE instance shut down.
通过连接scan-vip,读写的sql仍然能正常执行,观察了几分钟发现浮动ip没有漂移。
通过连接scan-vip,读写的sql仍然能正常执行,节点一的浮动ip漂移到节点二上了:
本篇文章主要参考了:https://blogs.oracle.com/database4cn/11gr2-rac